UndefinedValueError: SECRET_KEY - Развертывание Docker в DigitalOcean - PullRequest
0 голосов
/ 20 января 2020

Как мне объявить мои приложения SECRET_KEY в Docker. Локально все работает нормально, но не получается в моей капле Digital Ocean.

Код работает на Heroku без проблем. Это может быть потому, что я объявил переменные env непосредственно в Heroku.

Заранее спасибо

Вот ошибка:

decouple.UndefinedValueError: SECRET_KEY not found. Declare it as envvar or define a default value.

Вот мой docker -компонентный файл:

version: "3"

services:
  db:
    image: postgres
  web:
    build: .
    expose:
      - "8000"
    command: sh -c "python manage.py collectstatic --no-input && python manage.py makemigrations && python manage.py migrate && waitress-serve --port=${PORT} myapp.wsgi:application"
    environment:
      - DB_NAME=postgres
      - DB_USER=postgres
      - DB_PASS=postgres
      - DB_HOST=db
      - DB_PORT=5432
      - DEBUG=${DEBUG}
      - SECRET_KEY=${SECRET_KEY}
      - ALLOWED_HOSTS=${ALLOWED_HOSTS}
    volumes:
      - ./myapp:/myapp
    ports:
      - "8000:8000"
    env_file:
      - ./.env.prod
    depends_on:
      - db

  nginx:
    build: ./nginx
    ports:
      - 1337:80
    depends_on:
      - web

Вот мой Dockerfile:

FROM python:3.7-alpine

ENV PYTHONUNBUFFERED 1
ENV PYTHONDONTWRITEBYTECODE 1

COPY ./requirements.txt /requirements.txt
RUN pip install -r /requirements.txt

RUN apk update && apk add libpq
RUN apk add --virtual .build-deps gcc python3-dev musl-dev postgresql-dev
RUN pip install psycopg2
RUN apk del .build-deps

# copy entrypoint.sh
COPY ./entrypoint.sh /entrypoint.sh
COPY ./.env.prod /.env.prod 

RUN mkdir /myapp
WORKDIR /myapp
COPY ./myapp /myapp

RUN adduser -D user
USER user

EXPOSE 8000

# run entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]

Вот моя точка входа. sh file:

#!/bin/sh

# Collect static files
echo "Collect static files"
python manage.py collectstatic --noinput

# Apply database migrations
echo "Apply database migrations"
python manage.py migrate

# Start server
echo "Starting server"
waitress-serve --port=$PORT myapp.wsgi:application

Все отлично работает локально

1 Ответ

0 голосов
/ 20 января 2020

Вы можете установить его в своем .env файле. И вам нужно изменить имя с .env.prod на просто .env. Пакет decouple ищет переменные среды в файле .env или settings.ini в каталоге root проекта.

Ссылка на документацию по отделению: https://pypi.org/project/python-decouple/#where -the-settings -data-являются сохраненными

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...