ASP.NET Core 部署到 Ubuntu
ASP.NET Core 部署到 Ubuntu
本文内容主要来自微软 MVP solenovex 的系列视频 ASP.NET Core MVC 入门教程 (共9集) 中的第 9 集,部署到Ubuntu (Nginx, 监控, HTTPS),视频教程提供了示例代码 ASP.NET-Core-Getting-Started 以及 PPT,托管在 GitHub 上。
我的学习环境为本地新安装的 Ubuntu Server 16.04 LTS 虚拟机,SSH 客户端是 Bitvise SSH Client。操作基本和视频所说一致,因为我是看完全集视频后再操作,可能顺序上有所调整,以及软件 版本上也有差别,但不会有太大影响。
如果你是初学者,也可以一步一步跟着视频操作一遍,因为编程除了知识还包括技能。
安装 .NET Core
.NET Core 包括 SDK 和 Runtime ,因为需要在服务器上通过源码发布,所以这里只需要安装 SDK 就可以了,SDK 可以编译和运行应用,Runtime 只能运行,SDK 包含 Runtime。当前的 .NET Core 版本为 2.2,可以在 .NET Core 官网找到安装步骤
-
Register Microsoft key and feed
wget -q https://packages.microsoft.com/config/ubuntu/16.04/packages-microsoft-prod.deb sudo dpkg -i packages-microsoft-prod.deb
-
Install the .NET SDK
sudo apt-get install apt-transport-https sudo apt-get update sudo apt-get install dotnet-sdk-2.2
安装 Git
apt-get install git
安装 Node.js
通过 package manager 的方式安装 Node.js,选择Node.js v10.x 版本。
curl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash -
sudo apt-get install -y nodejs
安装 Nginx
sudo apt-get update
sudo apt-get install nginx
下载源码
git clone https://github.com/solenovex/ASP.NET-Core-Getting-Started.git
安装前端库
用cd
命令导航到源码的/CoreDemo
目录,安装前端库
sudo npm install
发布项目
用 -c
参数指定发布为“Release”版本
sudo dotnet publish -c Release
发布好的文件可以复制到一个自定义的目录,以下是我本机的路径:
sudo cp -r publish/* /home/jeetchan/website/coredomo
Note:这一步会发生一个错误,说是“popper.js”找不到,根据提示修改“bundleconfig.json”文件即可,如果对 Vim 不太熟悉,可以在 Windows 中修改好再覆盖到原文件。
配置 Nginx
先备份 /etc/nginx/sites-available/default 文件,修改为 default_old,然后再创建 default 文件
mv default default_old
vim default
然后输入以下内容,记得修改 server_name 一项,因为是本地服务器,我修改为服务器的 IP:
server {
listen 80;
server_name example.com *.example.com;
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;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
修改配置文件后用nginx -t
检查文件,最后重新加载配置文件nginx -s reload
。
配置监视应用
-
创建服务
vim /etc/systemd/system/kestrel-coredemo.service
-
修改服务文件,注意根据实际情况修改 WorkingDirectory 和 ExecStart 两项的值:
[Unit] Description=Example .NET Web API App running on Ubuntu [Service] WorkingDirectory=/var/www/helloapp ExecStart=/usr/bin/dotnet /var/www/helloapp/helloapp.dll Restart=always # Restart service after 10 seconds if the dotnet service crashes: RestartSec=10 KillSignal=SIGINT SyslogIdentifier=dotnet-example User=www-data Environment=ASPNETCORE_ENVIRONMENT=Production Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false [Install] WantedBy=multi-user.target
-
启动服务
sudo systemctl enable kestrel-helloapp.service
-
启用该服务,并确认它正在运行。
sudo systemctl start kestrel-helloapp.service sudo systemctl status kestrel-helloapp.service
配置 HTTPS 证书
这一部分由于我没有一个公网的服务器和域名,所以暂时省略。如果有公网服务器和域名,可以在certbot申请配置。
运行效果