【无私分享:ASP.NET CORE 项目实战(第十章)】发布项目到 Linux 上运行 Core 项目 目录索引  简介 安装.NET Core SDK for CentOS 测试安装是否成功 测试项目运行   发布我们的项目到Linux 安装Nginx 配置防火墙 配置Nginx对ASP.net Core 应用的转发 Supervisor 守护服务

【无私分享:ASP.NET CORE 项目实战】目录索引

 

简介

  

  ASP.Net Core 给我们带来的最大的亮点就是跨平台,我在我电脑(win7)上用虚拟机建了个 CentOS7 ,来演示下,我们windows上的项目如何发布项目到Linux上运行。我这里有个在windows上搭建过的程序,我们主要演示如何在linux上运行,所以大家不要纠结于这些,大家可以新建一个web项目尝试一下。

  

安装.NET Core SDK for CentOS

   一、.Netcore 1.0 微软有详细的安装命令,可以参考 Install .NET Core SDK

  ① 安装 libicu 依赖: sudo yum install libunwind libicu

  【无私分享:ASP.NET CORE 项目实战(第十章)】发布项目到 Linux 上运行 Core 项目
目录索引 
简介
安装.NET Core SDK for CentOS
测试安装是否成功
测试项目运行
 
发布我们的项目到Linux
安装Nginx
配置防火墙
配置Nginx对ASP.net Core 应用的转发
Supervisor 守护服务

  安装成功:

  【无私分享:ASP.NET CORE 项目实战(第十章)】发布项目到 Linux 上运行 Core 项目
目录索引 
简介
安装.NET Core SDK for CentOS
测试安装是否成功
测试项目运行
 
发布我们的项目到Linux
安装Nginx
配置防火墙
配置Nginx对ASP.net Core 应用的转发
Supervisor 守护服务

    ② 下载 SDK 压缩包:curl -sSL -o dotnet.tar.gz https://go.microsoft.com/fwlink/?LinkID=809131

   【无私分享:ASP.NET CORE 项目实战(第十章)】发布项目到 Linux 上运行 Core 项目
目录索引 
简介
安装.NET Core SDK for CentOS
测试安装是否成功
测试项目运行
 
发布我们的项目到Linux
安装Nginx
配置防火墙
配置Nginx对ASP.net Core 应用的转发
Supervisor 守护服务

  ③ 解压缩:sudo mkdir -p /opt/dotnet && sudo tar zxf dotnet.tar.gz -C /opt/dotnet

  【无私分享:ASP.NET CORE 项目实战(第十章)】发布项目到 Linux 上运行 Core 项目
目录索引 
简介
安装.NET Core SDK for CentOS
测试安装是否成功
测试项目运行
 
发布我们的项目到Linux
安装Nginx
配置防火墙
配置Nginx对ASP.net Core 应用的转发
Supervisor 守护服务

  ④ 创建连接:sudo ln -s /opt/dotnet/dotnet /usr/local/bin

  【无私分享:ASP.NET CORE 项目实战(第十章)】发布项目到 Linux 上运行 Core 项目
目录索引 
简介
安装.NET Core SDK for CentOS
测试安装是否成功
测试项目运行
 
发布我们的项目到Linux
安装Nginx
配置防火墙
配置Nginx对ASP.net Core 应用的转发
Supervisor 守护服务

   二、.Netcore 2.0 微软有详细的安装命令,可以参考 Install .NET Core SDK

(注意:安全之前要删除旧的 .net core 版本 删除home目录下的dotnet)

注册 Microsoft 签名密钥:sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc

添加 Microsoft 产品源:sudo sh -c 'echo -e "[packages-microsoft-com-prod] name=packages-microsoft-com-prod baseurl=https://packages.microsoft.com/yumrepos/microsoft-rhel7.3-prod enabled=1 gpgcheck=1 gpgkey=https://packages.microsoft.com/keys/microsoft.asc" > /etc/yum.repos.d/dotnetdev.repo'

  更新:sudo yum update

  安装 libicu 依赖: sudo yum install libunwind libicu

  安装sdk: sudo yum install dotnet-sdk-2.1.4

     将 dotnet 添加到 PATH:export PATH=$PATH:$HOME/dotnet

dotnet --version

三、NetCore 2.1.1

The specified framework 'Microsoft.AspNetCore.App', version '2.1.1' was not found.

注册源:

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

 安装SDK

sudo yum update
sudo yum install aspnetcore-runtime-2.1

测试安装是否成功

  通过 dotnet --info  来查看一下,出现如下界面,表示成功:

  【无私分享:ASP.NET CORE 项目实战(第十章)】发布项目到 Linux 上运行 Core 项目
目录索引 
简介
安装.NET Core SDK for CentOS
测试安装是否成功
测试项目运行
 
发布我们的项目到Linux
安装Nginx
配置防火墙
配置Nginx对ASP.net Core 应用的转发
Supervisor 守护服务

测试项目运行

  注意:不熟悉Linux的朋友请注意,Liunx下路径是区分目录大小写的。

  ① 新建一个目录:mkdir TestApp

  【无私分享:ASP.NET CORE 项目实战(第十章)】发布项目到 Linux 上运行 Core 项目
目录索引 
简介
安装.NET Core SDK for CentOS
测试安装是否成功
测试项目运行
 
发布我们的项目到Linux
安装Nginx
配置防火墙
配置Nginx对ASP.net Core 应用的转发
Supervisor 守护服务

  ② 进入目录:cd TestApp

  【无私分享:ASP.NET CORE 项目实战(第十章)】发布项目到 Linux 上运行 Core 项目
目录索引 
简介
安装.NET Core SDK for CentOS
测试安装是否成功
测试项目运行
 
发布我们的项目到Linux
安装Nginx
配置防火墙
配置Nginx对ASP.net Core 应用的转发
Supervisor 守护服务

  ③ 新建一个默认的 web 项目:dotnet new -t web

  【无私分享:ASP.NET CORE 项目实战(第十章)】发布项目到 Linux 上运行 Core 项目
目录索引 
简介
安装.NET Core SDK for CentOS
测试安装是否成功
测试项目运行
 
发布我们的项目到Linux
安装Nginx
配置防火墙
配置Nginx对ASP.net Core 应用的转发
Supervisor 守护服务

  ④ 还原包:dotnet restore

  这个时间可能比较长,看网速了,大家要耐心等待。

  【无私分享:ASP.NET CORE 项目实战(第十章)】发布项目到 Linux 上运行 Core 项目
目录索引 
简介
安装.NET Core SDK for CentOS
测试安装是否成功
测试项目运行
 
发布我们的项目到Linux
安装Nginx
配置防火墙
配置Nginx对ASP.net Core 应用的转发
Supervisor 守护服务

  ⑤ 我们来运行一下:dotnet run

  【无私分享:ASP.NET CORE 项目实战(第十章)】发布项目到 Linux 上运行 Core 项目
目录索引 
简介
安装.NET Core SDK for CentOS
测试安装是否成功
测试项目运行
 
发布我们的项目到Linux
安装Nginx
配置防火墙
配置Nginx对ASP.net Core 应用的转发
Supervisor 守护服务

 

发布我们的项目到Linux

  大家可以使用Ftp等方式将文件发布到服务器上,我这里直接发布到本地文件夹中,然后通过FileZilla 发送到服务器上。

  发布项目的方式有多种,比如可以使用 dotnet publish 命令,我们这里使用 VS :

  首先,我们打开 Project.json 来添加几个发布的运行时(这一步可以不要,如果不配置这里,那么发布的时候是 Any,我们待会讲到

  【无私分享:ASP.NET CORE 项目实战(第十章)】发布项目到 Linux 上运行 Core 项目
目录索引 
简介
安装.NET Core SDK for CentOS
测试安装是否成功
测试项目运行
 
发布我们的项目到Linux
安装Nginx
配置防火墙
配置Nginx对ASP.net Core 应用的转发
Supervisor 守护服务

  

  然后,右击我们的项目,选择发布:

  【无私分享:ASP.NET CORE 项目实战(第十章)】发布项目到 Linux 上运行 Core 项目
目录索引 
简介
安装.NET Core SDK for CentOS
测试安装是否成功
测试项目运行
 
发布我们的项目到Linux
安装Nginx
配置防火墙
配置Nginx对ASP.net Core 应用的转发
Supervisor 守护服务

  新建一个发布配置文件,发布方法选择 文件系统

  【无私分享:ASP.NET CORE 项目实战(第十章)】发布项目到 Linux 上运行 Core 项目
目录索引 
简介
安装.NET Core SDK for CentOS
测试安装是否成功
测试项目运行
 
发布我们的项目到Linux
安装Nginx
配置防火墙
配置Nginx对ASP.net Core 应用的转发
Supervisor 守护服务

  设置里,我们选择目标运行时:centos.7-x64在上面,我们讲到 Project.json 里添加了 几个运行时,如果没有那一步,那么这里 没有选项,只有一个 Any

  【无私分享:ASP.NET CORE 项目实战(第十章)】发布项目到 Linux 上运行 Core 项目
目录索引 
简介
安装.NET Core SDK for CentOS
测试安装是否成功
测试项目运行
 
发布我们的项目到Linux
安装Nginx
配置防火墙
配置Nginx对ASP.net Core 应用的转发
Supervisor 守护服务

  然后点击发布,我们把发布完的文件上传到CentOS上:我放到了 Wwwroot 目录下

  【无私分享:ASP.NET CORE 项目实战(第十章)】发布项目到 Linux 上运行 Core 项目
目录索引 
简介
安装.NET Core SDK for CentOS
测试安装是否成功
测试项目运行
 
发布我们的项目到Linux
安装Nginx
配置防火墙
配置Nginx对ASP.net Core 应用的转发
Supervisor 守护服务

  

  我们来编译我们的文件:dotnet XXX.dll

  这里先为大家演示一个 错误 :我的 wkmvc.dll 是在 Wwwroot 目录下的 ,所以 我执行命令(注意路径大小写,Linux区分大小写,我们上面提到) dotnet Wwwroot/wkmvc.dll

  【无私分享:ASP.NET CORE 项目实战(第十章)】发布项目到 Linux 上运行 Core 项目
目录索引 
简介
安装.NET Core SDK for CentOS
测试安装是否成功
测试项目运行
 
发布我们的项目到Linux
安装Nginx
配置防火墙
配置Nginx对ASP.net Core 应用的转发
Supervisor 守护服务

  

  显示成功了,我们打开浏览器,输入 localhost:5000

  【无私分享:ASP.NET CORE 项目实战(第十章)】发布项目到 Linux 上运行 Core 项目
目录索引 
简介
安装.NET Core SDK for CentOS
测试安装是否成功
测试项目运行
 
发布我们的项目到Linux
安装Nginx
配置防火墙
配置Nginx对ASP.net Core 应用的转发
Supervisor 守护服务

  是空白的,我们修改一下我们的程序,输出一下日志看看:

  【无私分享:ASP.NET CORE 项目实战(第十章)】发布项目到 Linux 上运行 Core 项目
目录索引 
简介
安装.NET Core SDK for CentOS
测试安装是否成功
测试项目运行
 
发布我们的项目到Linux
安装Nginx
配置防火墙
配置Nginx对ASP.net Core 应用的转发
Supervisor 守护服务

  这是什么原因呢?为什么没找到Index.cshtml呢?请大家再次注意一下 我们的 Content root path,答案是 她没有对 root 的操作权限的,我们来对比一下 我们安装过程中 测试成功的 web  和 我们这个 web 的 Content root path

  【无私分享:ASP.NET CORE 项目实战(第十章)】发布项目到 Linux 上运行 Core 项目
目录索引 
简介
安装.NET Core SDK for CentOS
测试安装是否成功
测试项目运行
 
发布我们的项目到Linux
安装Nginx
配置防火墙
配置Nginx对ASP.net Core 应用的转发
Supervisor 守护服务

  我们来尝试一下:我们进入Wwwroot目录下,然后执行 dotnet wkmvc.dll

  【无私分享:ASP.NET CORE 项目实战(第十章)】发布项目到 Linux 上运行 Core 项目
目录索引 
简介
安装.NET Core SDK for CentOS
测试安装是否成功
测试项目运行
 
发布我们的项目到Linux
安装Nginx
配置防火墙
配置Nginx对ASP.net Core 应用的转发
Supervisor 守护服务

  

  我们再次打开浏览器,输入 localhost:5000

  【无私分享:ASP.NET CORE 项目实战(第十章)】发布项目到 Linux 上运行 Core 项目
目录索引 
简介
安装.NET Core SDK for CentOS
测试安装是否成功
测试项目运行
 
发布我们的项目到Linux
安装Nginx
配置防火墙
配置Nginx对ASP.net Core 应用的转发
Supervisor 守护服务

  是不是 OK 了,我们来进入我们的区域的 登录页 测试一下:

  【无私分享:ASP.NET CORE 项目实战(第十章)】发布项目到 Linux 上运行 Core 项目
目录索引 
简介
安装.NET Core SDK for CentOS
测试安装是否成功
测试项目运行
 
发布我们的项目到Linux
安装Nginx
配置防火墙
配置Nginx对ASP.net Core 应用的转发
Supervisor 守护服务

  

  也没有问题,到此,项目就运行成功了,但是在实际中,我们可能还要安装 nginx 、配置我们的 FireWall 以及配置守护服务 Supervisor 等等,这里就不演示了。

  

  既然大家不是很了解,或者网上找资料比较繁琐,对于 nginx firewall 以及 supervisor 的配置,我就再一步一步给大家演示一下。

安装Nginx

  Nginx 的安装比较简单,就三条命令:

  ① curl -o  nginx.rpm http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm

   【无私分享:ASP.NET CORE 项目实战(第十章)】发布项目到 Linux 上运行 Core 项目
目录索引 
简介
安装.NET Core SDK for CentOS
测试安装是否成功
测试项目运行
 
发布我们的项目到Linux
安装Nginx
配置防火墙
配置Nginx对ASP.net Core 应用的转发
Supervisor 守护服务

  rpm -ivh nginx.rpm

  【无私分享:ASP.NET CORE 项目实战(第十章)】发布项目到 Linux 上运行 Core 项目
目录索引 
简介
安装.NET Core SDK for CentOS
测试安装是否成功
测试项目运行
 
发布我们的项目到Linux
安装Nginx
配置防火墙
配置Nginx对ASP.net Core 应用的转发
Supervisor 守护服务

  

  ③ yum install nginx

 【无私分享:ASP.NET CORE 项目实战(第十章)】发布项目到 Linux 上运行 Core 项目
目录索引 
简介
安装.NET Core SDK for CentOS
测试安装是否成功
测试项目运行
 
发布我们的项目到Linux
安装Nginx
配置防火墙
配置Nginx对ASP.net Core 应用的转发
Supervisor 守护服务

   启动 Nginx:systemctl start nginx 

  设置开机启动(linux宕机、重启会自动运行nginx不需要连上去输入命令):systemctl enable nginx

 

   【无私分享:ASP.NET CORE 项目实战(第十章)】发布项目到 Linux 上运行 Core 项目
目录索引 
简介
安装.NET Core SDK for CentOS
测试安装是否成功
测试项目运行
 
发布我们的项目到Linux
安装Nginx
配置防火墙
配置Nginx对ASP.net Core 应用的转发
Supervisor 守护服务

配置防火墙

  ① 开放80端口:firewall-cmd --zone=public --add-port=80/tcp --permanent

  ② 重启防火墙以使配置即时生效:systemctl restart firewalld

   

  【无私分享:ASP.NET CORE 项目实战(第十章)】发布项目到 Linux 上运行 Core 项目
目录索引 
简介
安装.NET Core SDK for CentOS
测试安装是否成功
测试项目运行
 
发布我们的项目到Linux
安装Nginx
配置防火墙
配置Nginx对ASP.net Core 应用的转发
Supervisor 守护服务

  我们来测试一下Nginx是否可以访问:

  【无私分享:ASP.NET CORE 项目实战(第十章)】发布项目到 Linux 上运行 Core 项目
目录索引 
简介
安装.NET Core SDK for CentOS
测试安装是否成功
测试项目运行
 
发布我们的项目到Linux
安装Nginx
配置防火墙
配置Nginx对ASP.net Core 应用的转发
Supervisor 守护服务

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

  修改 Nginx 的 default.conf 文件(目录:/etc/nginx/conf.d/default.conf

  

  将内容替换为(配置Nginx转发):

  

  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;
      }
  }

  上传覆盖default.conf文件

  重新加载,即时生效:nginx -s reload 

  我们来测试一下:

  【无私分享:ASP.NET CORE 项目实战(第十章)】发布项目到 Linux 上运行 Core 项目
目录索引 
简介
安装.NET Core SDK for CentOS
测试安装是否成功
测试项目运行
 
发布我们的项目到Linux
安装Nginx
配置防火墙
配置Nginx对ASP.net Core 应用的转发
Supervisor 守护服务

  【无私分享:ASP.NET CORE 项目实战(第十章)】发布项目到 Linux 上运行 Core 项目
目录索引 
简介
安装.NET Core SDK for CentOS
测试安装是否成功
测试项目运行
 
发布我们的项目到Linux
安装Nginx
配置防火墙
配置Nginx对ASP.net Core 应用的转发
Supervisor 守护服务

  这是什么鬼?这个问题是由于SELinux保护机制所导致,我们需要将nginx添加至SELinux的白名单。

  我们通过命令来解决这个问题:

  ① yum install policycoreutils-python

  【无私分享:ASP.NET CORE 项目实战(第十章)】发布项目到 Linux 上运行 Core 项目
目录索引 
简介
安装.NET Core SDK for CentOS
测试安装是否成功
测试项目运行
 
发布我们的项目到Linux
安装Nginx
配置防火墙
配置Nginx对ASP.net Core 应用的转发
Supervisor 守护服务

 

  ② sudo cat /var/log/audit/audit.log | grep nginx | grep denied | audit2allow -M mynginx

  

  【无私分享:ASP.NET CORE 项目实战(第十章)】发布项目到 Linux 上运行 Core 项目
目录索引 
简介
安装.NET Core SDK for CentOS
测试安装是否成功
测试项目运行
 
发布我们的项目到Linux
安装Nginx
配置防火墙
配置Nginx对ASP.net Core 应用的转发
Supervisor 守护服务

  ③ sudo semodule -i mynginx.pp

  我们再次尝试访问:

  【无私分享:ASP.NET CORE 项目实战(第十章)】发布项目到 Linux 上运行 Core 项目
目录索引 
简介
安装.NET Core SDK for CentOS
测试安装是否成功
测试项目运行
 
发布我们的项目到Linux
安装Nginx
配置防火墙
配置Nginx对ASP.net Core 应用的转发
Supervisor 守护服务

Supervisor 守护服务

  为什么要这个玩意呢?

  我们先来看下我们存在的问题:① 我们在上面演示中,运行我们的应用都是通过 dotnet  ***.dll 或者 dotnet run ,也就是我们的 ASP.NET Core应用程序运行在shell之中,如果关闭shell则会发现ASP.NET Core应用被关闭,从而导

                  致应用无法访问。

                 ② 如果ASP.NET Core进程意外终止那么需要人为连进shell进行再次启动。

                 ③ 如果服务器宕机或需要重启我们则还是需要连入shell进行启动。

  那么要解决这些问题,我们就必须要实现这么一个功能:如果ASP.NET Core 意外终止,那么我们要自动重启;如果服务器服务器重启后,我们要有个类似脚本命令一样,自动执行 dotnet 命令。

  现在正好有个基于 Python 开发的工具 Supervisor 可以解决我们上述问题:

  安装Supervisor

    1.1:yum install python-setuptools

【无私分享:ASP.NET CORE 项目实战(第十章)】发布项目到 Linux 上运行 Core 项目
目录索引 
简介
安装.NET Core SDK for CentOS
测试安装是否成功
测试项目运行
 
发布我们的项目到Linux
安装Nginx
配置防火墙
配置Nginx对ASP.net Core 应用的转发
Supervisor 守护服务

    1.2:easy_install supervisor

【无私分享:ASP.NET CORE 项目实战(第十章)】发布项目到 Linux 上运行 Core 项目
目录索引 
简介
安装.NET Core SDK for CentOS
测试安装是否成功
测试项目运行
 
发布我们的项目到Linux
安装Nginx
配置防火墙
配置Nginx对ASP.net Core 应用的转发
Supervisor 守护服务

   ② 配置Supervisor

   mkdir /etc/supervisor

   echo_supervisord_conf > /etc/supervisor/supervisord.conf  

  ③ 配置 Supervisor 对 Asp.net Core 应用的守护

  这里有个重要说明:很多文档包括微软的官方文档都是 在/etc/supervisor 目录下 新建一个目录 conf.d  然后在conf.d 目录下新建一个conf文件,将下面这段代码放到这个文件里,然后修改 /etc/supervisor/supervisord.conf的最后一行 [include] files= relative/directory/*.ini 修改为 [include] files = /etc/supervisor/conf.d/*.conf,但是我一直没有成功,尝试了各种办法,排查了各种错误,都没有成功,所以,我直接写在了/etc/supervisor/supervisord.conf里(如下),成功了,所以,大家可以尝试以下上述。

  

  修改 supervisord.conf 文件(目录:/etc/supervisor/supervisord.conf),添加程序:

  [program:wkmvc]

  command=dotnet /root/Wwwroot/wkmvc.dll
  directory=/root/Wwwroot/
  autostart=true
  autorestart=true
  stderr_logfile=/var/log/wkmvc.err.log
  stdout_logfile=/var/log/wkmvc.out.log
  environment=ASPNETCORE_ENVIRONMENT=Production
  user=root
  stopsignal=INT

  

  如果服务已经启动,则需要使用 supervisorctl reload 命令来使新的配置生效,当然,我们这里并没有启动,所以不需要这一步。

  执行:  

  supervisord -c /etc/supervisor/supervisord.conf

  启动服务,然后我们来看下:

  ps -ef | grep wkmvc

 

   【无私分享:ASP.NET CORE 项目实战(第十章)】发布项目到 Linux 上运行 Core 项目
目录索引 
简介
安装.NET Core SDK for CentOS
测试安装是否成功
测试项目运行
 
发布我们的项目到Linux
安装Nginx
配置防火墙
配置Nginx对ASP.net Core 应用的转发
Supervisor 守护服务

  

  配置Supervisor开机启动

  新建一个“supervisord.service”文件 

  # dservice 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 shutdown
  ExecReload=/usr/bin/supervisorctl reload
  KillMode=process
  Restart=on-failure
  RestartSec=42s

  [Install]
  WantedBy=multi-user.target

  将文件拷贝至:“/usr/lib/systemd/system/supervisord.service”

  systemctl enable supervisord

  【无私分享:ASP.NET CORE 项目实战(第十章)】发布项目到 Linux 上运行 Core 项目
目录索引 
简介
安装.NET Core SDK for CentOS
测试安装是否成功
测试项目运行
 
发布我们的项目到Linux
安装Nginx
配置防火墙
配置Nginx对ASP.net Core 应用的转发
Supervisor 守护服务

  验证一下是否为开机启动:systemctl is-enabled supervisord

   【无私分享:ASP.NET CORE 项目实战(第十章)】发布项目到 Linux 上运行 Core 项目
目录索引 
简介
安装.NET Core SDK for CentOS
测试安装是否成功
测试项目运行
 
发布我们的项目到Linux
安装Nginx
配置防火墙
配置Nginx对ASP.net Core 应用的转发
Supervisor 守护服务

 

希望跟大家一起学习Asp.net Core 

刚开始接触,水平有限,很多东西都是自己的理解和翻阅网上大神的资料,如果有不对的地方和不理解的地方,希望大家指正!

虽然Asp.net Core 现在很火热,但是网上的很多资料都是前篇一律的复制,所以有很多问题我也暂时没有解决,希望大家能共同帮助一下!

 

原创文章 转载请尊重劳动成果 http://yuangang.cnblogs.com