Неверное имя корзины от docker-compose до EC2 - PullRequest
0 голосов
/ 16 мая 2018

Я создал докер на EC2.

Затем я создал новое приложение cookiecutter-django и оставил его простым ванилью.Он настроен на использование .env для переменных среды.(Cookiecutter-django включает django-environment для доступа к переменным окружения.)

docker-compose -f production.yml build

работал нормально.

docker-compose -f production.yml up

выдает эту ошибку:

django_1    | botocore.exceptions.ParamValidationError: Parameter validation failed:
django_1    | Invalid bucket name "": Bucket name must match the regex "^[a-zA-Z0-9.\-_]{1,255}$"

Исследуя эту ошибку, советовал устанавливать различные переменные окружения.Поэтому я попробовал их все в .env (я создал корзину s3 с именем pulsemanager):

DJANGO_AWS_STORAGE_BUCKET_NAME=pulsemanager
AWS_S3_BUCKET_NAME_STATIC=pulsemanager
AWS_STORAGE_BUCKET_NAME=pulsemanager

Независимо от того, что я пытаюсь, я застрял с ошибкой.

РЕДАКТИРОВАТЬ: Это не совсем обычная ваниль.По умолчанию cookiecutter-django использует http-сервер Caddy вместо nginx в Docker.Это включает SSL и не будет работать за балансировщиком нагрузки AWS с менеджером сертификатов AWS SSL.Поэтому я изменил файл production.yml по умолчанию, чтобы он использовал nginx вместо Caddy, следуя этой статье .

1 Ответ

0 голосов
/ 16 мая 2018

У вас есть ошибка в окружении имени файла?Вы дважды написали «evn» в своем вопросе, когда правильно указано «.env» https://docs.docker.com/compose/env-file/.

Кроме того, эти переменные среды будут доступны только для файла Docker-compose.Это означает, что если вам нужно передать эти переменные в конкретный контейнер, вам нужно использовать раздел environment: для передачи этих переменных в контейнер, например:

app:
  - environment:
    DJANGO_AWS_STORAGE_BUCKET_NAME=${DJANGO_AWS_STORAGE_BUCKET_NAME}

Кроме того, вы можете передать все переменные изФайл .env, используя env_file: для конкретного контейнера: https://docs.docker.com/compose/environment-variables/#the-env_file-configuration-option

app:
  env_file:
    - .env

Если у вас правильно настроены контейнеры и переменные среды, вы можете отлаживать ваши vars, подключившись к контейнеру и проверив, был ли vars установленпрошло.

docker exec -ti CONTAINER_ID /bin/export

Также, возможно, вам нужно добавить конфигурацию в ваш файл django settings.py.Например:

import os
DJANGO_AWS_STORAGE_BUCKET_NAME=os.environ.get('DJANGO_AWS_STORAGE_BUCKET_NAME')
...