目錄
前言
如何在CentOS運行項目
登錄CentOS
使用Rider打包
使用Visual Studio打包
項目運行
后臺運行
開放端口?
如何在Docker中運行項目
項目運行
前言
本章詳細介紹,.net Core項目從打包到部署上華為云云耀云服務(wù)器L實例的過程與一些細節(jié)問題。在這里我們分別以系統(tǒng)鏡像的CentOS和應(yīng)用鏡像的Docker可視化Portainer進行舉例,從零到一的部署過程。
如何在CentOS運行項目
登錄CentOS
服務(wù)器選擇,華為云云耀云服務(wù)器L實例為例,選擇自己所在區(qū)域,然后選擇系統(tǒng)鏡像、CentOS
服務(wù)器購買完成后,第一步先去控制臺,找到剛才購買的服務(wù)器,進行重置密碼,一定要勾選“自動重啟”這樣修改的密碼才能立刻生效。
然后在控制臺找到彈性公網(wǎng)IP,與剛才修改的密碼,登錄自己的服務(wù)器
使用Rider打包
如果使用的IDE是Rider,點擊右上角的小火箭圖標(biāo),然后再點擊下拉框中的編輯配置
在彈窗的窗口中,點擊左上角的+號,選擇Publish to folder(發(fā)布到文件夾)
?然后配置我們的一些打包信息
TargerLocation:打包文件的存放地址,默認即可
Targer framework:net的版本號,這個會默認與當(dāng)前項目運行的版本相同
DeployMent Mode:在這個選項的下拉框中有兩種發(fā)布模式,一個是Self-Contained,另一個是Framework-Dependent
- Self-Contained(自包含):這種模式下,發(fā)布的應(yīng)用程序會包含所有需要運行的內(nèi)容,包括.NET Core運行時和.NET Core庫。這意味著應(yīng)用程序可以在沒有.NET Core運行時環(huán)境的機器上運行。
- Framework-Dependent(框架依賴):這種模式下,發(fā)布的應(yīng)用程序不包含.NET Core運行時和庫,它依賴于目標(biāo)機器上的.NET Core運行時環(huán)境。
通俗一點就是,一個直接可以丟上去跑,一個需要先配置環(huán)境,為了方便,我這里就選擇了Self-Contained,一般小項目其實包也大不了多少,如果項目很多,再考慮使用Framework-Dependent
Target runtime:運行的系統(tǒng),毫無疑問,這里選擇Linux-x64
配置完成后點擊保存
點擊運行,然后就去我們剛剛配置的TargerLocation路徑下找到打包好的文件,如果沒改的話一般默認是項目下的bin下面的Release中
使用Visual Studio打包
因為很多人使用Visual Studio,這里也演示一下使用Visual Studio如何打包。
在解決方案資源管理器中右鍵項目,選擇發(fā)布。
在右邊的窗口中點擊發(fā)布,點擊發(fā)布配置文件,選擇文件夾,然后下一步
?然后選擇發(fā)布文件,(默認即可),點擊完成!
?然后點擊顯示所有設(shè)置,在彈出的窗口中,配置選擇Release,部署模式也就是我們剛剛在RD那邊打包時DeployMent Mode中的Self-Contained(自包含),目標(biāo)運行選擇我們的服務(wù)器系統(tǒng)Linux-x64。點擊保存
點擊窗口中的發(fā)布按鈕,然后去剛剛設(shè)置的打包路徑就可以看見打包好的文件了?
項目運行
將我們剛剛通過Rider或VisualStudio打包好的運行文件COPY到服務(wù)器上
?因為我們打包時選擇了“獨立”,因此不需要裝.net
cd到項目copy到服務(wù)器的路徑,然后直接通過命令? ?./yourapp 來啟動項目,"yourapp"為你的應(yīng)用程序的實際名稱。
然后發(fā)現(xiàn)可能會提示報錯
-bash: ./WebApi: Permission denied
這是應(yīng)用程序文件有執(zhí)行權(quán)限。你可以使用chmod命令來添加執(zhí)行權(quán)限
chmod +x?yourapp
然后在執(zhí)行一遍剛剛的命令,可能又會發(fā)現(xiàn)報了一大堆的錯誤提示
Please install libicu using your package manager and try again. Alternatively you can set the configuration flag System.Globalization.Invariant to true if you want to run with no globalization support.
不用慌,?這個錯誤是因為.NET Core運行時需要ICU庫來處理全球化和本地化的字符串。在某些Linux發(fā)行版中,這個庫可能沒有預(yù)裝。
你可以通過安裝libicu庫來解決這個問題。在Ubuntu或Debian上,你可以使用以下命令來安裝:
sudo apt-get install libicu-dev
在CentOS或Fedora上,你可以使用以下命令來安裝:
sudo yum install libicu
如果你的應(yīng)用程序不需要全球化和本地化的支持,你可以通過設(shè)置環(huán)境變量來禁用ICU功能:
export DOTNET_SYSTEM_GLOBALIZATION_INVARIANT=1
然后再運行你的應(yīng)用程序。此時就可以成功運行了
后臺運行
我們可以使用nohup命令讓項目在后臺運行,nohup
命令可以在你退出shell后繼續(xù)運行你的進程。
CtRl + C結(jié)束掉剛才的運行任務(wù),然后用如下命令來運行,這樣所有的輸出(包括stdout和stderr)都被重定向到output.log
文件
nohup ./你的項目名稱 > output.log 2>&1 &
?一般來說,沒有特意指定output.log的路徑情況下,他會在當(dāng)前項目運行路徑下生成,后續(xù)我們項目出現(xiàn)了什么問題,就可以把日志找出來看看了。
如果你想要檢查你的程序是否在運行,你可以使用ps
命令
ps aux | grep 你的項目名稱
如果你想要停止你的程序,你可以使用kill
命令
kill $(你的項目名稱)
開放端口?
在控制臺找到安全組,點擊配置規(guī)則
添加入方向規(guī)則,優(yōu)先級設(shè)為1,我的項目端口是5000,因此設(shè)置為5000,其他默認即可
我們來測試一下,可以正確發(fā)請求到服務(wù)器上的程序了
去控制臺看看服務(wù)器的監(jiān)控,服務(wù)器是昨天買的,也就是說剛剛部署項目cpu最高才用了2%,浪費了,這就去寫幾個死循環(huán)把cpu用起來。
如何在Docker中運行項目
因為我還買了一臺云耀云服務(wù)器L實例的Docker可視化Portainer,里面已經(jīng)裝好了docker需要的環(huán)境,使用docker運行項目我們用這臺服務(wù)器來測試,如果是裝了其他系統(tǒng),需要自己先去安裝一下docker
?如果需要快速部署,VisualStudio發(fā)布的時候可以直接將項目發(fā)布到DockerHub上,我們直接在服務(wù)器上拉鏡像就可以,不過,本章節(jié)我部署的方式并不是通過從hub拉取鏡像,而是帶著大家一起編寫docker-compose和dockerfile
在上面 如何在CentOS 中運行項目中,我們對項目進行了打包,現(xiàn)在按照剛才的步驟,重新打包一個?Framework-Dependent(框架依賴):發(fā)布的應(yīng)用程序不包含.NET Core運行時和庫?如果你嫌麻煩,不想動,沒關(guān)系,剛剛打包的那個項目也可以用,只不過會讓我們接下來要做的事情多此一舉。
在打包好的publish同級別路徑下創(chuàng)建兩個文件,docker-compose和dockerfile
接下來我們一起寫一下這兩個文件
首先打開Dockerfile,第一步構(gòu)建鏡像,也就是運行項目的環(huán)境,然后把項目copy進去,把下面代碼中的端口改成你的項目的,然后寫上運行命令,就完成了
#基于 `microsoft/dotnet:6.0-core` 來構(gòu)建我們的鏡像
FROM mcr.microsoft.com/dotnet/aspnet:6.0
#設(shè)置工作目錄為 `/publish` 文件夾,即容器啟動默認的文件夾
WORKDIR /publish
#拷貝項目publish文件夾中的所有文件到 docker容器中的publish文件夾中
COPY /publish /publish
# 監(jiān)聽5157
ENV ASPNETCORE_URLS=http://+:5157
#設(shè)置Docker容器對外暴露8003端口
EXPOSE 5157
#使用`dotnet WebApi.dll`來運行應(yīng)用程序
CMD ["dotnet", "WebApi.dll", "--server.urls", "http://*:5157"]
然后打開docker-compose
version: '3'
services:
webapi:
image: webapi
build:
context: .
dockerfile: Dockerfile
ports:
- 5157:5157
在這個文件中,version即這個項目的版本號,image是先去hub上找鏡像,找到就拉,找不到就執(zhí)行我們剛剛的Dockerfile,然后把ports改成你項目中對應(yīng)的版本號,就完成了。
要注意的一個細節(jié)就是,如果你像我一樣在項目中使用了數(shù)據(jù)庫,并且也想在docker中安裝數(shù)據(jù)庫,如下代碼,我拉了一個mysql5.7.18,鏡像名稱設(shè)置為mysql,那么,我在項目中sql連接字符串就不可以使用127.0.0.1或者localhost了,而是要使用下面設(shè)置的mysql
version: '3'
services:
mysql:
restart: always
image: mysql:5.7.18
container_name: mysql-lable
volumes:
- /apps/mysql/mydir:/mydir
- /apps/mysql/datadir:/var/lib/mysql
- /apps/mysql/conf/my.cnf:/etc/my.cnf
- /apps/mysql/source:/docker-entrypoint-initdb.d
environment:
- "MYSQL_ROOT_PASSWORD=password"
- "MYSQL_DATABASE=lbhdatabase"
- "TZ=Asia/Shanghai"
ports:
- 3306:3306
webapi:
image: webapi
build:
context: .
dockerfile: Dockerfile
ports:
- 5157:5157
depends_on:
- mysql
項目運行
這兩個文件準(zhǔn)備好后直接將publish拉到我們的服務(wù)器,改個名字。
然后在該路徑下執(zhí)行docker-compose up
?跑起來之后像上面的開放端口一樣,打開自己項目的端口,這里我就不重復(fù)截圖了
測試一下,ok
服務(wù)器信息,如果要后臺執(zhí)行,在剛剛的命令后面加一個 -d
docker-compose up -d
此時我的docker服務(wù)器已經(jīng)跑了一個昨天測試時跑的AI識別webapi,和一個.net core 項目還有一個MySQL。再去看看監(jiān)控,可以看出還是毫無壓力的。文章來源:http://www.zghlxwxcb.cn/news/detail-701833.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-701833.html
到了這里,關(guān)于華為云云耀云服務(wù)器L實例評測|使用Linux系統(tǒng)與Docker部署.net/c#項目的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!