【详细】【转】CentOS 7部署ASP.NET Core应用程序
很早就看过关于net core部署在Linux上的文章,自己也曾亲自将项目部署在Linux上,今天看到这篇文章,为其格式之工整而转!
1.环境准备
网上看了一下,Linux云服务器还挺贵的,那就只好先用VMware虚拟机搭建个吧。这里我选装的Linux系统版本的是CentOS,Linux系统众多发行版之一,相信各位园友也不陌生。
软件版本信息如下:
VMware Workstation 14 Pro 官方下载
CentOS 7 Minimal 官方下载
虚拟机安装、系统镜像配置过程,大家参考网上教程应该没啥问题,我这不再赘述。
成功安装并登陆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-pythonsudo 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> helpdefault 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 stopstop <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.相关阅读
将ASP.NET Core应用程序部署至生产环境中(CentOS7) - KAnts - 博客园
使用 Nginx 在 Linux 上托管 ASP.NET Core | Microsoft Docs
How To Install Nginx on CentOS 7 | DigitalOcean
How to Install MySQL on CentOS 7 | linode
CentOS 7 安装配置Supervisor | Charlie Blog
CentOS7上自定义系统服务 | maodahua
【转】:http://www.cnblogs.com/esofar/p/8043792.html
欢迎大家关注我都我的微信 公众号,公众号涨粉丝人数,就是你们对我的喜爱程度!
转载于:https://www.cnblogs.com/gdsblog/p/8795871.html
【详细】【转】CentOS 7部署ASP.NET Core应用程序相关推荐
- 如何在Ubuntu 18.04上使用Nginx与MySQL服务器一起部署ASP.NET Core应用程序
The author selected the Open Source Initiative to receive a donation as part of the Write for DOnati ...
- Centos下使用Docker部署asp.net core项目
本文讲述 CentOS 系统 Docker 中部署 asp.net core开源项目 abp 的过程 步骤 1. 拉取 asp.net core 基础镜像 docker pull microsoft/ ...
- 在centos 7.4上使用jexus 部署 asp.net core 项目
直接用dotnet xx.dll命令是可以部署asp.net core项目的,包括https也可实现.但是用jexus有以下几个好处: 1.jexus可以守护dotnet进程 2.同一服务器,同一端口 ...
- 在 Azure 上部署 Asp.NET Core Web App
在云计算大行其道的时代,当你要部署一个网站时第一选择肯定是各式各样的云端服务.那么究竟使用什么样的云端服务才能够以最快捷的方式部署一个 ASP.NET Core的网站呢?Azure 的 Web App ...
- 运行Vue在ASP.NET Core应用程序并部署在IIS上
前言 从.NET Core 1.0开始我们就将其应用到项目中,但是呢我对ASP.NET Core一些原理也还未开始研究,仅限于会用,不过园子中已有大量文章存在,借着有点空余时间,我们来讲讲如何利用AS ...
- ASP.NET Core应用程序容器化、持续集成与Kubernetes集群部署(三
在上文ASP.NET Core应用程序容器化.持续集成与Kubernetes集群部署(二)中,我介绍了如何使用Azure DevOps为ASP.NET Core应用程序案例:tasklist搭建持续集 ...
- ASP.NET Core 实战:使用 Docker 容器化部署 ASP.NET Core + MySQL + Nginx
一.前言 在之前的文章(ASP.NET Core 实战:Linux 小白的 .NET Core 部署之路)中,我介绍了如何在 Linux 环境中安装 .NET Core SDK / .NET Core ...
- ASP.NET Core应用程序容器化、持续集成与Kubernetes集群部署(一)
上个月15日,上海MVP做了一次线下的技术分享活动,我分享的主题是<快速构建容器化的ASP.NET Core应用程序>,有关这次活动的简报,可以参考这里.另外,我的主题分享的PPT也可以点 ...
- Azure 部署 Asp.NET Core Web App
在云计算大行其道的时代,当你在部署一个网站时,第一选择肯定是各式各样的云端服务.那么究竟使用什么样的云端服务才能够以最快捷的方式部署一个 ASP.NET Core 的网站呢?Azure 的 Web A ...
- 使用Jenkins在Azure Web App上进行ASP.NET Core应用程序的持续集成和部署(CI/CD)–第3天
目录 主题 路线图 先决条件 Azure Active Directory和服务主体 创建一个Azure Active Directory和服务主体 将应用程序集成到角色 将Jenkins与Azure ...
最新文章
- 2021年斯坦福AI指数报告重磅出炉!中国AI期刊影响力首超美国,视频处理是新风口
- 网站如何才能吸引用户,增加网站点击率?
- PE文件数据结构汇总
- 面试:如何从 100 亿 URL 中找出相同的 URL?
- 秀啊,用Python快速开发在线数据库更新修改工具
- 操作系统实验报告10:线程1
- 汇编语言第二章知识梳理及思考
- Flask之flask-script 指定端口
- C# 将DataGridView里面的数据提取到DataTable中
- 基于android的考勤管理系统,基于Android的考勤管理系统的设计与实现
- 新电脑磁盘可存储信息数百年
- bootstrap之项目一的填坑
- 两个HC-05蓝牙模块互相绑定构成无线串口模块
- 逻辑思维训练500题及答案
- Java Post/Get请求 工具类
- 计算机科学和机器学习中的代数、拓扑、微积分和最优化理论
- 数据结构-BF算法和KMP算法
- 微软云中国的服务器在哪,微软云计算平台Windows Azure将落户中国
- 089 定积分之双纽线、心形线、摆线
- Python基础教程之Matplotlib-基础绘图