• 【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

  • 相关阅读:
    tomcat与eclipse配置
    关于hyperic5.0安装/使用笔记
    java小程序,模拟电视机和遥控
    seldom潜水
    兼容性调试平台
    潜水pw
    scrcpy 👍
    潜水远程调试设备
    尝试方法 在众多平台快速通过脚本自动化验证页面兼容性,可以验证pc,web ,android ,ios,驱动支持java,ruby,c#,python ,js
    try catch嵌套try catch
  • 原文地址:https://www.cnblogs.com/RandyField/p/13549313.html
Copyright © 2020-2023  润新知