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


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

    接上一篇

    3. Nginx配置反向代理

    3.1 cnetos 安装nginx

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

    3.1.1:添加Nginx存储库

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

    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:

    sudo yum install nginx
    

    3.1.3:启动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://10.100.150.17来验证Nginx是否成功运行。

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

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

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

    3.1.4 设置Nginx开机启动

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

    systemctl enable nginx  #设置开机启动
    

    其他命令:

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

    3.1.5 修改Nginx配置文件

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

    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的白名单。执行命令:

    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:

    yum install python-setuptools
    

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

    easy_install supervisor
    

    4.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启动,同样可以访问。

    4.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

    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服务器上的部署。 上一篇有朋友说用jexus更简单方便,下一篇也尝试一下。

    参考

  • 相关阅读:
    利用javabean完成注册效果
    DAO设计模式例子
    SmartUpload使用和简介
    js和jquery通过this获取html标签中的属性值
    细说引用类型string StringBuilder class的特点
    WinForm控件自动提示你定义相似的项值
    利用Assembly动态加载程序集
    C# 数据结构与算法系列(五) 队列
    ASP.NET最简单的用户权限管理
    C# 数据结构与算法系列(三) 线性表之链表
  • 原文地址:https://www.cnblogs.com/smiler/p/10154482.html
Copyright © 2020-2023  润新知