在阿里云部署 Django 应用程序,推荐使用 ECS(云服务器)+ Nginx + Gunicorn/Uwsgi + PostgreSQL/MySQL 的经典架构。以下是完整、可落地的部署流程:
✅ 一、前期准备
1. 购买并配置 ECS 实例
- 登录 阿里云控制台
- 创建 ECS 实例(推荐 Ubuntu 20.04/22.04 或 CentOS 7+)
- 系统盘:≥20GB
- 内存:≥2GB(生产环境建议 ≥4GB)
- 带宽:按需选择(初期可选按量付费,后续转为固定带宽)
- 设置安全组规则:
- 放行
80(HTTP)、443(HTTPS)、22(SSH) - 若用数据库独立部署,还需放行对应端口(如 5432、3306),但强烈建议将数据库放在内网,仅允许应用服务器访问
- 放行
2. 远程连接
ssh root@<你的公网IP>
# 首次登录需修改 root 密码或改用密钥认证(推荐)
✅ 二、安装基础依赖
# 更新系统
sudo apt update && sudo apt upgrade -y # Ubuntu
# 或
sudo yum update -y # CentOS
# 安装 Python 3、pip、git、构建工具
sudo apt install python3-pip git build-essential libpq-dev nginx -y
# 验证版本
python3 --version
pip3 --version
nginx -v
💡 建议创建虚拟环境避免污染系统 Python:
python3 -m venv /opt/django-env source /opt/django-env/bin/activate pip install --upgrade pip
✅ 三、上传项目代码
方式一:Git 拉取(推荐)
cd /var/www
git clone https://github.com/yourname/your-django-project.git
cd your-django-project
方式二:本地打包上传
# 本地压缩
tar czf project.tar.gz your_project_folder/
# 上传到服务器(scp)
scp project.tar.gz root@<你的公网IP>:/var/www/
# 解压
cd /var/www && tar xzf project.tar.gz
✅ 四、配置 Django 项目
1. 安装依赖
source /opt/django-env/bin/activate
pip install -r requirements.txt
# 确保包含:gunicorn, psycopg2-binary (PostgreSQL), django-cors-headers 等
2. 修改 settings.py
# ALLOWED_HOSTS 必须包含域名或 IP
ALLOWED_HOSTS = ['your-domain.com', 'localhost', '127.0.0.1', '<ECS内网IP>']
# 静态文件配置(生产环境必须设置 STATIC_ROOT)
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
# 媒体文件(可选)
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
# 数据库(示例:PostgreSQL)
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'your_db_name',
'USER': 'your_db_user',
'PASSWORD': 'your_db_password',
'HOST': 'localhost', # 若 DB 同机;否则填内网 IP
'PORT': '5432',
}
}
# 关闭 DEBUG(生产环境严禁开启!)
DEBUG = False
SECRET_KEY = 'your-secret-key-here' # 从环境变量读取更安全
✅ 安全提示:SECRET_KEY 和数据库密码应通过环境变量管理,避免硬编码:
import os
SECRET_KEY = os.getenv('DJANGO_SECRET_KEY')
3. 收集静态文件
python manage.py collectstatic --noinput
# 确认生成的 staticfiles 目录权限正确
sudo chown -R www-data:www-data /var/www/your-project/staticfiles
✅ 五、启动 Gunicorn(WSGI 服务)
方案 A:使用 systemd 管理(推荐)
1. 创建服务文件
sudo nano /etc/systemd/system/gunicorn.service
内容示例:
[Unit]
Description=gunicorn daemon for your-django-project
After=network.target
[Service]
User=www-data
Group=www-data
WorkingDirectory=/var/www/your-django-project
Environment="PATH=/opt/django-env/bin"
ExecStart=/opt/django-env/bin/gunicorn
--workers 3
--bind unix:/var/www/your-django-project/gunicorn.sock
yourproject.wsgi:application
[Install]
WantedBy=multi-user.target
🔔 替换
yourproject为你的 Django 项目名称(含manage.py的目录名)
2. 启用并启动服务
sudo systemctl daemon-reload
sudo systemctl enable gunicorn
sudo systemctl start gunicorn
sudo systemctl status gunicorn # 检查状态
✅ 六、配置 Nginx 反向X_X
1. 创建站点配置
sudo nano /etc/nginx/sites-available/your-django-site
内容示例:
server {
listen 80;
server_name your-domain.com www.your-domain.com;
# 静态文件直接由 Nginx 提供
location /static/ {
alias /var/www/your-django-project/staticfiles/;
expires 30d;
add_header Cache-Control "public, immutable";
}
location /media/ {
alias /var/www/your-django-project/media/;
expires 30d;
}
# 动态请求转发给 Gunicorn
location / {
include proxy_params;
proxy_pass http://unix:/var/www/your-django-project/gunicorn.sock;
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;
}
}
2. 启用站点
sudo ln -s /etc/nginx/sites-available/your-django-site /etc/nginx/sites-enabled/
sudo nginx -t # 测试配置
sudo systemctl restart nginx
✅ 七、(可选)配置 HTTPS(Let’s Encrypt)
sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d your-domain.com -d www.your-domain.com
# 自动完成配置并重载 Nginx
✅ Certbot 会自动更新证书并配置 HTTP→HTTPS 重定向。
✅ 八、数据库部署建议(进阶)
| 场景 | 推荐方案 |
|---|---|
| 小型项目 | Django + SQLite(仅限开发) Django + 本地 PostgreSQL(单机) |
| 中大型项目 | RDS PostgreSQL/MySQL(阿里云托管数据库) • 高可用、自动备份、监控 • 应用与 DB 分离,提升安全性 |
👉 若使用 RDS:
- 创建 RDS 实例 → 获取内网地址
- 在 Django
settings.py中设置HOST = <RDS内网地址> - 在 ECS 安全组中放行 RDS 的安全组 ID(仅允许该 ECS 访问)
✅ 九、运维与监控建议
- 📊 日志:查看
/var/log/nginx/和 Gunicorn 日志(可配置systemd输出到 journal) - 🔄 自动重启:
systemd已配置Restart=always - 🛡️ 防火墙:启用
ufw(Ubuntu)或firewalld(CentOS) - 📦 定期备份:
# 数据库备份脚本 pg_dump -U your_user your_db > backup_$(date +%F).sql - 🚀 弹性伸缩:结合 SLB + Auto Scaling(未来扩展时考虑)
🔗 参考资源
- Django 官方部署指南
- 阿里云 ECS 最佳实践
- Gunicorn 文档
- Nginx + Django 配置模板
需要我为你生成一个完整的 docker-compose.yml 方案?或者针对特定场景(如多租户、微服务拆分、CI/CD 流水线)提供定制部署脚本吗?欢迎告诉我你的具体需求 😊
云服务器