• 阿里云CentOS7部署ASP.NET Core


    本文主要介绍了阿里云CentOS7下如何成功的发布ASP.Core应用并使用nginx进行代理, 并对所踩的坑加以记录;

    环境、工具、准备工作

    开始进行ASP.Net Core 应用程序部署

    使用putty连接阿里云CentOS;并根据相关提示输入账户密码登录即可(建议以root权限登录)如下图:

    1.进行安装.NET Core SDK

    .NET Core SDK的安装很简单, 根据 ASP.NET Core 10分钟入门指导一步一步的安装即可;本文简单的将安装步骤进行展示;

    使用如下命令注册Microsoft需要的依赖环境;

    rpm -Uvh https: //packages.microsoft.com/config/rhel/7/packages-microsoft-prod.rpm

    更新可供安装的产品

    yum update

    64位Centos 需要安装 libunwind (libunwind介绍), 32位系统跳过

    yum install libunwind libicu

     安装.NET Core SDK

    yum install dotnet-sdk-2.1.4

    .net core sdk的版本根据自己需要进行选择(官方版本链接) 本文2.1.4版本

    安装比较慢, 请耐心等候, 一定要等到Complete!出现;

    使用如下命令查看sdk版本

    dotnet --version

     

    2.使用VS2017创建一个新的ASP.NET Core MVC程序, 并发布;

    创建发布的.NET Core runtime 要和你在CentOS 安装的runtime一致; 本文是2.1.4

    3.部署ASP.NET Core 应用程序到阿里云CentOS服务器

    使用FTP工具FileZilla将编译发布后的程序文件上传到服务器 /home/wwwroot

    4.运行ASP.NET Core 应用程序

    通过如下命令运行应用程序, 程序目录为你发布到服务器的物理路径, CoreWebTest.dll为你创建的程序入库DLL

    dotnet /home/wwwroot/CoreWebTest/CoreWebTest.dll

     当你看到如下内容, 表示程序已成功运行

    安装配置Nginx进行反向代理

    1.安装 Nginx

    使用如下命令安装CentOS的 EPEL仓库;

    yum install epel-release

     使用如下命令安装Nginx

    yum install nginx

     Nginx安装完成后, 系统并不会启动Nginx, 使用如下命令启动Nginx:

    systemctl start nginx

    使用如下命令设置系统启动后, 默认启动Nginx:

    systemctl enable nginx

     查看firewall 状态, 并启动防火墙

    systemctl status firewalld  //查看防火墙状态 

    systemctl start firewalld //启动防火墙

     使用如下命令, 允许HTTP和HTTPS通过防火墙

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

    在浏览器地址栏输入你服务器的IP地址, 如果出现下图表示Nginx安装配置成功;如果无法访问, 请查看firewall 是否开放80端口;

    firewall-cmd --zone=public --add-port=80/tcp --permanent   //开放80端口
    systemctl restart firewalld.service //重启防火墙

    阿里云下还要添加安全规则, 开放80端口;

    2.修改Nginx的配置文件

    首先,把Nginx的默认配置文件 /etc/nginx/nginx.conf里 80 端口转发配置 server 节点用 # 符注释掉。使用命令vi 或将 nginx.conf 文件下载(使用FileZilla)到本地修改完成后在上传(建议);

    vi /etc/nginx/nginx.conf //打开文件编辑模式, 输入i 进行编辑 完成后 按ESC键输入:wq 回车 退出编辑模式

     

    然后我们重新创建一个自定义的Nginx配置文件用来代理Core 程序, 我创建名称为NginxForCore.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;
        }
    }

      proxy_pass http: 后的url为你在core 启动项配置的路径(默认localhost:5000,如何修改请点击连接查看)

     将创建好的自定义配置文件上传到 /etc/nginx/conf.d目录下 ,最后执行命令 重启Nginx;

    nginx -s reload

    3.将Nginx添加到SELinux白名单

    查看SELinux状态是否为Enforcing(SELinux默认状态为Disabled如何修改状态请查看连接), 必须保证SELinux的状态为Enforcing否则添加白名单会失败;

    使用如下命令:

    getenforce

     如果查询出状态如下图, 添加Nginx到SELinux白名单

    使用如下命令, 将Nginx添加至SELinux白名单;

    yum install policycoreutils-python
    
    cat /var/log/audit/audit.log | grep nginx | grep denied | audit2allow -M  AddNginxToWhiteList
    
    semodule -i  AddNginxToWhiteList.pp

     红色部分(AddNginxToWhiteList)可自己命名;

    在浏览器地址栏输入你服务器的IP地址, 如果出现下图说明我们的ASP.NET Core MVC 已经发布成功了;(要保证你发布的.NET Core程序在Linux已经运行,如何运行见步骤:4.运行ASP.NET Core 应用程序)

    如果没有出现上图, 而是

    请检查:

    1-Nginx是否按上述步骤正确配置;

    2-防火墙及阿里云安全组策略是否正确配置(主要指80端口);

    3-.NET Core程序是否在CentOS下正常运行;

     配置守护进程Supervisor, 让我们的程序能365天24小时不间断运行

      通过上面的操作, 我们已经能正常将.NET Core程序发布到CentOS下来, 但是发布过程中我们也发现了问题, 就是.NET Core不能自动的运行, 一旦我们的命令行工具关掉, 发布的程序就不能访问了;

    是不是能安装一个类似于Windows Service一样的服务, 能实时监控程序状态,异常退出时能自动重启。经过各种百度我找到了Supervisor。

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

    1-安装Supervisor

    yum install python-setuptools
    easy_install supervisor

     2-配置Supervisor

    运行S upervisord 服务的时候,需要指定 Supervisor 配置文件,所以,先通过如下命令创建目录,以便让 Supervisor 成功加载默认配置:

    mkdir /etc/supervisor

     目录创建成功后, 通过 echo_supervisord_conf 程序(用来生成初始配置文件,文件名可以自定义)来初始化一个配置文件

    echo_supervisord_conf > /etc/supervisor/supervisord.conf

     通过vim命令修改创建好的supervisord.conf配置信息

    vi /etc/supervisor/supervisord.conf

    最下边找到如下文本片段:

    将上面配置改为:

    该操作的目的是我们创建一个Supervisor 进程配置文件加载目录。让Supervisor自动加载该目录下.conf 后缀的文件作为服务配置。

    3-为我们部署的.NET Core添加进程配置文件CoreWebTest.conf

    在本地创建文件CoreWebTest.conf 内容如下:

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

     通过FileZilla将文件上传到目录:/etc/supervisor/conf.d下

     4-启动 Supervisor 服务

    命令如下:

    supervisord -c /etc/supervisor/conf.d

     这个时候, 我们已经不需要使用dotnet命令运行程序, 同样可以访问我们部署的.NET Core程序了^ ^

    5-配置Supervisor开机启动

      同样我们需要配置Supervisor在CentOS断电或重启的情况下自动开机运行, 从而保证我们的程序能正常访问;

      为Supervisor创建一个服务启动的脚本AutoStartSupervisor.service, 上传到系统目录: /usr/lib/systemd/system/ 脚本内容如下:

    [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
    # 具体属性作用请官网查看

    通过FileZilla将文件上传到目录: /usr/lib/systemd/system/ 下

    设置Supervisor开机启动

    systemctl enable AutoStartSupervisor.service

     使用重启命令验证配置是否成功.

    reboot  //验证方式为CentOS正常重启后, 我们能在浏览器里访问到我们发布的.NET Core程序

    Supervisor的配置比较复杂,本文只是进行了简单的使用,如需详细深入的配置,请去官网学习;

    至此,阿里云CentOS7下部署ASP.NET Core 已经结束;

    如果这篇博文对你有所帮助,麻烦动动手指点个赞^-^

  • 相关阅读:
    java8
    Python isinstance()
    Python3 File next()
    np.array() 与 np.mat() 比较
    np.nonzero()
    np.dot()
    算法之归并排序的应用 —— 小和问题以及逆序对问题
    递归过程以及递归master公式
    算法之异或运算及其应用
    算法之二分法及其应用
  • 原文地址:https://www.cnblogs.com/xrzs/p/9515037.html
Copyright © 2020-2023  润新知