services: # MongoDB para almacenar datos # Usando versión 4.4.18 para compatibilidad con ARMv8.0 (ARMv8.2-A requerido desde 4.4.19+) mongodb: image: mongo:4.4.18 container_name: wallabicher-mongodb ports: - "27018:27017" volumes: - mongodb-data:/data/db environment: - MONGO_INITDB_ROOT_USERNAME=admin - MONGO_INITDB_ROOT_PASSWORD=adminpassword - MONGO_INITDB_DATABASE=wallabicher healthcheck: # MongoDB 4.4.18 usa 'mongo' en lugar de 'mongosh' (mongosh se introdujo en 5.0+) test: ["CMD", "mongo", "--eval", "db.adminCommand('ping')"] interval: 10s timeout: 5s retries: 5 networks: - wallabicher-network restart: unless-stopped # Backend Node.js API backend: build: context: ./web/backend dockerfile: Dockerfile container_name: wallabicher-backend environment: - NODE_ENV=production - PORT=3001 - PROJECT_ROOT=/data - MONGODB_HOST=mongodb - MONGODB_PORT=27017 - MONGODB_DATABASE=wallabicher - MONGODB_USERNAME=admin - MONGODB_PASSWORD=adminpassword volumes: # Montar archivos de configuración y datos en ubicación predecible - ./config.yaml:/data/config.yaml:ro - ./logs:/data/logs:rw - .:/data/project:ro depends_on: mongodb: condition: service_healthy networks: - wallabicher-network restart: unless-stopped healthcheck: # Usar endpoint /health que no requiere autenticación test: ["CMD", "wget", "--quiet", "--tries=1", "--spider", "http://localhost:3001/api/health"] interval: 30s timeout: 10s retries: 3 # Frontend Vue frontend: build: context: ./web/frontend dockerfile: Dockerfile container_name: wallabicher-frontend depends_on: - backend networks: - wallabicher-network restart: unless-stopped # Servicio Python principal (Wallabicher) # NOTA: Para usar MongoDB, asegúrate de que config.yaml tenga: # cache: # type: "mongodb" # mongodb: # host: "mongodb" # Nombre del servicio en Docker wallabicher: build: context: . dockerfile: Dockerfile container_name: wallabicher-python environment: - PYTHONUNBUFFERED=1 - MONGODB_HOST=mongodb - MONGODB_PORT=27017 - MONGODB_DATABASE=wallabicher - MONGODB_USERNAME=admin - MONGODB_PASSWORD=adminpassword volumes: # Montar archivos de configuración - ./config.yaml:/app/config.yaml:ro - ./logs:/app/logs:rw depends_on: mongodb: condition: service_healthy backend: condition: service_healthy networks: - wallabicher-network restart: unless-stopped # El servicio Python no necesita exponer puertos, solo se comunica con Redis y Telegram volumes: mongodb-data: driver: local networks: wallabicher-network: driver: bridge