温馨提示×

Python如何在Linux中快速部署

小樊
47
2025-11-22 15:19:34
栏目: 编程语言

Python 在 Linux 快速部署实操指南

一、最快路径 Gunicorn + Nginx + Systemd

  • 准备环境
    • 安装 Python 与 pip:sudo apt-get update && sudo apt-get install -y python3 python3-pip
    • 创建并激活虚拟环境:python3 -m venv /opt/venv && source /opt/venv/bin/activate
    • 安装依赖:pip install -r requirements.txt
  • 启动应用(以 Flask 为例)
    • 安装 Gunicorn:pip install gunicorn
    • 启动服务:gunicorn --workers 3 --bind 0.0.0.0:8000 app:app
  • 配置 Nginx 反向代理
    • 安装 Nginx:sudo apt-get install -y nginx
    • 站点配置(/etc/nginx/sites-available/myproject):
      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 ln -s /etc/nginx/sites-available/myproject /etc/nginx/sites-enabled && sudo systemctl restart nginx
  • 托管进程(Systemd)
    • 服务文件(/etc/systemd/system/myproject.service):
      [Unit]
      Description=Gunicorn instance for myproject
      After=network.target
      
      [Service]
      User=www-data
      Group=www-data
      WorkingDirectory=/path/to/project
      ExecStart=/opt/venv/bin/gunicorn --workers 3 --bind unix:/run/myproject.sock myproject.wsgi:application
      ExecReload=/bin/kill -s HUP $MAINPID
      Restart=always
      
      [Install]
      WantedBy=multi-user.target
      
    • 启动与开机自启:sudo systemctl daemon-reload && sudo systemctl enable --now myproject
    • 将 Nginx 的 proxy_pass 改为:proxy_pass http://unix:/run/myproject.sock;
  • 访问验证
    • 打开浏览器访问 http://your_domain_or_IP,如看到应用页面即部署成功。

二、Docker 一条命令部署

  • 示例 Dockerfile(适配 Flask/FastAPI)
    FROM python:3.11-slim
    WORKDIR /app
    COPY requirements.txt .
    RUN pip install -r requirements.txt
    COPY . .
    CMD ["gunicorn", "--bind", "0.0.0.0:5000", "app:app"]
    
  • 构建与运行
    • 构建镜像:docker build -t my-python-app .
    • 运行容器:docker run -d -p 5000:5000 --name myapp my-python-app
  • 说明
    • 适合“任何 Linux 服务器”快速复用相同运行环境;如需数据库、缓存等依赖,建议使用 Docker Compose 编排。

三、关键补充与常见问题

  • 虚拟环境与依赖管理
    • 使用 venv 隔离依赖:python3 -m venv venv && source venv/bin/activate
    • 固定版本:pip freeze > requirements.txt;部署端:pip install -r requirements.txt
    • 多项目/多版本管理可配合 virtualenvwrapperconda/miniconda 使用。
  • 静态资源与媒体文件(Django 常见)
    • 收集静态文件:python manage.py collectstatic
    • Nginx 配置示例:
      location /static/ {
        alias /path/to/project/staticfiles/;
      }
      location /media/ {
        alias /path/to/project/media/;
      }
      
  • 进程守护与日志
    • 不使用 Systemd 时,可用 Supervisor
      [program:myproject]
      command=/opt/venv/bin/gunicorn --workers 3 myproject.wsgi:application
      directory=/path/to/project
      user=www-data
      autostart=true
      autorestart=true
      stderr_logfile=/var/log/myproject.err.log
      stdout_logfile=/var/log/myproject.out.log
      
      • 执行:sudo supervisorctl reread && sudo supervisorctl update && sudo supervisorctl start myproject
  • 安全与网络
    • 仅开放必要端口(如 80/443),使用 ufw 或云安全组限制来源
    • 禁止在生产使用 python app.py 直接运行,务必通过 Gunicorn/uWSGI 承载
    • 设置 SECRET_KEY、数据库凭证等敏感信息为环境变量或密钥管理服务,不要硬编码。

0