Author:think
前言
部署分为三步,首先是Nginx中间件的部署,它的作用是提供web服务并为ASP net core程序提供代理,让使用者能够在外部进行访问;其次是dotnet的安装部署,我们都知道ASP net core是可以做到跨平台的,因此我们需要部署它的运行环境之后才能让程序在Linux环境中运行;最后是两个服务之间的联动配置,环境部署完成就是发布、上传、启动以及访问测试。
部署环境是CentOS 7 x64
一、Nginx安装部署配置(非编译安装)
我在网上找了很久,发现是nginx不在linux的官方yum源中,但我找到两种安装方法:
自己写的教程
安装nginx:
sudo rpm -Uvh http://nginx.org/packages/centos/7/x86_64/RPMS/nginx-1.18.0-2.el7.ngx.x86_64.rpm
如果不想要该发行版本,则可以到http://nginx.org/packages/centos/7/x86_64/RPMS/中进行选择。
通过命令systemctl status nginx
来查看服务状态时发现是已经安装上了
通过命令systemctl start nginx
来启动服务,如果没有任何提示则代表启动成功,如果出现以下提示则可以按照提示信息来进行排查
输入命令:systemctl status nginx
如图所示,日志中显示是80端口已被占用,因此我们有两种方法
- 查看并关闭占用80端口的服务
- 修改nginx的.conf文件来更改nginx所监听的端口
在这里我们选择第一种方法,输入命令:lsof -i:80
来查看是那一项服务占用了80端口
从图中我们可以看到是httpd服务占用了80端口(httpd是Apache在Linux中的服务名称),使用命令systemctl stop httpd
来关闭命令,再使用命令:systemctl start nginx
来启动nginx服务即可,如图所示没有任何提示则代表启动正常
使用命令:curl http://localhost
来测试Nginx服务是否部署完成,如下图所示则代表完成Nginx的部署
官方教程(暂时没有用)
教程地址:http://nginx.org/en/linux_packages.html#RHEL-CentOS
二、.net core程序运行环境的部署
在部署环境时,生产环境一般是只需要运行环境即可,现在我们是测试环境,就安装的是SDK,这其中就包含了运行环境。
首先还是添加源(也被称为获取签名密钥)
sudo rpm -Uvh https://packages.microsoft.com/config/rhel/7/packages-microsoft-prod.rpm
安装.net SDK
sudo yum install dotnet-sdk-3.1 -y
其中
3.1
是SDK的版本号,根据自身项目的框架版本来选择正确的版本。如需官方的安装信息请参考安装官网信息。
检验安装是否完成
dotnet --version
三、联动配置
首先打开nginx的配置文件,旧版的nginx配置文件默认路径是: /etc/nginx/nginx.conf
,如果找不到则可以使用find命令来进行查找
find / -name nginx.conf
但是后面更新之后其server配置则是被写在了/etc/nginx/conf.d/default.conf
中,我们可以修改默认的server配置信息即可,以下是我的default.conf配置文件内容(已删除被注释的内容):
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log /var/log/nginx/host.access.log main;
location / {
#网站根目录
root /usr/share/nginx/html;
index index.html index.htm;
#开启代理功能,因为.net core的默认端口为5000,因此这里设置成5000,如遇变化则该处端口配置也要变化
proxy_pass http://localhost:5000;
}
error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
重启Nginx
nginx -s reload
设置Nginx为开机自启
systemctl enable nginx
四、发布、上传、启动以及访问测试
发布
- 项目名称上右键->发布
-
选择部署到文件夹->点击发布
-
到上图所示的“目标位置”文件夹目录中将所有文件利用FTP工具上传至Linux的web根目录下,如果觉得工程项目的位置难找,则可以通过右键项目名称->在文件资源管理器中打开文件夹来快速定位到工程项目目录
上传
我这里利用的是xftp来进行传输
前面工作做完之后就要启动.net core程序并且进行访问测试。
启动程序
首先cd到Linux的web根目录下,路径地址因人而异
启动程序命令为dotnet (你的项目名称).dll
我们是通过dll文件来启动程序的
dotnet 数据库连接测试2.dll
出现该页面说明.net core程序已经启动完成。
访问测试
因为我部署的是web api程序,因此我需要在浏览器中输入其api接口的地址才能够得到信息,如果是其他的普通的.net core程序则可以在浏览器中输入Linux的IP即可访问到我们开发的.net core程序,我的则是需要额外地输入其他的路径信息,经过测试能够调用api接口说明部署完成!
写在最后
关于该.net core程序的进程,我在网上查阅资料资料时发现还需要进行进程守护,方法如下(毕竟是简单测试,因此下面的方法还没有测试):
nohup 启动
nohup dotnet 你的项目名.dll
这样一来你的网站就跑起来了,并且断开会话进程也不会被关闭,简单和无需进行配置就是它的优点,但若是想要关闭就麻烦了,需要 ps -ef | grep dotnet
找到对应的进程 id 再将其 kill。另外一个缺点是,如果服务器重启,或者你的项目出现错误意外退出了,那么你的项目是不会自动重新启动的。因此你若介意的话,还是推荐下面一种方法。
Supervisor 守护
Supervisor 是微软推荐的一个进程管理工具,可以让指定程序在后台运行,并且在进程异常退出时将自动重启它。
安装 supervisor
yum install python-setuptools
easy_install supervisor
配置 supervisor
mkdir /etc/supervisor
echo_supervisord_conf > /etc/supervisor/supervisord.conf
mkdir /etc/supervisor/conf.d
- 修改 supervisor.conf 文件尾部的 include 部分如下:
;[include]
;files = conf.d/*.conf
- 在 /etc/supervisor/conf.d 目录下为项目创建配置文件:
vim /etc/supervisor/conf.d/你的项目名.conf
[program:你的项目名]
command=dotnet 你的项目名.dll
directory=你的项目目录
autorestart=true
stderr_logfile=/var/log/你的项目名.err.log
stdout_logfile=/var/log/你的项目名.out.log
environment=ASPNETCORE_ENVIRONMENT=Production
user=root
stopsignal=INT
- 启动配置文件:
supervisord -c /etc/supervisor/supervisord.conf
相关命令
-
重载配置文件
supervisorctl reload
-
查看守护的所有进程状态
supervisorctl status all
-
关闭所有守护进程
supervisorctl stop all
参考资料:
- https://houkaifa.com/2020/03/08/deploy-aspnetcore-app/
- https://www.cnblogs.com/tenghao510/p/11990353.html