温馨提示×

Debian Python部署如何操作

小樊
38
2025-12-26 19:25:12
栏目: 编程语言

Debian 上部署 Python 应用的实操流程

一 准备与基础环境

  • 更新系统并安装基础工具(建议 Python 3.8+):
    • 命令:sudo apt update && sudo apt upgrade -y
    • 安装:sudo apt install python3 python3-pip python3-venv git nginx -y
    • 验证:python3 --version、pip3 --version
  • 安装编译依赖(部分包如 psycopg2 需要编译):
    • 命令:sudo apt install build-essential libssl-dev libffi-dev -y
  • 可选 多版本管理:
    • 使用 update-alternatives 切换默认 python3
    • 或使用 pyenv 安装与切换多个 Python 版本(推荐在用户目录管理,避免影响系统 Python)
    • 示例:pyenv install 3.12.0 && pyenv global 3.12.0

二 项目获取与依赖管理

  • 拉取代码并进入目录:
    • 命令:git clone && cd
  • 创建并激活虚拟环境:
    • 命令:python3 -m venv venv && source venv/bin/activate
    • 升级 pip:pip install --upgrade pip
  • 安装依赖与锁定版本:
    • 有 requirements.txt:pip install -r requirements.txt
    • 无则生成:pip freeze > requirements.txt
  • 可选 使用 Poetry(更现代的依赖管理):
    • 安装:curl -sSL https://install.python-poetry.org | python3 -
    • 使用:poetry init → poetry add → poetry install(生成 poetry.lock)

三 运行与进程守护

  • 生产级 WSGI 服务(以 Gunicorn 为例,适用于 Flask/Django):
    • 安装:pip install gunicorn
    • 启动示例:gunicorn -w 4 -b 127.0.0.1:8000 app:app
      • -w 4:工作进程数(可按 CPU 核数调整)
      • -b 127.0.0.1:8000:仅本机访问,更安全
      • app:app:模块名与应用实例(Django 常用 myproject.wsgi:application)
  • 使用 systemd 托管(确保崩溃自启与开机自启):
    • 新建服务:sudo nano /etc/systemd/system/myproject.service
    • 示例内容(按需替换路径与用户):
      • [Unit] Description=Gunicorn daemon for myproject;After=network.target
      • [Service] User=your_username;Group=www-data
        • WorkingDirectory=/path/to/yourproject
        • Environment=“PATH=/path/to/yourproject/venv/bin”
        • ExecStart=/path/to/yourproject/venv/bin/gunicorn -w 4 -b 127.0.0.1:8000 app:app
        • Restart=always
      • [Install] WantedBy=multi-user.target
    • 启用与启动:
      • sudo systemctl daemon-reload
      • sudo systemctl start myproject && sudo systemctl enable myproject
      • sudo systemctl status myproject(检查运行状态)

四 反向代理与静态资源

  • 安装与配置 Nginx
    • 安装:sudo apt install nginx -y
    • 站点配置:sudo nano /etc/nginx/sites-available/myproject
    • 示例配置(替换域名/IP 与路径):
      • 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; }
        • location /static/ { alias /path/to/yourproject/static/; } }
    • 启用与生效:
      • sudo ln -s /etc/nginx/sites-available/myproject /etc/nginx/sites-enabled
      • sudo nginx -t && sudo systemctl restart nginx
  • 防火墙(如使用 ufw):
    • 允许 HTTP/HTTPS:sudo ufw allow ‘Nginx Full’

五 安全与验证

  • 启用 HTTPS(Let’s Encrypt + Certbot):
    • 安装:sudo apt install certbot python3-certbot-nginx -y
    • 申请并自动配置:sudo certbot --nginx -d your_domain_or_ip
  • 访问与健康检查:
    • 浏览器访问:http://your_domain_or_ip 或 https://your_domain_or_ip
    • 建议提供健康检查接口(如 /health)验证后端可用性
  • 常见问题与要点:
    • 不要直接暴露 Gunicorn 到公网,使用 Nginx 反向代理并仅绑定 127.0.0.1
    • 静态文件交由 Nginx 处理,提升性能
    • 使用 虚拟环境 隔离依赖,生产用 requirements.txt/poetry.lock 复现环境
    • 如为 ASGI(FastAPI/Starlette),使用 Uvicorn/Daphne 替代 Gunicorn(ASGI 场景)

0