.NETCore3.0应用程序部署到CentOS7
说在前面
在阅读本文之前,您必须对Linux中涉及的常见命令有一定了解,本文侧重实战,不会对相关概念详述。
注:本文实验环境是 Oracle VM VirtualBox虚拟机, CentOS-7-x86_64-Minimal-1908系统 。
安装 CentOS7 Minimal
- 可自行 Google 或百度
配置 ip,通过 xshell 连接
vi /etc/sysconfig/network-scripts/ifcfg-eno
- 将
ONBOOT=no
修改为ONBOOT=yes
- 重启网络
sudo service network restart
- 将网卡的连接方式修改为桥接网卡
- 输入命令
ip addr
查看 ip
安装.NETCore sdk
- 可以按照微软官方文档进行 点击查看
创建.NETCore 项目,并上传至 CentOS 中
安装配置 Nginx 进行反向代理
安装 Nginx
- 使用如下命令安装 CentOS 的 EPEL 仓库:
yum install epel-release
- 使用如下命令安装 Nginx:
yum install nginx
- Nginx 安装完成后, 系统并不会启动 Nginx, 使用如下命令启动 Nginx:
systemctl start nginx
- 使用如下命令设置系统启动后, 默认启动 Nginx:
systemctl enable nginx
添加 nginx 配置文件
server {
listen 81;
location / {
proxy_pass http://localhost:5000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection keep-alive;
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
防火墙相关操作
systemctl start firewalld //启动防火墙
systemctl status firewalld //查看防火墙状态
firewall-cmd --permanent --zone=public --add-service=http //允许HTTP
firewall-cmd --permanent --zone=public --add-service=https //允许HTTPS
firewall-cmd --reload //重新加载防火墙
firewall-cmd --zone=public --add-port=80/tcp --permanent //开启80端口
firewall-cmd --list-ports //查看已经开放的端口
访问 502
原因是由于 SELinux 保护机制所导致,我们需要将 nginx 添加至 SELinux 的白名单。接下来我们通过一些命令解决这个问题。
yum install policycoreutils-python
sudo cat /var/log/audit/audit.log | grep nginx | grep denied | audit2allow -M mynginx
sudo semodule -i mynginx.pp
配置守护进程
安装 Supervisor
yum install python-setuptools
easy_install supervisor
配置 Supervisor
-
先创建 Supervisor 配置文件的目录
mkdir /etc/supervisor
-
通过 echo_supervisord_conf 指令(用来生成初始配置文件,文件名可以自定义)来初始化一个配置文件:
echo_supervisord_conf > /etc/supervisor/supervisord.conf
-
通过 vim 命令修改创建好的 supervisord.conf 配置信息,或有视图界面的直接打开编辑
vi /etc/supervisor/supervisord.conf
-
文件内容末尾找到以下内容进行修改
;[include] ;files = relative/directory/*.ini [include] files = /etc/supervisor/conf.d/*.conf
-
创建目录,添加配置文件
mkdir /etc/supervisor/conf.d cd /etc/supervisor/conf.d touch netcore.conf
-
通过 vi 指令或视图界面编辑 netcore.conf,添加以下配置内容(分号后面的是注释,注意看注释,免得配置错了)
[program:NetCoreDemo] ;自定义进程名称, 根据自己喜好命名 command=dotnet NetCoreDemo.dll ;程序启动命令 使用dotnet 命令(dll是你的项目文件) directory=/root/Documents/NETCore ;命令执行的目录 你.NET Core 程序存放目录 autostart=true ;在Supervisord启动时,程序是否启动 autorestart=true ;程序退出后自动重启 startretries=5 ;启动失败自动重试次数,默认是3 startsecs=1 ;自动重启间隔 user=root ;设置启动进程的用户,默认是root priority=999 ;进程启动优先级,默认999,值小的优先启动 stderr_logfile=/etc/supervisor/log/GDSMPlateForm.err.log ;标准错误日志 路径可以自定义,文件夹要建好 stdout_logfile=/etc/supervisor/log/GDSMPlateForm.out.log ;标准输出日志 路径可以自定义,文件夹要建好 environment=ASPNETCORE_ENVIRONMENT=Production ;进程环境变量 stopsignal=INT ;请求停止时用来杀死程序的信号
-
启动 supervisor 服务
supervisord -c /etc/supervisor/supervisord.conf
开机启动 Supervisor 服务
-
1.进入
/usr/lib/systemd/system/
目录cd /usr/lib/systemd/system/
-
2.创建自定义配置文件 supervisord.service
touch supervisord.service
-
3.编辑 supervisord.service 文件,有视图界面就直接打开编辑
vi supervisord.service
-
4.添加以下内容,保存退出
[Unit] Description=Supervisor daemon [Service] Type=forking ExecStart=/usr/bin/supervisord -c /etc/supervisor/supervisord.conf ExecStop=/usr/bin/supervisorctl $OPTIONS shutdown ExecReload=/usr/bin/supervisorctl $OPTIONS reload KillMode=process Restart=on-failure RestartSec=42s [Install] WantedBy=multi-user.target
-
5.设置开机启动
systemctl enable supervisord.service
-
6.检测是否配置成功
systemctl is-enabled supervisord