【Deploy】記一次Linux程式部署(Python與Dotnet Core)
最近一次工作中,涉及python與.net core,應用開發完成,自然就需要在伺服器上部署。
-
伺服器:Centos 7.8
-
部署程式
- .net core webapi
- python gRPC服務端
1.安裝並配置python3相關
centos7自帶python2,但是我們的指令碼是python3編寫
$yum install python3
1.1 修改pip軟連結
# 刪除原有pip軟連結
$rm -rf /usr/bin/pip
# 為pip3建立軟連結
$ln -s /bin/pip3 /bin/pip
友情提醒:這裡不建議修改python的軟連結,因為yum依賴python老版本,所以只修改了pip的軟連結,原有centos甚至可能並沒有安裝pip,所以談不上修改,只是建立,但是安裝python3時,確實裝了pip3的。
1.2 配置pip
pip在國內下某些依賴可能會很慢,建議修改代理。
$cd ~
$mkdir .pip
$vi .pip/pip.conf
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
[install]
trusted-host = pypi.tuna.tsinghua.edu.cn
# 儲存
# Esc :wq
1.2 安裝指令碼依賴的第三方包
#先更新下pip $pip install --upgrade pip setuptools #安裝git $yum install git #遠端下載並安裝所需第三方依賴包(僅是我程式需要的) $pip install --upgrade git+https://gitee.com/RandyField/vsphere-automation-sdk-python.git # 上面的命令可能有有些許問題,安裝不成功,有點玄學 # git clone ,然後本地安裝 $cd /home/app/ $git clone https://gitee.com/RandyField/vsphere-automation-sdk-python.git $cd vsphere-automation-sdk-python $python3 setup.py install # 安裝其他依賴 $pip install pyvmomi #vmare sdk #python grpc依賴包 $python3 -m pip install grpcio $python3 -m pip install grpcio-tools
2.安裝node.js
我們使用pm2來守護我們的應用程式,在比較了其他守護程序工具之後,覺得pm2真心簡單好用,pm2依賴node.js,所以需要安裝node.js,使用許多方法,目測下面命令是最簡單有效的。
$curl --silent --location https://rpm.nodesource.com/setup_12.x | bash -
$sudo yum install -y nodejs
3.安裝.Net Core Runtime
3.1 釋出應用
.Net Core有兩種釋出方式,一種是依賴執行時,其要求伺服器必須安裝.Net Core Runtime,一種是Self-contained(自包含),他不依賴任何執行時,直接就是一個可執行檔案,可直接執行。
依賴執行時的二進位制檔案
#依賴執行時
$dotnet publish -r linux-x64 --self-contained false -o publish
Self-contained
#.Net Core Self-contained
$dotnet publish -c Release -r linux-x64 --self-contained true -p:PublishSingleFile=false -p:PublishTrimmed=true -o publish-linux-x64
由於我們是釋出至Centos,所以選擇了RID:linux-x64
,按照官方的說法,這個RID:Most desktop distributions like CentOS, Debian, Fedora, Ubuntu, and derivatives,相容大多數linux桌面發行版,如CentOS、Debian、Fedora、Ubuntu及其衍生物。更多具體的RID,請參考官方說明,按需選擇。
3.2 安裝執行時
網路環境不錯,最終還是選擇依賴執行時的釋出方式,所以需要安裝.net core執行時,參考官方即可
$sudo rpm -Uvh https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm
$sudo yum install aspnetcore-runtime-3.1
$sudo yum install dotnet-runtime-3.1
4.安裝和使用pm2
node.js已經安裝完成,接下來我們安裝pm2吧。
4.1 安裝pm2
$ npm install pm2@latest -g
4.2 使用pm2執行python指令碼
$pm2 start "python3 grpcServer.py" --name vsphereDataPy --watch
4.3 使用pm2執行.net core app
$cd publish
$pm2 start " dotnet Vmware.Sphere.Api.dll" --name vsphereDataApi --watch
# 檢視一下兩個應用的狀態,有木有掛掉
$pm2 list
# 檢視一下日誌,有沒有什麼報錯
$pm2 log
4.4 其他命令
# 重啟
$pm2 restart vsphereDataApi
# 過載
$pm2 reload vsphereDataApi
# 停止
$pm2 stop vsphereDataApi
# 刪除
$pm2 delete vsphereDataApi
$pm2 delete vsphereDataApi
# 執行日誌
$pm2 logs vsphereDataApi
# pm2 守護的應用列表
$pm2 list
# 設定開機啟動
$pm2 startup
# 取消開機自啟
$pm2 unstartup
4.5 命令詳解
命令 | 說明 |
---|---|
pm2 startup | 設定pm2開機自啟動 |
pm2 unstartup | 移除pm2開機自啟動 |
pm2 save | 儲存當前程序開機自啟動 |
pm2 start <程序啟動命令> [--name <程序名>] | 啟動應用程式 |
pm2 list | 顯示所有程序狀態 |
pm2 monit | 監控程序 |
pm2 logs [程序id或名字] | 顯示程序日誌 |
pm2 stop [all] | 停止[所有]程序 |
pm2 restart [all] | 重啟[所有]程序 |
pm2 delete [<程序名或者id>,all] | 刪除指定[所有]程序 |
pm2 info [程序id或名字] | 檢視應用程式資訊 |
更多內容,參考官方
5.配置IP
我們的伺服器還沒有具體指明ip,Centos下配置IP地址,有兩種方法:
- 修改網絡卡配置檔案
- 圖形化配置介面:nmtui
5.1 修改網絡卡配置檔案
CentOs7是可以通過網絡卡配置檔案進行ip修改的。
$vi /etc/sysconfig/network-scripts/ifcfg-ens-{根據實際環境}
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
#BOOTPROTO="dhcp"
#IP的配置方法[none|static|bootp|dhcp](引導時不使用協議|靜態分配IP|BOOTP協議|DHCP協議)
BOOTPROTO="static"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens33"
UUID="ac9b66bf-74fb-4bda-b89f-c66ff84c9571"
DEVICE="ens{實際環境}"
ONBOOT="yes"
#ip地址
IPADDR=192.168.0.50
#子網掩碼
NETMASK=255.255.255.0
#閘道器
GATEWAY=192.168.0.1
DNS1=119.29.29.29
DNS2=8.8.8.8
#重啟網路服務
$systemctl restart network
5.2 nmtui
這是別人告訴我的,算長姿勢吧,至少我以前沒用過,直接圖形化介面就可以修改。可以谷歌一下nmtui
即可,應該會有大量篇幅介紹,圖文並茂。扔一個連結,不贅述。
6.開放埠
由於python gRPC
服務端由內部程式訪問,無需暴露埠,但是.net core webapi
需要讓外部訪問,就必須開發埠,Centos7
開發埠使用firewall
,記得以前的6,用firewall在某些環境下(騰訊雲)並不起作用,還用的iptable
# 開發埠
firewall-cmd --zone=public --add-port=5000/tcp --permanent # 開放5000埠
firewall-cmd --reload
# 檢視防火牆所有開放的埠
firewall-cmd --zone=public --list-ports
# 關閉防火牆
systemctl stop firewalld.service
# 檢視防火牆狀態
firewall-cmd --state
# 檢視監聽的埠
netstat -lnpt
7.結語
至此,我們可以用我們已經配置的ip地址和開放的埠號,訪問.net core webapi
,並由webapi
內部呼叫python gRPC
服務端,獲取所需資料。
參考連結
https://blog.csdn.net/qq_21386275/article/details/79881543
https://www.linuxprobe.com/soft-hard-links-comments.html
https://blog.csdn.net/wushiqi11/article/details/104673953/
https://nodejs.org/zh-cn/download/package-manager/
https://yoember.com/nodejs/the-best-way-to-install-node-js-with-yarn/
https://github.com/nodesource/distributions/blob/master/README.md
https://www.jianshu.com/p/9cab8f7020c1