速卖通素材
努力

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

服务器

在阿里云部署 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 LTSCentOS 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-decoupledjango-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 托管静态/媒体文件

若希望解耦静态资源:

  1. 安装 boto3django-storages
  2. 配置 DEFAULT_FILE_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
  3. 设置 AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_STORAGE_BUCKET_NAME
  4. 使用 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 » 如何在阿里云部署Django应用程序?