AWS Elastic Beanstalk: Connection Refused
Я развернул свое приложение django на AWS Elastic Beanstalk, используя платформу Docker. Я создал базу данных postgresql в RDS, создал EC2-соединение с этой базой данных к экземпляру EC2, на котором работает мой Elastic Beanstalk (убедившись, что он входит в тот же VPC и подсети).
Корневой том для моего контейнера Elastic Beanstalk - gp3 с отключенным IMDSv1.
Я назначил две группы безопасности, одна из которых содержит следующие настройки для разрешения подключений через NGINX и к моей базе данных:
Другая - группа безопасности по умолчанию.
Все переменные окружения настроены, включая те, которые необходимы для доступа к моей базе данных 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
.
Как сделать сайт доступным / какие конфигурации нужно изменить или добавить для этого?