• .NETCore3.0应用程序部署到CentOS7


    说在前面

    在阅读本文之前,您必须对Linux中涉及的常见命令有一定了解,本文侧重实战,不会对相关概念详述。

    注:本文实验环境是 Oracle VM VirtualBox虚拟机, CentOS-7-x86_64-Minimal-1908系统 。

    安装 CentOS7 Minimal

    • 可自行 Google 或百度

    配置 ip,通过 xshell 连接

    • vi /etc/sysconfig/network-scripts/ifcfg-eno
    • ONBOOT=no 修改为 ONBOOT=yes
    • 重启网络 sudo service network restart
    • 将网卡的连接方式修改为桥接网卡
    • 输入命令 ip addr 查看 ip

    安装.NETCore sdk

    创建.NETCore 项目,并上传至 CentOS 中

    安装配置 Nginx 进行反向代理

    安装 Nginx

    • 使用如下命令安装 CentOS 的 EPEL 仓库:yum install epel-release
    • 使用如下命令安装 Nginx:yum install nginx
    • Nginx 安装完成后, 系统并不会启动 Nginx, 使用如下命令启动 Nginx: systemctl start nginx
    • 使用如下命令设置系统启动后, 默认启动 Nginx: systemctl enable nginx

    添加 nginx 配置文件

    server {
        listen 81;
        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;
        }
    }
    

    防火墙相关操作

    systemctl start firewalld                                   //启动防火墙
    systemctl status firewalld                                  //查看防火墙状态
    firewall-cmd  --permanent --zone=public --add-service=http  //允许HTTP
    firewall-cmd  --permanent --zone=public --add-service=https //允许HTTPS
    firewall-cmd  --reload                                      //重新加载防火墙
    firewall-cmd --zone=public --add-port=80/tcp --permanent    //开启80端口
    firewall-cmd --list-ports                                   //查看已经开放的端口
    

    访问 502

    原因是由于 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
    

    配置守护进程

    安装 Supervisor

    yum install python-setuptools
    easy_install supervisor
    

    配置 Supervisor

    • 先创建 Supervisor 配置文件的目录

      • mkdir /etc/supervisor
    • 通过 echo_supervisord_conf 指令(用来生成初始配置文件,文件名可以自定义)来初始化一个配置文件:

      • echo_supervisord_conf > /etc/supervisor/supervisord.conf
    • 通过 vim 命令修改创建好的 supervisord.conf 配置信息,或有视图界面的直接打开编辑

      • vi /etc/supervisor/supervisord.conf
    • 文件内容末尾找到以下内容进行修改

      ;[include]
      ;files = relative/directory/*.ini
      
      [include]
      files = /etc/supervisor/conf.d/*.conf
      
    • 创建目录,添加配置文件

      mkdir /etc/supervisor/conf.d
      cd /etc/supervisor/conf.d
      touch netcore.conf
      
    • 通过 vi 指令或视图界面编辑 netcore.conf,添加以下配置内容(分号后面的是注释,注意看注释,免得配置错了)

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

    开机启动 Supervisor 服务

    • 1.进入/usr/lib/systemd/system/目录 cd /usr/lib/systemd/system/

    • 2.创建自定义配置文件 supervisord.service touch supervisord.service

    • 3.编辑 supervisord.service 文件,有视图界面就直接打开编辑 vi supervisord.service

    • 4.添加以下内容,保存退出

      [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
      
    • 5.设置开机启动 systemctl enable supervisord.service

    • 6.检测是否配置成功 systemctl is-enabled supervisord

    参考教程

  • 相关阅读:
    100行代码实现了多线程,批量写入,文件分块的日志方法
    阿里云客户端开发技巧
    阿里云客户端的实现(支持文件分块,断点续传,进度,速度,倒计时显示)
    类库间无项目引用时,在编译时拷贝DLL
    数据库-锁的实践
    Node.js学习资料
    文档流转,文档操作,文档归档(一)
    滑动验证码研究-后续
    iTextSharp 116秒处理6G的文件
    在职场中混,"讲演稿"的重要性
  • 原文地址:https://www.cnblogs.com/dotnetlibao/p/11770027.html
Copyright © 2020-2023  润新知