在 CentOS 部署 Python Web 框架的标准流程
一 环境准备与基础安装
- 更新系统并安装基础软件包:sudo yum update -y && sudo yum install -y python3 python3-pip python3-venv git nginx
- 若使用 CentOS 7,默认仅有 Python 2.7,需显式安装 Python 3.x 与 pip,后续操作均基于 Python 3。
二 创建项目与虚拟环境
- 创建项目目录并进入:mkdir -p /opt/myapp && cd /opt/myapp
- 建立并激活虚拟环境:python3 -m venv venv && source venv/bin/activate
- 安装依赖(示例为 Flask):pip install -U pip && pip install Flask
- 简单应用示例 app.py(Flask):
- from flask import Flask
app = Flask(name)
@app.route(‘/’)
def hello(): return ‘Hello, World!’
if name == ‘main’: app.run(host=‘0.0.0.0’, port=5000)
- 开发时可临时运行:python app.py(仅用于调试,生产不建议使用内置服务器)。
三 生产级部署方案 Nginx + Gunicorn(以 Flask 为例)
- 安装并启动 Gunicorn:pip install gunicorn;示例启动命令:gunicorn -w 4 -b 127.0.0.1:8000 app:app(4 个工作进程,绑定本地 8000 端口)
- 配置 Nginx 反向代理(/etc/nginx/conf.d/myapp.conf):
- 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;
}
}
- 检查并重载 Nginx:sudo nginx -t && sudo systemctl reload nginx
- 开放防火墙端口:sudo firewall-cmd --permanent --zone=public --add-service=http --add-service=https && sudo firewall-cmd --reload
- 可选启用 HTTPS:使用 Let’s Encrypt/Certbot 为域名申请免费证书并自动配置 Nginx。
四 以 systemd 托管 Gunicorn 进程
- 创建服务文件:sudo vi /etc/systemd/system/myapp.service
- [Unit]
Description=gunicorn daemon for myapp
After=network.target
- [Service]
User=your_username
Group=nginx
WorkingDirectory=/opt/myapp
Environment=“PATH=/opt/myapp/venv/bin”
ExecStart=/opt/myapp/venv/bin/gunicorn -w 4 -b 127.0.0.1:8000 app:app
- [Install]
WantedBy=multi-user.target
- 启动与开机自启:sudo systemctl daemon-reload && sudo systemctl start myapp && sudo systemctl enable myapp
- 常用运维:查看状态 sudo systemctl status myapp;查看日志 sudo journalctl -u myapp -f。
五 Django 与 uWSGI 方案简要指引
- 安装与初始化:pip install Django;django-admin startproject myproject;cd myproject
- 生产服务器建议用 uWSGI(配合 Nginx):pip install uwsgi
- uWSGI 配置示例 myapp.ini(与 Nginx 通过 Unix Socket 通信):
- [uwsgi]
module = myproject.wsgi:application
master = true
processes = 4
socket = /tmp/myapp.sock
chmod-socket = 660
vacuum = true
- Nginx 配置片段(/etc/nginx/conf.d/myapp.conf):
- server {
listen 80;
server_name your_domain_or_ip;
location / {
include uwsgi_params;
uwsgi_pass unix:/tmp/myapp.sock;
}
}
- 启动与重载:uwsgi --ini myapp.ini;sudo nginx -t && sudo systemctl reload nginx。