DevOps 在Ubuntu 18.04上使用Nginx部署ASP.NET Core Web应用

wanana · December 11, 2019 · 62 hits

Sugarman's Avatar 2019-07-04 Nginx Views

分享本文

一、准备工作

  • 一台 Ubuntu 18.04 服务器
  • 能够使用 sudo 的账户或者 root 账户
  • 打开了 80 端口
  • 一个 ASP.NET Core 项目

二、项目发布并上传

发布 ASP.NET Core 项目到本地

发布目标选择文件系统,部署模式选择框架依赖,目标运行时选择 linux-x64

By the way,.NET Core 的运行时,对于 Linux 仅支持 64 位,32 位的 Linux 上找不到对应安装包。

点击发布,发布成功后,找到目标文件夹,将整个文件夹上传至 Ubuntu。

这里使用终端工具 MobaXterm 来上传,新建一个 SFTP 的 Session,输入服务器地址,用户名和密码

建议在/var 目录下新建一个 www 目录,将发布好的文件夹放在 www 目录下

三、安装 Nginx

在 Ubuntu 上安装 Nginx

1
2
3
4
5
6

sudo apt-get install nginx
#启动Nginx
sudo service nginx start
#查看Nginx版本
nginx -v

访问http://server_IP_address/index.nginx-debian.html

将 server_IP_address 替换为服务器地址,如果能看到 Welcome Ngnix 相关字样,代表 Nginx 安装成功

四、安装.NET CORE 运行时

安装前,需要注册 Microsoft key 和软件仓库,并安装所需依赖项,每台机器只需完成一次此操作

1
2
wget -q https://packages.microsoft.com/config/ubuntu/16.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb

然后安装.NET CORE 运行时

1
2
3
4
5
6
sudo apt-get install apt-transport-https
sudo apt-get update
#目前运行时最新版是2.2
sudo apt-get install aspnetcore-runtime-2.2
#查看运行时版本
dotnet --version

也可以通过二进制文件安装,访问https://dotnet.microsoft.com/download/dotnet-core

可以但没必要

cd 到刚才上传的目录,直接运行.NET Core 应用程序

1
2
#xxx是你项目(解决方案)名称
dotnet xxx.dll

五、创建.NET Core 服务

如果可以运行成功,就直接创建成服务

1
2
#服务名称自定义
vi /etc/systemd/system/kestrel-mywebsite.service

键入以下内容

1
2
3
4
5
6
7
8
9
10
11
12
13
[Unit]
Description=MyWebSite a .NET Core Web App running on Ubuntu
[Service]
WorkingDirectory=/var/www/MyWebSite
ExecStart=/usr/bin/dotnet /var/www/MyWebSite/MyWebSite.dll
Restart=always
RestartSec=10
SyslogIdentifier=dotnet-mywebsite
User=root
Environment=ASPNETCORE_ENVIRONMENT=Production
Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false
[Install]
WantedBy=multi-user.target

其中,WorkingDirectory 和 ExecStart 替换成自己的上传目录和 dll,RestartSec 为该服务崩溃后重启前等待秒,SyslogIdentifier 为系统日志标识符,User 为启动用户

保存并启用服务

1
2
3
4
5
6
7
8
9
10
#开机启动.NET服务
sudo systemctl enable kestrel-mywebsite.service
#启动.NET服务
sudo systemctl start kestrel-mywebsite.service
#检查服务是否正常运行
sudo systemctl status kestrel-mywebsite.service
#检查网站是否正常访问,正常将会返回200
curl -I localhost:5000
#更新重新上传dll需重启服务
systemctl restart kestrel-hellomvc.service

六、配置 Nginx

修改 Nginx 配置文件

1
vi /etc/nginx/sites-enabled/default

修改为

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

1
2
3
4
#检查配置文件错误
nginx -t
#重启nginx
nginx -s reload

访问http://server_IP_address

就能看到部署好的网站了

var dateUpdate = Date.parse("2019-07-05"); var nowDate = new Date(); var a = nowDate.getTime(); var b = a - dateUpdate; var daysUpdateExpire = Math.floor(b/(24*3600*1000)); if (daysUpdateExpire >= 120) { document.getElementById('date-expire-num').innerHTML = daysUpdateExpire; } else { document.getElementById('date-expire-notification').style.display = 'none'; }

No Reply at the moment.
You need to Sign in before reply, if you don't have an account, please Sign up first.