在 Ubuntu 服务器上部署 Python + Django 环境,核心在于构建一个稳定、安全且易于维护的“开发 – 测试 – 生产”闭环。以下是一套经过生产环境验证的标准配置流程,涵盖从系统初始化到 Nginx+Gunicorn 反向X_X的完整方案。
1. 系统基础准备
首先确保服务器系统为最新状态,并安装必要的依赖工具。推荐使用 Ubuntu 20.04 LTS 或 22.04 LTS 版本。
# 更新软件源
sudo apt update && sudo apt upgrade -y
# 安装 Git, 编译工具及 Python 相关包
sudo apt install -y git python3-pip python3-venv python3-dev build-essential libpq-dev nginx curl
注:libpq-dev 是连接 PostgreSQL 数据库所需的开发库,若使用 MySQL 则需安装 default-libmysqlclient-dev。
2. 创建虚拟环境(隔离依赖)
强烈建议不要直接使用系统全局 Python 安装项目,而是利用 venv 创建隔离环境,避免依赖冲突。
# 进入项目目录
mkdir ~/myproject
cd ~/myproject
# 创建虚拟环境
python3 -m venv venv
# 激活虚拟环境
source venv/bin/activate
# 升级 pip 并安装 Django
pip install --upgrade pip
pip install django gunicorn psycopg2-binary # 若用 MySQL 则替换为 mysqlclient
3. 项目初始化与配置
在虚拟环境激活状态下,初始化 Django 项目:
django-admin startproject mysite .
python manage.py migrate
python manage.py createsuperuser
关键配置调整:
编辑 mysite/settings.py,确保允许外部访问并配置数据库:
- 将
ALLOWED_HOSTS添加你的域名或 IP:['your_domain.com', '127.0.0.1']。 - 配置
DATABASES连接你的数据库(PostgreSQL 推荐用于生产环境)。 - 设置
DEBUG = False(生产环境必须关闭调试模式)。 - 配置静态文件路径(Static Files),Django 需要收集静态资源供 Nginx 托管。
# 收集静态文件
python manage.py collectstatic --noinput
4. 配置 Gunicorn(WSGI HTTP 服务器)
Gunicorn 是 Python 业界标准的 WSGI 服务器,用于将 Django 应用暴露给 Web 服务器。
创建一个 systemd 服务单元文件 /etc/systemd/system/gunicorn.service:
[Unit]
Description=gunicorn daemon for mysite
After=network.target
[Service]
User=www-data
Group=www-data
WorkingDirectory=/home/ubuntu/myproject
Environment="PATH=/home/ubuntu/myproject/venv/bin"
ExecStart=/home/ubuntu/myproject/venv/bin/gunicorn
--access-logfile -
--workers 3
--bind unix:/home/ubuntu/myproject/gunicorn.sock
mysite.wsgi:application
[Install]
WantedBy=multi-user.target
说明:使用 Unix Socket (gunicorn.sock) 而非 TCP 端口与 Nginx 通信,性能更高且更安全。--workers 3 根据 CPU 核心数调整,通常公式为 `(2 CPU) + 1`。*
启动并启用服务:
sudo systemctl start gunicorn
sudo systemctl enable gunicorn
sudo systemctl status gunicorn
5. 配置 Nginx(反向X_X与静态文件)
Nginx 负责处理静态文件请求并将动态请求转发给 Gunicorn。
创建配置文件 /etc/nginx/sites-available/mysite:
server {
listen 80;
server_name your_domain.com www.your_domain.com;
location /static/ {
alias /home/ubuntu/myproject/staticfiles/;
}
location / {
include proxy_params;
proxy_pass http://unix:/home/ubuntu/myproject/gunicorn.sock;
}
}
启用站点并重启 Nginx:
sudo ln -s /etc/nginx/sites-available/mysite /etc/nginx/sites-enabled/
sudo nginx -t # 检查配置语法
sudo systemctl restart nginx
6. 安全加固与 HTTPS
生产环境必须开启 HTTPS。推荐使用 Certbot 免费申请 Let’s Encrypt 证书。
# 安装 Certbot 和 Nginx 插件
sudo apt install certbot python3-certbot-nginx
# 获取证书(自动修改 Nginx 配置并重定向 HTTP 到 HTTPS)
sudo certbot --nginx -d your_domain.com -d www.your_domain.com
同时,务必配置 UFW 防火墙 仅开放必要端口:
sudo ufw allow 'Nginx Full'
sudo ufw allow OpenSSH
sudo ufw enable
7. 运维建议
- 日志管理:Gunicorn 和 Nginx 的日志默认会增长,建议配置
logrotate进行轮转切割,防止磁盘爆满。 - 备份策略:定期备份数据库(
pg_dump或mysqldump)以及代码仓库,建议结合云厂商的快照功能。 - 监控:可集成 Prometheus + Grafana 或云厂商自带的云监控服务,实时关注 CPU、内存及 QPS 指标。
这套架构是目前国内主流互联网企业和个人开发者在云服务器上部署 Django 项目的标准范式,兼顾了性能、安全性和可维护性。
CLOUD云枢