本文记录了如何为 Linux 服务器搭建 .Net Core 环境,并将 ASP.NET Core 网站项目部署到服务器上,并使用 Nginx 作为反向代理服务器,借助 Supervisor 实现项目的进程管理。
原文链接:如何将 ASP.NET Core 项目部署到 Linux
ASP.Net Core 项目默认侦听 5000 端口,若出现端口占用,可进行此步骤来自定义端口。
在项目根目录下新增配置文件 hosting.json,其中 8080 为示例的自定义端口号:
{
"server.urls": "http://*:8080"
}
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();
}
在解决方案资源管理器中右键你的项目,选择 发布,使用文件夹模式进行发布,找到发布生成的 publish 文件夹,将其中的内容通过 Xftp 或其他方式上传至服务器上对应的项目空目录中。
sudo rpm -Uvh https://packages.microsoft.com/config/rhel/7/packages-microsoft-prod.rpm
#验证 yum
sudo yum update
#安装 .Net Core
sudo yum install dotnet-sdk-3.1 -y
dotnet --version
nginx 用来做反向代理,nginx 监听 80 端口,当通过 url 访问服务器请求 80 端口时,会通过 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
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 dotnet 你的项目名.dll
这样一来你的网站就跑起来了,并且断开会话进程也不会被关闭,简单和无需进行配置就是它的优点,但若是想要关闭就麻烦了,需要 ps -ef | grep dotnet
找到对应的进程 id 再将其 kill。另外一个缺点是,如果服务器重启,或者你的项目出现错误意外退出了,那么你的项目是不会自动重新启动的。因此你若介意的话,还是推荐下面一种方法。
Supervisor 是微软推荐的一个进程管理工具,可以让指定程序在后台运行,并且在进程异常退出时将自动重启它。
yum install python-setuptools
easy_install supervisor
mkdir /etc/supervisor
echo_supervisord_conf > /etc/supervisor/supervisord.conf
mkdir /etc/supervisor/conf.d
;[include]
;files = conf.d/*.conf
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 项目部署就完成了。