React+Flask前后端分离项目部署和PyQT5项目打包

1 React前端部署

shell脚本如下

read -p "请输入Git注释:" comment
npm run build
git add .
git commit -m $comment
git push
ssh root@[host号] > /dev/null 2>&1 << eeooff
cd /root/workspace/Frontend/my-app-center-page
git pull
exit
eeooff
echo react部署脚本执行完毕!

nginx配置如下

server {
    
    
    # 记得开83端口
    # 我的应用中心
    listen       83;
    server_name  [host号];

    location / {
    
    
        root /root/workspace/Frontend/my-app-center-page/build;
        index index.html index.htm;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
    
    
        root   html;
    }
}

2 Flask后端部署

2.1 一般Flask项目部署

以后想起来了再写

2.2 Flask使用了socketio之后的部署细节

本地使用的命令

# 更新requirements.txt
pip list --format=freeze > requirements.txt
git add .
git commit -m "注释"
git push

云端使用的命令

# 激活虚拟环境
cd /root/workspace/python/venvs/ttos_backend
source bin/activate
# 进入项目目录
cd /root/workspace/python/ttos-backend
# 拉取代码
git pull
# 安装python第三方库(要安装gunicorn和gevent)
pip install -r requirements.txt
# 杀死占用端口的进程
ps -ef | grep [端口号]
kill -9 [进程号]
# 没有日志的部署
gunicorn -k gevent app:app -w 1 -b 127.0.0.1:5001 -D
# # 可以删除-D,调试gunicorn,-D是以守护进程方式运行的意思
# gunicorn -k gevent app:app -w 1 -b 127.0.0.1:5001
# # 有日志的部署
# gunicorn -k gevent -w 1 --error-logfile='/root/logs/ttos_logs/error.log' --access-logfile='/root/logs/ttos_logs/access.log' -b 127.0.0.1:5001 -D app:app

nginx对应的配置

server {
    
    
    # 记得在云服务器的控制平台中打开81端口
    listen       81;
    server_name  [host号];
    location / {
    
    
        proxy_pass http://127.0.0.1:5001;
            
    }
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
    
    
        root   html;
    }
}

3 PyQT5打包

两个注意点

  1. 使用虚拟环境
  2. 使用如下所示的.spec文件
# -*- mode: python ; coding: utf-8 -*-

import os

spec_root = os.path.abspath(SPECPATH)	# 这行与spec_root变量被使用的那一行比较重要

block_cipher = None


a = Analysis(['main.py'],
             pathex=[spec_root],		# spec_root变量被使用地方
             binaries=[],
             datas=[],
             hiddenimports=[],
             hookspath=[],
             hooksconfig={
    
    },
             runtime_hooks=[],
             excludes=[],
             win_no_prefer_redirects=False,
             win_private_assemblies=False,
             cipher=block_cipher,
             noarchive=False)
pyz = PYZ(a.pure, a.zipped_data,
             cipher=block_cipher)

exe = EXE(pyz,
          a.scripts, 
          [],
          exclude_binaries=True,
          name='应用名称',
          debug=False,
          bootloader_ignore_signals=False,
          strip=False,
          upx=True,
          console=False,
          disable_windowed_traceback=False,
          target_arch=None,
          codesign_identity=None,
          entitlements_file=None )
coll = COLLECT(exe,
               a.binaries,
               a.zipfiles,
               a.datas, 
               strip=False,
               upx=True,
               upx_exclude=[],
               name='main')

猜你喜欢

转载自blog.csdn.net/inv1796915552/article/details/122387953
今日推荐