美文网首页ASP.NET Core 我爱编程
在CentOS 7上部署ASP.NET Core 2.0 Web

在CentOS 7上部署ASP.NET Core 2.0 Web

作者: GongZH丶 | 来源:发表于2018-05-15 15:15 被阅读69次

    在CentOS 7上部署ASP.NET Core 2.0 Web应用程序

    说明:
      在Windows平台上用Visual Studio 2017编写ASP.NET Core 2.0的Web MVC项目,并用VS 2017发布项目。
      在虚拟机上安装CentOS 7系统,将Web项目部署在Cent OS 7上。
      使用Nginx(服务器和反向代理服务器)。
      使用Supervisor进行进程管理。

    目录

    • 部署环境
    • 发布ASP.NET Core 2.0程序
    • 安装CentOS 7
    • 安装.NET Core SDK
    • 在CentOS 7上部署程序
    • 配置Nginx
    • 配置进程守护(Supervisor)

    部署环境

      系统:CentOS 7
      相关软件和工具:.NET Core SDK、Nginx、Supervisor、policycoreutils-python

    发布ASP.NET Core 2.0程序

      发布方式有两种,一种是使用Visual Studio 2017上的发布,另一种是在控制台使用命令方式在项目文件夹下发布,即dotnet publish(发布)命令

    安装CentOS 7

      安装方式很多,比如:https://blog.csdn.net/hui_2016/article/details/68927487

    安装.NET Core SDK

      这里丢出一个官方链接:https://www.microsoft.com/net/learn/get-started/linux/centos
      要是不想看链接,看下面:
      照着做:

        sudo rpm -Uvh https://packages.microsoft.com/config/rhel/7/packages-microsoft-prod.rpm
        
        sudo yum update
        sudo yum install libunwind libicu
        sudo yum install dotnet-sdk-2.1.200 //最好选最新版本
    

      做完后可以输入dotnet --info看一下是否安装成功。

    在CentOS 7上部署程序

      弄完之后就是准备在CentOS 7上部署Webc程序了。
      先将发布后的文件夹放到CentOS 7下,检查一下能否运行,使用dotnet命令。
      如果成功了,就继续。此时,无法访问这个Web程序的页面,需要部署一个Web容器进行转发,就是Nginx。

    配置Nginx

      先下载安装Nginx。

        curl -o  nginx.rpm http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
        rpm -ivh nginx.rpm
        yum install nginx
        
        systemctl start nginx(启动Nginx)
        systemctl enable nginx (设置nginx的开机启动)
    

      如果需要,可以配置防火墙。

      命令:firewall-cmd --zone=public --add-port=80/tcp –permanent(开放80端口)
      命令:systemctl restart firewalld(重启防火墙以使配置即时生效)
      输入ip地址测试Nginx是否可以访问。

      配置Nginx对ASP.NET Core应用的转发:

      修改 /etc/nginx/conf.d/default.conf 文件。(如果对文件没有修改权限,就用chmod命令修改文件权限)
      根据需要修改文件内容:

     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 命令使配置生效。

      使用dotnet命令启动Web程序。
      在浏览器输入ip地址访问,如果访问成功就表示已经在CentOS 7上部署成功。

      如果访问显示“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
    

      成功,部署完成。

    配置进程守护(Supervisor)

      在CentOS 7上,如果关闭终端,开启的进程就会关闭,导致程序无法访问。
      为了解决这个问题,就用到了Supervisor这个工具,Supervisor使用Python开发的,用于监听ASP.NET Core 应用程序的状况。在应用程序停止运行的时候立即重新启动。

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

      安装Supervisor(...我在安装的时候碰到一些问题,弄了很久才成功安装。)
      这里丢出两个链接:https://blog.csdn.net/bbg221/article/details/78715734
      https://blog.csdn.net/fenglailea/article/details/77146248

    1、安装Python包管理工具(easy_install)
      easy_install是setuptools包里带的一个命令,使用easy_install实际上是在调用setuptools来完成安装模块的工作,所以安装setuptools即可。
      wget --no-check-certificate https://bootstrap.pypa.io/ez_setup.py -O - | sudo python 或 yum install python-setuptools

    2、安装supervisor
      easy_install supervisor 或 yum install supervisor

    3、配置Supervisor
      mkdir /etc/supervisor
      echo_supervisord_conf > /etc/supervisor/supervisord.conf (注意文件权限,没有读写权限必出错)
      修改supervisord.conf文件,一般修改最后两行就行。去掉两行前面的分号,把files后改成conf.d/*.conf
      如果服务已经启动,修改配置文件可用“supervisorctl reload”命令来使其生效。

    4、配置对ASP.NET Core应用的守护
      创建一个 WebApplication1.conf文件,内容大概如下:(根据需要修改)

            [program:WebApplication1]
            command=dotnet WebApplication1.dll ; 运行程序的命令
            directory=/home/wwwroot/WebApplication1/ ; 命令执行的目录
            autorestart=true ; 程序意外退出是否自动重启
            stderr_logfile=/var/log/WebApplication1.err.log ; 错误日志文件(如果文件不存在就创建一个)
            stdout_logfile=/var/log/WebApplication1.out.log ; 输出日志文件
            environment=ASPNETCORE_ENVIRONMENT=Production ; 进程环境变量
            user=root ; 进程执行的用户身份
            stopsignal=INT
    

      然后,将文件拷贝到:“/etc/supervisor/conf.d/WebApplication1.conf”下
      运行supervisord,查看是否生效。命令如下:

    supervisord -c /etc/supervisor/supervisord.conf
    ps -ef | grep WebApplication1
    

      如果存在dotnet WebApplication1.dll 进程则代表运行成功,这时候在使用浏览器进行访问。
      如果访问成功,关于ASP.NET Core应用程序的守护就配置完成了。
      再将Supervisor设为开机自启动,就完了。

    相关文章

      网友评论

        本文标题:在CentOS 7上部署ASP.NET Core 2.0 Web

        本文链接:https://www.haomeiwen.com/subject/jsphdftx.html