在阿里云部署 Django 应用,推荐采用 ECS + Nginx + Gunicorn + PostgreSQL/MySQL 的经典架构。以下是详细步骤(以 Ubuntu 22.04 为例):
✅ 一、前期准备
-
购买并登录 ECS 实例
- 选择 Ubuntu 22.04 LTS 镜像
- 配置安全组:开放
80(HTTP)、443(HTTPS)、22(SSH),如需数据库网络访问可额外开放5432/3306(生产环境建议仅内网访问) - 绑定弹性公网 IP(EIP)或确保实例已分配公网 IP
-
本地准备项目
- 完成
requirements.txt生成:pip freeze > requirements.txt - 确保
settings.py中:DEBUG = False ALLOWED_HOSTS = ['your-domain.com', 'your-ecs-ip'] STATIC_ROOT = '/var/www/static' MEDIA_ROOT = '/var/www/media'
- 完成
✅ 二、服务器端部署步骤
1. 安装基础依赖
sudo apt update && sudo apt upgrade -y
sudo apt install python3-pip python3-venv nginx postgresql git curl -y
2. 创建虚拟环境与项目目录
sudo mkdir -p /var/www/myproject
cd /var/www/myproject
python3 -m venv venv
source venv/bin/activate
# 安装依赖
pip install --upgrade pip
pip install gunicorn psycopg2-binary django==4.2.* # 替换为你的版本
3. 上传代码
方式一:Git 拉取(推荐)
git clone https://github.com/your/repo.git .
方式二:SCP 上传本地项目包后解压
⚠️ 注意:
.env文件含敏感信息,切勿提交到 Git;改用环境变量或阿里云 SSM Parameter Store / KMS 管理密钥。
4. 收集静态文件 & 迁移数据库
python manage.py collectstatic --noinput
python manage.py migrate
5. 配置 Gunicorn(WSGI 服务)
创建 systemd 服务 /etc/systemd/system/gunicorn.service:
[Unit]
Description=gunicorn daemon for myproject
After=network.target
[Service]
User=www-data
Group=www-data
WorkingDirectory=/var/www/myproject
Environment="PATH=/var/www/myproject/venv/bin"
ExecStart=/var/www/myproject/venv/bin/gunicorn
--workers 3
--bind unix:/var/www/myproject/gunicorn.sock
myproject.wsgi:application
[Install]
WantedBy=multi-user.target
启用服务:
sudo systemctl daemon-reload
sudo systemctl enable gunicorn
sudo systemctl start gunicorn
6. 配置 Nginx(反向X_X)
编辑 /etc/nginx/sites-available/myproject:
server {
listen 80;
server_name your-domain.com www.your-domain.com;
location = /favicon.ico { access_log off; log_not_found off; }
location /static/ {
alias /var/www/myproject/static/;
}
location /media/ {
alias /var/www/myproject/media/;
}
location / {
include proxy_params;
proxy_pass http://unix:/var/www/myproject/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;
}
}
启用站点:
sudo ln -s /etc/nginx/sites-available/myproject /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl restart nginx
7. 配置数据库(可选但推荐)
- 若使用 RDS PostgreSQL/MySQL:
- 在阿里云控制台创建 RDS 实例
- 修改
DATABASES配置指向 RDS 地址(内网 IP)+ 用户名/密码 - 在 ECS 安全组允许 RDS 的白名单(添加 ECS 私网 IP)
- 若本地运行 MySQL/PostgreSQL:
CREATE DATABASE mydb OWNER myuser; GRANT ALL PRIVILEGES ON DATABASE mydb TO myuser;
8. 设置环境变量(生产级实践)
避免硬编码密钥,使用 .env 或系统变量:
echo "SECRET_KEY=your-secret-key-here" | sudo tee /etc/default/myproject.env
# 在 wsgi.py 中加载
import os
from dotenv import load_dotenv
load_dotenv('/etc/default/myproject.env')
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings')
或使用阿里云 SSM Parameter Store 存储敏感配置。
✅ 三、进阶优化(生产必备)
| 项目 | 建议方案 |
|---|---|
| HTTPS | 申请免费 SSL 证书(Let’s Encrypt / 阿里云 SSL 服务),用 Certbot 自动续期 |
| 监控告警 | 接入阿里云云监控 + SLS(日志服务)+ ARMS(APM) |
| 备份 | 定时快照 ECS 磁盘 + RDS 自动备份 + OSS 归档 |
| CI/CD | 结合阿里云 CodePipeline / GitHub Actions + 自动化部署脚本 |
| 高可用 | 多 ECS + SLB 负载均衡 + 主从数据库 |
🔍 验证部署
curl -I http://your-domain.com
# 应返回 HTTP/1.1 200 OK
检查日志排查问题:
sudo tail -f /var/log/nginx/error.log
sudo journalctl -u gunicorn -f
需要我提供:
- 📦 完整的
Dockerfile+docker-compose.yml方案? - 🌐 带 HTTPS 自动续期的 Nginx 配置模板?
- ☁️ 直接通过阿里云 Serverless 应用引擎(SAE)部署 Django 的步骤?
欢迎告诉我你的具体需求场景(如:是否需容器化、是否有域名、预算限制等),我可定制更精准的方案。
云知识CLOUD