• 使用uwsgi部署Flask


    安装

    这里直接使用包管理器提供的版本,不过建议大家使用pip来安装,会少一些坑:

    (Debian/Ubuntu) apt-get install uwsgi uwsgi-plugin-python3

    或使用pip安装

    pip3 install uwsgi
    试试看
    1. [demo.py]
    2. from flask import Flask
    3. app = Flask(__name__)
    4. @app.route("/")
    5. def hello_world():
    6.    return "

      Hello, World!

      "

    终端执行:

    1. uwsgi --http-socket 0.0.0.0:8088 --manage-script-name --mount /=demo:app --plugin python3
    2. (如果你是通过pip安装的,可不加 --plugin python3)
    3. uwsgi --http-socket 0.0.0.0:8088 --manage-script-name --mount /[path]=demo:app --plugin python3

    访问:

    http://localhost:8088/[path]

    部署

    通常情况下我们的应用是按照工厂模式所编写的,使用我们需要新建一个文件来暴露出app对象:

    1. from application import create_app
    2. app = create_app()
    3. if __name__ == "__main__":
    4.    app.run()

    下面来编写一个配置文件,便于配置修改:

    1. [config.ini]
    2. [uwsgi]
    3. # 使用http协议
    4. # http = 0.0.0.0:8081
    5. # 指定工作用户(组)
    6. uid = www-data
    7. gid = www-data
    8. # 主进程,由本进程派生子进程
    9. master = true
    10. # 工作目录
    11. chdir = /var/application
    12. # 插件(使用pip安装的可省略)
    13. plugins = python3
    14. # 入口文件
    15. wsgi-file = app.py
    16. # 指定入口文件的Flask对象
    17. callable = app
    18. # 指定uwsgi的socket路径
    19. socket = /tmp/application.sock
    20. # 进程数
    21. processes = 2
    22. # 线程数
    23. threads = 4
    24. # 缓冲区大小
    25. buffer-size = 32768

    配置Nginx

    1. server {
    2.    listen 80 default_server;
    3.    listen [::]:80 default_server;
    4.    root /var/www/html;
    5.    index index.html index.htm index.nginx-debian.html;
    6.    server_name _;
    7.    # location = /[path] { rewrite ^ /[path]/; }
    8.    location / { try_files $uri @uwsgi; }
    9.    location @uwsgi {
    10.        include uwsgi_params;
    11.        uwsgi_pass unix:/tmp/application.sock;
    12.   }
    13. }

    uwsgi后台运行,你可以直接在命令后加-d,但我这里是新建了个服务:

    1. [/etc/systemd/system/uwsgi.service]
    2. [Unit]
    3. Description=uwsgi application
    4. [Service]
    5. User=www-data
    6. Group=www-data
    7. Type=simple
    8. WorkingDirectory=/var/application
    9. ExecStart=/usr/bin/uwsgi /var/application/config.ini
    10. [Install]
    11. WantedBy=multi-user.target

    接下来就是设置开机启动了:

    1. (sudo) systemctl enable uwsgi
    2. (启动)
    3. (sudo) systemctl start uwsgi

    常见问题

    1. Nginx报5XX错误 检查你的uwsgi的运行用户,务必保证你创建的socketNginx有权限读写的。

    2. uwsgino app loaded. going in full dynamic mode 这个用pip安装的不会出现,需要添加python3插件

    获取请求用户IP地址 addr

    参考资料

    Python的Flask项目中获取请求用户IP地址 addr_flask请求地址-CSDN博客

  • 相关阅读:
    Linux命令之压缩zip
    深度神经网络和人工神经网络区别
    基于yolov5s+bifpn实践隧道裂缝裂痕检测
    NFT协议OMNI因重入攻击损失1300ETH
    任务分配——斜率优化dp——运输小猫
    西南民族大学计算机考研资料汇总
    构建 JavaScript ChatGPT 插件
    个人习惯阅读源码的方式以及IDEA查看源码常用快捷键(小技巧完善中。。。)
    下载指定版本的pytorch
    Jquery切换样式并执行原生CSS实现过度动画
  • 原文地址:https://blog.csdn.net/m0_61634551/article/details/132881321