AWS Elastic Beanstalk: Connection Refused

Я развернул свое приложение django на AWS Elastic Beanstalk, используя платформу Docker. Я создал базу данных postgresql в RDS, создал EC2-соединение с этой базой данных к экземпляру EC2, на котором работает мой Elastic Beanstalk (убедившись, что он входит в тот же VPC и подсети).

Корневой том для моего контейнера Elastic Beanstalk - gp3 с отключенным IMDSv1.

Я назначил две группы безопасности, одна из которых содержит следующие настройки для разрешения подключений через NGINX и к моей базе данных: enter image description here

Другая - группа безопасности по умолчанию.

Все переменные окружения настроены, включая те, которые необходимы для доступа к моей базе данных RDS, и ключи доступа AWS для ведер S3.

Однако, когда я захожу на предоставленный Elastic Beanstalk домен, мне открывается страница с сообщением «This site can't be reached. Соединение отказано».

Я не уверен, что это может быть связано с моим файлом docker-compose (возможно, что-то связанное с сетью или портами), который выглядит следующим образом:

 version: '3.8'

services:
  web:
    build:
      context: .
      dockerfile: Dockerfile
    restart: always
    volumes:
      - media-data:/usr/src/media
      - static-volume:/usr/src/staticfiles
    command: gunicorn APPNAME.wsgi:application --bind 0.0.0.0:8000 -w 3 --timeout 120
    ports:
      - "8000:8000"  
    environment:
      DJANGO_SETTINGS_MODULE: "APPNAME.settings"
      AWS_REGION: ${AWS_REGION}
    env_file: .env

  nginx:
    build: ./nginx
    volumes:
      - static-volume:/usr/src/staticfiles
      - media-data:/usr/src/media
    ports:
      - "8080:80" 
    depends_on: 
      - web

volumes:
  media-data:
  static-volume:

Мой nginx.conf имеет следующий вид:

# Upstream configuration for the Gunicorn server
upstream APPNAME {
    server web:80;  # Points to the web service running Gunicorn
}

server {
    listen 80;
    server_name localhost;

    # Serve static files
    location /static/ {
        alias /usr/src/staticfiles/;  # Static files volume
        access_log /var/log/nginx/static_access.log;
        error_log /var/log/nginx/static_error.log;
        expires max;
        add_header Cache-Control "public";
    }

    # Serve media files
    location /media/ {
        alias /usr/src/media/;  # Media files volume
        access_log /var/log/nginx/media_access.log;
        error_log /var/log/nginx/media_error.log;
        autoindex on;
    }

    # Proxy all other requests to the Django application
    location / {
        proxy_pass http://APPNAME;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        # Increase timeouts for long-running requests
        proxy_read_timeout 300;
        proxy_connect_timeout 300;
        proxy_send_timeout 300;

        # Prevent buffering for real-time responses
        proxy_buffering off;
    }

    # Log file configuration
    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;

    # Set client max body size for file uploads
    client_max_body_size 100M;

    # Add security headers
    add_header X-Content-Type-Options nosniff;
    add_header X-Frame-Options SAMEORIGIN;
    add_header X-XSS-Protection "1; mode=block";
}

Также стоит отметить, что я добавил домен Elastic Beanstalk в ALLOWED_HOSTS & CSRF_TRUSTED_ORIGINS в моем settings.py

Изучив журналы, я вижу, что мой контейнер docker запущен, миграции и статические файлы были применены, и он прослушивает http://0.0.0.0:8000.

Как сделать сайт доступным / какие конфигурации нужно изменить или добавить для этого?

Вернуться на верх