ubuntu部署.Net Core3.1(Nginx+pm2)
前言
雖然.NetCore已經出來很久了,但是很多初學者還是不會在linux部署.所以寫一篇初學者在ubuntu下部署Core的全過程,大佬請無視。
環境搭建
- ubuntu18.04
- NetCore3.1
- Nginx
- pm2
.NetCoreSDK安裝
安裝源
wget -q https://packages.microsoft.com/config/ubuntu/18.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb
安裝sdk,具體哪個版本可以根據自己的喜好.
sudo add-apt-repository universe
sudo apt-get install apt-transport-https
sudo apt-get update
sudo apt-get install dotnet-sdk-3.1
安裝完成執行 dotnet --info
命令檢視安裝的SDK資訊
.Nginx安裝
因為.NetCore是自宿主,所以我們需要一個反向代理web伺服器來給我的kestrel做反向代理
安裝命令
sudo apt-get install nginx
啟動命令
sudo service ngnix start
安裝成功後直接訪問伺服器地址,若出現下圖則nginx安裝成功
PM2程序守護安裝
PM2是一個nodejs程序高階工具,用來守護 .NET Core 程序是沒有問題,最主要的原因,它沒有繁瑣的安裝和配置,非常適合初學者。
PM2依賴nodejs,所以我們先需要安裝nodejs。
更新apt-get
apt-get update
安裝node.js
apt-get install nodejs
安裝npm
apt-get install npm
安裝PM2
npm install -g pm2
設定開機啟動
pm2 startup
安裝成功以後使用 pm2 --help
命令來檢查是否安裝成功,出現下圖則安裝成功
有關於pm2的詳細說明可以去看曉晨大佬的文章。傳送門
開始部署
本地新建一個webapi專案,新增一個介面並列印一句話
using Microsoft.AspNetCore.Mvc;
namespace api.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class ValuesController : ControllerBase
{
[HttpGet("print")]
public string Print()
{
return "hello .NetCore";
}
}
}
修改埠為5002。
using Microsoft.AspNetCore;
using Microsoft.AspNetCore.Hosting;
namespace api
{
public class Program
{
public static void Main(string[] args)
{
CreateWebHostBuilder(args).Build().Run();
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseUrls("http://localhost*:5002")
.UseStartup<Startup>();
}
}
釋出我們的專案,然後在ubuntu的home檔案下新建一個api資料夾並把釋出檔案copy到這裡。
使用cd /home/api
命令進入我們釋出資料夾下。
使用 dotnet Api.dll
命令執行我們剛才的專案
可以看到我們的專案已經跑起來啦。我們使用瀏覽器來訪問我們的Api看看是否成功
可以看到我們的介面是可以訪問的,到這裡我們已經完成了在ubuntu上部署一個.NetCore的專案了。
但是我們需要一直在這裡看著這個程式不被關閉嗎?顯然是不可能的,現在就需要pm2登場了,用pm2來守護我們的.netCore 程式。
執行pm2 start "dotnet api.dll" --name api
命令就可以讓pm2來幫助我們守護啦。就是這麼簡單,沒有繁瑣的配置。
使用 pm2 ls
命令可以看到pm2正在守護程式的列表。
那麼問題又來了,直接把服務暴露在外並不是很好的選擇,且無法做負載。所以我們需要配置nginx來給我們的kestrel做反向代理。
執行 vim /etc/nginx/sites-available/default
命令來修改預設的配置檔案,註釋掉原有所有配置,新增如下配置,並儲存。
server {
listen 80;
listen [::]:80;
location / {
proxy_pass http://localhost:5002; //剛才釋出專案的埠
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;
}
}
使用nginx -s reload
命令來優雅重啟nginx,並重新載入配置檔案。
使用80埠來呼叫我們的介面。
可以看到是可以通過80埠去呼叫我們的Api的。
總結
到這裡已經就完成了我們在ubuntu部署.NetCore專案小目標啦。