Docker + Django + Postgres附加组件+ Heroku

Gio*_*oto 9 django heroku

所以我正在执行以下操作:

  • 创建了一个Dockerfile和一个docker-compose.yml来在本地开发一个django应用程序,这里没什么可做的,一切正常.

  • Dockerfile

    FROM python:3
    ENV PYTHONUNBUFFERED 1
    运行mkdir /代码
    WORKDIR /代码
    ADD requirements.txt/code/
    RUN pip install -r requirements.txt
    ADD./码/

  • 它所做的只是获取python3图像,将源文件夹中的代码复制到docker镜像

  • 然后我尝试将其部署到heroku,所以我在heroku应用程序上添加了postgres附加组件,并使用dj_database_url配置它,并在我的settings.py文件中使用以下命令: DATABASES = {} DATABASES['default'] = dj_database_url.config()

  • 之后,我将我的应用程序推送到heroku使用heroku container:push web,它被推到我的应用程序没有任何问题...

  • 最后一块是当我用heroku open它打开我的应用程序时说我收到了一个错误:Application error An error occurred in the application and your page could not be served. If you are the application owner, check your logs for details.

  • 这是在heroku网站上打印的内容

  • 现在,当我记录使用时heroku logs -t,它表示已退出代码0,然后崩溃

我错过了什么?

  • 另外:当我运行heroku run web python manage.py migrate它时,迁移heroku应用程序上的数据
  • 加2:当我运行 heroku run web python manage.py runserver它时说运行在127.0.0.1:8000

编辑1: 如果你想重现这个问题,可以在下面的git repo中克隆我的所有代码:https://github.com/giovanniKleinCampigoto/djangoherokuproblem.git

编辑2:

在这个官方教程:https://devcenter.heroku.com/articles/deploying-python,说使用virtualenv,但我使用的是docker,所以我真的不知道如何继续...

编辑3: 此外,我注意到,当我使用以下方法将图像推送到heroku时:heroku容器:推送web,服务器重新部署,但不是运行procfile上的任何内容,而只是记录它:使用命令启动进程python3]

编辑4: 当运行heroku local web,并编辑Procfile运行docker-compose up工作正常,问题是上传到heroku的服务器...不知道我是否应该编辑文件到python manage.py runserver ...

泊坞窗,compose.yml

version: '2'

services:
  web:
    build: .
    env_file: composeexample/.env
    command: python3 manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/code
    ports:
      - "8000:8000"
Run Code Online (Sandbox Code Playgroud)

Gio*_*oto 11

我怎么也找不到这个我正在回答我自己的问题,所以其他人可以使用我的解决方案......

好的,经过大量的测试,来来往往我发现了这个问题.

所以发生了以下情况:对于本地开发,您应该使用docker-compose,mount卷和所有美味的东西,但是当使用heroku进行生产时,您需要为服务器启动设置命令.所以,如果您计划在heroku上使用docker + django + postgres附加组件设置项目.执行以下步骤.

首先:

  • 关注本地开发的docker官方设置:https://docs.docker.com/compose/django/
  • 然后使用docker-compose up命令服务器应该在端口8000本地运行
  • 完成所有de开发并编写了Dockerfile后,就可以进行部署了
  • 请遵循以下指南:https://devcenter.heroku.com/articles/django-app-configuration
  • 一定要在你的heroku应用程序上添加postgres附加组件
  • 在settings.py下的数据库中,修改为以下内容:DATABASES = {} DATABASES ['default'] = dj_database_url.config(default ='DATABASE_URL')
  • 这个DATABASE_URL是一个环境变量,您可以在heroku应用程序中获取,转到heroku上的仪表板,找到您的应用程序,转到设置,配置变量,点击显示,然后您应该获得DATABASE_URL,需要默认变量to/admin on django work ...(这只是一个解决方法,你应该找到一种从环境var获取DATABASE_URL的方法)
  • 修改您的Dockerfile以运行命令以将django服务器添加到最后一行: settings.py
  • $ PORT变量是heroku提供的应用程序端口,因此您的应用程序可以运行
  • 最后但并非最不重要的是将您的heroku app url添加到ALLOWED_HOSTS,正如我们的朋友AlejandroSánchez所说
  • 你是黄金,你的应用程序应该在heroku app url运行

编辑1:

你不需要gunicorn作为依赖项,你在Procfile中应该拥有的唯一命令是:web:python3 manage.py runserver