在(zài) 阿裏雲上(shàng) Ubuntu(Linux)上(shàng) 部署 .net core web 項目
發表時(shí)間:2020-10-19
發布人(rén):融晨科技
浏覽次數:46
我在(zài)阿裏雲購買的(de) 主機
安裝的(de)是(shì) Ubuntu (烏班圖) 是(shì) Linux 的(de)一種 ,以(yǐ)下簡稱 Utuntu
用到(dào)的(de)工具:
- vs 2019 宇宙第一IDE
- xshell 遠程 linux 工具
目錄
1、準備一個(gè) core web 項目
?2、直接在(zài) Ubuntu 上(shàng)部署
?3、在(zài) Ubuntu 上(shàng) 的(de) docker 上(shàng)運行 .net core web 項目
1、準備一個(gè) core web 項目
這(zhè)個(gè)項目創建出(chū)來(lái)用docker 時(shí)無法調試運行的(de) ,vs 2019 會提示下載 Linux 鏡像來(lái)調試這(zhè)個(gè)項目 但是(shì)這(zhè)個(gè)下載過程多半是(shì)卡死的(de)
這(zhè)裏先不(bù)管這(zhè)個(gè)問題先把我們要(yào / yāo)的(de)文件發布出(chū)來(lái)先
先修改一下運行的(de)端口 改下 代碼:在(zài) Program 類中添加如下内容設置 占用端口
webBuilder.UseUrls("http://*:5210;http://*:5211;http://*:80");
設置下 Dockerfile 文件爲(wéi / wèi)始終複制
然後發布文件:
點擊編輯 确保 如下的(de) 框架依賴 項
發布完成後在(zài) pulish 文件夾内修改 Dockerfile 因爲(wéi / wèi) 之(zhī)前的(de)内容是(shì)爲(wéi / wèi)在(zài) windows 上(shàng)做調試 如果上(shàng) Docker 要(yào / yāo)删減很多内容
#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", "你的(de)項目名稱.dll"]
然後打包爲(wéi / wèi) publish.zip
需要(yào / yāo) 拷貝 到(dào) Utuntu 去 解壓
所以(yǐ)需要(yào / yāo)在(zài) Ubuntu 上(shàng)安裝 壓縮軟件 借用下别人(rén)的(de)教程 安裝 Unzip
Ubuntu unzip 安裝
然後 要(yào / yāo)把本地(dì / de) windows 10 的(de) publish.zip 文件 copy 到(dào) Ubuntu 也(yě)需要(yào / yāo)在(zài)在(zài) ubuntu 安裝 工具
XShell本地(dì / de)上(shàng)傳文件到(dào)Ubuntu上(shàng)及從Ubuntu下載文件到(dào)本地(dì / de)
安裝完上(shàng)面的(de) 軟件後 我就(jiù) 把 publish.zip 壓縮文件上(shàng)傳
可以(yǐ)看到(dào) Ubuntu 當前的(de) 目錄 是(shì) ~/project/publish
然後輸入 解壓命令 unzip publish.zip 解壓到(dào)當前文件夾
2、直接在(zài) Ubuntu 上(shàng)部署
我的(de) 雲主機 系統爲(wéi / wèi) ubuntu 20.04 是(shì)長支持版本
然後按照官網的(de)實例安裝需要(yào / yāo)的(de)
https://docs.microsoft.com/zh-cn/dotnet/core/install/linux-ubuntu
1、将 Microsoft 包簽名密鑰添加到(dào)受信任密鑰列表,并添加包存儲庫。
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 運行時(shí)
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 看看 結果:我這(zhè)邊用了(le/liǎo) 遠程 linux 的(de)遠程工具 Xshell
這(zhè)個(gè)軟件很好找就(jiù)不(bù)多說(shuō)了(le/liǎo)
ok notnet 環境已經ok 了(le/liǎo)
然後 進入 publish 文件夾内 運行 命令 dotnet coreweb.dll
coreweb 是(shì)我的(de)項目名稱,需要(yào / yāo)按實際更改
dotnet 你的(de)項目名稱.dll
然後 結果如下就(jiù)是(shì)正常啓動
現在(zài)這(zhè)個(gè)窗口就(jiù)運行上(shàng) 我們的(de)項目 了(le/liǎo) 有提示 ctrl +c 推出(chū) 但是(shì)在(zài)它運行的(de)同時(shí)我們還要(yào / yāo)輸入命令
可以(yǐ)再新建一個(gè)窗口來(lái)輸入命令
測試下 ubuntu 本地(dì / de)能不(bù)能訪問這(zhè)個(gè)網站 輸入
curl http:/127.0.0.1:80
或者
curl http:/127.0.0.1:5210
或者
curl http:/127.0.0.1:5211
看到(dào) 返回了(le/liǎo) 項目 首頁 歡迎 的(de) html 就(jiù)說(shuō)明本地(dì / de)沒問題
然後在(zài) win 10 用浏覽器 訪問下:Ubuntu 的(de) 公網IP +端口 發現訪問不(bù)了(le/liǎo)
這(zhè)個(gè)時(shí)候就(jiù)需要(yào / yāo)去阿裏雲 暴露一下 5211 端口
然後成功:
3、在(zài) Ubuntu 上(shàng) 的(de) docker 上(shàng)運行 .net core web 項目
先把上(shàng)面 2 運行的(de)實例關掉 不(bù)然 端口占用問題可能會導緻docker的(de)container 啓動不(bù)了(le/liǎo)
// 查看當前進程
ps
// 殺掉指定進程
kill %pid
在(zài) Ubuntu 上(shàng) 安裝 docker :
curl -sSL https://get.daocloud.io/docker | sh
docker --version 測試下安裝成功沒
然後去 publish 文件夾下 執行 打包鏡像 命令 ,這(zhè)後面的(de) 點 很重要(yào / yāo)
docker build -t corewebimage .
有了(le/liǎo)鏡像就(jiù)可以(yǐ)運行實例了(le/liǎo): 這(zhè)裏的(de) 80 : 80 是(shì)
Ubuntu 的(de) 80 指向 container 的(de) 80 端口 這(zhè)個(gè)指向是(shì)必須的(de) ,
簡單理解就(jiù)是(shì)每個(gè) container 都是(shì)一個(gè)小小虛拟機 需要(yào / yāo)指明 宿主機映射端口 否者我們無法訪問到(dào)我們的(de) .net core 項目
docker run -d -p 80:80 corewebimage
看到(dào) container 運行起來(lái)了(le/liǎo)
現在(zài) 就(jiù)可以(yǐ) 用 curl 查看 下 内網能不(bù)能訪問 :可以(yǐ)看到(dào)内網沒問題 返回了(le/liǎo) 首頁的(de) html
在(zài) win 10 用浏覽器試試 公網IP : 也(yě)可以(yǐ)訪問