.net core程序部署到 阿里云

一、准备工作

(一)创建一个测试程序

使用VS创建一个WebApi项目:

image.png

本地访问路径:http://localhost:5000/WeatherForecast

(二)将WebApi项目发布

image.png

发布后生成的文件


image.png

(三)下载远程操作工具

  1. Xshell 使用 windows 远程连接 Linux 系统上


    image.png
  2. winscp 使用windows 远程上传文件到Linux上


    image.png

二、阿里云服务器的配置

(一)购买阿里云服务器

  1. 直接在网上购买即可(可选择学生服务,会有优惠)阿里云学生地址
  2. 进入控制台,相当于查看所有的实例(其实控制台就相当于是总的管理器)
    image.png

    若没有实例,请先创建实例
    image.png

    远程连接时会使用实例用户与密码,可在下图位置进行设置
    image.png

(二)安装 Ubuntu 的镜像

1.如果已经安装了其他的操作系统,可以重新更换操作系统。


image.png

image.png

自定义的密码就是后面用远程工具进行连接的,登录密码和登录名。

(三)安全组配置

安装组其实就是用来放行端口的。通俗来说就是管大门的。具体的可以参考这个文章::阿里云安全组详细解说

image.png

image.png

image.png

1. 常用的几个端口

  • 3389端口:远程桌面的
  • 20/21端口:FTP,上传下载文件的;文件传输的
  • 22端口:ssh 安全登录
  • 443: HTTPS 服务器
  • 25:e-mail 的默认端口
  • 3306端口:MySQL
  • 1521: Oracle 数据库
  • 6379: redis 数据库
  • 8888:宝塔面板初试接口
  • 80端口:一般做个人网站要配置的
  • icmp用来ping的
    2. 安装组的参数具体含义
  • 优先级:从一到一百的数字,数字越小,优先级越高。
  • 协议:自定义TCP就行了(具体是干啥的我不知道)
  • 端口范围:这个一定要写个范围,哪怕是只有一个端口,也还是 80/80 这么写。
  • 授权对象: 如果我们是想让所有的人都可以访问,那么就是默认的 0.0.0.0 / 0
    一般配置这个的时候,都是选择公网入方向,进行配置。授权对象实际上是运行方位的 ip 地址,如果允许所有的人进行访问,就是 0.0.0.0/0 ,如果是多个用户的话,可以中间用 , 隔开。
    3. 安全组和防火墙的区别
  • 云防火墙可以根据机器学习结果,自动将安全域进行分组;而安全组完全依赖于您静态的手动划分。
  • 云防火墙在访问控制策略生效之前,存在大量的模拟过程,可以帮助您保障策略的正确性;而安全组中规则在配置之后即刻生效,一旦访问规则配置错误可能直接导致业务中断。
  • 在云防火墙中您可以监控高危端口的访问情况。例如,查看3306端口是否有来自外部(互联网)流量的访问。
  • 云防火墙还可以帮助您进行服务器变更前的确认。例如,某个服务器需要下线时,您可以通过云防火墙查看该服务器是否仍有访问流量,从而判断服务器下线是否影响业务

(四)安装宝塔(不必须,但强烈建议)

宝塔可以让你通过浏览器可视化操作云服务器,允许你在一定程度上可以像使用windows一样使用Ubuntu系统

  1. 宝塔安装详见宝塔面板安装命令
    image.png
  2. 安装成功后会有相关的网址与账号密码


    image.png
  3. 使用外网地址登录到宝塔面板后台,第一次会自动弹出套件推荐安装对话框,选择安装“LNMP套件”


    image.png

三、安装dotnet运行时

直接去微软官网查找,对应版本上的dotnet运行环境相关操作,此处的连接在unbuntu上安装.net core。直接在Xshell执行相应的命令行,复制粘贴就可以了。具体操作如下
1.使用 APT 进行安装可通过几个命令来完成。 安装 .NET 之前,请运行以下命令,将 Microsoft 包签名密钥添加到受信任密钥列表,并添加包存储库。在终端中,运行以下命令:

wget https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb
rm packages-microsoft-prod.deb

.NET SDK 使你可以通过 .NET 开发应用。 如果安装 .NET SDK,则无需安装相应的运行时。 若要安装 .NET SDK,请运行以下命令:
sudo apt-get update;
sudo apt-get install -y apt-transport-https &&
sudo apt-get update &&
sudo apt-get install -y dotnet-sdk-3.1

  1. 通过 ASP.NET Core 运行时,可以运行使用 .NET 开发且未提供运行时的应用。 以下命令将安装 ASP.NET Core 运行时,这是与 .NET 最兼容的运行时。 在终端中,运行以下命令:
  sudo apt-get update; \
  sudo apt-get install -y apt-transport-https && \
  sudo apt-get update && \
  sudo apt-get install -y aspnetcore-runtime-3.1

4.可以执行下边的命令,来运行一下试试,如果安装成功,会有反应,如果没有安装上,会提示错误

dotnet  --info

四、使用WinSCP 传送文件

使用实例名称与密码将 WinScp 连接到云服务器,连接成功后,进入home 目录,普通用户都是在home 目录下进行操作,一般你也可以建立一个自己的文件夹,把东西都放在同一个文件夹里,我这里创建了demo文件夹。将左侧本地文件直接拖拽到右侧的demo文件夹中,就可完成文件上传到云服务器。


image.png

五、使用Xshell执行dotnet 命令

在项目文件目录下运行下面命令:

dotnet  AliyunDemo.dll
image.png

发现 http://<云服务器公网IP>:<端口号> 在浏览器根本打不开网页,于是

netstat -tnl 

查看端口5000是否正常


image.png

发现5000端口,只对本地127.0.0.1有效,当然我们客户端没法访问了,此时有两种方法可以云解决

  1. 修改WebApi项目中的 Programe.cs 文件


    image.png

    2.在运行命令中指定URL

dotnet  AliyunDemo.dll --urls http://*:5000

image.png

注意:
若你进行了宝塔安装,且安装了“LNMP套件”,此时仍然打不开网页,原因是LNMP中的Nginx进行了路由,所以此时需要我们配置一下Nginx。

六、宝塔中配置Nginx

登录到宝塔,进入管理页面


image.png

image.png

此时再进行第五步,运行起项目,使用Nginx配置的端口80,就可以在浏览器中访问到了。


image.png

七、守护进程

完成上面步骤后,虽然可以访问了,但当Xshell关闭后,就不可以访问了。这是因为Xshell启动的项目是前台进程,我们需要让项目启动变动后台进程。
守护进程是安装一个类似于Windows Service一样的服务, 能实时监控程序状态,异常退出时能自动重启。Supervisor 是用Python开发的Linux/Unix系统下的一个进程管理工具。它可以使进程(类似Windows Service)脱离终端,变为后台守护进程(daemon)。能实时监控进程状态,异常退出时能自动重启。详细文档请查看官网。配置守护进程Supervisor, 让我们的程序能365天24小时不间断运行。

(一)安装Supervisor

  1. 安装可以使用一下命令:
sudo apt-get install supervisor

安装成功后,supervisor就会默认启动,有很多方法添加进程,看了很多博客上的介绍和加上我的实际使用,我认为一下方法最好用,将每个进程的配置文件单独拆分,放在/etc/supervisor/conf.d/目录下,以.conf作为扩展名,例如dotnetdemo.conf定义的一个简单的HTTP服务器


image.png
  1. 文件内容配置如下:

image.png

配置说明

[program:CoreWebTest]                         ;自定义进程名称, 根据自己喜好命名
command=dotnet CoreWebTest.dll                ;程序启动命令 使用dotnet 命令
directory=/home/wwwroot/CoreWebTest           ;命令执行的目录 你.NET Core 程序存放目录
autostart=true                                ;在Supervisord启动时,程序是否启动
autorestart=true                              ;程序退出后自动重启
startretries=5                                ;启动失败自动重试次数,默认是3
startsecs=1                                   ;自动重启间隔
user=root                                     ;设置启动进程的用户,默认是root
priority=999                                  ;进程启动优先级,默认999,值小的优先启动
stderr_logfile=/var/log/CoreWebTest.err.log   ;标准错误日志 路径可以自定义
stdout_logfile=/var/log/CoreWebTest.out.log   ;标准输出日志  路径可以自定义 
environment=ASPNETCORE_ENVIRONMENT=Production ;进程环境变量
stopsignal=INT                                ;请求停止时用来杀死程序的信号
  1. 重启supervisor,让配置文件生效,然后启动CoreWebTest进程:
supervisorctl reload
supervisorctl start CoreWebTest

到此,就可以长久正常访问项目接口了。

supervisorctl 使用说明

supervisorctl start programxxx,启动某个进程
supervisorctl restart programxxx,重启某个进程
supervisorctl stop groupworker: ,重启所有属于名为groupworker这个分组的进程(start,restart同理)
supervisorctl stop all,停止全部进程,注:start、restart、stop都不会载入最新的配置文件。
supervisorctl reload,载入最新的配置文件,停止原有进程并按新的配置启动、管理所有进程。
supervisorctl update,根据最新的配置文件,启动新配置或有改动的进程,配置没有改动的进程不会受影响而重启。

supervisor启动和停止的日志文件存放在/var/log/supervisor/supervisord.log
注意:显式用stop停止掉的进程,用reload或者update都不会自动重启

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,905评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,140评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,791评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,483评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,476评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,516评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,905评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,560评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,778评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,557评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,635评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,338评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,925评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,898评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,142评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,818评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,347评论 2 342

推荐阅读更多精彩内容