概述

本文记录了如何为 Linux 服务器搭建 .Net Core 环境,并将 ASP.NET Core 网站项目部署到服务器上,并使用 Nginx 作为反向代理服务器,借助 Supervisor 实现项目的进程管理。

Title


一、项目配置与发布

1. 项目配置(可选)

ASP.Net Core 项目默认侦听 5000 端口,若出现端口占用,可进行此步骤来自定义端口。

1.1 配置文件

在项目根目录下新增配置文件 hosting.json,其中 8080 为示例的自定义端口号:

{
  "server.urls": "http://*:8080"
}

1.2 修改 Program.cs

public static void Main(string[] args)
        {
            //CreateHostBuilder(args).Build().Run();
            var config = new ConfigurationBuilder()
                .SetBasePath(Directory.GetCurrentDirectory())
                .AddJsonFile("hosting.json", optional: true)
                .Build();
            WebHost.CreateDefaultBuilder(args)
                .UseConfiguration(config)
                .UseStartup<Startup>()
                .Build()
                .Run();
        }

2. 项目发布

在解决方案资源管理器中右键你的项目,选择 发布,使用文件夹模式进行发布,找到发布生成的 publish 文件夹,将其中的内容通过 Xftp 或其他方式上传至服务器上对应的项目空目录中。

Title

二、搭建 .Net Core 环境

1. 注册 Microsoft 签名密钥

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

2. 安装 .Net SDK

#验证 yum
sudo yum update
#安装 .Net Core
sudo yum install dotnet-sdk-3.1 -y

3. 验证安装结果

dotnet --version

Title

三、Nginx 安装与配置

nginx 用来做反向代理,nginx 监听 80 端口,当通过 url 访问服务器请求 80 端口时,会通过 nginx 结合访问的域名来转发到对应项目的自定义端口。

1. 安装 Nginx

点击链接 epel-release-7-12.noarch.rpm 直接下载,

或自己前往 https://dl.fedoraproject.org/pub/epel 下载需要的版本 epel 并上传到服务器,在存放 epel rpm 包的目录下依次使用以下命令完成安装:

# 安装epel
rpm -ivh epel-release-7-9.noarch.rpm
# 安装nginx
yum install nginx
# 启动nginx
systemctl start nginx

可使用下面的命令测试 Nginx 是否运行正常:

curl http://127.0.0.1

2. 配置 Nginx

Nginx 的配置文件默认位置为 /etc/nginx/nginx.conf,根据自身需要完成配置,下面是我的配置参考:

server {
        listen       80;
        server_name  此处为你的域名;
        root         /usr/share/nginx/html;

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

        location / {
            proxy_pass http://localhost:此处为你的项目监听端口;
        }

        error_page 404 /404.html;
            location = /40x.html {
        }

        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
    }

配置完成后重载配置文件:

nginx -s reload

启用 nginx 开机自动启动:

systemctl enable nginx service

四、启动网站

至此,你的网站已经可以启动并从外网访问了。关于启动方式,你可以在 Xshell 会话窗口中,进入之前发布到服务器上的项目目录,通过命令 dotnet 你的项目名.dll 来启动网站,但是这样只要 Ctrl + C 或断开会话连接,项目进程就被结束了,因此可以用来做临时测试。若要使网站持续运行下去,可以使用下面两种方法之一。

nohup 启动

nohup dotnet 你的项目名.dll

这样一来你的网站就跑起来了,并且断开会话进程也不会被关闭,简单和无需进行配置就是它的优点,但若是想要关闭就麻烦了,需要 ps -ef | grep dotnet 找到对应的进程 id 再将其 kill。另外一个缺点是,如果服务器重启,或者你的项目出现错误意外退出了,那么你的项目是不会自动重新启动的。因此你若介意的话,还是推荐下面一种方法。

Supervisor 守护

Supervisor 是微软推荐的一个进程管理工具,可以让指定程序在后台运行,并且在进程异常退出时将自动重启它。

安装 supervisor

yum install python-setuptools
easy_install supervisor

配置 supervisor

mkdir /etc/supervisor
echo_supervisord_conf > /etc/supervisor/supervisord.conf
mkdir /etc/supervisor/conf.d
  • 修改 supervisor.conf 文件尾部的 include 部分如下:
;[include]
;files = conf.d/*.conf
  • 在 /etc/supervisor/conf.d 目录下为项目创建配置文件:vim /etc/supervisor/conf.d/你的项目名.conf
[program:你的项目名]
command=dotnet 你的项目名.dll 
directory=你的项目目录
autorestart=true
stderr_logfile=/var/log/你的项目名.err.log
stdout_logfile=/var/log/你的项目名.out.log 
environment=ASPNETCORE_ENVIRONMENT=Production 
user=root
stopsignal=INT
  • 启动配置文件:
supervisord -c /etc/supervisor/supervisord.conf

相关命令

  • 重载配置文件

    supervisorctl reload
    
  • 查看守护的所有进程状态

    supervisorctl status all
    
  • 关闭所有守护进程

    supervisorctl stop all
    

至此,ASP.NET Core 项目部署就完成了。