本文主要介绍了阿里云CentOS7下如何成功的发布ASP.Core应用并使用nginx进行代理, 并对所踩的坑加以记录;html
使用putty链接阿里云CentOS;并根据相关提示输入帐户密码登陆便可(建议以root权限登陆)以下图:python
.NET Core SDK的安装很简单, 根据 ASP.NET Core 10分钟入门指导一步一步的安装便可;本文简单的将安装步骤进行展现;linux
使用以下命令注册Microsoft须要的依赖环境;nginx
rpm -Uvh https: //packages.microsoft.com/config/rhel/7/packages-microsoft-prod.rpm
更新可供安装的产品vim
yum update
64位Centos 须要安装 libunwind (libunwind介绍), 32位系统跳过浏览器
yum install libunwind libicu
安装.NET Core SDK安全
yum install dotnet-sdk-2.1.4
.net core sdk的版本根据本身须要进行选择(官方版本连接) 本文2.1.4版本服务器
安装比较慢, 请耐心等候, 必定要等到Complete!出现;并发
使用以下命令查看sdk版本tcp
dotnet --version
建立发布的.NET Core runtime 要和你在CentOS 安装的runtime一致; 本文是2.1.4
使用FTP工具FileZilla将编译发布后的程序文件上传到服务器 /home/wwwroot
经过以下命令运行应用程序, 程序目录为你发布到服务器的物理路径, CoreWebTest.dll为你建立的程序入库DLL
dotnet /home/wwwroot/CoreWebTest/CoreWebTest.dll
当你看到以下内容, 表示程序已成功运行
使用以下命令安装CentOS的 EPEL仓库;
yum install epel-release
使用以下命令安装Nginx
yum install nginx
Nginx安装完成后, 系统并不会启动Nginx, 使用以下命令启动Nginx:
systemctl start nginx
使用以下命令设置系统启动后, 默认启动Nginx:
systemctl enable nginx
查看firewall 状态, 并启动防火墙
systemctl status firewalld //查看防火墙状态
systemctl start firewalld //启动防火墙
使用以下命令, 容许HTTP和HTTPS经过防火墙
firewall-cmd --permanent --zone=public --add-service=http firewall-cmd --permanent --zone=public --add-service=https firewall-cmd --reload
在浏览器地址栏输入你服务器的IP地址, 若是出现下图表示Nginx安装配置成功;若是没法访问, 请查看firewall 是否开放80端口;
firewall-cmd --zone=public --add-port=80/tcp --permanent //开放80端口
systemctl restart firewalld.service //重启防火墙
首先,把Nginx的默认配置文件 /etc/nginx/nginx.conf里
80 端口转发配置
server 节点用
# 符注释掉。使用命令vi 或将
nginx.conf 文件下载(使用FileZilla)到本地修改完成后在上传(建议);
vi /etc/nginx/nginx.conf //打开文件编辑模式, 输入i 进行编辑 完成后 按ESC键输入:wq 回车 退出编辑模式
而后咱们从新建立一个自定义的Nginx配置文件用来代理Core 程序, 我建立名称为NginxForCore.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_pass http: 后的url为你在core 启动项配置的路径(默认localhost:5000,如何修改请点击链接查看)
将建立好的自定义配置文件上传到 /etc/nginx/conf.d目录下 ,最后执行命令
重启Nginx;
nginx -s reload
查看SELinux状态是否为Enforcing(SELinux默认状态为Disabled如何修改状态请查看链接), 必须保证SELinux的状态为Enforcing不然添加白名单会失败;
使用以下命令:
getenforce
若是查询出状态以下图, 添加Nginx到SELinux白名单
使用以下命令, 将Nginx添加至SELinux白名单;
yum install policycoreutils-python cat /var/log/audit/audit.log | grep nginx | grep denied | audit2allow -M AddNginxToWhiteList semodule -i AddNginxToWhiteList.pp
红色部分(AddNginxToWhiteList)可本身命名;
在浏览器地址栏输入你服务器的IP地址, 若是出现下图说明咱们的ASP.NET Core MVC 已经发布成功了;(要保证你发布的.NET Core程序在Linux已经运行,如何运行见步骤:4.运行ASP.NET Core 应用程序)
若是没有出现上图, 而是
请检查:
1-Nginx是否按上述步骤正确配置;
2-防火墙及阿里云安全组策略是否正确配置(主要指80端口);
3-.NET Core程序是否在CentOS下正常运行;
经过上面的操做, 咱们已经能正常将.NET Core程序发布到CentOS下来, 可是发布过程当中咱们也发现了问题, 就是.NET Core不能自动的运行, 一旦咱们的命令行工具关掉, 发布的程序就不能访问了;
是否是能安装一个相似于Windows Service同样的服务, 能实时监控程序状态,异常退出时能自动重启。通过各类百度我找到了Supervisor。
Supervisor 是用Python开发的Linux/Unix系统下的一个进程管理工具。它可使进程(相似Windows Service)脱离终端,变为后台守护进程(daemon)。能实时监控进程状态,异常退出时能自动重启。详细文档请查看官网。
yum install python-setuptools
easy_install supervisor
运行S upervisord 服务的时候,须要指定 Supervisor 配置文件,因此,先经过以下命令建立目录,以便让 Supervisor 成功加载默认配置:
mkdir /etc/supervisor
目录建立成功后, 经过 echo_supervisord_conf 程序(用来生成初始配置文件,文件名能够自定义)来初始化一个配置文件
echo_supervisord_conf > /etc/supervisor/supervisord.conf
经过vim命令修改建立好的supervisord.conf配置信息
vi /etc/supervisor/supervisord.conf
最下边找到以下文本片断:
将上面配置改成:
该操做的目的是咱们建立一个Supervisor 进程配置文件加载目录。让Supervisor自动加载该目录下.conf 后缀的文件做为服务配置。
conf
在本地建立文件CoreWebTest.conf 内容以下:
[program:CoreWebTest] ;自定义进程名称, 根据本身喜爱命名
command=dotnet CoreWebTest.dll ;程序启动命令 使用dotnet 命令 directory=/home/wwwroot/CoreWebTest ;命令执行的目录 你.NET Core 程序存放目录 autostart=true ;在Supervisord启动时,程序是否启动 autorestart=true ;程序退出后自动重启 startretries=5 ;启动失败自动重试次数,默认是3 startsecs=1 ;自动重启间隔 user=root ;设置启动进程的用户,默认是root priority=999 ;进程启动优先级,默认999,值小的优先启动 stderr_logfile=/var/log/CoreWebTest.err.log ;标准错误日志 路径能够自定义 stdout_logfile=/var/log/CoreWebTest.out.log ;标准输出日志 路径能够自定义 environment=ASPNETCORE_ENVIRONMENT=Production ;进程环境变量 stopsignal=INT ;请求中止时用来杀死程序的信号
经过FileZilla将文件上传到目录:/etc/supervisor/conf.d下
命令以下:
supervisord -c /etc/supervisor/conf.d
这个时候, 咱们已经不须要使用dotnet命令运行程序, 一样能够访问咱们部署的.NET Core程序了^ ^
一样咱们须要配置Supervisor在CentOS断电或重启的状况下自动开机运行, 从而保证咱们的程序能正常访问;
为Supervisor建立一个服务启动的脚本AutoStartSupervisor.service, 上传到系统目录:
/usr/lib/systemd/system/ 脚本内容以下:
[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
# 具体属性做用请官网查看
经过FileZilla将文件上传到目录: /usr/lib/systemd/system/ 下
设置Supervisor开机启动
systemctl enable AutoStartSupervisor.service
使用重启命令验证配置是否成功.
reboot //验证方式为CentOS正常重启后, 咱们能在浏览器里访问到咱们发布的.NET Core程序
Supervisor的配置比较复杂,本文只是进行了简单的使用,如需详细深刻的配置,请去官网学习;
至此,阿里云CentOS7下部署ASP.NET Core 已经结束;
若是这篇博文对你有所帮助,麻烦动动手指点个赞^-^