在轻量服务器(如阿里云轻量应用服务器、腾讯云轻量应用服务器等)上部署 Python Web 应用,核心在于环境隔离、进程管理、反向X_X和安全配置。对于新手而言,直接裸跑 Python 脚本在生产环境是绝对不可取的。
以下是一套经过验证的标准化部署流程,适用于 Flask 和 Django 项目。
第一步:基础环境准备
登录服务器后,首先进行系统更新并安装必要的工具链。轻量服务器通常预装 Ubuntu 或 CentOS,以下以 Ubuntu 20.04/22.04 为例(CentOS 命令略有不同,但逻辑一致)。
-
更新系统软件包
sudo apt update && sudo apt upgrade -y -
安装 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用于进程守护(生产环境必须使用,防止服务挂掉)。 -
创建项目目录与用户
不要将代码放在/root下,建议创建专用目录。sudo mkdir -p /var/www/myapp cd /var/www/myapp
第二步:代码上传与虚拟环境搭建
-
上传代码
推荐使用git clone拉取你的仓库,或者通过scp从本地上传压缩文件到服务器。# 示例:Git 拉取 git clone https://github.com/yourname/your-repo.git . # 如果是压缩包,解压后进入目录 tar -xzvf your-project.tar.gz -
创建 Python 虚拟环境
这是“大神”级操作的关键习惯,避免污染系统 Python。python3 -m venv venv source venv/bin/activate激活后,命令行前会出现
(venv)标识。 -
安装依赖
确保项目中存在requirements.txt文件。pip install --upgrade pip pip install -r requirements.txt注意:如果依赖中包含 MySQL 驱动(如
mysqlclient),可能需要先安装系统级的libmysqlclient-dev才能编译成功。
第三步:配置文件调整(关键步骤)
在上线前,必须修改代码中的配置,严禁在代码中硬编码敏感信息。
-
Django 特殊配置 (
settings.py)- 开启生产模式:
DEBUG = False - 设置允许的域名:
ALLOWED_HOSTS = ['your-domain.com', '127.0.0.1', '你的服务器公网 IP'] - 收集静态文件:执行
python manage.py collectstatic(Flask 需配置STATIC_URL和STATIC_ROOT)。
- 开启生产模式:
-
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(仅测试用,正式环境不直接用此命令)
- Flask:
第四步:使用 Gunicorn 启动应用
Python 自带的开发服务器性能极差且不安全,生产环境必须使用 WSGI 服务器。Gunicorn 是 Linux 上的标准选择。
-
安装 Gunicorn
pip install gunicorn -
测试启动
在虚拟环境中运行:# 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。
-
创建配置文件
sudo nano /etc/supervisor/conf.d/myapp.conf -
填入以下内容(请根据实际路径修改):
[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。 -
创建日志目录并加载配置
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。
-
创建 Nginx 站点配置
sudo nano /etc/nginx/sites-available/myapp -
写入配置
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/; } } -
启用站点并重启 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
-
防火墙设置
轻量服务器控制台通常有安全组规则。务必在云厂商控制台开放 80 (HTTP) 和 443 (HTTPS) 端口,并关闭不必要的端口(如 SSH 默认 22 可以保留,但建议修改默认端口或限制特定 IP)。 -
申请 SSL 证书(Let’s Encrypt)
生产环境必须使用 HTTPS。sudo apt install certbot python3-certbot-nginx -y sudo certbot --nginx -d your-domain.com该命令会自动修改 Nginx 配置并重载,同时定期自动续期。
-
数据库连接
如果使用了 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云枢