es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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
    },
}
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para utilizar su propio contenedor Redis implementado en un servidor remoto con el nombre redis_cont, necesita modificar el CELERY_BROKER_URL y CELERY_RESULT_BACKEND en su archivo settings.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:

    CELERY_BROKER_URL = 'redis://192.168.xx.xx:6379/0'
    CELERY_RESULT_BACKEND = 'redis://192.168.xx.xx:6379/0'
    

    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.

Comments are closed.