CentOS7上部署.Net Core项目

1. 安装CentOS

https://www.baidu.com/    百度解决

2. 安装.Net Core Sdk

2.1 添加.NET相关

为了安装.NET,需要注册微软签名密钥和添加微软相关的支持。这个操作每台机器只能做一次。

打开命令行,输出以下命令,注册Microsoft需要的依赖环境;:

sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc


sudo sh -c 'echo -e "[packages-microsoft-com-prod]\nname=packages-microsoft-com-prod \nbaseurl=https://packages.microsoft.com/yumrepos/microsoft-rhel7.3-prod\nenabled=1\ngpgcheck=1\ngpgkey=https://packages.microsoft.com/keys/microsoft.asc">/etc/yum.repos.d/dotnetdev.repo'

2.2 安装.NET SDK

①更新可用的安装包:sudo yum update

②安装.NET需要的组件,libunwind和libicu库:sudo yum install libunwind libicu

③安装.NET SDK(ps:我的开发环境是2.1.403,cmd:dotnet –version查看):

sudo yum install dotnet-sdk-2.1.4

④安装完成之后,检测是否安装成功(ps:上面命令会默认安装2.1.4开头的最新版):

dotnet --version

3.使用VS2017发布ASP.NET Core MVC程序

4.部署ASP.NET Core 应用程序到CentOS服务器

将发布的文件夹传输到服务器,我这里用的是xftp(也可以用FileZilla等其他的ftp工具)

将发布的文件夹传输到服务器你想放的位置

5. 安装配置Nginx进行反向代理

5.1安装Nginx

①使用如下命令安装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      //允许HTTP

firewall-cmd  --permanent --zone=public --add-service=https    //允许HTTPS

firewall-cmd  --reload 

⑦在浏览器地址栏输入你服务器的IP地址, 如果出现下图表示Nginx安装配置成功;

如果无法访问, 请查看firewall 是否开放80端口:

firewall-cmd --permanent --zone=public --add-port=80/tcp   //开放80端口

firewall-cmd --reload                             //重启防火墙

5.2修改Nginx的配置文件

首先,把Nginx的默认配置文件 /etc/nginx/nginx.conf里 80 端口转发配置 server 节点用 # 符注释掉。使用命令vi 或将 nginx.conf 文件下载(使用xftp或其他ftp工具都行)到本地修改完成后在上传(建议);

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

5.3将Nginx添加到SELinux白名单

①查看SELinux状态是否为Enforcing(SELinux默认状态为Disabled), 必须保证SELinux的状态为Enforcing否则添加白名单会失败;

https://www.linuxidc.com/Linux/2016-11/137723.htm(修改SELinux的状态)

修改SELinux的状态:vim /etc/selinux/config

将SELINUX=disabled改为SELINUX=enforcing

使用如下命令: getenforce

如果查询出的值为Enforcing, 执行下一步操作:添加Nginx到SELinux白名单

②使用如下命令, 将Nginx添加至SELinux白名单,依次执行以下命令

yum install policycoreutils-python

cat /var/log/audit/audit.log | grep nginx | grep denied | audit2allow -M  AddNginxToSELinux

semodule -i  AddNginxToSELinux.pp

(AddNginxToSELinux)该文件可以自己命名

测试是否修改成功:

①cd到发布目录(我的为publish文件夹)

②运行.Net Core程序:(dotnet AbpMPA.Web.Mvc.dll,后面的dll文件为你.Net Core程序的入库dll)

③在浏览器地址栏输入你服务器的IP地址, 如果出现你自己程序运行的界面,例如下图(这是我的程序的登陆界面)说明我们的ASP.NET Core MVC 已经发布成功了;

如果没有出现上图, 而是

请检查:

1-Nginx是否按上述步骤正确配置;

2-防火墙及阿里云安全组策略是否正确配置(主要指80端口);

3-.NET Core程序是否在CentOS下正常运行;

6.配置守护进程Supervisor, 让我们的程序能365天24小时不间断运行

通过上面的操作, 我们已经能正常将.NET Core程序发布到CentOS下来, 但是发布过程中我们也发现了问题, 就是.NET Core不能自动的运行, 一旦我们的命令行工具关掉, 发布的程序就不能访问了;

是不是能安装一个类似于Windows Service一样的服务, 能实时监控程序状态,异常退出时能自动重启。经过各种百度我找到了Supervisor。

Supervisor 是用Python开发的Linux/Unix系统下的一个进程管理工具。它可以使进程(类似Windows Service)脱离终端,变为后台守护进程(daemon)。能实时监控进程状态,异常退出时能自动重启。详细文档请查看官网。

6.1安装Supervisor

yum install python-setuptools

easy_install supervisor

6.2配置Supervisor

①运行supervisord 服务的时候,需要指定 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自动加载该目录下 .ini 后缀的文件作为服务配置

6.3为我们部署的.NET Core添加进程配置文件

①创建配置文件AbpMPACore.ini(文件名自定义)

[program:AbpMPACore]                          ;自定义进程名称, 根据自己喜好命名
command=dotnet AbpMPA.Web.Mvc.dll             ;程序启动命令 使用dotnet 命令
directory=/publish                            ;命令执行的目录 你.NET Core 程序存放目录
autostart=true                                ;在Supervisord启动时,程序是否启动
autorestart=true                              ;程序退出后自动重启
startretries=5                                ;启动失败自动重试次数,默认是3
startsecs=1                                   ;自动重启间隔
user=admin                                    ;设置启动进程的用户,默认是root
priority=999                                  ;进程启动优先级,默认999,值小的优先启动
stderr_logfile=/var/log/AbpMPA.err.log        ;标准错误日志 路径可以自定义
stdout_logfile=/var/log/AbpMPA.out.log        ;标准输出日志  路径可以自定义
environment=ASPNETCORE_ENVIRONMENT=Production ;进程环境变量
stopsignal=INT                                ;请求停止时用来杀死程序的信号

②在/etc/supervisor/目录下创建一个文件夹conf.d: mkdir /etc/supervisor/conf.d

将刚创建的配置文件AbpMPACore.ini移到conf.d文件夹下

6.4 启动 Supervisor 服务

supervisord -c /etc/supervisor/supervisord.conf

这个时候, 我们已经不需要使用dotnet命令运行程序, 同样可以访问我们部署的.NET Core程序了

6.5配置Supervisor开机启动

①进入/usr/lib/systemd/system/目录,并创建supervisord.service文件(或者在本地写好了再通过ftp工具传输到指定目录下)

vi /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 $OPTIONS shutdown
ExecReload=/usr/bin/supervisorctl $OPTIONS reload
KillMode=process
Restart=on-failure
RestartSec=42s

[Install]
WantedBy=multi-user.target

②设置开机启动

systemctl enable supervisord.service

systemctl daemon-reload

③重启,测试是否可以开机自启

  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Centos7发布说明 环境说明: 服务器系统:CentOS 7.2.1511 相关工具:Xshel、Xftp 服务器软件软件:.netcore、nginx、supervisor 准备好发布的程序 安装.NET Core SDK for CentOS7 打开网址:https://www.microsoft.com/net/core#linuxcentos 复制如下命令,单步执行: sudo yum install libunwind libicu curl -sSL -o dotnet.tar.gz https://go.microsoft.com/fwlink/?LinkID=835019 sudo mkdir -p /opt/dotnet && sudo tar zxf dotnet.tar.gz -C /opt/dotnet sudo ln -s /opt/dotnet/dotnet /usr/local/bin 输入 dotnet –info 来查看是否安装成功 配置Nginx 下载安装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 systemctl start nginx 来启动nginx systemctl enable nginx 来设置nginx的开机启动(linux宕机、重启会自动运行nginx不需要连上去输入命令)。 配置防火墙 命令:firewall-cmd --zone=public --add-port=80/tcp --permanent(开放80端口) 命令:systemctl restart firewalld(重启防火墙以使配置即时生效) 测试nginx是否可以访问。 配置nginx对ASP.NET Core应用的转发 修改 /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; } }
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值