services: # Servicio del Backend API elecciones-api: build: context: ./Elecciones-Web dockerfile: src/Elecciones.Api/Dockerfile container_name: elecciones-api restart: unless-stopped env_file: - ./.env # Lee las variables de entorno desde el archivo .env networks: - elecciones-net - shared-net # Se conecta a la red compartida para hablar con la DB # No se exponen puertos directamente al host. El proxy se encarga. # Servicio del Worker para la ingesta de datos elecciones-worker: build: context: ./Elecciones-Web dockerfile: src/Elecciones.Worker/Dockerfile container_name: elecciones-worker restart: unless-stopped env_file: - ./.env networks: - shared-net # Solo necesita acceso a la DB y a la API electoral (internet). volumes: # Mapea el directorio /app/logs de dentro del contenedor # a un directorio llamado 'logs-worker' en la raíz de tu proyecto en la máquina local. - ./logs-worker:/app/logs # No se exponen puertos. # Servicio del Frontend (servido por Nginx) # Lo definimos ahora, aunque lo construiremos más adelante. elecciones-frontend: build: context: ./Elecciones-Web/frontend dockerfile: Dockerfile container_name: elecciones-frontend restart: unless-stopped networks: - elecciones-net # No se exponen puertos. # Proxy Inverso que expone los servicios al exterior proxy: image: nginx:1.25-alpine container_name: elecciones-proxy restart: unless-stopped volumes: # Mapea nuestro archivo de configuración local al contenedor de Nginx - ./proxy/nginx.conf:/etc/nginx/conf.d/default.conf ports: # ÚNICO PUNTO DE ENTRADA: Expone el puerto 80 del contenedor al puerto 8600 del host. - "8600:80" networks: - elecciones-net depends_on: - elecciones-api - elecciones-frontend networks: elecciones-net: driver: bridge # La red 'shared-net' ya existe en Docker. shared-net: external: true