如何在阿里云部署Django应用程序?

在阿里云部署 Django 应用,推荐采用 ECS + Nginx + Gunicorn + PostgreSQL/MySQL 的经典架构。以下是详细步骤(以 Ubuntu 22.04 为例):


✅ 一、前期准备

  1. 购买并登录 ECS 实例

    • 选择 Ubuntu 22.04 LTS 镜像
    • 配置安全组:开放 80(HTTP)、443(HTTPS)、22(SSH),如需数据库网络访问可额外开放 5432/3306生产环境建议仅内网访问
    • 绑定弹性公网 IP(EIP)或确保实例已分配公网 IP
  2. 本地准备项目

    • 完成 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 » 如何在阿里云部署Django应用程序?