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

在阿里云部署 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 = FalseALLOWED_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云枢 » 如何在阿里云部署Django应用程序?