{"repo": "carl0sfelipe/hitg", "files": {"docker-compose.yml": {"90c443890474234fe3ab53b0b1b041804e66c518": {"t": 1785746351.5736103, "n": 8500, "h": "87f0a21784773aec", "c": "# =============================================================================\n# BMAD MoneyMaker — Docker Compose (Produção)\n# Otimizado para: Hetzner CAX11 (ARM64, 4GB RAM, €3,80/mês)\n# =============================================================================\n\nversion: \"3.8\"\n\nservices:\n # ===========================================================================\n # APP PRINCIPAL — Pipeline BMAD\n # ===========================================================================\n bmad-app:\n build:\n context: .\n dockerfile: Dockerfile\n platforms:\n - linux/arm64 # Hetzner CAX11 é ARM64\n - linux/amd64 # Fallback para x86_64\n container_name: bmad-money-maker\n restart: unless-stopped\n \n environment:\n # LLM Configuration\n - DEEPSEEK_API_KEY=${DEEPSEEK_API_KEY}\n - DEEPSEEK_BASE_URL=${DEEPSEEK_BASE_URL:-https://api.deepseek.com}\n \n # Ollama (fallback local — usar network_mode: host se na mesma máquina)\n - OLLAMA_BASE_URL=${OLLAMA_BASE_URL:-http://host.docker.internal:11434}\n \n # SerperDev (fallback se SearXNG falhar)\n - SERPER_API_KEY=${SERPER_API_KEY}\n \n # SearXNG (self-hosted)\n - SEARXNG_URL=${SEARXNG_URL:-http://searxng:8080}\n \n # Firecrawl\n - FIRECRAWL_API_KEY=${FIRECRAWL_API_KEY}\n \n # Directus CMS\n - DIRECTUS_URL=${DIRECTUS_URL:-http://directus:8055}\n - DIRECTUS_TOKEN=${DIRECTUS_TOKEN}\n \n # AWS/Backblaze (para backups)\n - AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID}\n - AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY}\n - S3_BUCKET=${S3_BUCKET:-bmad-backups}\n - S3_ENDPOINT=${S3_ENDPOINT:-s3.us-west-004.backblazeb2.com}\n \n # App config\n - PYTHONUNBUFFERED=1\n - ENVIRONMENT=production\n \n volumes:\n # Persistência de dados\n - ./artifacts:/app/artifacts\n - ./checkpoints:/app/checkpoints\n - ./logs:/app/logs\n - ./site:/app/site\n \n # Configuração (read-only para segurança)\n - ./config:/app/config:ro\n \n # Secrets (montado separadamente)\n - ./.env:/app/.env:ro\n \n networks:\n - bmad-network\n \n depends_on:\n directus:\n condition: service_healthy\n searxng:\n condition: service_healthy\n \n healthcheck:\n test: [\"CMD\", \"python\", \"-c\", \"print('healthcheck')\"]\n interval: 30s\n timeout: 10s\n retries: 3\n start_period: 40s\n \n # Limites de recursos (Hetzner CAX11 tem 4GB RAM, 2 vCPU)\n deploy:\n resources:\n limits:\n cpus: '1.5'\n memory: 2G\n reservations:\n cpus: '0.5'\n memory: 512M\n \n logging:\n driver: \"json-file\"\n options:\n max-size: \"10m\"\n max-file: \"3\"\n\n # ===========================================================================\n # DIRECTUS — Headless CMS (SQLite para MVP1, PostgreSQL para escala)\n # ===========================================================================\n directus:\n image: directus/directus:10.13\n container_name: bmad-directus\n restart: unless-stopped\n \n environment:\n - KEY=${DIRECTUS_KEY:-random-key-change-in-production}\n - SECRET=${DIRECTUS_SECRET:-random-secret-change-in-production}\n \n # Database (SQLite para MVP1 — simples, backup fácil)\n - DB_CLIENT=sqlite3\n - DB_FILENAME=/directus/database/data.db\n \n # Cache (memory para MVP1)\n - CACHE_ENABLED=true\n - CACHE_AUTO_PURGE=true\n \n # Admin\n - ADMIN_EMAIL=${DIRECTUS_ADMIN_EMAIL:-admin@bmad.local}\n - ADMIN_PASSWORD=${DIRECTUS_ADMIN_PASSWORD:-admin123}\n \n # Features\n - PUBLIC_URL=${DIRECTUS_PUBLIC_URL:-http://localhost:8055}\n - CORS_ENABLED=true\n - CORS_ORIGIN=*\n \n volumes:\n - directus-database:/directus/database\n - directus-uploads:/directus/uploads\n - directus-extensions:/directus/extensions\n \n networks:\n - bmad-network\n \n healthcheck:\n test: [\"CMD\", \"wget\", \"--quiet\", \"--tries=1\", \"--spider\", \"http://localhost:8055/server/health\"]\n interval: 30s\n timeout: 10s\n retries: 3\n \n deploy:\n resources:\n limits:\n cpus: '0.5'\n memory: 512M\n \n logging:\n driver: \"json-file\"\n options:\n max-size: \"10m\"\n max-file: \"3\"\n\n # ===========================================================================\n # SEARXNG — Meta-buscador (self-hosted, gratuito)\n # ===========================================================================\n searxng:\n image: searxng/searxng:latest\n container_name: bmad-searxng\n restart: unless-stopped\n \n volumes:\n - ./config/searxng:/etc/searxng:rw\n \n environment:\n - SEARXNG_BASE_URL=${SEARXNG_BASE_URL:-http://localhost:8080}\n - SEARXNG_INSTANCE_NAME=BMAD Search\n \n networks:\n - bmad-network\n \n healthcheck:\n test: [\"CMD\", \"wget\", \"--quiet\", \"--tries=1\", \"--spider\", \"http://localhost:8080/healthz\"]\n interval: 30s\n timeout: 10s\n retries: 3\n \n deploy:\n resources:\n limits:\n cpus: '0.5'\n memory: 512M\n \n logging:\n driver: \"json-file\"\n options:\n max-size: \"10m\"\n max-file: \"3\"\n\n # ===========================================================================\n # NGINX — Reverse Proxy + Servidor de sites estáticos\n # ===========================================================================\n nginx:\n image: nginx:alpine\n container_name: bmad-nginx\n restart: unless-stopped\n \n ports:\n - \"80:80\"\n - \"443:443\"\n \n volumes:\n # Sites estáticos gerados pelo pipeline\n - ./site:/usr/share/nginx/html:ro\n \n # Configuração Nginx\n - ./config/nginx/nginx.conf:/etc/nginx/nginx.conf:ro\n - ./config/nginx/sites:/etc/nginx/conf.d:ro\n \n # SSL (Let's Encrypt ou Cloudflare Origin)\n - ./config/nginx/ssl:/etc/nginx/ssl:ro\n \n networks:\n - bmad-network\n \n depends_on:\n - bmad-app\n - directus\n \n healthcheck:\n test: [\"CMD\", \"wget\", \"--quiet\", \"--tries=1\", \"--spider\", \"http://localhost/health\"]\n interval: 30s\n timeout: 10s\n retries: 3\n \n deploy:\n resources:\n limits:\n cpus: '0.25'\n memory: 128M\n\n # ===========================================================================\n # REDIS — Cache distribuído (opcional para MVP1, essencial para escala)\n # ===========================================================================\n # Descomente para usar Redis ao invés de cache em memória\n # redis:\n # image: redis:7-alpine\n # container_name: bmad-redis\n # restart: unless-stopped\n # volumes:\n # - redis-data:/data\n # networks:\n # - bmad-network\n # command: redis-server --appendonly yes --maxmemory 256mb --maxmemory-policy allkeys-lru\n # deploy:\n # resources:\n # limits:\n # cpus: '0.25'\n # memory: 256M\n\n # ===========================================================================\n # WATCHTOWER — Auto-update dos containers (opcional)\n # ===========================================================================\n watchtower:\n image: containrrr/watchtower\n container_name: bmad-watchtower\n restart: unless-stopped\n \n environment:\n - WATCHTOWER_CLEANUP=true\n - WATCHTOWER_POLL_INTERVAL=3600 # Checa a cada 1 hora\n - WATCHTOWER_INCLUDE_STOPPED=true\n - WATCHTOWER_REVIVE_STOPPED=false\n - WATCHTOWER_NOTIFICATIONS=shoutrrr\n - WATCHTOWER_NOTIFICATION_URL=telegram://${TELEGRAM_BOT_TOKEN}@${TELEGRAM_CHAT_ID}\n \n volumes:\n - /var/run/docker.sock:/var/run/docker.sock\n \n command: --interval 3600 bmad-app bmad-directus bmad-searxng\n\n# =============================================================================\n# VOLUMES (persistência)\n# =============================================================================\nvolumes:\n directus-database:\n driver: local\n directus-uploads:\n driver: local\n directus-extensions:\n driver: local\n # redis-data:\n # driver: local\n\n# =============================================================================\n# NETWORKS\n# =============================================================================\nnetworks:\n bmad-network:\n driver: bridge\n ipam:\n config:\n - subnet: 172.20.0.0/16\n"}, "6431e557767f75ee5efe5be105fdc417c2574e56": {"t": 1785762389.764843, "n": 8500, "h": "87f0a21784773aec", "c": "# =============================================================================\n# BMAD MoneyMaker — Docker Compose (Produção)\n# Otimizado para: Hetzner CAX11 (ARM64, 4GB RAM, €3,80/mês)\n# =============================================================================\n\nversion: \"3.8\"\n\nservices:\n # ===========================================================================\n # APP PRINCIPAL — Pipeline BMAD\n # ===========================================================================\n bmad-app:\n build:\n context: .\n dockerfile: Dockerfile\n platforms:\n - linux/arm64 # Hetzner CAX11 é ARM64\n - linux/amd64 # Fallback para x86_64\n container_name: bmad-money-maker\n restart: unless-stopped\n \n environment:\n # LLM Configuration\n - DEEPSEEK_API_KEY=${DEEPSEEK_API_KEY}\n - DEEPSEEK_BASE_URL=${DEEPSEEK_BASE_URL:-https://api.deepseek.com}\n \n # Ollama (fallback local — usar network_mode: host se na mesma máquina)\n - OLLAMA_BASE_URL=${OLLAMA_BASE_URL:-http://host.docker.internal:11434}\n \n # SerperDev (fallback se SearXNG falhar)\n - SERPER_API_KEY=${SERPER_API_KEY}\n \n # SearXNG (self-hosted)\n - SEARXNG_URL=${SEARXNG_URL:-http://searxng:8080}\n \n # Firecrawl\n - FIRECRAWL_API_KEY=${FIRECRAWL_API_KEY}\n \n # Directus CMS\n - DIRECTUS_URL=${DIRECTUS_URL:-http://directus:8055}\n - DIRECTUS_TOKEN=${DIRECTUS_TOKEN}\n \n # AWS/Backblaze (para backups)\n - AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID}\n - AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY}\n - S3_BUCKET=${S3_BUCKET:-bmad-backups}\n - S3_ENDPOINT=${S3_ENDPOINT:-s3.us-west-004.backblazeb2.com}\n \n # App config\n - PYTHONUNBUFFERED=1\n - ENVIRONMENT=production\n \n volumes:\n # Persistência de dados\n - ./artifacts:/app/artifacts\n - ./checkpoints:/app/checkpoints\n - ./logs:/app/logs\n - ./site:/app/site\n \n # Configuração (read-only para segurança)\n - ./config:/app/config:ro\n \n # Secrets (montado separadamente)\n - ./.env:/app/.env:ro\n \n networks:\n - bmad-network\n \n depends_on:\n directus:\n condition: service_healthy\n searxng:\n condition: service_healthy\n \n healthcheck:\n test: [\"CMD\", \"python\", \"-c\", \"print('healthcheck')\"]\n interval: 30s\n timeout: 10s\n retries: 3\n start_period: 40s\n \n # Limites de recursos (Hetzner CAX11 tem 4GB RAM, 2 vCPU)\n deploy:\n resources:\n limits:\n cpus: '1.5'\n memory: 2G\n reservations:\n cpus: '0.5'\n memory: 512M\n \n logging:\n driver: \"json-file\"\n options:\n max-size: \"10m\"\n max-file: \"3\"\n\n # ===========================================================================\n # DIRECTUS — Headless CMS (SQLite para MVP1, PostgreSQL para escala)\n # ===========================================================================\n directus:\n image: directus/directus:10.13\n container_name: bmad-directus\n restart: unless-stopped\n \n environment:\n - KEY=${DIRECTUS_KEY:-random-key-change-in-production}\n - SECRET=${DIRECTUS_SECRET:-random-secret-change-in-production}\n \n # Database (SQLite para MVP1 — simples, backup fácil)\n - DB_CLIENT=sqlite3\n - DB_FILENAME=/directus/database/data.db\n \n # Cache (memory para MVP1)\n - CACHE_ENABLED=true\n - CACHE_AUTO_PURGE=true\n \n # Admin\n - ADMIN_EMAIL=${DIRECTUS_ADMIN_EMAIL:-admin@bmad.local}\n - ADMIN_PASSWORD=${DIRECTUS_ADMIN_PASSWORD:-admin123}\n \n # Features\n - PUBLIC_URL=${DIRECTUS_PUBLIC_URL:-http://localhost:8055}\n - CORS_ENABLED=true\n - CORS_ORIGIN=*\n \n volumes:\n - directus-database:/directus/database\n - directus-uploads:/directus/uploads\n - directus-extensions:/directus/extensions\n \n networks:\n - bmad-network\n \n healthcheck:\n test: [\"CMD\", \"wget\", \"--quiet\", \"--tries=1\", \"--spider\", \"http://localhost:8055/server/health\"]\n interval: 30s\n timeout: 10s\n retries: 3\n \n deploy:\n resources:\n limits:\n cpus: '0.5'\n memory: 512M\n \n logging:\n driver: \"json-file\"\n options:\n max-size: \"10m\"\n max-file: \"3\"\n\n # ===========================================================================\n # SEARXNG — Meta-buscador (self-hosted, gratuito)\n # ===========================================================================\n searxng:\n image: searxng/searxng:latest\n container_name: bmad-searxng\n restart: unless-stopped\n \n volumes:\n - ./config/searxng:/etc/searxng:rw\n \n environment:\n - SEARXNG_BASE_URL=${SEARXNG_BASE_URL:-http://localhost:8080}\n - SEARXNG_INSTANCE_NAME=BMAD Search\n \n networks:\n - bmad-network\n \n healthcheck:\n test: [\"CMD\", \"wget\", \"--quiet\", \"--tries=1\", \"--spider\", \"http://localhost:8080/healthz\"]\n interval: 30s\n timeout: 10s\n retries: 3\n \n deploy:\n resources:\n limits:\n cpus: '0.5'\n memory: 512M\n \n logging:\n driver: \"json-file\"\n options:\n max-size: \"10m\"\n max-file: \"3\"\n\n # ===========================================================================\n # NGINX — Reverse Proxy + Servidor de sites estáticos\n # ===========================================================================\n nginx:\n image: nginx:alpine\n container_name: bmad-nginx\n restart: unless-stopped\n \n ports:\n - \"80:80\"\n - \"443:443\"\n \n volumes:\n # Sites estáticos gerados pelo pipeline\n - ./site:/usr/share/nginx/html:ro\n \n # Configuração Nginx\n - ./config/nginx/nginx.conf:/etc/nginx/nginx.conf:ro\n - ./config/nginx/sites:/etc/nginx/conf.d:ro\n \n # SSL (Let's Encrypt ou Cloudflare Origin)\n - ./config/nginx/ssl:/etc/nginx/ssl:ro\n \n networks:\n - bmad-network\n \n depends_on:\n - bmad-app\n - directus\n \n healthcheck:\n test: [\"CMD\", \"wget\", \"--quiet\", \"--tries=1\", \"--spider\", \"http://localhost/health\"]\n interval: 30s\n timeout: 10s\n retries: 3\n \n deploy:\n resources:\n limits:\n cpus: '0.25'\n memory: 128M\n\n # ===========================================================================\n # REDIS — Cache distribuído (opcional para MVP1, essencial para escala)\n # ===========================================================================\n # Descomente para usar Redis ao invés de cache em memória\n # redis:\n # image: redis:7-alpine\n # container_name: bmad-redis\n # restart: unless-stopped\n # volumes:\n # - redis-data:/data\n # networks:\n # - bmad-network\n # command: redis-server --appendonly yes --maxmemory 256mb --maxmemory-policy allkeys-lru\n # deploy:\n # resources:\n # limits:\n # cpus: '0.25'\n # memory: 256M\n\n # ===========================================================================\n # WATCHTOWER — Auto-update dos containers (opcional)\n # ===========================================================================\n watchtower:\n image: containrrr/watchtower\n container_name: bmad-watchtower\n restart: unless-stopped\n \n environment:\n - WATCHTOWER_CLEANUP=true\n - WATCHTOWER_POLL_INTERVAL=3600 # Checa a cada 1 hora\n - WATCHTOWER_INCLUDE_STOPPED=true\n - WATCHTOWER_REVIVE_STOPPED=false\n - WATCHTOWER_NOTIFICATIONS=shoutrrr\n - WATCHTOWER_NOTIFICATION_URL=telegram://${TELEGRAM_BOT_TOKEN}@${TELEGRAM_CHAT_ID}\n \n volumes:\n - /var/run/docker.sock:/var/run/docker.sock\n \n command: --interval 3600 bmad-app bmad-directus bmad-searxng\n\n# =============================================================================\n# VOLUMES (persistência)\n# =============================================================================\nvolumes:\n directus-database:\n driver: local\n directus-uploads:\n driver: local\n directus-extensions:\n driver: local\n # redis-data:\n # driver: local\n\n# =============================================================================\n# NETWORKS\n# =============================================================================\nnetworks:\n bmad-network:\n driver: bridge\n ipam:\n config:\n - subnet: 172.20.0.0/16\n"}}}}