首页主机资讯Python Web框架在Ubuntu上如何部署

Python Web框架在Ubuntu上如何部署

时间2025-12-05 02:31:04发布访客分类主机资讯浏览1130
导读:在 Ubuntu 上部署 Python Web 框架的标准流程 面向 Flask、Django 等主流框架,生产环境通常采用 WSGI 服务器(Gunicorn 或 uWSGI)+ Nginx 反向代理,并通过 systemd 守护进程保证...

在 Ubuntu 上部署 Python Web 框架的标准流程

面向 FlaskDjango 等主流框架,生产环境通常采用 WSGI 服务器(Gunicorn 或 uWSGI)+ Nginx 反向代理,并通过 systemd 守护进程保证常驻运行。若使用 ASGI 框架(如 FastAPI、Starlette),应改用 Uvicorn/Hypercorn 作为 ASGI 服务器,Nginx 配置思路一致。该组合可提供静态资源高效服务、并发处理与进程守护能力。

一、准备与部署通用步骤

  • 系统更新与基础工具
    • 执行:sudo apt update & & sudo apt install -y python3 python3-pip python3-venv git build-essential libssl-dev libffi-dev
  • 上传或克隆代码
    • Git:git clone < repo> & & cd < project>
    • SCP:scp -r < 本地目录> < user> @< ip> :/path/to/app
  • 创建虚拟环境与依赖
    • python3 -m venv venv & & source venv/bin/activate
    • pip install -r requirements.txt
  • 开放防火墙与端口
    • UFW:sudo ufw allow 'Nginx Full'(同时保证 22 端口用于 SSH)
  • 注意
    • 生产环境不要使用框架自带的开发服务器(如 Flask 的 app.run())。

二、以 Gunicorn + Nginx 部署(Flask 示例)

  • 安装与试运行
    • pip install gunicorn
    • 假设入口为 app.py,应用对象为 appgunicorn -w 4 app:app(先在本地或内网验证)
  • 配置 systemd 守护进程
    • 新建:sudo nano /etc/systemd/system/myflaskapp.service
    • 示例:
      [Unit]
      Description=My Flask Application
      After=network.target
      
      [Service]
      User=ubuntu
      Group=www-data
      WorkingDirectory=/path/to/your/flask/app
      Environment="PATH=/path/to/your/flask/app/venv/bin"
      ExecStart=/path/to/your/flask/app/venv/bin/gunicorn -w 4 app:app
      
      [Install]
      WantedBy=multi-user.target
      
    • 启动与开机自启:sudo systemctl daemon-reload & & sudo systemctl start myflaskapp & & sudo systemctl enable myflaskapp
  • 配置 Nginx 反向代理
    • 安装:sudo apt install nginx
    • 编辑:sudo nano /etc/nginx/sites-available/default
    • 示例:
      server {
          
          listen 80;
          
          server_name your_domain_or_ip;
      
      
          location / {
          
              proxy_pass http://127.0.0.1:8000;
          
              proxy_set_header Host $host;
          
              proxy_set_header X-Real-IP $remote_addr;
          
              proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
          
              proxy_set_header X-Forwarded-Proto $scheme;
      
          }
      
      }
          
      
    • 校验与生效:sudo nginx -t & & sudo systemctl reload nginx
  • 访问验证
    • 浏览器访问 http://your_domain_or_ip,应看到应用页面。

三、以 uWSGI + Nginx 部署(Django 示例)

  • 安装与准备
    • pip install uwsgi
    • 收集静态文件(Django):python manage.py collectstatic --noinput
  • 配置 uWSGI(INI 示例)
    • 新建:nano myapp_uwsgi.ini
    • 示例:
      [uwsgi]
      module = myproject.wsgi:application
      master = true
      processes = 4
      socket = /run/gunicorn.sock
      chmod-socket = 660
      vacuum = true
      die-on-term = true
      
  • 配置 systemd 守护 uWSGI
    • 新建:sudo nano /etc/systemd/system/myuwsgi.service
    • 示例:
      [Unit]
      Description=uWSGI instance to serve myproject
      After=network.target
      
      [Service]
      User=ubuntu
      Group=www-data
      WorkingDirectory=/path/to/myproject
      Environment="PATH=/path/to/myproject/venv/bin"
      ExecStart=/path/to/myproject/venv/bin/uwsgi --ini myapp_uwsgi.ini
      
      [Install]
      WantedBy=multi-user.target
      
    • 启动:sudo systemctl daemon-reload & & sudo systemctl start myuwsgi & & sudo systemctl enable myuwsgi
  • 配置 Nginx
    • 示例:
      server {
          
          listen 80;
          
          server_name myproject.example.com;
      
      
          location / {
          
              include uwsgi_params;
          
              uwsgi_pass unix:/run/gunicorn.sock;
      
          }
      
      
          location /static {
          
              alias /path/to/myproject/static;
      
          }
      
      }
          
      
    • 启用与生效:sudo ln -s /etc/nginx/sites-available/myproject /etc/nginx/sites-enabled/ & & sudo nginx -t & & sudo systemctl reload nginx
  • 访问验证
    • 浏览器访问 http://myproject.example.com,静态资源由 Nginx 直接服务,动态请求由 uWSGI 处理。

四、可选优化与安全加固

  • 启用 HTTPS(Let’s Encrypt)
    • 安装:sudo apt install certbot python3-certbot-nginx -y
    • 申请并自动配置:sudo certbot --nginx -d yourdomain.com
  • 进程管理替代方案
    • 亦可使用 Supervisor 管理 Gunicorn/uWSGI 进程,步骤包括安装 Supervisor、编写 program 配置、启动与设置开机自启。
  • 日志与排错
    • 查看服务日志:sudo journalctl -u myflaskapp -fsudo journalctl -u myuwsgi -f
    • Nginx 日志:/var/log/nginx/access.log/var/log/nginx/error.log
  • 静态文件与媒体文件
    • Django 将 STATIC_ROOT 收集后由 Nginx 的 location /static 提供服务;用户上传的 MEDIA_ROOT 亦建议由 Nginx 直接托管并设置合适的访问权限。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: Python Web框架在Ubuntu上如何部署
本文地址: https://pptw.com/jishu/764263.html
Python多线程在Ubuntu上如何实现 Python依赖如何在Ubuntu上管理

游客 回复需填写必要信息