【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
作者:Garfield
同步更新至个人博客:http://www.randyfield.cn/
本文版权归作者所有,未经许可禁止转载,否则保留追究法律责任的权利,若有需要请联系287572291@qq.com
微信公众号
扫描下方二维码关注个人微信公众号,实时获取更多干货