在阿里云部署 Django 应用程序,通常推荐使用 ECS(云服务器)+ Nginx + Gunicorn/uWSGI + MySQL/PostgreSQL 的经典架构。以下是详细步骤指南:
一、前期准备
1. 注册并登录阿里云
- 访问 阿里云官网
- 完成实名认证,开通 ECS 服务
2. 购买 ECS 实例
- 选择操作系统:Ubuntu 20.04/22.04 LTS 或 CentOS 7+/8
- 配置建议(开发/测试可降级):
- CPU:2 核及以上
- 内存:4GB 及以上
- 系统盘:40GB+
- 带宽:5Mbps 起(按流量或固定带宽)
- 安全组规则需开放:
22(SSH)80(HTTP)443(HTTPS,可选)8000(Gunicorn 默认端口,后续会由 Nginx X_X)
✅ 建议创建密钥对用于 SSH 登录,避免密码泄露风险。
二、连接服务器并安装基础环境
# 通过本地终端连接(替换 YOUR_IP 和 key.pem)
ssh -i ~/key.pem root@YOUR_IP
# 更新系统包
sudo apt update && sudo apt upgrade -y # Ubuntu
# 或
sudo yum update -y # CentOS
# 安装 Python 3、pip、git、构建工具
sudo apt install python3 python3-pip git curl nginx supervisor -y
# CentOS: sudo yum install epel-release && sudo yum install python3 python3-pip git nginx -y
# 验证版本
python3 --version
pip3 --version
nginx -v
三、部署 Django 项目
方法 A:从 Git 仓库克隆(推荐)
cd /var/www
sudo git clone https://github.com/yourusername/your-django-project.git
cd your-django-project
# 创建虚拟环境
python3 -m venv venv
source venv/bin/activate
# 安装依赖
pip install --upgrade pip
pip install -r requirements.txt
# 注意:生产环境必须包含 gunicorn, psycopg2-binary (或 mysqlclient), django-storages 等
# 设置环境变量(建议用 .env 文件 + python-decouple 或 django-environ)
cp .env.example .env # 如有示例模板
# 编辑 .env 设置 SECRET_KEY, DEBUG=False, DATABASE_URL 等
方法 B:上传代码后解压
使用 scp 或 SFTP 工具将项目压缩包上传到 /var/www,再解压安装。
四、配置数据库(以 PostgreSQL 为例)
# 安装 PostgreSQL
sudo apt install postgresql postgresql-contrib -y
# 初始化数据库用户与库
sudo -u postgres psql
CREATE DATABASE mydb;
CREATE USER myuser WITH PASSWORD 'strong_password';
GRANT ALL PRIVILEGES ON DATABASE mydb TO myuser;
q
# 修改 settings.py 中的 DATABASES 配置:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'mydb',
'USER': 'myuser',
'PASSWORD': 'strong_password',
'HOST': 'localhost',
'PORT': '5432',
}
}
💡 若用 MySQL:
sudo apt install mysql-server sudo mysql_secure_installation # 创建库和用户,类似上述
五、运行迁移 & 收集静态文件
source venv/bin/activate
python manage.py migrate
python manage.py collectstatic --noinput # 确保 STATIC_ROOT 已设置
✅ 测试本地运行(临时):
python manage.py runserver 0.0.0.0:8000
浏览器访问 http://YOUR_IP:8000 确认正常 → 停止服务(Ctrl+C)。
六、配置 Gunicorn 作为 WSGI 服务器
方式 1:使用 systemd 管理(推荐)
创建启动脚本 /etc/systemd/system/django.service:
[Unit]
Description=Django Application
After=network.target
[Service]
User=ubuntu # 替换为你的非 root 用户
Group=www-data
WorkingDirectory=/var/www/your-django-project
Environment="PATH=/var/www/your-django-project/venv/bin"
ExecStart=/var/www/your-django-project/venv/bin/gunicorn
--workers 3
--bind unix:/tmp/django.sock
your_project.wsgi:application
Restart=always
[Install]
WantedBy=multi-user.target
⚠️ 替换
your_project.wsgi为实际路径(如myapp.wsgi),并确保manage.py所在目录有wsgi.py
启用并启动服务:
sudo systemctl daemon-reload
sudo systemctl enable django
sudo systemctl start django
sudo systemctl status django
七、配置 Nginx 反向X_X
1. 创建站点配置 /etc/nginx/sites-available/django
server {
listen 80;
server_name your-domain.com www.your-domain.com; # 或直接用 IP
location /media {
alias /var/www/your-django-project/media/;
}
location /static {
alias /var/www/your-django-project/staticfiles/;
}
location / {
include proxy_params;
proxy_pass http://unix:/tmp/django.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/django /etc/nginx/sites-enabled/
sudo rm /etc/nginx/sites-enabled/default # 禁用默认站点
sudo nginx -t
sudo systemctl reload 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 配置并开启 HTTPS
✅ 建议定期执行
sudo certbot renew --dry-run测试续期。
九、安全加固建议
| 项目 | 操作 |
|---|---|
| SSH 安全 | 禁用 root 登录,改用密钥;修改默认端口(可选) |
| 防火墙 | 使用 ufw 限制仅开放必要端口:sudo ufw allow 22/tcp && sudo ufw allow 80/tcp && sudo ufw allow 443/tcp && sudo ufw enable |
| Django 设置 | DEBUG = FalseALLOWED_HOSTS = ['your-domain.com', 'YOUR_IP']启用 CSRF/CORS 中间件 |
| 备份 | 定期备份数据库 + 静态文件(可用阿里云 OSS + Cron 任务) |
十、监控与维护
- 查看日志:
journalctl -u django -f tail -f /var/log/nginx/error.log - 性能优化:
- 启用 Redis 缓存 (
django-redis) - 使用 CDN 提速静态资源
- 数据库读写分离(高并发场景)
- 启用 Redis 缓存 (
🎯 快速检查清单 ✅
- [ ] ECS 安全组开放 80/443/22
- [ ] Django
DEBUG=False,ALLOWED_HOSTS正确 - [ ] 静态文件已
collectstatic并映射到 Nginx - [ ] Gunicorn 通过 socket 监听且 systemd 自启
- [ ] Nginx 反向X_X配置无误
- [ ] 数据库连接正常(测试
python manage.py shell中查询) - [ ] HTTPS 证书有效(如启用)
需要我为你生成:
- 完整的
requirements.txt示例? - Docker 化部署方案(Docker Compose + Nginx)?
- 一键部署脚本(Shell + Ansible)?
欢迎告诉我你的具体需求 😊
CLOUD云计算