Centos7 部署.Net Core+Nginx+Supervisor
1、安装.Net Core SDK
1.1、 在安装.NET之前,您需要注册Microsoft密钥,注册产品存储库并安装所需的依赖项。这只需要每台机器完成一次。
sudo rpm -Uvh https://packages.microsoft.com/config/rhel/7/packages-microsoft-prod.rpm
1.2 、更新可用于安装的产品,然后安装.NET SDK。
sudo yum update sudo yum install dotnet-sdk-2.2
1.3、验证安装是否成功
dotnet --version
2、部署.Net Core项目
2.1、将发布后的.Net Core项目上传到Linux 新建文件夹 yunying中,然后进入yunying文件夹中,运行项目
2.2、然后再浏览器中访问:http://ip:5000,如果访问不了,先将防火墙关闭
3、安装Nginx并配置Nginx对项目的转发
3.1、添加源
sudo rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
3.2、安装Nginx
sudo yum install -y nginx
3.3、启动Nginx并设置开机自动运行
sudo systemctl start nginx
sudo systemctl enable nginx
3.4、查看是否安装成功
在浏览器中输入:http://ip
3.5、修改Nginx的配置文件,将/etc/nginx/conf.d/default.conf 文件内容替换为:
server { listen 80; 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; proxy_set_header X-Forwarded-For proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } }
配置完成后执行 nginx -s reload 或者 systemctl restart nginx 进行 重启nginx,再次执行2操作运行.net core项目,然后访问80端口,这时有可能报502错误,原因是SELinux配置问题。
解决办法有两种:
a、关闭SELinux
输入:seatatus,如果SELInux status:enabled,表示开启,修改配置文件/etc/selinux/config 修改为SELINUX=disabled
或者执行命令:
setenforce 0 sed -i 's/enforcing$/disabled/g' /etc/selinux/config
b、将Nginx加到SELinux的允许名单
1、yum install policycoreutils-python 2、sudo cat /var/log/audit/audit.log | grep nginx | grep denied | audit2allow -M mynginx
3、sudo semodule -i mynginx.pp
重新运行.Net Core项目,并访问,就可以成功访问了。
4、配置Supervisor守护进程
4.1、安装Supervisor:
1、yum install python-setuptools
2、easy_install supervisor
4.2、配置Supervisor:
创建supervisor文件夹,通过echo_supervisord_conf初始化配置文件
1、mkdir /etc/supervisor
2、echo_supervisord_conf > /etc/supervisor/supervisord.conf
4.3、修改新建的supervisord.conf配置信息,将最后面的修改为
即去掉最后两行前面的“;”号。
4.4、为.Net Core 项目添加进程配置文件:
在/etc/supervisor/目录下创建名字为conf.d文件夹,在conf.d文件夹中创建一个WebDemo.ini文件,在WebDemo.ini文件添加以下配置
[program:WebDemo] command=dotnet WebDemo.dll ; 运行程序的命令 directory=/root/yunying/ ; 命令执行的目录 autorestart=true ; 程序意外退出是否自动重启 stderr_logfile=/var/log/WebDemo.err.log ; 错误日志文件 stdout_logfile=/var/log/WebDemo.out.log ; 输出日志文件 environment=ASPNETCORE_ENVIRONMENT=Production ; 进程环境变量 user=root ; 进程执行的用户身份 stopsignal=INT
4.5、启动Supervisor服务:
supervisord -c /etc/supervisor/supervisord.conf
启动服务后可以通过命令查看是否配置成功
ps -ef | grep WebDemo.dll
如果看到以下内容,表示配置成功,就可以访问.Net Core项目了
4.6 配置Supervisor开机启动
进入/usr/lib/systemd/system/目录,并创建supervisord.service文件,添加内容:
[Unit] Description=Supervisor daemon [Service] Type=forking ExecStart=/usr/bin/supervisord -c /etc/supervisor/supervisord.conf ExecStop=/usr/bin/supervisorctl shutdown ExecReload=/usr/bin/supervisorctl reload KillMode=process Restart=on-failure RestartSec=42s [Install] WantedBy=multi-user.target
使配置生效:
systemctl daemon-reload
设置服务开机启动:
systemctl enable supervisord
启动supervisor进程:
systemctl start supervisord
验证是否为开机启动:
systemctl is-enabled supervisord
5、常用命令:
5.1、Nginx
nginx //启动nginx nginx -s reload //重启nginx nginx -s stop //关闭nginx
5.2、supervisor
supervisorctl status //查看所有任务状态 supervisorctl shutdown //关闭所有任务 supervisorctl start|stop|restart all //控制所有进程 supervisorctl start|stop|restart program_name //控制目标进程