You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将带PostgreSQL数据库的Django应用迁移至AWS?

Django应用部署到AWS Lightsail完整步骤

1. 准备应用服务器(Lightsail Ubuntu实例)

  • 创建和开发环境同版本的Ubuntu实例(比如20.04/22.04),优先选和Lightsail PostgreSQL同一可用区的实例,降低网络延迟
  • 配置实例防火墙,开放80(HTTP)、443(HTTPS)、22(SSH)端口

2. 解压并准备Django应用

  • 通过SCP把本地的.tar.gz包传到服务器:scp your-app.tar.gz ubuntu@<server-ip>:/home/ubuntu/
  • 解压到生产目录(比如/var/www/):sudo tar -xzf your-app.tar.gz -d /var/www/
  • 进入应用目录:cd /var/www/your-app

3. 配置Python虚拟环境与依赖

  • 安装基础工具:sudo apt update && sudo apt install python3 python3-venv python3-pip -y
  • 创建虚拟环境:python3 -m venv venv
  • 激活虚拟环境:source venv/bin/activate
  • 安装应用依赖:
    • 若有requirements.txt:pip install -r requirements.txt
    • 若无,先在本地Ubuntu虚拟机导出依赖:pip freeze > requirements.txt,再传到服务器安装
    • 重点确认安装psycopg2-binary(PostgreSQL驱动)和对应版本的Django

4. 配置Django连接Lightsail PostgreSQL

  • 打开项目配置文件:nano /var/www/your-app/your_project/settings.py
  • 修改DATABASES配置块,替换为Lightsail PostgreSQL的信息:
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.postgresql',
            'NAME': '<你的数据库名>',
            'USER': '<数据库用户名>',
            'PASSWORD': '<数据库密码>',
            'HOST': '<Lightsail PostgreSQL的公网地址>',
            'PORT': '5432',
        }
    }
    
  • 配置ALLOWED_HOSTS,添加服务器IP或域名:ALLOWED_HOSTS = ['<server-ip>', 'your-domain.com']
  • 配置静态文件路径(生产环境必需):
    STATIC_URL = '/static/'
    STATIC_ROOT = '/var/www/your-app/staticfiles'
    

5. 导入SQL备份到Lightsail PostgreSQL

  • 安装psql客户端:sudo apt install postgresql-client -y
  • 执行导入命令(替换占位符):
    psql -h <lightsail-db-host> -U <db-user> -d <db-name> -f /path/to/backup.sql
    
  • 若提示数据库不存在,先手动创建:createdb -h <host> -U <user> <db-name>

6. 完成Django生产环境配置

  • 收集静态文件(否则页面加载不到CSS/JS):python manage.py collectstatic,输入yes确认
  • 禁止执行python manage.py migrate:因为已导入完整SQL备份,migrate会导致数据库结构冲突

7. 部署WSGI服务器与反向代理(Gunicorn + Nginx)

配置Gunicorn

  • 安装Gunicorn:pip install gunicorn
  • 测试启动:gunicorn --bind 0.0.0.0:8000 your_project.wsgi:application,访问<server-ip>:8000确认应用能运行
  • 创建systemd服务实现开机自启:
    sudo nano /etc/systemd/system/gunicorn.service
    
    写入以下内容(替换占位符):
    [Unit]
    Description=gunicorn daemon
    After=network.target
    
    [Service]
    User=ubuntu
    Group=www-data
    WorkingDirectory=/var/www/your-app
    ExecStart=/var/www/your-app/venv/bin/gunicorn --workers 3 --bind unix:/var/www/your-app/your-app.sock your_project.wsgi:application
    
    [Install]
    WantedBy=multi-user.target
    
  • 启动并启用服务:
    sudo systemctl start gunicorn
    sudo systemctl enable gunicorn
    

配置Nginx反向代理

  • 安装Nginx:sudo apt install nginx -y
  • 创建Nginx配置文件:
    sudo nano /etc/nginx/sites-available/your-app
    
    写入以下内容(替换占位符):
    server {
        listen 80;
        server_name <server-ip> your-domain.com;
    
        location /static/ {
            root /var/www/your-app;
        }
    
        location / {
            include proxy_params;
            proxy_pass http://unix:/var/www/your-app/your-app.sock;
        }
    }
    
  • 启用配置并重启Nginx:
    sudo ln -s /etc/nginx/sites-available/your-app /etc/nginx/sites-enabled/
    sudo nginx -t  # 检查配置合法性
    sudo systemctl restart nginx
    

8. 测试与排障

  • 访问服务器公网IP,确认页面加载、数据库功能正常
  • 若报错,查看日志排查:
    • Gunicorn日志:sudo journalctl -u gunicorn
    • Nginx错误日志:sudo cat /var/log/nginx/error.log
    • Django日志:可在settings.py中配置LOGGING模块输出详细日志

额外优化建议

  • 启用HTTPS:用Certbot给Nginx配置免费SSL证书,加密请求
  • 环境变量存储敏感信息:把数据库密码、Django密钥存入Lightsail实例环境变量,避免硬编码
  • 定期备份:设置Lightsail实例和PostgreSQL数据库的自动备份任务

内容的提问来源于stack exchange,提问作者Sandy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 02:35:38