如何将Heroku上的Django应用从Git部署迁移至容器部署?
如何将Heroku上Git部署的Django应用迁移到容器部署(保留PostgreSQL配置)
当然可行!我之前帮朋友处理过几乎一模一样的迁移需求,其实完全不用从零重建应用,步骤比你想象的简单很多,下面是我亲测有效的实操流程:
一、准备Docker配置文件
首先在你的本地项目根目录添加两个关键文件:
1. 创建Dockerfile
根据你的Django项目环境调整内容,下面是通用模板(记得替换成你实际的项目名称和Python版本):
# 匹配你原来Heroku使用的Python版本 FROM python:3.10-slim # 设置工作目录 WORKDIR /app # 复制依赖文件并安装(确保requirements.txt和原应用一致) COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt # 复制整个项目代码 COPY . . # 设置Django配置模块环境变量,和你原应用保持一致 ENV DJANGO_SETTINGS_MODULE=your_django_project.settings.production # 执行数据库迁移和静态文件收集(如果你的应用需要的话) RUN python manage.py migrate RUN python manage.py collectstatic --noinput # 用Gunicorn启动服务,和原Heroku配置一致 CMD ["gunicorn", "--bind", "0.0.0.0:$PORT", "your_django_project.wsgi"]
2. 创建.dockerignore
避免复制不必要的文件到镜像里,内容参考:
.git .gitignore venv __pycache__ *.pyc *.pyo *.pyd .env
二、关联Heroku容器注册表
确保你本地已经安装了Heroku CLI,然后执行以下命令:
- 登录Heroku账号:
heroku login - 登录Heroku容器注册表:
heroku container:login
三、部署容器到现有应用
这一步是核心!直接用你原来的Django应用名称,不用新建应用:
- 构建并推送镜像到Heroku:
heroku container:push web --app your-existing-app-name - 发布镜像让应用生效:
heroku container:release web --app your-existing-app-name
四、验证迁移结果
- 因为用的是原应用,PostgreSQL的
DATABASE_URL等配置环境变量会自动保留,你可以通过以下命令测试数据库连接:heroku run python manage.py shell --app your-existing-app-name - 访问你的应用URL,确认所有功能和之前一致
- 如果有其他Heroku插件(比如Redis、存储服务),它们的配置也会保留,只要Dockerfile没覆盖相关环境变量就没问题
一些额外提示
- 如果不确定原应用的依赖列表,可以用
heroku run pip freeze --app your-existing-app-name导出,确保requirements.txt完全匹配 - 要是部署时遇到静态文件问题,检查
collectstatic命令是否正确,以及Django的静态文件配置是否和原应用一致
内容的提问来源于stack exchange,提问作者fccoelho
相关产品推荐
相关产品推荐

