NetCore部署到Linux
环境:CentOS 7 防火墙状态:关闭
1.安装SDK
只是在Linux系统上面部署应用程序,按道理只需要安装ASP.NET Core Runtime即可。但是在进行直接通过 dotnet xxx.dll启动程序时失败,
所以直接安装SDK吧,里面包含runtime。
在安装.NET之前,我们需要先注册Microsoft密钥和源,在终端里面执行下面的命令:
sudo rpm -Uvh https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm
sudo yum install dotnet-sdk-3.1 我的项目是基于3.1 的; 所以直接安装 3.1
参考微软官方文档:https://docs.microsoft.com/zh-cn/dotnet/core/install/linux-package-manager-centos7
二、部署
1)环境安装完成以后,我们将发布好的文件上传到服务器。
在终端里面新创建一个文件夹,用来存放我们上传的文件:
sudo mkdir /NetCore
如下图所示:
2)部署:
方式一:直接Kestrel方式启动
dotnet AspNetCoreDeployDemo.dll --urls http://*:5000
如下图所示:
在浏览器中访问:http://ip:5000 就可以正常访问
PS:
如果防火墙是开启的,需要把5000端口添加到防火墙中:
firewall-cmd --zone=public --add-port=5000/tcp --permanent
但是这种方式有弊端,就是当前终端关闭了,或者按了ctrl+C ,当前站点会无法访问。 所以这种方式不推荐。
方式二:Nginx 通过 进程守护 Supervisor 方式
前提:
1.安装Nginx:https://www.cnblogs.com/huangshuqiang/p/15515000.html
2.安装supervisor 并将core项目添加进守护进程:https://www.cnblogs.com/huangshuqiang/p/15524132.html
1)找到nginx的位置,进入,可以看到里面有conf文件夹:
2)进入conf文件夹,编辑文件nginx.conf 文件:
3)修改server中对应的内容,如图:
就可以将5000端口通过nginx监听80端口的方式进行访问。
通过访问:http://ip 的方式就可以访问对应的netcore项目。
扩展 1:将supervisor 通过nginx代理。
只需要在nginx.conf中server节点添加一个location即可。
注意,箭头标识处的两个 / 符号一定要加。访问站点时,站点的显示样式会有问题。访问方式:http://ip/supervisor 。
扩展 2: 将netcore项目做成服务。
前面通过将项目添加进supervisor 以进程守护的方式保证项目的运行,还有通过将项目做成服务的方式来保证项目的运行。
置 .NET Core 开机启动
创建服务文件
vim /etc/systemd/system/demoapp.service
写入如下内容
[Unit] Description=Demo .NET Web Application running on CentOS 7 [Service] WorkingDirectory=/home/publish/demo ExecStart=/usr/bin/dotnet /home/publish/demo/Linux.Web.dll Restart=always RestartSec=20 SyslogIdentifier=dotnet-demo User=nginx Environment=ASPNETCORE_ENVIRONMENT=Production [Install] WantedBy=multi-user.target
设置开机启动
systemctl enable demoapp.service
开启服务,并查询状态
systemctl start demoapp.service systemctl status demoapp.service
其实跟做成supervisor的方式目的一样,都是保证netcore项目的实时运行。
参考:
https://www.cnblogs.com/dotnet261010/p/12169294.html
https://www.jianshu.com/p/b1f573ca50c7
https://www.cnblogs.com/weiwxg/p/11995577.html