奋斗
努力

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

云计算

在阿里云部署 Django 应用程序,推荐使用 ECS(云服务器)+ Nginx + Gunicorn/Uwsgi + PostgreSQL/MySQL 的经典架构。以下是完整、可落地的部署流程:


✅ 一、前期准备

1. 购买并配置 ECS 实例

  • 登录 阿里云控制台
  • 创建 ECS 实例(推荐 Ubuntu 20.04/22.04 或 CentOS 7+)
    • 系统盘:≥20GB
    • 内存:≥2GB(生产环境建议 ≥4GB)
    • 带宽:按需选择(初期可选按量付费,后续转为固定带宽)
  • 设置安全组规则:
    • 放行 80(HTTP)、443(HTTPS)、22(SSH)
    • 若用数据库独立部署,还需放行对应端口(如 5432、3306),但强烈建议将数据库放在内网,仅允许应用服务器访问

2. 远程连接

ssh root@<你的公网IP>
# 首次登录需修改 root 密码或改用密钥认证(推荐)

✅ 二、安装基础依赖

# 更新系统
sudo apt update && sudo apt upgrade -y   # Ubuntu
# 或
sudo yum update -y                       # CentOS

# 安装 Python 3、pip、git、构建工具
sudo apt install python3-pip git build-essential libpq-dev nginx -y

# 验证版本
python3 --version
pip3 --version
nginx -v

💡 建议创建虚拟环境避免污染系统 Python:

python3 -m venv /opt/django-env
source /opt/django-env/bin/activate
pip install --upgrade pip

✅ 三、上传项目代码

方式一:Git 拉取(推荐)

cd /var/www
git clone https://github.com/yourname/your-django-project.git
cd your-django-project

方式二:本地打包上传

# 本地压缩
tar czf project.tar.gz your_project_folder/

# 上传到服务器(scp)
scp project.tar.gz root@<你的公网IP>:/var/www/

# 解压
cd /var/www && tar xzf project.tar.gz

✅ 四、配置 Django 项目

1. 安装依赖

source /opt/django-env/bin/activate
pip install -r requirements.txt
# 确保包含:gunicorn, psycopg2-binary (PostgreSQL), django-cors-headers 等

2. 修改 settings.py

# ALLOWED_HOSTS 必须包含域名或 IP
ALLOWED_HOSTS = ['your-domain.com', 'localhost', '127.0.0.1', '<ECS内网IP>']

# 静态文件配置(生产环境必须设置 STATIC_ROOT)
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')

# 媒体文件(可选)
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

# 数据库(示例:PostgreSQL)
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'your_db_name',
        'USER': 'your_db_user',
        'PASSWORD': 'your_db_password',
        'HOST': 'localhost',  # 若 DB 同机;否则填内网 IP
        'PORT': '5432',
    }
}

# 关闭 DEBUG(生产环境严禁开启!)
DEBUG = False
SECRET_KEY = 'your-secret-key-here'  # 从环境变量读取更安全

✅ 安全提示:SECRET_KEY 和数据库密码应通过环境变量管理,避免硬编码:

import os
SECRET_KEY = os.getenv('DJANGO_SECRET_KEY')

3. 收集静态文件

python manage.py collectstatic --noinput
# 确认生成的 staticfiles 目录权限正确
sudo chown -R www-data:www-data /var/www/your-project/staticfiles

✅ 五、启动 Gunicorn(WSGI 服务)

方案 A:使用 systemd 管理(推荐)

1. 创建服务文件

sudo nano /etc/systemd/system/gunicorn.service

内容示例:

[Unit]
Description=gunicorn daemon for your-django-project
After=network.target

[Service]
User=www-data
Group=www-data
WorkingDirectory=/var/www/your-django-project
Environment="PATH=/opt/django-env/bin"
ExecStart=/opt/django-env/bin/gunicorn 
    --workers 3 
    --bind unix:/var/www/your-django-project/gunicorn.sock 
    yourproject.wsgi:application

[Install]
WantedBy=multi-user.target

🔔 替换 yourproject 为你的 Django 项目名称(含 manage.py 的目录名)

2. 启用并启动服务

sudo systemctl daemon-reload
sudo systemctl enable gunicorn
sudo systemctl start gunicorn
sudo systemctl status gunicorn  # 检查状态

✅ 六、配置 Nginx 反向X_X

1. 创建站点配置

sudo nano /etc/nginx/sites-available/your-django-site

内容示例:

server {
    listen 80;
    server_name your-domain.com www.your-domain.com;

    # 静态文件直接由 Nginx 提供
    location /static/ {
        alias /var/www/your-django-project/staticfiles/;
        expires 30d;
        add_header Cache-Control "public, immutable";
    }

    location /media/ {
        alias /var/www/your-django-project/media/;
        expires 30d;
    }

    # 动态请求转发给 Gunicorn
    location / {
        include proxy_params;
        proxy_pass http://unix:/var/www/your-django-project/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. 启用站点

sudo ln -s /etc/nginx/sites-available/your-django-site /etc/nginx/sites-enabled/
sudo nginx -t          # 测试配置
sudo systemctl restart 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

✅ Certbot 会自动更新证书并配置 HTTP→HTTPS 重定向。


✅ 八、数据库部署建议(进阶)

场景 推荐方案
小型项目 Django + SQLite(仅限开发)
Django + 本地 PostgreSQL(单机)
中大型项目 RDS PostgreSQL/MySQL(阿里云托管数据库)
• 高可用、自动备份、监控
• 应用与 DB 分离,提升安全性

👉 若使用 RDS:

  1. 创建 RDS 实例 → 获取内网地址
  2. 在 Django settings.py 中设置 HOST = <RDS内网地址>
  3. 在 ECS 安全组中放行 RDS 的安全组 ID(仅允许该 ECS 访问)

✅ 九、运维与监控建议

  • 📊 日志:查看 /var/log/nginx/ 和 Gunicorn 日志(可配置 systemd 输出到 journal)
  • 🔄 自动重启:systemd 已配置 Restart=always
  • 🛡️ 防火墙:启用 ufw(Ubuntu)或 firewalld(CentOS)
  • 📦 定期备份:
    # 数据库备份脚本
    pg_dump -U your_user your_db > backup_$(date +%F).sql
  • 🚀 弹性伸缩:结合 SLB + Auto Scaling(未来扩展时考虑)

🔗 参考资源

  • Django 官方部署指南
  • 阿里云 ECS 最佳实践
  • Gunicorn 文档
  • Nginx + Django 配置模板

需要我为你生成一个完整的 docker-compose.yml 方案?或者针对特定场景(如多租户、微服务拆分、CI/CD 流水线)提供定制部署脚本吗?欢迎告诉我你的具体需求 😊

未经允许不得转载:云服务器 » 如何在阿里云部署Django应用程序?