在 阿里雲上 Ubuntu(Linux)上 部署 .net core web 專案

2020-10-19 15:00:36

我在阿里雲購買的 主機

安裝的是 Ubuntu (烏班圖) 是 Linux 的一種  ,以下簡稱 Utuntu

用到的工具:

  • vs 2019   宇宙第一IDE
  • xshell 遠端 linux 工具

目錄

1、準備一個 core web 專案

2、直接在 Ubuntu 上部署

3、在 Ubuntu 上 的 docker 上執行 .net core web 專案


 

 

 

1、準備一個 core web 專案

這個專案建立出來用docker 時無法偵錯執行的 ,vs 2019 會提示下載 Linux 映象來偵錯這個專案 但是這個下載過程多半是卡死的 

這裡先不管這個問題先把我們要的檔案發布出來先

先修改一下執行的埠 改下 程式碼:在 Program 類中新增如下內容設定 佔用埠

webBuilder.UseUrls("http://*:5210;http://*:5211;http://*:80");

設定下  Dockerfile 檔案為始終複製

 

然後釋出檔案

 

點選編輯 確保  如下的 框架依賴  項

釋出完成後在 pulish 資料夾內修改  Dockerfile 因為 之前的內容是為在 windows 上做偵錯  如果上 Docker 要刪減很多內容

#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.

FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base
WORKDIR /app
EXPOSE 5210
EXPOSE 5211
EXPOSE 80


COPY . .
ENTRYPOINT ["dotnet", "你的專案名稱.dll"]

然後打包為 publish.zip 

需要 拷貝 到  Utuntu 解壓

所以需要在  Ubuntu 上安裝 壓縮軟體 借用下別人的教學 安裝 Unzip

Ubuntu unzip 安裝   

然後 要把本地 windows 10 的 publish.zip 檔案 copy Ubuntu  也需要在在 ubuntu 安裝 工具

XShell本地上傳檔案到Ubuntu上及從Ubuntu下載檔案到本地

安裝完上面的 軟體後 我就 把 publish.zip 壓縮檔案上傳

可以看到 Ubuntu 當前的 目錄 是 ~/project/publish

然後輸入 解壓命令 unzip publish.zip 解壓到當前資料夾

 

2、直接在 Ubuntu 上部署


我的 雲主機  系統為 ubuntu 20.04  是長支援版本

然後按照官網的範例安裝需要的

https://docs.microsoft.com/zh-cn/dotnet/core/install/linux-ubuntu
 

1、將 Microsoft 包簽名金鑰新增到受信任金鑰列表,並新增包儲存庫。

wget https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb sudo dpkg -i packages-microsoft-prod.deb

2、安裝 .net core sdk

sudo apt-get update; \
  sudo apt-get install -y apt-transport-https && \
  sudo apt-get update && \
  sudo apt-get install -y dotnet-sdk-3.1

3、安裝 .net core 執行時

sudo apt-get update; \
  sudo apt-get install -y apt-transport-https && \
  sudo apt-get update && \
  sudo apt-get install -y aspnetcore-runtime-3.1

完事後 dotnet --version 看看 結果:我這邊用了 遠端 linux 的遠端工具 Xshell 

這個軟體很好找就不多說了

ok  notnet 環境已經ok 了 

然後 進入 publish 資料夾內 執行 命令 dotnet coreweb.dll  

 coreweb 是我的專案名稱,需要按實際更改

dotnet 你的專案名稱.dll

然後 結果如下就是正常啟動

現在這個視窗就執行上 我們的專案 了  有提示 ctrl +c 推出 但是在它執行的同時我們還要輸入命令 

可以再新建一個視窗來輸入命令  

測試下 ubuntu 本地能不能存取這個網站 輸入 

curl http:/127.0.0.1:80

或者

curl http:/127.0.0.1:5210

或者

curl http:/127.0.0.1:5211

看到 返回了 專案 首頁 歡迎 的 html  就說明本地沒問題

然後在 win 10 用瀏覽器  存取下:Ubuntu 的 公網IP +埠    發現存取不了

這個時候就需要去阿里雲 暴露一下 5211 埠

然後成功:

 

3、在 Ubuntu 上 的 docker 上執行 .net core web 專案

先把上面 2 執行的範例關掉  不然 埠佔用問題可能會導致docker的container 啟動不了

// 檢視當前程序
ps
// 殺掉指定程序
kill %pid

 

在 Ubuntu 上 安裝 docker :

curl -sSL https://get.daocloud.io/docker | sh

docker --version 測試下安裝成功沒

然後去 publish 資料夾下 執行 打包映象 命令  ,這後面的 很重要 

docker build -t corewebimage .

有了映象就可以執行範例了: 這裡的 80 : 80 是 

Ubuntu 的 80 指向 container 的 80 埠  這個指向是必須的 ,

簡單理解就是每個 container 都是一個小小虛擬機器器 需要指明 宿主機對映埠  否者我們無法存取到我們的 .net  core 專案

 

docker run -d -p 80:80 corewebimage

看到 container 執行起來了 

現在 就可以 用 curl 檢視 下 內網能不能存取 :可以看到內網沒問題 返回了 首頁的 html

在 win 10 用瀏覽器試試 公網IP : 也可以存取