在阿里云部署 Django 应用程序,推荐使用 ECS(云服务器)+ Nginx + Gunicorn/uWSGI + PostgreSQL/MySQL 的经典架构。以下是完整、可操作的部署步骤(以 Ubuntu 20.04 为例):
✅ 一、准备工作
1. 购买并配置 ECS 实例
- 登录 阿里云控制台
- 创建 ECS 实例(推荐:Ubuntu 20.04 LTS,至少 2 核 4G)
- 安全组开放端口:
22(SSH)80(HTTP)443(HTTPS,可选)- ❗不要直接暴露 Django 开发端口(如 8000)
2. 本地准备项目
确保你的 Django 项目包含:
# 必要文件
manage.py
requirements.txt # 依赖列表(含 gunicorn, psycopg2-binary 等)
static/ # collectstatic 后的静态文件
media/ # 用户上传文件目录(可选)
settings/prod.py # 生产环境配置(或修改默认 settings)
💡 建议将
DEBUG = False、ALLOWED_HOSTS、数据库密码等敏感信息通过环境变量管理。
✅ 二、上传项目到服务器
方法 1:使用 Git(推荐)
# 在服务器上克隆项目
git clone https://github.com/yourname/your-django-project.git /opt/django-app
cd /opt/django-app
方法 2:压缩包上传
# 本地打包
zip -r django-project.zip .
# 上传到服务器(scp)
scp django-project.zip root@<your-server-ip>:/tmp/
# 解压
ssh root@<your-server-ip>
unzip /tmp/django-project.zip -d /opt/django-app
✅ 三、安装基础环境
# 更新系统
sudo apt update && sudo apt upgrade -y
# 安装 Python 及依赖
sudo apt install python3-pip python3-venv python3-dev nginx postgresql -y
# 创建虚拟环境
python3 -m venv /opt/django-app/venv
source /opt/django-app/venv/bin/activate
# 安装 Python 依赖
pip install --upgrade pip
pip install -r requirements.txt
# 若用 PostgreSQL,需额外安装:
# pip install psycopg2-binary
⚠️ 注意:
psycopg2编译需libpq-dev,已随postgresql包提供。
✅ 四、配置 Django 生产环境
1. 修改 settings.py(或新建 prod.py)
import os
from pathlib import Path
BASE_DIR = Path(__file__).resolve().parent.parent
# 生产环境关键设置
DEBUG = False
ALLOWED_HOSTS = ['your-domain.com', 'your-server-ip']
# 数据库(以 PostgreSQL 为例)
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': os.getenv('DB_NAME'),
'USER': os.getenv('DB_USER'),
'PASSWORD': os.getenv('DB_PASSWORD'),
'HOST': os.getenv('DB_HOST', 'localhost'),
'PORT': os.getenv('DB_PORT', '5432'),
}
}
# 静态文件
STATIC_URL = '/static/'
STATIC_ROOT = BASE_DIR / 'staticfiles' # 收集后的目录
MEDIA_URL = '/media/'
MEDIA_ROOT = BASE_DIR / 'media'
# 安全设置
SECURE_SSL_REDIRECT = True # 启用 HTTPS 后开启
SESSION_COOKIE_SECURE = True
CSRF_COOKIE_SECURE = True
2. 收集静态文件
python manage.py collectstatic --noinput
3. 执行数据库迁移
python manage.py migrate
4. 创建超级用户(可选)
python manage.py createsuperuser
✅ 五、启动应用服务
方案 A:使用 Gunicorn(推荐)
1. 创建 systemd 服务文件
sudo nano /etc/systemd/system/gunicorn.service
内容如下:
[Unit]
Description=gunicorn daemon for myproject
After=network.target
[Service]
User=root
Group=www-data
WorkingDirectory=/opt/django-app
Environment="PATH=/opt/django-app/venv/bin"
ExecStart=/opt/django-app/venv/bin/gunicorn
--workers 3
--bind unix:/opt/django-app/gunicorn.sock
myproject.wsgi:application
[Install]
WantedBy=multi-user.target
🔁 替换
myproject为你的 Django 项目名(即manage.py所在目录名)。
2. 启动并设置开机自启
sudo systemctl daemon-reload
sudo systemctl start gunicorn
sudo systemctl enable gunicorn
sudo systemctl status gunicorn
✅ 验证:gunicorn.sock 应生成在 /opt/django-app/ 目录下。
✅ 六、配置 Nginx 反向X_X
1. 创建站点配置
sudo nano /etc/nginx/sites-available/myproject
示例配置:
server {
listen 80;
server_name your-domain.com your-server-ip;
# 静态文件
location /static/ {
alias /opt/django-app/staticfiles/;
}
# 媒体文件
location /media/ {
alias /opt/django-app/media/;
}
# 动态请求转发给 Gunicorn
location / {
include proxy_params;
proxy_pass http://unix:/opt/django-app/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. 启用站点并重启 Nginx
sudo ln -s /etc/nginx/sites-available/myproject /etc/nginx/sites-enabled/
sudo rm /etc/nginx/sites-enabled/default # 禁用默认站
sudo nginx -t
sudo systemctl restart nginx
✅ 访问 http://your-server-ip 或域名,应看到 Django 首页。
✅ 七、(可选)启用 HTTPS(Let’s Encrypt)
sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d your-domain.com
按提示操作即可自动配置 SSL 并重定向 HTTP→HTTPS。
✅ 八、监控与维护建议
| 项目 | 建议 |
|---|---|
| 日志 | journalctl -u gunicorn -f;Nginx 日志在 /var/log/nginx/ |
| 备份 | 定期备份数据库(pg_dump)和 staticfiles/、media/ |
| 安全 | 关闭 SSH 密码登录,改用密钥;限制 root 远程登录 |
| 扩展 | 高并发时可增加 Gunicorn workers 数;考虑 CDN 提速静态资源 |
📦 替代方案参考
| 场景 | 推荐方案 |
|---|---|
| 快速原型 / 小流量 | 阿里云 轻量应用服务器(内置 Django 镜像模板) |
| 高可用 / 弹性伸缩 | ACK(容器服务 Kubernetes)+ Helm 部署 |
| 无运维负担 | 云效 + Serverless 函数计算(FC)(需改造为 WSGI Lambda) |
需要我为你提供:
- 完整的
docker-compose.yml部署方案? - 自动化脚本(Ansible/Bash)一键部署?
- 针对 MySQL 版本的配置差异说明?
欢迎告诉我你的具体需求,我可以进一步定制!
CLOUD云枢