# 概述 > 本文记录了如何为 Linux 服务器搭建 .Net Core 环境,并将 ASP.NET Core 网站项目部署到服务器上,并使用 Nginx 作为反向代理服务器,借助 Supervisor 实现项目的进程管理。 ![Title](/upload/deploy-aspnetcore-app-1.jpg) ---------- # 一、项目配置与发布 ## 1. 项目配置(可选) > ASP.Net Core 项目默认侦听 5000 端口,若出现端口占用,可进行此步骤来自定义端口。 ### 1.1 配置文件 在项目根目录下新增配置文件 hosting.json,其中 8080 为示例的自定义端口号: ```json { "server.urls": "http://*:8080" } ``` ### 1.2 修改 Program.cs ```csharp 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() .Build() .Run(); } ``` ## 2. 项目发布 在解决方案资源管理器中右键你的项目,选择 **发布**,使用文件夹模式进行发布,找到发布生成的 publish 文件夹,将其中的内容通过 Xftp 或其他方式上传至服务器上对应的项目空目录中。 ![Title](/upload/deploy-aspnetcore-app-3.png) # 二、搭建 .Net Core 环境 ## 1. 注册 Microsoft 签名密钥 ```shell sudo rpm -Uvh https://packages.microsoft.com/config/rhel/7/packages-microsoft-prod.rpm ``` ## 2. 安装 .Net SDK ```shell #验证 yum sudo yum update #安装 .Net Core sudo yum install dotnet-sdk-3.1 -y ``` ## 3. 验证安装结果 ```shell dotnet --version ``` ![Title](/upload/deploy-aspnetcore-app-2.png) # 三、Nginx 安装与配置 > nginx 用来做反向代理,nginx 监听 80 端口,当通过 url 访问服务器请求 80 端口时,会通过 nginx 结合访问的域名来转发到对应项目的自定义端口。 ## 1. 安装 Nginx 点击链接 [epel-release-7-12.noarch.rpm](https://dl.fedoraproject.org/pub/epel/7/x86_64/Packages/e/epel-release-7-12.noarch.rpm) 直接下载, 或自己前往 [https://dl.fedoraproject.org/pub/epel](https://dl.fedoraproject.org/pub/epel) 下载需要的版本 epel 并上传到服务器,在存放 epel rpm 包的目录下依次使用以下命令完成安装: ```shell # 安装epel rpm -ivh epel-release-7-9.noarch.rpm # 安装nginx yum install nginx # 启动nginx systemctl start nginx ``` 可使用下面的命令测试 Nginx 是否运行正常: ```shell 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 { } } ``` 配置完成后重载配置文件: ```shell nginx -s reload ``` 启用 nginx 开机自动启动: ```shell systemctl enable nginx service ``` # 四、启动网站 至此,你的网站已经可以启动并从外网访问了。关于启动方式,你可以在 Xshell 会话窗口中,进入之前发布到服务器上的项目目录,通过命令 `dotnet 你的项目名.dll` 来启动网站,但是这样只要 Ctrl + C 或断开会话连接,项目进程就被结束了,因此可以用来做临时测试。若要使网站持续运行下去,可以使用下面两种方法之一。 ## nohup 启动 ```shell nohup dotnet 你的项目名.dll ``` 这样一来你的网站就跑起来了,并且断开会话进程也不会被关闭,简单和无需进行配置就是它的优点,但若是想要关闭就麻烦了,需要 `ps -ef | grep dotnet` 找到对应的进程 id 再将其 kill。另外一个缺点是,如果服务器重启,或者你的项目出现错误意外退出了,那么你的项目是不会自动重新启动的。因此你若介意的话,还是推荐下面一种方法。 ## Supervisor 守护 > Supervisor 是微软推荐的一个进程管理工具,可以让指定程序在后台运行,并且在进程异常退出时将自动重启它。 ### 安装 supervisor ```shell yum install python-setuptools easy_install supervisor ``` ### 配置 supervisor ```shell 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 ``` - 启动配置文件: ```shell supervisord -c /etc/supervisor/supervisord.conf ``` ### 相关命令 - 重载配置文件 ```shell supervisorctl reload ``` - 查看守护的所有进程状态 ```shell supervisorctl status all ``` - 关闭所有守护进程 ```shell supervisorctl stop all ``` **至此,ASP.NET Core 项目部署就完成了。**