Django + docker-compose + Celery + redis – ¿Cómo utilizar Redis desplegado en mi propio servidor remoto?
Tengo una aplicación Django desplegada en contenedores de Docker.
Tengo 3 entornos de configuración: dev, preprod y prod.
dev es mi entorno local (localhost) y preprod/prod son entornos remotos de Linux.
Funciona cuando se utiliza el servidor Redis “public” y la configuración estándar.
Pero necesito utilizar nuestro propio Redis desplegado en un contenedor Docker en un servidor remoto (192.168.xx.xx) con nombre de contenedor redis_cont.
Y realmente no sé cómo configurarlo. ¿No sé si es posible?
Agradecería algo de ayuda.
docker-compose
version: '3.7'
services:
web:
restart: always
build:
context: ./app
dockerfile: Dockerfile.dev
restart: always
command: python manage.py runserver 0.0.0.0:8000
volumes:
- ./app:/usr/src/app
ports:
- 8000:8000
env_file:
- ./.env.dev
entrypoint: ["/usr/src/app/entrypoint.dev.sh"]
depends_on:
- redis
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8000/"]
interval: 30s
timeout: 10s
retries: 50
redis:
container_name: redis_cont <= contenedor en ejecución en el servidor remoto de Linux
image: "redis:alpine"
celery:
build:
context: ./app
dockerfile: Dockerfile.dev
command: celery -A core worker -l info
volumes:
- ./app:/usr/src/app
env_file:
- ./.env.dev
depends_on:
- web
- redis
celery-beat:
build:
context: ./app
dockerfile: Dockerfile.dev
command: celery -A core beat -l info
volumes:
- ./app:/usr/src/app
env_file:
- ./.env.dev
depends_on:
- web
- redis
settings.py
CELERY_BROKER_URL = 'redis://redis:6379'
CELERY_RESULT_BACKEND = 'redis://redis:6379'
CELERY_ACCEPT_CONTENT = ['application/json']
CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'
CELERY_BEAT_SCHEDULE = {
'hello': {
'task': 'project.tasks.hello',
'schedule': crontab() # ejecutar cada minuto
},
}
davy.ai
Para utilizar su propio contenedor Redis implementado en un servidor remoto con el nombre
redis_cont
, necesita modificar elCELERY_BROKER_URL
yCELERY_RESULT_BACKEND
en su archivosettings.py
de Django para reflejar la dirección IP del servidor remoto y el nombre del contenedor Redis.Suponiendo que la dirección IP del servidor remoto que ejecuta el contenedor Redis es
192.168.xx.xx
, las configuraciones modificadas serían:Donde
0
es el número de base de datos que está siendo utilizado por la instancia Redis. Si está utilizando un número diferente, reemplácelo con el valor correcto.Asegúrese de haber abierto los puertos necesarios en el servidor remoto para permitir que la aplicación Django en contenedores Docker acceda al contenedor Redis.