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 - STRIPE_SECRET_KEY=sk_test_51SrpOfH73CrYqhOp2NfijzzU07ADADmwigscMVdLGzKu9zA83dsrODhfsaY1X4EFTSihhIB0lVtDQ2HpeOfMWTur00YLuuktSL - STRIPE_WEBHOOK_SECRET=whsec_8ebec8c2aa82a791aa9f2cd68211e297a5d172aea62ebd7b771d230e3a597aa8 - BASE_URL=https://wb.pribyte.cloud/api 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 # Dashboard Vue dashboard: build: context: ./web/dashboard dockerfile: Dockerfile container_name: wallabicher-dashboard environment: - NGINX_CONF=nginx-dashboard.conf volumes: - ./web/dashboard/nginx-dashboard.conf:/etc/nginx/conf.d/default.conf:ro depends_on: - backend networks: - wallabicher-network restart: unless-stopped # Landing page (Astro) landing: build: context: ./web/landing dockerfile: Dockerfile container_name: wallabicher-landing networks: - wallabicher-network restart: unless-stopped # Nginx reverse proxy principal nginx: image: nginx:alpine container_name: wallabicher-nginx volumes: - ./web/nginx.conf:/etc/nginx/conf.d/default.conf:ro depends_on: - backend - dashboard - landing 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