Docker не видит переменные окружения heroku
У меня есть приложение django/react/postgres/docker. Когда я пытаюсь вывести его на heroku, оно не видит переменные окружения из вкладки heroku config vars на этапе сборки
Есть ли способ получить переменные окружения heroku внутри контейнера docker?
На heroku я подключил аддон Heroku Postgres, но поскольку мои переменные env скрыты на этапе сборки, я получаю ошибку:
django.db.utils.OperationalError: could not connect to server
Is the server running on host "localhost" (127.0.0.1) and accepting
TCP/IP connections on port 5432?
Dockerfile.prod
FROM python:3.8
RUN apt-get install -y curl \
&& curl -sL https://deb.nodesource.com/setup_12.x | bash - \
&& apt-get install -y nodejs
WORKDIR /app/backend
COPY ./backend/Pipfile* /app/backend/
RUN pip install pipenv && pipenv install --system
WORKDIR /app/frontend
COPY ./frontend/package*.json /app/frontend/
RUN npm install
COPY . /app/
RUN npm run build
WORKDIR /app/frontend/build
RUN mkdir root && find . -type f -exec cp {} root \;
RUN mkdir /app/backend/staticfiles
WORKDIR /app
ENV DJANGO_SETTINGS_MODULE=config.settings.prod
RUN python backend/manage.py collectstatic --noinput
EXPOSE $PORT
RUN ["python", "backend/manage.py", "migrate", "--no-input"]
CMD [ "python", "backend/manage.py", "runserver", "0.0.0.0", $PORT]
settings.py
...
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': env.str("DB_NAME", default="postgres"),
'USER': env.str("DB_USER", default="postgres"),
'PASSWORD': env.str("DB_PASS", default="postgres"),
'HOST': env.str("DB_HOST", default="localhost"),
'PORT': env.decimal("DB_PORT", default=5432)
}
}
В моем коде было две проблемы:
- Я забыл, что когда настройки django разделяются на dev/prod вариации и помещаются в отдельную директорию
settings
вы должны искать.env
файл внутри родительской директории. Поэтому в файлеsettings/prod.py
я изменилenv.read_env()
наenv.read_env(BASE_DIR.joinpath('..', '.env'), recurse=False)
.
- Я удалил команду
python manage.py migrate
из моегоDockerfile.prod
и выполнил командуheroku run python manage.py migrate
. Полагаю, что я мог бы поместить команду миграции в файлheroku.yml