首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Asp.NetCore程序发布到CentOs(含安装部署netcore)--最佳实践(二)

Asp.NetCore程序发布到CentOs(含安装部署netcore)--最佳实践(二)

作者头像
hbbliyong
发布于 2018-12-28 08:30:28
发布于 2018-12-28 08:30:28
85700
代码可运行
举报
文章被收录于专栏:hbbliyonghbbliyong
运行总次数:0
代码可运行

Asp.NetCore程序发布到CentOs(含安装部署netcore)--最佳实践(一)

接上一篇

3. Nginx配置反向代理

3.1 cnetos 安装nginx

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

3.1.1:添加Nginx存储库

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo yum install epel-release

EPEL的全称叫 Extra Packages for Enterprise Linux 。EPEL是由 Fedora 社区打造,为 RHEL 及衍生发行版如 CentOS、Scientific Linux 等提供高质量软件包的项目。装上了 EPEL之后,就相当于添加了一个第三方源。 如果你知道rpmfusion.org的话,拿 rpmfusion 做比较还是很恰当的,rpmfusion 主要为桌面发行版提供大量rpm包,而EPEL则为服务器版本提供大量的rpm包,而且大多数rpm包在官方 repository 中是找不到的。 另外一个特点是绝大多数rpm包要比官方repository 的rpm包版本要来得新,比如我前些日子在CentOS上安装的php,RHEL为了稳定性还在延用5.1.6版,我记得这是去年上半年的版本,而php 的最新版本已经到5.3.2,如果在php5.1.6的基础上安装phpmyadmin,则会提示php版本过低,这时候,EPEL中提供的较新php rpm就能很方便的派上用场了。

3.1.2:安装Nginx

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo yum install nginx
3.1.3:启动Nginx

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo systemctl start nginx

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo firewall-cmd --permanent --zone=public --add-service=http 
sudo firewall-cmd --permanent --zone=public --add-service=https
sudo firewall-cmd --reload

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

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
firewall-cmd --zone=public --add-port=80/tcp --permanent
systemctl restart firewalld
3.1.4 设置Nginx开机启动

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
systemctl enable nginx  #设置开机启动

其他命令:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
systemctl disable nginx   #禁止开机启动
systemctl status nginx     #查看运行状态
systemctl restart nginx    #重启服务
3.1.5 修改Nginx配置文件

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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即可。

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

502 Bad Gateway

这个问题是由于SELinux保护机制所导致,我们需要将Nginx添加至SELinux的白名单。执行命令:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
yum install policycoreutils-python
 
sudo cat /var/log/audit/audit.log | grep nginx | grep denied | audit2allow -M mynginx
 
sudo semodule -i mynginx.pp

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

4.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文档。

4.1安装Supervisor

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
yum install python-setuptools

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
easy_install supervisor

4.2 配置Supervisor

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$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成功加载默认配置:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mkdir /etc/supervisor

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

echo_supervisord_conf > /etc/supervisor/supervisord.conf

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

尾部找到如下文本片段:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
;[include]
;files = relative/directory/*.ini

改为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[include]
files = conf.d/*.conf

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

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

创建进程配置加载目录:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mkdir /etc/supervisor/conf.d

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

配置文件netcore.conf内容如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[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服务,命令如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
supervisord -c /etc/supervisor/supervisord.conf

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

4.3设置Supervisor开机启动

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

脚本内容如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 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

设置开启启动:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
systemctl enable supervisor

验证是否成功:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
systemctl is-enabled supervisor

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

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

Supervisorctl管理进程

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

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

supervisorctl

输入help查询帮助:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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服务器上的部署。 上一篇有朋友说用jexus更简单方便,下一篇也尝试一下。

参考

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-12-21 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
linux软件安装之详解apt、yum、dnf 和 pkg包安装
包管理系统除了安装软件外,它还提供了工具来更新已经安装的包。包存储库有助于确保你的系统中使用的代码是经过审查的,并且软件的安装版本已经得到了开发人员和包维护人员的认可。
菲宇
2021/12/06
3.6K0
如何在 Ubuntu 18.04 上安装 Chromium 网络浏览器
Chromium 是一个为现代网络构建的快速,稳定,安全的浏览器。它是很多浏览器的基础,包括在世界上被广泛使用的 Google Chrome 浏览器。
雪梦科技
2020/05/11
5.6K0
如何在 Ubuntu 18.04 上安装 Chromium 网络浏览器
centos怎么安装chrome浏览器 centos7安装谷歌浏览器教程
centos安装谷歌chrome浏览器的步骤是怎样的?centos是Linux发行版之一,centos系统默认自带Firefox,许多用户早已习惯使用chrome浏览器,于是就想在centos系统上安装chrome浏览器。接下来系统城小编就跟大家分享centos7安装谷歌浏览器的步骤图解。
小狐狸说事
2022/11/16
12.2K0
centos怎么安装chrome浏览器 centos7安装谷歌浏览器教程
如何在 Fedora、RHEL、AlmaLinux、Rocky Linux 中启用 RPM Fusion 存储库?
RPM Fusion 是一个非官方的软件存储库,提供了许多额外的软件包,使得在 Fedora、RHEL、AlmaLinux 和 Rocky Linux 等发行版中安装第三方软件变得更加方便。在本文中,我们将详细介绍如何在这些操作系统中启用 RPM Fusion 存储库,并说明如何安装常见的第三方软件。
网络技术联盟站
2023/06/09
2.4K1
如何在 Fedora、RHEL、AlmaLinux、Rocky Linux 中启用 RPM Fusion 存储库?
Linux中yum、rpm、apt-get、wget的区别,yum、rpm、apt-get常用命令,CentOS、Ubuntu中安装wget
对于初学Linux的人来说,太多的Linux内核版本会让人不知所措,并且刚开始需要我们下载各种编译器、软件包去调试我们的环境。这个时候肯定就需要我们使用到安装下载的工具。所以这里就来一起学习Linux中yum、wget、apt-get的用法和区别吧
寻求出路的程序媛
2024/08/02
6620
5 种 Linux 安装包管理工具中文手册!抓紧看,别再说不会了,丢人。。。
包管理系统除了安装软件外,它还提供了工具来更新已经安装的包。包存储库有助于确保你的系统中使用的代码是经过审查的,并且软件的安装版本已经得到了开发人员和包维护人员的认可。
民工哥
2022/10/27
1.3K0
5 种 Linux 安装包管理工具中文手册!抓紧看,别再说不会了,丢人。。。
如何在Fedora 29中安装VLC Media Player
VLC是一个免费的开源,流行和跨平台的多媒体播放器和框架,可播放文件,光盘,网络摄像头,设备和流。 它播放大多数多媒体文件和DVD,音频CD,VCD,并支持各种流媒体协议。 它只是最好的免费多格式媒体播放器。
用户2323866
2021/06/18
1.8K0
Linux介绍、安装、常见命令
Linux是一种开源的操作系统,其内核由林纳斯·托瓦兹(Linus Torvalds)在1991年开始开发。与其他常见的操作系统如Windows和Mac OS不同,Linux是一个开放、自由的系统,可以免费使用、修改和分发。
用户10781703
2023/12/27
4470
Linux介绍、安装、常见命令
如何在 Ubuntu 18.04 上安装 Opera 网络浏览器
Opera是世界上最流行的跨平台网络浏览器之一。它是一款为现代网络构建的快速,易用并且安全的网络浏览器。
雪梦科技
2020/05/11
2.2K0
如何在 Ubuntu 18.04 上安装 Opera 网络浏览器
Ubuntu——安装和卸载谷歌Chrome浏览器
对于刚刚开始使用Ubuntu并想安装谷歌Chrome浏览器的新用户来说,本文所介绍的方法是最快捷的。在Ubuntu上安装谷歌Chrome的方法有很多。一些用户喜欢直接在 谷歌Chrome下载页面 获得
周小董
2019/03/25
9.6K0
软件测试|如何在Linux中下载和安装软件包
在Linux操作系统中,下载和安装软件包是一项基本任务。不同的Linux发行版可能有不同的包管理工具和方式,但总体流程是类似的。以下是在Linux中下载和安装软件包的详细步骤。
霍格沃兹测试开发Muller老师
2023/11/07
6810
软件测试|如何在Linux中下载和安装软件包
Ubuntu和Fedora,哪个更对你的胃口?
简介:Ubuntu还是Fedora?有什么不同?哪个更好?您应该使用哪一个?阅读Ubuntu和Fedora的比较。
用户6543014
2019/11/28
2.4K0
Ubuntu和Fedora,哪个更对你的胃口?
如何在 Fedora 36 上安装 Wireshark?
在本教程中,我们将向您展示如何在 Fedora 36 上安装 Wireshark。
网络技术联盟站
2022/06/02
8600
如何在 Fedora 36 上安装 Wireshark?
如何在多平台(win/mac/linux)上安装webdriver并使用selenium
这是确保你的软件包列表是最新的,这样当你尝试安装软件包时,APT 能够找到它们。终端中运行:
renhai
2023/11/24
2.3K0
如何在多平台(win/mac/linux)上安装webdriver并使用selenium
九.Linux软件包管理
大多数现代的类 Unix 操作系统都提供了一种中心化的机制用来搜索和安装软件。软件通常都是存放在存储库中,并通过包的形式进行分发。处理包的工作被称为包管理。包提供了操作系统的基本组件,以及共享的库、应用程序、服务和文档。
对弈
2019/09/04
2K0
如何在Fedora 22上安装LAMP(Linux,Apache,MySQL,PHP)
LAMP堆栈是一组用于启动和运行Web服务器的开源软件。首字母缩略词代表Linux,Apache,MySQL和PHP。由于服务器已经在运行Fedora,因此需要处理Linux部分。以下是安装其余部分的方法。
风研雨墨
2018/10/09
2K0
日更第1天:Linux常用命令之dnf用法
dnf是新一代的RPM软件包管理器,与yum包管理器相比,在用户体验、内存占用、依赖分析、运行速度等多方面得到了较好的提升。
胖邰
2021/12/22
1.8K0
日更第1天:Linux常用命令之dnf用法
如何从 Fedora 36 升级到 Fedora 37?
Fedora 是一种基于 Linux 的操作系统,提供了稳定、安全和创新的功能。每年,Fedora 社区发布新的版本,其中包括许多增强功能、安全修复和软件更新。在本文中,我们将详细介绍如何将您的 Fedora 36 系统升级到最新的 Fedora 37 版本。
网络技术联盟站
2023/06/25
5060
如何从 Fedora 36 升级到 Fedora 37?
Linux 中的 RPM 命令
RPM 包管理器 (RPM)是一个强大的包管理系统,它广泛用于 Red Hat Linux 和它的衍生版本,例如 CentOS 和 Fedora。RPM 涉及rpm命令和.rpm文件。一个 RPM 包由一个压缩包和 meta 信息(包含例如依赖包和安装位置等信息)组成。
雪梦科技
2020/05/11
8.5K0
Linux 中的 RPM 命令
在 Linux 系统上安装服务器管理软件Cockpit
Cockpit 是什么?Cockpit 是一个自由开源的服务器管理软件,使得我们可以通过它好看的 Web 前端界面轻松地管理我们的 GNU/Linux 服务器,非常轻量级,Web 界面也非常简单易用。
星哥玩云
2022/07/14
3.4K0
在 Linux 系统上安装服务器管理软件Cockpit
推荐阅读
相关推荐
linux软件安装之详解apt、yum、dnf 和 pkg包安装
更多 >
LV.3
这个人很懒,什么都没有留下~
目录
  • 3. Nginx配置反向代理
    • 3.1 cnetos 安装nginx
      • 3.1.1:添加Nginx存储库
      • 3.1.2:安装Nginx
      • 3.1.3:启动Nginx
      • 3.1.4 设置Nginx开机启动
      • 3.1.5 修改Nginx配置文件
  • 4.Supervisor配置守护进程
    • 4.1安装Supervisor
    • 4.2 配置Supervisor
    • 4.3设置Supervisor开机启动
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档