commit ec81c5b0f50432138f76fbb1f252a0a5cb798083 Author: josedario87 Date: Tue Dec 2 15:11:13 2025 -0600 Init: Evolution API para WhatsApp - configuración simplificada - docker-compose.yml con Evolution API (sin PostgreSQL/Redis) - Almacenamiento local en volúmenes Docker - Traefik labels con Authentik para /manager - API endpoints protegidos por API Key diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..ae4c1bc --- /dev/null +++ b/.env.example @@ -0,0 +1,5 @@ +# Dominio +APP_DOMAIN=whatsapp.nucleoriofrio.com + +# Evolution API - Genera una key segura +EVOLUTION_API_KEY=tu-api-key-segura-aqui diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..4c49bd7 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.env diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..feffb43 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,63 @@ +version: '3.8' + +services: + evolution-api: + image: atendai/evolution-api:latest + container_name: evolution-api + restart: unless-stopped + environment: + # Configuración básica + - SERVER_URL=https://${APP_DOMAIN} + - AUTHENTICATION_TYPE=apikey + - AUTHENTICATION_API_KEY=${EVOLUTION_API_KEY} + - AUTHENTICATION_EXPOSE_IN_FETCH_INSTANCES=true + + # Base de datos deshabilitada (usa almacenamiento local) + - DATABASE_ENABLED=false + + # Redis deshabilitado + - CACHE_REDIS_ENABLED=false + + # Webhooks globales (deshabilitado por ahora) + - WEBHOOK_GLOBAL_ENABLED=false + + # Integraciones (deshabilitadas) + - CHATWOOT_ENABLED=false + - TYPEBOT_ENABLED=false + + volumes: + - evolution_instances:/evolution/instances + - evolution_store:/evolution/store + networks: + - principal + labels: + - traefik.enable=true + - traefik.docker.network=principal + - traefik.http.services.evolution-api.loadbalancer.server.port=8080 + + # Router: Manager UI protegido con Authentik + - traefik.http.routers.evolution-ui.rule=Host(`${APP_DOMAIN}`) && PathPrefix(`/manager`) + - traefik.http.routers.evolution-ui.entrypoints=websecure + - traefik.http.routers.evolution-ui.tls.certresolver=letsencrypt + - traefik.http.routers.evolution-ui.service=evolution-api + - traefik.http.routers.evolution-ui.middlewares=authentik-forward-auth@file,evolution-headers + + # Router: API endpoints (autenticación por API Key, sin Authentik) + - traefik.http.routers.evolution-api.rule=Host(`${APP_DOMAIN}`) + - traefik.http.routers.evolution-api.entrypoints=websecure + - traefik.http.routers.evolution-api.tls.certresolver=letsencrypt + - traefik.http.routers.evolution-api.service=evolution-api + - traefik.http.routers.evolution-api.middlewares=evolution-headers + + # Middleware: Headers + - traefik.http.middlewares.evolution-headers.headers.customrequestheaders.X-Forwarded-Proto=https + +volumes: + evolution_instances: + name: evolution_instances + evolution_store: + name: evolution_store + +networks: + principal: + external: true