Как иметь выделенные экземпляры для контейнеров celery при развертывании проекта django с помощью docker-compose на elastic beanstalk?
У меня есть веб-приложение, которое использует celery для тяжелых вычислений. Оно было развернуто на AWS с elastic beanstalk, используя docker-compose. Брокером является Amazon SQS, а redis используется в качестве бэкенда результатов.
Вот файл docker-compose для понимания структуры:
version: '3.8'
volumes:
data:
driver_opts:
type: "nfs"
o: "addr=XXXXXXXXXXXXXXXXXXXXXXX,rw,nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport"
device: ":/"
static:
services:
web:
build: ./web
command: >
bash -c "python3 manage.py migrate
&& python3 manage.py collectstatic --noinput
&& gunicorn APPNAME.asgi:application --access-logfile '-' --error-logfile '-' --capture-output --enable-stdio-inheritance -k uvicorn.workers.UvicornWorker -b 0.0.0.0:8000"
volumes:
- data:/home/webserver/data/
- static:/home/webserver/static/
ports:
- "8000:8000"
depends_on:
- redis
celery:
build: ./web
command: celery -A APPNAME worker -Ofair -l INFO
volumes:
- data:/home/webserver/data/
depends_on:
- web
redis:
image: redis:6.2.6-alpine
ports:
- "6379:6379"
nginx:
build : ./nginx
ports:
- "80:80"
depends_on:
- web
volumes:
- static:/home/webserver/static/
Все работает хорошо, включая задачи celery. Теперь я хотел бы отделить службы web/redis/nginx от контейнеров celery, которые будут иметь свои собственные выделенные экземпляры с возможностью масштабирования. Есть ли правильный способ сделать это (используя CLI)? Стоит ли мне рассматривать отдельные приложения beanstalk?
К концу этого урока вы сможете:
Set up a new EC2 instance
Install Docker on an EC2 instance
Configure and use an Elastic IP address
Set up an IAM role
Utilize Amazon Elastic Container Registry (ECR) image registry to store built images
Configure AWS RDS for data persistence
Configure an AWS Security Group
Deploy Django to AWS EC2 with Docker
Run the Django app behind an HTTPS Nginx proxy with Let's Encrypt SSL certificates