新手如何在轻量服务器上部署Python Flask或Django应用?

在轻量服务器(如阿里云轻量应用服务器、腾讯云轻量应用服务器等)上部署 Python Web 应用,核心在于环境隔离、进程管理、反向X_X和安全配置。对于新手而言,直接裸跑 Python 脚本在生产环境是绝对不可取的。

以下是一套经过验证的标准化部署流程,适用于 Flask 和 Django 项目。

第一步:基础环境准备

登录服务器后,首先进行系统更新并安装必要的工具链。轻量服务器通常预装 Ubuntu 或 CentOS,以下以 Ubuntu 20.04/22.04 为例(CentOS 命令略有不同,但逻辑一致)。

  1. 更新系统软件包

    sudo apt update && sudo apt upgrade -y
  2. 安装 Python 3 及开发依赖
    轻量服务器通常自带 Python 3,但建议安装 python3-venv 用于创建虚拟环境,以及 build-essential 用于编译某些依赖库。

    sudo apt install python3-pip python3-venv python3-dev build-essential nginx supervisor -y

    注:nginx 将作为反向X_X服务器,supervisor 用于进程守护(生产环境必须使用,防止服务挂掉)。

  3. 创建项目目录与用户
    不要将代码放在 /root 下,建议创建专用目录。

    sudo mkdir -p /var/www/myapp
    cd /var/www/myapp

第二步:代码上传与虚拟环境搭建

  1. 上传代码
    推荐使用 git clone 拉取你的仓库,或者通过 scp 从本地上传压缩文件到服务器。

    # 示例:Git 拉取
    git clone https://github.com/yourname/your-repo.git .
    
    # 如果是压缩包,解压后进入目录
    tar -xzvf your-project.tar.gz
  2. 创建 Python 虚拟环境
    这是“大神”级操作的关键习惯,避免污染系统 Python。

    python3 -m venv venv
    source venv/bin/activate

    激活后,命令行前会出现 (venv) 标识。

  3. 安装依赖
    确保项目中存在 requirements.txt 文件。

    pip install --upgrade pip
    pip install -r requirements.txt

    注意:如果依赖中包含 MySQL 驱动(如 mysqlclient),可能需要先安装系统级的 libmysqlclient-dev 才能编译成功。

第三步:配置文件调整(关键步骤)

在上线前,必须修改代码中的配置,严禁在代码中硬编码敏感信息。

  1. Django 特殊配置 (settings.py)

    • 开启生产模式:DEBUG = False
    • 设置允许的域名:ALLOWED_HOSTS = ['your-domain.com', '127.0.0.1', '你的服务器公网 IP']
    • 收集静态文件:执行 python manage.py collectstatic(Flask 需配置 STATIC_URLSTATIC_ROOT)。
  2. Flask/Django 绑定地址
    默认情况下,它们可能只监听 127.0.0.1(本地回环)。生产环境必须改为 0.0.0.0,否则外部无法访问。

    • Flask: app.run(host='0.0.0.0', port=5000)
    • Django: python manage.py runserver 0.0.0.0:8000 (仅测试用,正式环境不直接用此命令)

第四步:使用 Gunicorn 启动应用

Python 自带的开发服务器性能极差且不安全,生产环境必须使用 WSGI 服务器。Gunicorn 是 Linux 上的标准选择。

  1. 安装 Gunicorn

    pip install gunicorn
  2. 测试启动
    在虚拟环境中运行:

    # Django 示例
    gunicorn myproject.wsgi:application --bind 0.0.0.0:8000
    
    # Flask 示例 (假设入口是 app.py)
    gunicorn app:app --bind 0.0.0.0:8000

    如果看到 Starting worker 字样且无报错,说明后端服务正常。按 Ctrl+C 停止。

第五步:配置 Supervisor 实现进程守护

为了让应用在后台运行,并在重启服务器后自动启动,需要配置 supervisor

  1. 创建配置文件

    sudo nano /etc/supervisor/conf.d/myapp.conf
  2. 填入以下内容(请根据实际路径修改):

    [program:myapp]
    command=/var/www/myapp/venv/bin/gunicorn myproject.wsgi:application --bind 0.0.0.0:8000
    directory=/var/www/myapp
    user=root
    autostart=true
    autorestart=true
    stdout_logfile=/var/log/myapp/gunicorn.log
    stderr_logfile=/var/log/myapp/gunicorn_error.log
    environment=PYTHONPATH="/var/www/myapp"

    提示:Django 项目替换为 myproject.wsgi:application,Flask 项目替换为 app:app

  3. 创建日志目录并加载配置

    sudo mkdir -p /var/log/myapp
    sudo supervisorctl reread
    sudo supervisorctl update
    sudo supervisorctl start myapp

    输入 sudo supervisorctl status 确认状态为 RUNNING

第六步:配置 Nginx 反向X_X

Nginx 负责接收用户的 HTTP 请求,并将其转发给 Gunicorn。

  1. 创建 Nginx 站点配置

    sudo nano /etc/nginx/sites-available/myapp
  2. 写入配置

    server {
        listen 80;
        server_name your-domain.com; # 替换为你的域名或 IP
    
        location / {
            proxy_pass http://127.0.0.1:8000; # 指向 Gunicorn 监听的端口
            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 /var/www/myapp/static/;
        }
    }
  3. 启用站点并重启 Nginx

    # 软链接到 sites-enabled
    sudo ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/
    
    # 移除默认配置(防止冲突)
    sudo rm /etc/nginx/sites-enabled/default
    
    # 测试配置语法
    sudo nginx -t
    
    # 重载配置
    sudo systemctl restart nginx

第七步:安全加固与 HTTPS

  1. 防火墙设置
    轻量服务器控制台通常有安全组规则。务必在云厂商控制台开放 80 (HTTP)443 (HTTPS) 端口,并关闭不必要的端口(如 SSH 默认 22 可以保留,但建议修改默认端口或限制特定 IP)。

  2. 申请 SSL 证书(Let’s Encrypt)
    生产环境必须使用 HTTPS。

    sudo apt install certbot python3-certbot-nginx -y
    sudo certbot --nginx -d your-domain.com

    该命令会自动修改 Nginx 配置并重载,同时定期自动续期。

  3. 数据库连接
    如果使用了 MySQL/PostgreSQL,建议不要将数据库安装在同一台轻量服务器上(除非流量很小),以免资源争抢。可以使用云厂商提供的 RDS 服务,并在代码配置文件中修改数据库连接字符串。

常见问题排查

  • 404 Not Found:检查 Nginx 的 alias 路径是否正确,或者 Django/Flask 的 collectstatic 是否执行。
  • 502 Bad Gateway:通常是 Gunicorn 没启动,或者端口不对。检查 supervisorctl status 和 Nginx 错误日志 /var/log/nginx/error.log
  • 权限问题:确保 /var/www/myapp 目录对 Nginx 用户(通常是 www-data)有读取权限,但写入权限需谨慎控制。

这套流程兼顾了安全性、稳定性和可维护性。对于新手来说,掌握这套组合拳(Nginx + Gunicorn + Supervisor + Virtualenv)是进入 Python 后端运维领域的基石。

未经允许不得转载:CLOUD云枢 » 新手如何在轻量服务器上部署Python Flask或Django应用?