如何将 ASP.NET Core 项目部署到 Linux

概述

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

Title


一、项目配置与发布

1. 项目配置(可选)

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

1.1 配置文件

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

1
2
3
{
"server.urls": "http://*:8080"
}

1.2 修改 Program.cs

1
2
3
4
5
6
7
8
9
10
11
12
13
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 签名密钥

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

2. 安装 .Net SDK

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

3. 验证安装结果

1
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 包的目录下依次使用以下命令完成安装:

1
2
3
4
5
6
# 安装epel
rpm -ivh epel-release-7-9.noarch.rpm
# 安装nginx
yum install nginx
# 启动nginx
systemctl start nginx

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

1
curl http://127.0.0.1

2. 配置 Nginx

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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 {
}
}

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

1
nginx -s reload

启用 nginx 开机自动启动:

1
systemctl enable nginx service

四、启动网站

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

nohup 启动

1
nohup dotnet 你的项目名.dll

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

Supervisor 守护

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

安装 supervisor

1
2
yum install python-setuptools
easy_install supervisor

配置 supervisor

1
2
3
mkdir /etc/supervisor
echo_supervisord_conf > /etc/supervisor/supervisord.conf
mkdir /etc/supervisor/conf.d
  • 修改 supervisor.conf 文件尾部的 include 部分如下:
1
2
;[include]
;files = conf.d/*.conf
  • 在 /etc/supervisor/conf.d 目录下为项目创建配置文件:vim /etc/supervisor/conf.d/你的项目名.conf
1
2
3
4
5
6
7
8
9
[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
  • 启动配置文件:
1
supervisord -c /etc/supervisor/supervisord.conf

相关命令

  • 重载配置文件

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

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

    1
    supervisorctl stop all

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

如果你觉得文章内容对你有帮助,可以打赏支持一下哦!

0%