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信息
20191211142103.png

.Nginx安裝

因為.NetCore是自宿主,所以我們需要一個反向代理web服務器來給我的kestrel做反向代理

安裝命令
sudo apt-get install nginx

啟動命令
sudo service nginx start

安裝成功后直接訪問服務器地址,若出現下圖則nginx安裝成功
20191211143329.png

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 命令來檢查是否安裝成功,出現下圖則安裝成功

20191211144948.png

有關於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到這里。

20191211150953.png

使用cd /home/api命令進入我們發布文件夾下。

使用 dotnet Api.dll命令運行我們剛才的項目
20191211152748.png

可以看到我們的項目已經跑起來啦。我們使用瀏覽器來訪問我們的Api看看是否成功

20191211153006.png

可以看到我們的接口是可以訪問的,到這里我們已經完成了在ubuntu上部署一個.NetCore的項目了。
但是我們需要一直在這里看着這個程序不被關閉嗎?顯然是不可能的,現在就需要pm2登場了,用pm2來守護我們的.netCore 程序。
執行pm2 start "dotnet api.dll" --name api命令就可以讓pm2來幫助我們守護啦。就是這么簡單,沒有繁瑣的配置。

20191211153504.png

使用 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端口來調用我們的接口。

20191211155506.png

可以看到是可以通過80端口去調用我們的Api的。

總結

到這里已經就完成了我們在ubuntu部署.NetCore項目小目標啦。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM