From 7684136e46327d5f1afe010f0366052b3dd33434 Mon Sep 17 00:00:00 2001 From: Nachou-u Date: Wed, 9 Sep 2026 08:36:28 -0300 Subject: [PATCH] CONFIG: adaptar docker-compose.yml para Traefik y ControlMC --- docker-compose.yml | 72 ++++++++++++++++++++++++++++------------------ 1 file changed, 44 insertions(+), 28 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 7a421e9..6b5ae19 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,53 +1,69 @@ version: '3.8' services: - redis: - image: redis:7-alpine - ports: - - "6379:6379" - volumes: - - redis_data:/data - restart: unless-stopped - mem_limit: 512m # Limita Redis a 512MB de memoria RAM - web: build: . - # Se sobrescribe el comando para asegurarnos que usa Gunicorn (así esté en el Dockerfile) command: gunicorn config.asgi:application -k uvicorn.workers.UvicornWorker --bind 0.0.0.0:8000 --workers 3 - volumes: - - .:/app - ports: - - "8000:8000" + restart: unless-stopped env_file: - .env environment: - # Ya no conectamos a una DB local, lee el DATABASE_URL del .env REDIS_URL: redis://redis:6379/0 + # Django necesita escuchar en 0.0.0.0 (ya lo hace gunicorn) + volumes: + - ${PROJECT_SPACE:-.}/media:/app/media + - ${PROJECT_SPACE:-.}/static:/app/static + networks: + - controlmc_proxy + - internal + labels: + - "controlmc.public=true" + - "traefik.enable=true" + - "traefik.docker.network=controlmc_proxy" + - "traefik.http.routers.${ROUTER_NAME}.rule=Host(`${APP_DOMAIN}`)" + - "traefik.http.routers.${ROUTER_NAME}.entrypoints=websecure" + - "traefik.http.routers.${ROUTER_NAME}.tls=true" + - "traefik.http.routers.${ROUTER_NAME}.tls.certresolver=le" + - "traefik.http.services.${ROUTER_NAME}.loadbalancer.server.port=8000" depends_on: - redis - restart: unless-stopped - mem_limit: 1g # Limita Gunicorn a 1GB + mem_limit: 1g - tax-api: - build: ./tax_api - ports: - - "8001:8000" + redis: + image: redis:7-alpine restart: unless-stopped - mem_limit: 256m + volumes: + - ${PROJECT_SPACE:-.}/redis_data:/data + networks: + - internal + mem_limit: 512m + # Redis no necesita puertos públicos ni etiquetas Traefik celery: build: . command: celery -A config worker -l info --concurrency=2 - volumes: - - .:/app + restart: unless-stopped env_file: - .env environment: REDIS_URL: redis://redis:6379/0 + networks: + - internal depends_on: - redis - restart: unless-stopped - mem_limit: 512m # Limita Celery a 512MB + mem_limit: 512m -volumes: - redis_data: + tax-api: + build: ./tax_api + restart: unless-stopped + networks: + - internal + mem_limit: 256m + # Si la API de impuestos necesita ser expuesta al público por Traefik, + # se deben agregar etiquetas similares a las del servicio 'web' con un ROUTER_NAME diferente. + +networks: + controlmc_proxy: + external: true + internal: + # Red interna para que web, redis, celery y tax-api se comuniquen sin exponerse