走啊走
加油

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

服务器价格表

在阿里云部署 Django 应用程序,通常推荐使用 ECS(云服务器)+ Nginx + Gunicorn/uWSGI + MySQL/PostgreSQL 的经典架构。以下是详细步骤指南:


一、前期准备

1. 注册并登录阿里云

  • 访问 阿里云官网
  • 完成实名认证,开通 ECS 服务

2. 购买 ECS 实例

  • 选择操作系统:Ubuntu 20.04/22.04 LTSCentOS 7+/8
  • 配置建议(开发/测试可降级):
    • CPU:2 核及以上
    • 内存:4GB 及以上
    • 系统盘:40GB+
    • 带宽:5Mbps 起(按流量或固定带宽)
  • 安全组规则需开放:
    • 22(SSH)
    • 80(HTTP)
    • 443(HTTPS,可选)
    • 8000(Gunicorn 默认端口,后续会由 Nginx X_X)

✅ 建议创建密钥对用于 SSH 登录,避免密码泄露风险。


二、连接服务器并安装基础环境

# 通过本地终端连接(替换 YOUR_IP 和 key.pem)
ssh -i ~/key.pem root@YOUR_IP

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

# 安装 Python 3、pip、git、构建工具
sudo apt install python3 python3-pip git curl nginx supervisor -y
# CentOS: sudo yum install epel-release && sudo yum install python3 python3-pip git nginx -y

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

三、部署 Django 项目

方法 A:从 Git 仓库克隆(推荐)

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

# 创建虚拟环境
python3 -m venv venv
source venv/bin/activate

# 安装依赖
pip install --upgrade pip
pip install -r requirements.txt
# 注意:生产环境必须包含 gunicorn, psycopg2-binary (或 mysqlclient), django-storages 等

# 设置环境变量(建议用 .env 文件 + python-decouple 或 django-environ)
cp .env.example .env  # 如有示例模板
# 编辑 .env 设置 SECRET_KEY, DEBUG=False, DATABASE_URL 等

方法 B:上传代码后解压

使用 scp 或 SFTP 工具将项目压缩包上传到 /var/www,再解压安装。


四、配置数据库(以 PostgreSQL 为例)

# 安装 PostgreSQL
sudo apt install postgresql postgresql-contrib -y

# 初始化数据库用户与库
sudo -u postgres psql
CREATE DATABASE mydb;
CREATE USER myuser WITH PASSWORD 'strong_password';
GRANT ALL PRIVILEGES ON DATABASE mydb TO myuser;
q

# 修改 settings.py 中的 DATABASES 配置:
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'mydb',
        'USER': 'myuser',
        'PASSWORD': 'strong_password',
        'HOST': 'localhost',
        'PORT': '5432',
    }
}

💡 若用 MySQL:

sudo apt install mysql-server
sudo mysql_secure_installation
# 创建库和用户,类似上述

五、运行迁移 & 收集静态文件

source venv/bin/activate
python manage.py migrate
python manage.py collectstatic --noinput  # 确保 STATIC_ROOT 已设置

✅ 测试本地运行(临时):

python manage.py runserver 0.0.0.0:8000

浏览器访问 http://YOUR_IP:8000 确认正常 → 停止服务(Ctrl+C)。


六、配置 Gunicorn 作为 WSGI 服务器

方式 1:使用 systemd 管理(推荐)

创建启动脚本 /etc/systemd/system/django.service

[Unit]
Description=Django Application
After=network.target

[Service]
User=ubuntu          # 替换为你的非 root 用户
Group=www-data
WorkingDirectory=/var/www/your-django-project
Environment="PATH=/var/www/your-django-project/venv/bin"
ExecStart=/var/www/your-django-project/venv/bin/gunicorn 
          --workers 3 
          --bind unix:/tmp/django.sock 
          your_project.wsgi:application
Restart=always

[Install]
WantedBy=multi-user.target

⚠️ 替换 your_project.wsgi 为实际路径(如 myapp.wsgi),并确保 manage.py 所在目录有 wsgi.py

启用并启动服务:

sudo systemctl daemon-reload
sudo systemctl enable django
sudo systemctl start django
sudo systemctl status django

七、配置 Nginx 反向X_X

1. 创建站点配置 /etc/nginx/sites-available/django

server {
    listen 80;
    server_name your-domain.com www.your-domain.com;  # 或直接用 IP

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

    location /static {
        alias /var/www/your-django-project/staticfiles/;
    }

    location / {
        include proxy_params;
        proxy_pass http://unix:/tmp/django.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/django /etc/nginx/sites-enabled/
sudo rm /etc/nginx/sites-enabled/default  # 禁用默认站点
sudo nginx -t
sudo systemctl reload 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 配置并开启 HTTPS

✅ 建议定期执行 sudo certbot renew --dry-run 测试续期。


九、安全加固建议

项目 操作
SSH 安全 禁用 root 登录,改用密钥;修改默认端口(可选)
防火墙 使用 ufw 限制仅开放必要端口:
sudo ufw allow 22/tcp && sudo ufw allow 80/tcp && sudo ufw allow 443/tcp && sudo ufw enable
Django 设置 DEBUG = False
ALLOWED_HOSTS = ['your-domain.com', 'YOUR_IP']
启用 CSRF/CORS 中间件
备份 定期备份数据库 + 静态文件(可用阿里云 OSS + Cron 任务)

十、监控与维护

  • 查看日志:
    journalctl -u django -f
    tail -f /var/log/nginx/error.log
  • 性能优化:
    • 启用 Redis 缓存 (django-redis)
    • 使用 CDN 提速静态资源
    • 数据库读写分离(高并发场景)

🎯 快速检查清单 ✅

  • [ ] ECS 安全组开放 80/443/22
  • [ ] Django DEBUG=False, ALLOWED_HOSTS 正确
  • [ ] 静态文件已 collectstatic 并映射到 Nginx
  • [ ] Gunicorn 通过 socket 监听且 systemd 自启
  • [ ] Nginx 反向X_X配置无误
  • [ ] 数据库连接正常(测试 python manage.py shell 中查询)
  • [ ] HTTPS 证书有效(如启用)

需要我为你生成:

  • 完整的 requirements.txt 示例?
  • Docker 化部署方案(Docker Compose + Nginx)?
  • 一键部署脚本(Shell + Ansible)?

欢迎告诉我你的具体需求 😊