zoukankan      html  css  js  c++  java
  • Centos7 Nginx部署.Net Core with Supervisor

    首先安装.NET Core Runtime:

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

    安装.NET Runtime

    sudo yum install aspnetcore-runtime-3.0 -y

    安装完成后使用以下命令验证安装:

    dotnet --info

    显示以下内容表示安装成功:

      It was not possible to find any installed .NET Core SDKs
      Did you mean to run .NET Core SDK commands? Install a .NET Core SDK from:
          https://aka.ms/dotnet-download
    
    Host (useful for support):
      Version: 3.0.0
      Commit:  95a0a61858
    
    .NET Core SDKs installed:
      No SDKs were found.
    
    .NET Core runtimes installed:
      Microsoft.AspNetCore.App 3.0.0 [/usr/share/dotnet/shared/Microsoft.AspNetCore.App]
      Microsoft.NETCore.App 3.0.0 [/usr/share/dotnet/shared/Microsoft.NETCore.App]
    
    To install additional .NET Core runtimes or SDKs:
      https://aka.ms/dotnet-download

    这里我只安装了Runtime并没有安装开发使用的SDK,只需要保证能运行.net core项目就可以啦

    下一步,使用VS2019创建一个.net core mvc项目,创建好后直接将演示内容发布(我这里直接发布成文件系统)

    然后使用FTP工具将发布编译生成的文件全部复制到Centos 7上指定的目录,我这里是放在/etc/nginx/websites/coretest

    使用使用命令定位到当前目录:

    cd /etc/nginx/websites/coretest
    

    然后在当前目录下运行dotnet CoreTest.dll命令以启动网站:

    dotnet CoreTest.dll
    

    运行结果如下:

     可以看出当前网站运行在5000端口

    接下来我们使用nginx访问,直接在nginx上做个转发代理到5000端口就可以了

    首先先安装好nginx后,在/etc/nginx/conf.d下面创建一个新的nginx配置文件,例如我的就叫coretest.conf,将内容设置如下:

    server {
        listen       8080;
        server_name  localhost;
        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_set_header   X-Forwarded-For 
    	proxy_add_x_forwarded_for;
    	proxy_set_header   X-Forwarded-Proto $scheme;
        }
    }

    这里我新建了一个8080端口,然后设置代理到5000端口

    然后检查nginx配置文件:

    nginx -t
    

    然后重启nginx:

    nginx -s reload

    如果ngix -s reload 提示nginx: [error] invalid PID number "" in "/run/nginx.pid",解决方法:

    #nginx.conf文件的路径可以从nginx -t的返回中找到
    nginx -c /etc/nginx/nginx.conf
    # 然后再执行
    nginx -s reload

    配置文件加好后,防火墙开放8080端口:

    firewall-cmd --zone=public --add-port=8080/tcp --permanent
    firewall-cmd --reload

    然后使用IP + 端口访问(8080):

    http://192.168.100.131:8080/ ((lll¬ω¬) 我的是虚拟机。。。)

    访问之后可能会出现502的错误:

    如果访问显示“502 Bad Gateway”,可能是由于SELinux保护机制所导致,需要将nginx添加至SELinux的白名单。命令如下:

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

    执行完命令后重新访问http://192.168.100.131:8080:

     访问成功啦~

    配置进程守护(Supervisor)

    在CentOS 7上,如果关闭终端,开启的进程就会关闭,导致程序无法访问

    为了解决这个问题,就用到了Supervisor这个工具,Supervisor使用Python开发的,用于监听ASP.NET Core 应用程序的状况。在应用程序停止运行的时候立即重新启动。

    Supervisor(http://supervisord.org/)是用Python开发的一个client/server服务,是Linux/Unix系统下的一个进程管理工具,不支持Windows系统。它可以很方便的监听、启动、停止、重启一个或多个进程。用Supervisor管理的进程,当一个进程意外被杀死,supervisort监听到进程死后,会自动将它重新拉起,很方便的做到进程自动恢复的功能,不再需要自己写shell脚本来控制。
    安装Supervisor
    1、yum install python-setuptools -y
    2、easy_install supervisor
    

    配置Supervisor

    创建supervisor文件夹,通过echo_supervisord_conf初始化配置文件

    1、mkdir /etc/supervisor
    2、echo_supervisord_conf > /etc/supervisor/supervisord.conf

    修改新建的supervisord.conf配置信息,将最后面的

    ;files = relative/directory/*.ini
    

    修改为:

    [include]
    files = /etc/supervisor/conf.d/*.ini
    

    即去掉最后两行前面的“;”号。

    为.Net Core 项目添加进程配置文件:

    在/etc/supervisor/目录下创建名字为conf.d文件夹然后创建一个CoreTest.ini文件,内容如下:

    [program:CoreTest]
    command=dotnet CoreTest.dll ; 运行程序的命令
    directory=/etc/nginx/websites/coretest/ ; 命令执行的目录
    autorestart=true ; 程序意外退出是否自动重启
    stderr_logfile=/etc/nginx/websites/coretest/log/CoreTest.err.log ; 错误日志文件
    stdout_logfile=/etc/nginx/websites/coretest/log/CoreTest.out.log ; 输出日志文件
    environment=ASPNETCORE_ENVIRONMENT=Production ; 进程环境变量
    user=root ; 进程执行的用户身份
    stopsignal=INT
    

    启动Supervisor服务: 

    supervisord -c /etc/supervisor/supervisord.conf
    

    启动服务后可以通过命令查看是否配置成功:

    ps -ef | grep CoreTest.dll
    

    如果看到以下内容,表示配置成功,就可以访问.Net Core项目了:

     配置Supervisor开机启动:

    进入/usr/lib/systemd/system/目录,并创建supervisord.service文件,添加内容:

    [Unit]
    Description=Supervisor daemon
    [Service]
    Type=forking
    ExecStart=/usr/bin/supervisord -c /etc/supervisor/supervisord.conf
    ExecStop=/usr/bin/supervisorctl shutdown
    ExecReload=/usr/bin/supervisorctl reload
    KillMode=process
    Restart=on-failure
    RestartSec=42s
    [Install]
    WantedBy=multi-user.target
    

    使配置生效:

    systemctl daemon-reload
    

    设置服务开机启动:

    systemctl enable supervisord
    

    启动supervisor进程:

    systemctl start supervisord
    

    验证是否为开机启动:

    systemctl is-enabled supervisord
    

     

     supervisor常用命令:

    supervisorctl status    //查看所有任务状态
    supervisorctl shutdown  //关闭所有任务
    supervisorctl start|stop|restart all          //控制所有进程
    supervisorctl start|stop|restart program_name //控制目标进程 
    • 参考与致谢:
      • https://www.cnblogs.com/zhuyuchao/p/11262666.html
      • https://www.jianshu.com/p/dc38b80727e4
  • 相关阅读:
    python制作一个塔防射箭游戏
    有两个链表a和b,设结点中包含学号、姓名。从a链表中删去与b链表中有相同 学号的那些结点。
    python实现一个简单的21点游戏
    C语音,函数padd的功能是调整pa指向的链表中结点的位置,使得所有x值为偶数的结点出现在链表的前半部,所有x值为奇数的结点出现在链表的后半部。
    scratch绘制特殊图形1
    验证哥德巴赫猜想,输出6-100之间的偶数等于两个质数之和
    写一函数check检测字符串中的左右括号数是否匹配
    C语言文件操作题,将整数1-10及其算术平方根存入文件,再读取出来显示在屏幕上
    湖南2020对口计算机32题第1、2、3小题
    基础
  • 原文地址:https://www.cnblogs.com/gme5/p/11775864.html
Copyright © 2011-2022 走看看