1. 程式人生 > 實用技巧 >【Deploy】記一次Linux程式部署(Python與Dotnet Core)

【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

https://pm2.keymetrics.io/docs/usage/quick-start/

https://www.cnblogs.com/yhongji/p/9336247.html