总结python+flask项目在linux部署的五大方法

文章目录

    • linux部署指南
      • 1. linux sh & nohup后台运行python脚本
      • 2. 使用gunicorn 部署flask服务 (个人项目推荐使用这个)
      • 3. 使用screen命令部署
      • 4. 使用flask + nginx + uwsgi (不建议,因Flask 与 uWsgi 结合有许多难以处理的 bug)
      • 5. 使用flask + nginx + gunicorn (大项目推荐使用这个)
    • linux上杀死gunicorn的进程
    • linux根据端口号查找项目路径方法
      • 1. 只知道端口号
      • 2. 如果知道项目部署在tomcat里

linux部署指南

1. linux sh & nohup后台运行python脚本

  • 1)创建脚本vim run.sh
  • 2)填写内容并保存:nohup python3 -u run.py > nohup.log 2>&1 &
  • 3)运行:sh run.sh 或者 . run.sh
  • 参考:Linux sh、source和.命令执行.sh文件的区别 +
    linux后台执行命令:&和nohup
      - nohup : 就是不挂起的意思( no hang up),可以在你退出帐户之后继续运行相应的进程
        - 使用&命令后,作业被提交到后台运行,当前控制台没有被占用,但是一但把当前控制台关掉(退出帐户时),作业就会停止运行。nohup命令可以在你退出帐户之后继续运行相应的进程。
      - python3 -u  run.py : 执行py文件
      - -u的意思就是 uninterrupt不中断的意思,如果你的代码里边有sleep等线程沉睡相关的操作,如果你不-u的话 在后台 它就停住了
      - > nohup.log : 重定向保存日志到当前路径下的nohup.log
      - 2>&1 : 将标准出错也输出到nohup.log文件中
      - & : 最后一个&, 是让该命令在后台执行。

2. 使用gunicorn 部署flask服务 (个人项目推荐使用这个)

  • 1)创建脚本vim gunicorn.sh

  • 2)填写内容并保存:

    • conda activate just_do_it (在linux上创建好自己的环境,可选)
    • nohup gunicorn -w 4 -b 0.0.0.0:8001 run:app & (不带日志)
    • nohup gunicorn -w 4 -b 0.0.0.0:8001 run:app > gunicorn.log 2>&1 & (带日志)
  • 3)运行:sh gunicorn.sh 或者 . gunicorn.sh

需要提前pip install gunicorn
简单地,gunicorn可以通过gunicorn -w 4 -b 0.0.0.0:8001 run:app启动一个Flask应用。其中,

-w 4是指预定义的工作进程数为4,
-b 127.0.0.1:4000指绑定地址和端口
run是flask的启动python文件,app则是flask应用程序实例

其中run.py中文件的可能形式是:
# run.py
from flask import Flask
app = Flask(__name__)

参考文章:
gunicorn部署Flask服务 https://www.jianshu.com/p/fecf15ad0c9a
https://www.cnblogs.com/gaidy/p/9784919.html

3. 使用screen命令部署

  • 第一步:screen -S yourname,新建一个叫yourname的session
  • 第二步:python run.py,运行代码,关闭shell连接后还会一直在linux上跑
  • 针对用户量小的情况,快速部署(本次使用这个)
  • 关于screen,详情见:https://www.cnblogs.com/mchina/archive/2013/01/30/2880680.html
    杀死所有命令的:ps aux|grep 你的进程名|grep -v grep | awk '{print $2}'|xargs kill -9
    
    https://www.hutuseng.com/article/how-to-kill-all-detached-screen-session-in-linux

4. 使用flask + nginx + uwsgi (不建议,因Flask 与 uWsgi 结合有许多难以处理的 bug)

  • 针对用户访问量大的情况,具体参考下面的文章
    • https://blog.csdn.net/spark_csdn/article/details/80790929
    • https://www.cnblogs.com/Ray-liang/p/4173923.html
    • https://blog.csdn.net/daniel_ustc/article/details/9070357

5. 使用flask + nginx + gunicorn (大项目推荐使用这个)

  • 生产环境很多大公司采用这个方式的,故推荐这个
  • 因Flask 与 uWsgi 结合有许多难以处理的 bug,故推荐这个
  • Flask + Gunicorn + Nginx 部署

linux上杀死gunicorn的进程

方法一

  1. netstat -nltp | grep 8188
    能看到类似下面的:
    tcp 0 0 0.0.0.0:8188 0.0.0.0:* LISTEN 23422/gunicorn: mas

  2. kill -9 23422(换成你的)

方法二

  1. 获取Gunicorn进程树
pstree -ap|grep gunicorn

得到的结果如下

Python
| | |-grep,14519 --color=auto gunicorn
| -gunicorn,28097 /usr/local/bin/gunicorn query_site.wsgi:application -c ... 
| |-gunicorn,14226 /usr/local/bin/gunicorn query_site.wsgi:application -c ... 
| | |-{gunicorn},14229 
| | |-{gunicorn},14230 
...

  1. 重启Gunicorn任务

kill -HUP 14226

  1. 退出Gunicorn任务

kill -9 28097

linux根据端口号查找项目路径方法

1. 只知道端口号

  1. 首先根据端口号查找进程
netstat -nltp
或者
netstat -nltp | grep python
或者
netstat -apn |grep 10010
  1. 然后根据进程号去查找项目路径
ps -ef |grep 8567
  1. 如果你第二步没有找到项目路径的话,尝试用
lsof -p 8567

2. 如果知道项目部署在tomcat里

如果你的项目在linux 中是部署到tomcat容器里,可以输入下边的命令找到,如下:

ps anx|grep tomcat

你可能感兴趣的:(python学习)