在 centos 7* 上部署ASP.NET Core 至 完全托管

在 centos 7* 上部署ASP.NET Core 至 完全托管

添加dotnet产品Feed
在安装.NET之前,您需要注册Microsoft密钥,注册产品存储库并安装所需的依赖项。这只需要每台机器完成一次。

打开终端并运行以下命令:

sudo rpm -Uvh https://packages.microsoft.com/config/rhel/7/packages-microsoft-prod.rpm

安装.NET SDK
更新可用于安装的产品,然后安装.NET SDK。

在终端中,运行以下命令:

sudo yum update
sudo yum install dotnet-sdk-2.2

检查所有安装正确
安装完成后,打开一个新终端并运行以下命令:

dotnet

若没报错,说明安装成功

创建您的应用
在终端中,运行以下命令:

dotnet new console -o myApp

dotnet new webApp -o myWebApp --no-https

该 console/webApp 参数选择创建应用时要使用的模板。
该-o参数创建一个名为myWebApp存储应用程序的目录。
该--no-https标志指定不启用HTTPS。

运行以下命令来运行:

cd myWebApp
dotnet run 

直至出现 http://localhost:5000 说明运行成功
此时仍不能访问,需要部署一个 web 容器来转发

现在来安装一个 Nginx

curl -o  nginx.rpm http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm

rpm -ivh nginx.rpm

yum install nginx

或:

sudo yum install epel-release

sudo yum install nginx

配置防火墙:
sudo firewall-cmd --permanent --zone=public --add-service=http (加入http协议链接)
sudo firewall-cmd --permanent --zone=public --add-service=https(加入https协议链接)
firewall-cmd --zone=public --add-port=80/tcp --permanent(开放80端口)
sudo firewall-cmd --reload(重启防火墙使之生效)

ok了

systemctl start/stop nginx 运行和停止nginx

systemctl enable/disable nginx 允许和阻止开机启动nginx

设置 nginx 反向代理:

vi /etc/nginx/nginx.config

找到:

server {
       ...
}

写入
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;
         }

}

nginx –s reload    重新加载 nginx

此时运行.NET Core 项目 会发现,仍然无法访问,
因为这是由于 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
现在,一切就 over 了

此时,虽然步骤差不多了,但你会发现:
       1. 运行了项目过后,就不能进行其他操作了,需要结束进程,才能操作,这种情况当但是我们不想看到的,而且在生产环境中对这种情况是零容忍的。
       2. 如果 .NET Core 进程意外中止,那么我们就需要再次启动,往往,这种操作也不够及时
       3. 如果服务器宕机或需要重启,我们也必须要重启项目。
为了解决这个问题,我们需要有一个程序来监听.NET Core 应用程序的状况。在应用程序停止运行的时候立即重新启动。这边我们用到了Supervisor这个工具,Supervisor使用Python开发的。

安装 Supervisor

yum install python-setuptools

easy_install supervisor

配置Supervisor

mkdir /etc/supervisor

echo_supervisord_conf > /etc/supervisor/supervisord.conf

vi /etc/supervisor/supervisord.conf

将尾部的:
;[include]
;files = relative/directory/*.ini
改成:
[include]
files = conf.d/*.conf

配置对.Net Core应用的守护: 

touch /etc/supervisor/conf.d/项目名.conf

vi /etc/supervisor/conf.d/项目名.conf

[program:Scorpio.WebApi]                        ;自定义进程名称
command=dotnet Scorpio.WebApi.dll               ;程序启动命令
directory=/home/wwwroot/scorpio                 ;命令执行的目录
autostart=true                                  ;在Supervisord启动时,程序是否启动
autorestart=true                                ;程序退出后自动重启
startretries=5                                  ;启动失败自动重试次数,默认是3
startsecs=1                                     ;自动重启间隔
user=root                                       ;设置启动进程的用户,默认是root
priority=999                                    ;进程启动优先级,默认999,值小的优先启动
stderr_logfile=/var/log/Scorpio.WebApi.err.log  ;标准错误日志
stdout_logfile=/var/log/Scorpio.WebApi.out.log  ;标准输出日志
environment=ASPNETCORE_ENVIRONMENT=Production   ;进程环境变量
stopsignal=INT                                  ;请求停止时用来杀死程序的信号

supervisord -c /etc/supervisor/supervisord.conf

如果出现了
Error: Another program is already listening on a port that one of our HTTP servers is configured to use.  Shut this program down first before starting supervisord.

试试 supervisorctl stop 再输入,如果不管用就重启再输入接着:

ps -ef | grep 项目名

supervisorctl reload

输入 supervisorctl

exit 或 Ctrl + c 可以退出 supervisorctl命令模式

看看是否存在 你创建的 项目进程,如有则,运行成功

配置Supervisor开机启动:

新建一个 supervisord.service
touch /usr/lib/systemd/system/supervisord.service
vi /usr/lib/systemd/system/supervisord.service

写入:
# dservice for systemd (CentOS 7.0+)

# by ET-CS (https://github.com/ET-CS)

[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 enable supervisord

执行命令:

systemctl is-enabled supervisord #来验证是否为开机启动
如果为enabled则ok了

本文章参考自:https://blog.csdn.net/zhuyu19911016520/article/details/61210489

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值