linux发布python程序_【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 [,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服务端,获取所需数据。

参考链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值