【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://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/post/2020-08-23-centos-py-netcore/#2%E5%AE%89%E8%A3%85nodejs
本文观点不代表Dotnet9立场,转载请联系原作者。
评论列表(1条)
今天做了测试,重启云服务器,执行了pm2 startup和pm2 save后,Web API可访问