很早就看过关于net core部署在Linux上的文章,自己也曾亲自将项目部署在Linux上,今天看到这篇文章,为其格式之工整而转!

1.环境准备

网上看了一下,Linux云服务器还挺贵的,那就只好先用VMware虚拟机搭建个吧。这里我选装的Linux系统版本的是CentOS,Linux系统众多发行版之一,相信各位园友也不陌生。

软件版本信息如下:

虚拟机安装、系统镜像配置过程,大家参考网上教程应该没啥问题,我这不再赘述。

成功安装并登陆CentOS 7 Minimal系统后,发现无法上网,后来搜索找到原因:CentOS 7 Minimal 默认没有启动网络配置。

接下来就通过vi命令编辑网卡配置文件ifcfg-ens33(其他版本名称可能略有不同,但路径一致)。具体命令如下:

vi /etc/sysconfig/network-scripts/ifcfg-ens33

ONBOOT=no改为ONBOOT=yes,设置随系统开机运行。然后:wq强制保存并退出编辑文件即可。

最后,需要重启一下网络服务。命令如下:

service network restart

目前应该可以上网了,可以尝试用命令ping www.baidu.com来检查下网络是否通畅。

如上图,可以接收响应,证明网络畅通。反之,证明你的网络还是不通,就需要考虑其他原因了。

暂时还没有安装VMware Tools,直接在虚拟机中编(复)写(制)命令多有不便,这里可以通过连接工具PuTTY在Window系统中连接虚拟机中的CentOS系统,连接服务器也同样适用。

软件截图:

选择SSH连接协议,输入CentOS系统IP地址,点击【Open】按钮连接。输入系统用户名密码即可登录系统。

问:怎么知道虚拟机中CentOS系统的IP地址呢?

答:可以通过ifconfig命令来获取系统的IP地址。说明一点,因为这里我选的是CentOS 7 Minimal最小化安装,需要联网后先执行命令yum install net-tools下载网络工具包,然后才能使用ifconfig命令。

2.安装.NET Core SDK

Linux各个发行版如何安装.NET Core SDK,微软官方已经给出了标准答案,我这里就把在CentOS上的安装方法做一个简要说明。

Step1:安装dotnet产品提要

要开始安装.NET,您需要注册Microsoft签名密钥并添加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'

Step2:安装.NET SDK

更新可用于安装的产品,安装.NET所需的组件,然后安装.NET SDK。
在命令提示符下,运行以下命令:

sudo yum update
sudo yum install libunwind libicu
sudo yum install dotnet-sdk-2.1.3 #最新版本请关注官网

两步即可完成.NET Core SDK在CentOS7系统下的安装,最后可执行一下命令dotnet --version,如果正常输出版本号则说明安装没有出现问题。

Linux其他发行版安装.NET Core SDK教程请参见官方教程 Get started with .NET in 10 minutes

3.部署ASP.NET Core应用程序

下面就尝试把我用ASP.NET Core Web API 开发的一个接口网站部署到我们已经安装.NET SDK的CentOS系统(下文简称服务器)中。

程序发布过程省略,把编译后的程序发布到了本地F:\wwwroot\Scorpio文件夹。

然后借助FTP工具FileZilla把程序文件传输到服务器/home/wwwroot/scorpio文件夹。

上传截图:

上传完毕后,需要先通过cd命令进入网站根目录/home/wwwroot/scorpio/,再输入如下命令启动网站程序:

dotnet Scorpio.WebApi.dll 

如果在任意非站点根目录,通过下面这种方式直接运行,程序会抛异常,不知是程序原因还是其他原因。

dotnet /home/wwwroot/scorpio/Scorpio.WebApi.dll 

如果你可以看到如下界面则表示程序启动成功。

4.Nginx配置反向代理

Nginx是一个高性能的Web服务器软件。这是一个比Apache HTTP Server更加灵活和轻量级的程序。

我们的网站程序启动的端口是5000,可以借助Nginx把程序5000端口映射到80端口。

Nginx官方文档 & Nginx开发从入门到精通 - Tengine

4.1.安装Nginx

首先,我们需要在服务器上安装Nginx。

Step1:添加Nginx存储库

要添加CentOS 7 EPEL仓库,请打开终端并使用以下命令:

sudo yum install epel-release

Step2:安装Nginx

现在Nginx存储库已经安装在您的服务器上,请使用以下yum命令安装Nginx:

sudo yum install nginx

Step3:启动Nginx

Nginx不会自行启动。要运行Nginx,请输入:

sudo systemctl start nginx

如果您正在运行防火墙,请运行以下命令以允许HTTP和HTTPS通信:

sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-service=https
sudo firewall-cmd --reload

此时,可以在本机的浏览器中访问服务器的IP地址http://192.168.83.128来验证Nginx是否成功运行。

如果能看到Nginx的默认转发网页则说明一切正常。如下截图:

如果拒绝访问,考虑服务器80端口是否开放。可尝试通过下面两条命令开放80端口、重启防火墙使修改即时生效。

firewall-cmd --zone=public --add-port=80/tcp --permanent
systemctl restart firewalld

4.2.设置Nginx开机启动

避免开机需要手动开启Nginx,可以通过如下快捷命令把Nginx配置成系统服务,并设置为开机启动:

systemctl enable nginx  #设置开机启动

其他命令:

systemctl disable nginx   #禁止开机启动
systemctl status nginx #查看运行状态
systemctl restart nginx #重启服务

4.3.修改Nginx配置文件

首先,拿到Nginx的默认配置文件/etc/nginx/nginx.conf,把默认80端口转发配置server节点用#符注释掉。

然后,我们新建一个配置文件netcore.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;
}
}

保存并上传到Nginx的配置加载目录/etc/nginx/conf.d,最后执行命令nginx -s reload重启Nginx即可。

在本地浏览器上访问服务器地址,运行结果如下:

这个问题是由于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

再次访问,运行结果如下:

可以看到,访问的接口成功返回数据,证明Nginx已经完成对我们部署应用程序的转发。

5.Supervisor配置守护进程

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

Supervisor不支持任何版本的Window系统;仅支持在Python2.4或更高版本,但不能在任何版本的Python 3下工作。

其主要组成部分:

supervisord:Supervisor的守护进程服务,用于接收进程管理命令;

supervisorctl:Supervisor命令行工具,用于和守护进程通信,发送管理进程的指令;

Web Server:Web端进程管理工具,提供与supervisorctl类似功能,管理进程;

XML-RPC Interface:提供XML-RPC接口,请参阅XML-RPC API文档

5.1.安装Supervisor

联网状态下,官方推荐首选安装方法是使用easy_install,它是setuptools(Python包管理工具)的一个功能。所以先执行如下命令安装 setuptools:

yum install python-setuptools

请更换root用户,执行如下命令安装Supervisor:

easy_install supervisor

5.2.配置Supervisor

运行supervisord服务的时候,需要指定Supervisor配置文件,如果没有显示指定,默认会从以下目录中加载:

$CWD/supervisord.conf  #$CWD表示运行supervisord程序的目录
$CWD/etc/supervisord.conf
/etc/supervisord.conf
/etc/supervisor/supervisord.conf (since Supervisor 3.3.0)
../etc/supervisord.conf (Relative to the executable)
../supervisord.conf (Relative to the executable)

所以,先通过如下命令创建目录,以便让Supervisor成功加载默认配置:

mkdir /etc/supervisor

加载目录有了,然后通过echo_supervisord_conf程序(用来生成初始配置文件)来初始化一个配置文件:

echo_supervisord_conf > /etc/supervisor/supervisord.conf

打开supervisord.conf文件,可以看到echo_supervisord_conf已经帮我们初始化好了一个样例配置,我们需要简单修改一下。

尾部找到如下文本片段:

;[include]
;files = relative/directory/*.ini

改为:

[include]
files = conf.d/*.conf

即,把注释去除、设置/etc/supervisor/conf.d为Supervisor进程配置文件加载目录。

这样,Supervisor会自动加载该目录下.conf后缀的文件作为共同服务配置。Supervisor管理的每个进程单独写一个配置文件放在该目录下,supervisord.conf配置文件中保留公共配置。

创建进程配置加载目录:

mkdir /etc/supervisor/conf.d

接下来就需要为我们已经部署的ASP .NET Core程序的宿主进程创建一个进程配置文件netcore.conf,保存并上传到/etc/supervisor/conf.d目录。

配置文件netcore.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 ;请求停止时用来杀死程序的信号

启动Supervisor服务,命令如下:

supervisord -c /etc/supervisor/supervisord.conf

这时,在会发现我们部署的网站程序不在shell中通过dotnet xxx.dll启动,同样可以访问。

5.3.设置Supervisor开机启动

首先为Supervisor新建一个启动服务脚本supervisor.service,然后保存并上传至服务器/usr/lib/systemd/system/目录。

脚本内容如下:

# supervisord service 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 $OPTIONS shutdown
ExecReload=/usr/bin/supervisorctl $OPTIONS reload
KillMode=process
Restart=on-failure
RestartSec=42s [Install]
WantedBy=multi-user.target

设置开启启动:

systemctl enable supervisor

验证是否成功:

systemctl is-enabled supervisor

如果输出enabled则表示设置成功,也可重启服务器验证。

其它Linux发行版开机启动脚本 User-contributed OS init scripts for Supervisor

5.4.Supervisorctl管理进程

Supervisor服务启动后,受其管理的进程会在后台运行。可以通过supervisorctl客户端管理进程。

输入如下命令进入supervisorctl交互终端,按Ctrl+C键退出:

supervisorctl

输入help查询帮助:

supervisor> help

default commands (type help <topic>):
=====================================
add exit open reload restart start tail
avail fg pid remove shutdown status update
clear maintail quit reread signal stop version

输入help ****查询详细命令,比如输入help stop

supervisor> help stop

stop <name>             Stop a process
stop <gname>:* Stop all processes in a group
stop <name> <name> Stop multiple processes or groups
stop all Stop all processes

如何启动、停止、重启进程等命令,我这里就不在记录,大家自行查找吧。

除此之外,Supervisor还提供了Web管理界面用来管理进程,如何配置启动请参考官方文档。

至此,我们已经完成了ASP.NET Core应用程序在CentOS7服务器上的部署。

6.相关阅读

【转】:http://www.cnblogs.com/esofar/p/8043792.html

最新文章

  1. C# 模拟提交 Form表单的数据
  2. live555编译、移植
  3. ShareSdk使用心得
  4. lei
  5. 对UIWebView的学习
  6. 判断不在Update Task中
  7. UVa 10075 - Airlines
  8. 算法入门系列一--DP初步
  9. GOOGLE搜索從入門到精通V4.0
  10. Django之CSRF 跨站请求伪造
  11. 多重和嵌套if
  12. 使用webservice实现App与服务器端数据交互
  13. js继承实现
  14. CentOS7.0安装Nginx
  15. Java中Lock,tryLock,lockInterruptibly的区别
  16. python3和grpc的微服务探索实践
  17. SQL优化经验
  18. Mybatis测试用例
  19. 如何开始学习ADF和Jdeveroper 11g
  20. maven 配置 阿里仓库

热门文章

  1. ABP框架系列之十三:(Authorization-授权)
  2. mongoDB实现MapReduce
  3. Spring通过在META-INF/spring.handlers中的属性进行配置文件解析
  4. Unity3D使用EasyMovieTexture插件播放视频
  5. kali安装配置ftp
  6. 冲刺博客NO.9
  7. BASH 正则表达式和文本处理工具
  8. consul服务注册与发现
  9. 在ng-repeat内Checkbox默认选中
  10. Apktool下载与安装 windows环境