在阿里云部署 Django 应用程序,通常推荐采用 ECS(云服务器)+ Nginx + Gunicorn/UWSGI + PostgreSQL/MySQL 的经典架构。以下是详细步骤指南:
一、前期准备
1. 注册并登录阿里云
- 访问 https://www.aliyun.com
- 完成实名认证,开通 ECS 服务
2. 创建安全组规则
在 ECS 控制台 → 实例 → 安全组 → 配置规则:
- 开放
80(HTTP)、443(HTTPS) - 如需 SSH 管理,开放
22(建议限制 IP 范围) - 数据库端口(如
5432/3306)不要对公网开放,仅允许内网或特定 IP
二、购买并初始化 ECS 实例
1. 选择实例规格
- 推荐:通用型 g7/g8(至少 2 vCPU + 4GB 内存)
- 操作系统:Ubuntu 22.04 LTS 或 CentOS 7/8(这里以 Ubuntu 为例)
2. 初始化系统
SSH 登录服务器:
ssh -i your-key.pem ubuntu@<your-ecs-ip>
更新系统并安装基础工具:
sudo apt update && sudo apt upgrade -y
sudo apt install -y python3-pip python3-venv nginx git curl
三、部署 Django 应用
方案 A:使用 Python 虚拟环境 + Gunicorn(推荐)
1. 创建项目目录
cd /var/www
sudo mkdir myproject
cd myproject
sudo chown $USER:$USER .
2. 克隆代码(或使用本地打包上传)
git clone <your-repo-url> .
# 或从本地上传:scp -r /path/to/project ubuntu@<ip>:/var/www/myproject
3. 创建虚拟环境并安装依赖
python3 -m venv venv
source venv/bin/activate
pip install --upgrade pip
pip install -r requirements.txt
# 确保包含: django, gunicorn, psycopg2-binary (PostgreSQL), whitenoise (可选静态文件托管)
4. 配置 Django 设置(settings.py)
修改以下关键项:
ALLOWED_HOSTS = ['<your-domain>', 'localhost', '<your-ecs-ip>']
STATIC_ROOT = '/var/www/myproject/staticfiles'
STATIC_URL = '/static/'
# 生产环境关闭 DEBUG
DEBUG = False
# 若使用 HTTPS,可启用 SECURE_SSL_REDIRECT(需先配好证书)
# SECURE_SSL_REDIRECT = True
5. 收集静态文件
python manage.py collectstatic --noinput
6. 迁移数据库 & 创建超级用户
python manage.py migrate
python manage.py createsuperuser # 可选
💡 若使用远程数据库(如 RDS),请提前配置
DATABASES和.env变量(可用python-decouple或django-environ)
四、配置 Gunicorn 作为 WSGI 服务器
1. 创建 systemd 服务文件
sudo nano /etc/systemd/system/myproject.service
内容示例:
[Unit]
Description=Gunicorn instance to serve myproject
After=network.target
[Service]
User=ubuntu
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/myproject.sock
myproject.wsgi:application
[Install]
WantedBy=multi-user.target
⚠️ 替换
myproject.wsgi:application为实际模块路径(如myapp.wsgi.application)
启动服务:
sudo systemctl daemon-reload
sudo systemctl enable myproject
sudo systemctl start myproject
sudo systemctl status myproject
五、配置 Nginx 反向X_X
1. 创建 Nginx 站点配置
sudo nano /etc/nginx/sites-available/myproject
内容示例:
server {
listen 80;
server_name <your-domain> <your-ecs-ip>;
location = /favicon.ico { access_log off; log_not_found off; }
location /static/ {
alias /var/www/myproject/staticfiles/;
}
location / {
include proxy_params;
proxy_pass http://unix:/var/www/myproject/myproject.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/myproject /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl restart nginx
六、(可选)配置 HTTPS(Let’s Encrypt)
安装 Certbot:
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d <your-domain>
按提示操作即可自动配置 SSL 并重定向 HTTP→HTTPS。
七、(可选)使用阿里云对象存储 OSS 托管静态/媒体文件
若希望解耦静态资源:
- 安装
boto3和django-storages - 配置
DEFAULT_FILE_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage' - 设置
AWS_ACCESS_KEY_ID,AWS_SECRET_ACCESS_KEY,AWS_STORAGE_BUCKET_NAME - 使用
collectstatic上传至 OSS
✅ 优势:减轻 ECS 负载,提升 CDN 提速效果
八、监控与备份建议
| 项目 | 建议 |
|---|---|
| 日志 | journalctl -u myproject;Nginx 日志 /var/log/nginx/ |
| 监控 | 安装 htop, nmon;或使用阿里云云监控 Agent |
| 备份 | 定期 mysqldump / pg_dump;用 rsync 或 OSS 备份数据 |
| 安全 | 禁用 root 登录;开启 fail2ban;定期更新系统 |
替代方案(更简化)
- 阿里云容器服务 ACK:将 Django 打包为 Docker 镜像,部署到 Kubernetes 集群(适合高可用场景)
- Web 应用防火墙 WAF + SLB + ECS:构建完整防护体系
- Serverless 函数计算 FC:Django 不直接支持,但可配合 API Gateway + 轻量后端实现部分功能
需要我提供:
- ✅ 完整的
requirements.txt示例? - ✅ Dockerfile + docker-compose 部署方案?
- ✅ 自动化脚本(Ansible/Bash)一键部署模板?
欢迎告诉我你的具体需求(如是否用 RDS、是否需要多实例、预算等),我可以进一步定制方案。
轻量云Cloud