首页主机资讯Ubuntu Python Web开发如何部署

Ubuntu Python Web开发如何部署

时间2025-12-16 21:46:03发布访客分类主机资讯浏览1430
导读:Ubuntu Python Web 应用部署实战 一 准备与基础环境 系统建议:Ubuntu 20.04/22.04 LTS,具备 SSH 访问权限。 安装基础工具与编译依赖: sudo apt update && su...

Ubuntu Python Web 应用部署实战

一 准备与基础环境

  • 系统建议:Ubuntu 20.04/22.04 LTS,具备 SSH 访问权限。
  • 安装基础工具与编译依赖:
    • sudo apt update & & sudo apt install -y python3 python3-pip python3-venv git build-essential libssl-dev libffi-dev
  • 验证版本:
    • python3 --version、pip3 --version
  • 可选数据库(如 MySQL):
    • sudo apt install -y mysql-server
    • sudo systemctl start mysql & & sudo systemctl enable mysql
    • 安全初始化并按需设置 root 密码与远程策略。

二 部署方案总览

方案 适用场景 核心组件 优点 要点
Nginx + Gunicorn Flask/Django/FastAPI 通用 Nginx + Gunicorn 配置简洁、生态成熟、易水平扩展 Gunicorn 作为 WSGI/ASGI 服务器,Nginx 处理静态资源与反向代理
Nginx + uWSGI 传统/高性能场景 Nginx + uWSGI 性能与可控性强 uWSGI 配置灵活,支持多种协议与进程模型
Apache + mod_wsgi 已有 Apache 栈 Apache + mod_wsgi 与 Apache 深度集成 配置简单,适合小规模或迁移场景

三 方案一 Nginx Gunicorn 部署步骤

  • 上传代码与依赖
    • 方式一:git clone ;方式二:scp -r 本地目录 用户@服务器:目标目录
    • 进入项目目录,创建并激活虚拟环境:python3 -m venv venv & & source venv/bin/activate
    • 安装依赖:pip install -r requirements.txt
  • 启动 Gunicorn(先本机验证)
    • Flask 示例:gunicorn --bind 0.0.0.0:8000 app:app
    • Django 示例:gunicorn --bind 0.0.0.0:8000 myproject.wsgi:application
  • 配置 Systemd 守护进程
    • 新建服务:sudo nano /etc/systemd/system/gunicorn.service
    • 示例内容(按需修改路径与用户):
      [Unit]
      Description=Gunicorn instance to serve myproject
      After=network.target
      
      [Service]
      User=ubuntu
      Group=www-data
      WorkingDirectory=/home/ubuntu/myproject
      Environment="PATH=/home/ubuntu/myproject/venv/bin"
      ExecStart=/home/ubuntu/myproject/venv/bin/gunicorn --access-logfile - --workers 3 --bind unix:/run/myproject.sock myproject.wsgi:application
      
      [Install]
      WantedBy=multi-user.target
      
    • 启动与开机自启:
      • sudo systemctl daemon-reload
      • sudo systemctl start gunicorn & & sudo systemctl enable gunicorn
      • sudo systemctl status gunicorn
  • 配置 Nginx 反向代理
    • 安装:sudo apt install -y nginx
    • 站点配置:sudo nano /etc/nginx/sites-available/myproject
      server {
          
          listen 80;
          
          server_name your_domain_or_ip;
      
      
          location / {
          
              include proxy_params;
          
              proxy_pass http://unix:/run/myproject.sock;
      
          }
      
      
          location /static/ {
          
              alias /home/ubuntu/myproject/static/;
      
          }
      
      
          location /media/ {
          
              alias /home/ubuntu/myproject/media/;
      
          }
      
      }
          
      
    • 启用站点与生效:
      • sudo ln -s /etc/nginx/sites-available/myproject /etc/nginx/sites-enabled/
      • sudo nginx -t & & sudo systemctl reload nginx
  • 防火墙与端口
    • UFW:sudo ufw allow ‘Nginx Full’
    • 云厂商安全组:放行 80/443

四 方案二 Nginx uWSGI 部署步骤

  • 安装 uWSGI
    • pip install uwsgi
  • 准备 WSGI 入口
    • Flask 常见:创建 wsgi.py
      from myproject import app
      if __name__ == "__main__":
          app.run()
      
  • 配置 uWSGI(myapp_uwsgi.ini)
    [uwsgi]
    module = wsgi:app
    master = true
    processes = 4
    socket = /run/myapp.sock
    chmod-socket = 660
    vacuum = true
    die-on-term = true
    
  • Systemd 管理 uWSGI
    • /etc/systemd/system/myapp.service
      [Unit]
      Description=uWSGI instance to serve myapp
      After=network.target
      
      [Service]
      User=ubuntu
      Group=www-data
      WorkingDirectory=/home/ubuntu/myapp
      Environment="PATH=/home/ubuntu/myapp/venv/bin"
      ExecStart=/home/ubuntu/myapp/venv/bin/uwsgi --ini myapp_uwsgi.ini
      
      [Install]
      WantedBy=multi-user.target
      
    • 启动:sudo systemctl daemon-reload & & sudo systemctl start myapp & & sudo systemctl enable myapp
  • Nginx 配置(与上节类似,仅修改反向代理目标)
    • proxy_pass http://unix:/run/myapp.sock; (或使用 uWSGI 协议:include uwsgi_params; uwsgi_pass unix:/run/myapp.sock; )

五 方案三 Apache mod_wsgi 部署步骤

  • 安装组件
    • sudo apt install -y apache2 libapache2-mod-wsgi-py3
  • 准备应用与权限
    • 示例 WSGI 应用(/var/www/myapp/myapp.py):
      def application(environ, start_response):
          status = '200 OK'
          output = b'Hello from Apache + mod_wsgi'
          response_headers = [('Content-type', 'text/plain'), ('Content-Length', str(len(output)))]
          start_response(status, response_headers)
          return [output]
      
    • 权限:sudo chown -R www-data:www-data /var/www/myapp
  • 配置虚拟主机
    • /etc/apache2/sites-available/myapp.conf
      <
          VirtualHost *:80>
          
          ServerName myapp.local
      
          WSGIDaemonProcess myapp threads=5 python-home=/var/www/myapp/venv python-path=/var/www/myapp
          WSGIProcessGroup myapp
          WSGIScriptAlias / /var/www/myapp/myapp.py
      
          <
          Directory /var/www/myapp>
          
              Require all granted
          <
          /Directory>
          
      
          Alias /static /var/www/myapp/static
          <
          Directory /var/www/myapp/static/>
          
              Require all granted
          <
          /Directory>
          
      <
          /VirtualHost>
          
      
    • 启用站点与模块:
      • sudo a2ensite myapp & & sudo a2dissite 000-default
      • sudo a2enmod wsgi
      • sudo systemctl restart apache2

六 上线收尾与安全加固

  • HTTPS 与证书
    • 安装 Certbot:sudo apt install -y certbot python3-certbot-nginx
    • 申请并自动配置:sudo certbot --nginx -d your_domain.com
  • 静态与媒体文件
    • Nginx 中配置 /static//media/ 的 alias,由 Nginx 直接服务,减轻应用负载
  • 进程与资源
    • Gunicorn 建议 2–4 个 worker/CPU 核,结合 –timeout–keep-alive 调优
    • uWSGI 根据内存与并发调整 processes/threads,并合理设置 socket 权限与所属组
  • 日志与监控
    • 应用日志:应用内配置日志文件或使用 systemd 的 StandardOutput/StandardError
    • Nginx 日志:/var/log/nginx/access.log、error.log
    • 常用命令:sudo journalctl -u gunicorn -f、sudo tail -f /var/log/nginx/error.log
  • 防火墙与云安全组
    • 仅开放 80/443 与必要管理端口,禁用不必要暴露端口
  • 数据库与密钥
    • 生产环境禁用数据库 root 远程登录,使用最小权限专用账户
    • SECRET_KEY、数据库密码等使用环境变量或密钥管理服务,避免硬编码

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


若转载请注明出处: Ubuntu Python Web开发如何部署
本文地址: https://pptw.com/jishu/773251.html
Ubuntu Python模块如何导入与管理 Ubuntu Python测试框架怎么选择

游客 回复需填写必要信息