如何将带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-appserver { 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模块输出详细日志
- Gunicorn日志:
额外优化建议
- 启用HTTPS:用Certbot给Nginx配置免费SSL证书,加密请求
- 环境变量存储敏感信息:把数据库密码、Django密钥存入Lightsail实例环境变量,避免硬编码
- 定期备份:设置Lightsail实例和PostgreSQL数据库的自动备份任务
内容的提问来源于stack exchange,提问作者Sandy
相关产品推荐
相关产品推荐

