Команда Django collectStatic не сработала при развертывании на ElasticBeastalk с S3

Я пытаюсь изменить свое приложение Django, чтобы использовать S3 для хранения статических данных и мультимедиа. Это работает без проблем на локальной машине, и я могу запустить "collectstatic" локально.

При развертывании на экземпляр Elastic Beanstalk я получаю следующую ошибку:

ERROR   Instance deployment failed. For details, see 'eb-engine.log'.
INFO    Command execution completed on all instances. Summary: [Successful: 0, Failed: 1].
ERROR   Failed to deploy application.

В eb-engine.log:

[ERROR] An error occurred during execution of command [app-deploy] - [PostBuildEbExtension]. Stop running the command. Error: container commands build failed. Please refer to /var/log/cfn-init.log for more details. 

В журнале cfn-init.log

[INFO] -----------------------Starting build-----------------------
[INFO] Running configSets: Infra-EmbeddedPostBuild
[INFO] Running configSet Infra-EmbeddedPostBuild
[INFO] Running config postbuild_0_LocalEyes_WebApp
[ERROR] Command 00_collectstatic (source /var/app/venv/*/bin/activate && python3 manage.py collectstatic --noinput) failed
[ERROR] Error encountered during build of postbuild_0_LocalEyes_WebApp: Command 00_collectstatic failed
Traceback (most recent call last):
  File "/usr/lib/python3.7/site-packages/cfnbootstrap/construction.py", line 573, in run_config
    CloudFormationCarpenter(config, self._auth_config).build(worklog)
  File "/usr/lib/python3.7/site-packages/cfnbootstrap/construction.py", line 273, in build
    self._config.commands)
  File "/usr/lib/python3.7/site-packages/cfnbootstrap/command_tool.py", line 127, in apply
    raise ToolError(u"Command %s failed" % name)
cfnbootstrap.construction_errors.ToolError: Command 00_collectstatic failed
[ERROR] -----------------------BUILD FAILED!------------------------
[ERROR] Unhandled exception during build: Command 00_collectstatic failed
Traceback (most recent call last):
  File "/opt/aws/bin/cfn-init", line 176, in <module>
    worklog.build(metadata, configSets)
  File "/usr/lib/python3.7/site-packages/cfnbootstrap/construction.py", line 135, in build
    Contractor(metadata).build(configSets, self)
  File "/usr/lib/python3.7/site-packages/cfnbootstrap/construction.py", line 561, in build
    self.run_config(config, worklog)
  File "/usr/lib/python3.7/site-packages/cfnbootstrap/construction.py", line 573, in run_config
    CloudFormationCarpenter(config, self._auth_config).build(worklog)
  File "/usr/lib/python3.7/site-packages/cfnbootstrap/construction.py", line 273, in build
    self._config.commands)
  File "/usr/lib/python3.7/site-packages/cfnbootstrap/command_tool.py", line 127, in apply
    raise ToolError(u"Command %s failed" % name)
cfnbootstrap.construction_errors.ToolError: Command 00_collectstatic failed

Похоже, что в моей команде collect static есть ошибка. Я пробовал разные способы ее написания и возился в файле settings.py, но не могу понять, что вызывает эту ошибку.

Любая помощь или совет будут очень признательны!

Мой файл django.config:

container_commands:
  00_collectstatic:
    command: "source /var/app/venv/*/bin/activate && python3 manage.py collectstatic --noinput"
  01_migrate:
    command: "source /var/app/venv/*/bin/activate && python3 manage.py migrate" 
    leader_only: true
    
option_settings:
  aws:elasticbeanstalk:container:python:
    WSGIPath: my_project.wsgi:application
  aws:elasticbeanstalk:application:environment:
    DJANGO_SETTINGS_MODULE: my_project.settings
    IS_AWS: true
    AWS_ACCESS_KEY_ID: <KEYID>
    AWS_SECRET_ACCESS_KEY: <ACCESSKEY>
    USE_S3: TRUE

Соответствующий код settings.py:

USE_S3 = os.getenv('USE_S3') == 'TRUE'
if USE_S3:
    # aws settings
    AWS_STORAGE_BUCKET_NAME = "my-djangobucket"
    AWS_ACCESS_KEY_ID = os.getenv('AWS_ACCESS_KEY_ID')
    AWS_SECRET_ACCESS_KEY = os.getenv('AWS_SECRET_ACCESS_KEY')
    AWS_DEFAULT_ACL = None
    AWS_S3_CUSTOM_DOMAIN = f'{AWS_STORAGE_BUCKET_NAME}.s3.amazonaws.com'
    AWS_S3_OBJECT_PARAMETERS = {'CacheControl': 'max-age=86400'}
    AWS_S3_REGION_NAME = 'us-west-2'
    # s3 static settings
    STATIC_LOCATION = 'static'
    STATIC_URL = f'https://{AWS_S3_CUSTOM_DOMAIN}/{STATIC_LOCATION}/'
    STATICFILES_STORAGE = 'my_project.storage_backends.StaticStorage'
    # s3 public media settings
    PUBLIC_MEDIA_LOCATION = 'media'
    MEDIA_URL = f'https://{AWS_S3_CUSTOM_DOMAIN}/{PUBLIC_MEDIA_LOCATION}/'
    DEFAULT_FILE_STORAGE = 'my_project.storage_backends.PublicMediaStorage'
else:
    STATIC_URL = '/static/'
    STATIC_ROOT = os.path.join(BASE_DIR, 'static')
    MEDIA_URL = '/media/'
    MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
STATICFILES_DIRS = (os.path.join(BASE_DIR, 'static'),)
Вернуться на верх