diff --git a/.env b/.env index d5428db..315b1c5 100644 --- a/.env +++ b/.env @@ -1,37 +1,55 @@ -# Configuración de ejemplo para WhatsApp Bot Manager -# Copia este archivo como .env y completa los valores +# ============================================================ +# WhatsApp Bot Manager — Variables de entorno +# Fuente única de verdad para desarrollo local. +# En producción (Coolify): configurar en Environment Variables de la app. +# ⚠️ Este archivo NO se sube a git (.gitignore lo excluye). +# ============================================================ -# Base de datos +# ── Base de datos ───────────────────────────────────────────── DB_HOST=46.202.93.92 DB_PORT=3306 DB_NAME=usite_whatsapp_bot DB_USER=usite_whatsapp_user DB_PASS=6q!Vio0fn@PFmsLyHjH5 +DB_ROOT_PASSWORD=root_password_2026 DB_CHARSET=utf8mb4 -# WhatsApp Business API +# ── Redis ───────────────────────────────────────────────────── +REDIS_HOST=127.0.0.1 +REDIS_PORT=6379 +REDIS_PASSWORD= + +# ── WhatsApp Business API ───────────────────────────────────── WHATSAPP_TOKEN=EAAcGjPRqunIBQjy3mZAVLX2vfMcyfUtcAXAwul5tZCQjsdxyEljIV1C4mOfTNAOIseZCMDZCy2O5AVM6wBXZC6nEfSNxkhosevtlZCRDr8uxe4zHiiZClW88mnjj2sv2t6PAh63VtUfY5DYAands4O5E9E6L6yiugZCZCBRIFjEWEtE1WXOn6GZCy8mgKpqTD2aQvNogZDZD WHATSAPP_PHONE_NUMBER_ID=959898150536936 WHATSAPP_API_URL=https://graph.facebook.com/v22.0/ WEBHOOK_VERIFY_TOKEN=XimenaCaicedo2026*+ - -# Auto-approve templates: true|false AUTO_APPROVE_TEMPLATES=true -# Configuración general +# ── Aplicación ──────────────────────────────────────────────── +APP_ENV=development +APP_DEBUG=true APP_NAME=WhatsApp Bot System -APP_VERSION=1.0.0 +APP_VERSION=2.0.0 APP_URL=https://bot.u-s.app/ TIMEZONE=America/Bogota -# Seguridad -ADMIN_USERNAME=admin -ADMIN_PASSWORD=contraseña_admin_segura -SESSION_TIMEOUT=31536000 +# ── Logs ────────────────────────────────────────────────────── +# Valores: DEBUG | INFO | WARNING | ERROR +LOG_LEVEL=DEBUG +ENABLE_LOGGING=true +LOG_FILE=logs/system.log + +# ── Seguridad ───────────────────────────────────────────────── +SESSION_TIMEOUT=1800 MAX_LOGIN_ATTEMPTS=3 LOGIN_LOCKOUT_TIME=900 -# Logs -ENABLE_LOGGING=true -LOG_LEVEL=INFO -LOG_FILE=logs/system.log \ No newline at end of file +# ── Rate Limiting ───────────────────────────────────────────── +ENABLE_RATE_LIMIT=false + +# ── PHP ─────────────────────────────────────────────────────── +PHP_MEMORY_LIMIT=512M +PHP_MAX_EXECUTION_TIME=300 +DISPLAY_ERRORS=1 +ERROR_REPORTING=E_ALL diff --git a/.env.docker b/.env.docker index 35a0e18..2053f57 100644 --- a/.env.docker +++ b/.env.docker @@ -20,7 +20,7 @@ DB_ROOT_PASSWORD=root_password_super_seguro # =========================================== # REDIS # =========================================== -REDIS_HOST=redis +REDIS_HOST=127.0.0.1 REDIS_PORT=6379 REDIS_PASSWORD= REDIS_DB=0 diff --git a/.env.example b/.env.example index c8db650..f945346 100644 --- a/.env.example +++ b/.env.example @@ -36,6 +36,7 @@ LOG_PATH=logs # Redis (para colas y caché) REDIS_SCHEME=tcp +# Redis gestionado por Coolify — reemplazar con el hostname del recurso Redis REDIS_HOST=127.0.0.1 REDIS_PORT=6379 REDIS_PASSWORD= diff --git a/docker-compose.prod.yml b/docker-compose.prod.yml index d63eb9f..10ec328 100644 --- a/docker-compose.prod.yml +++ b/docker-compose.prod.yml @@ -33,9 +33,9 @@ services: - DB_USER=${DB_USER:-usite_whatsapp_user} - DB_PASS=${DB_PASS} - # Redis - - REDIS_HOST=redis - - REDIS_PORT=6379 + # Redis — gestionado por Coolify (configurar REDIS_HOST en env vars) + - REDIS_HOST=${REDIS_HOST:-127.0.0.1} + - REDIS_PORT=${REDIS_PORT:-6379} - REDIS_PASSWORD=${REDIS_PASSWORD:-} # WhatsApp API @@ -54,9 +54,6 @@ services: - PHP_MAX_EXECUTION_TIME=300 - PHP_OPCACHE_ENABLE=1 - depends_on: - redis: - condition: service_healthy networks: - whatsapp-network healthcheck: @@ -66,96 +63,15 @@ services: retries: 3 start_period: 30s - # Redis para colas y caché - redis: - image: redis:7-alpine - container_name: whatsapp-redis - restart: always - command: > - redis-server - --appendonly yes - --maxmemory 128mb - --maxmemory-policy allkeys-lru - volumes: - - redis-data:/data - networks: - - whatsapp-network - healthcheck: - test: ["CMD", "redis-cli", "ping"] - interval: 10s - timeout: 3s - retries: 5 - - # Workers para procesamiento en background - worker: - build: - context: . - dockerfile: Dockerfile.worker - container_name: whatsapp-worker - restart: always - volumes: - - app-logs:/var/www/html/logs - environment: - - TZ=America/Bogota - - APP_ENV=production - - APP_DEBUG=false - - DB_HOST=${DB_HOST:-mysql} - - DB_PORT=${DB_PORT:-3306} - - DB_NAME=${DB_NAME:-usite_whatsapp_bot} - - DB_USER=${DB_USER:-usite_whatsapp_user} - - DB_PASS=${DB_PASS} - - REDIS_HOST=redis - - REDIS_PORT=6379 - - REDIS_PASSWORD=${REDIS_PASSWORD:-} - - LOG_LEVEL=WARNING - depends_on: - redis: - condition: service_healthy - networks: - - whatsapp-network - command: php worker.php --daemon - - # Mantenimiento automatizado - PRODUCCIÓN - maintenance: - build: - context: . - dockerfile: Dockerfile.maintenance - container_name: whatsapp-maintenance-prod - restart: always - cap_add: - - SYS_NICE - - SETGID - - SETUID - volumes: - - app-logs:/var/www/html/logs - - ./backups:/backups - - maintenance-cron-logs:/var/log/cron - environment: - - TZ=America/Bogota - - APP_ENV=production - - DB_HOST=${DB_HOST:-mysql} - - DB_PORT=${DB_PORT:-3306} - - DB_NAME=${DB_NAME:-usite_whatsapp_bot} - - DB_USER=${DB_USER:-usite_whatsapp_user} - - DB_PASS=${DB_PASS} - - REDIS_HOST=redis - - REDIS_PORT=6379 - - APP_URL=http://app - depends_on: - redis: - condition: service_healthy - networks: - - whatsapp-network + # Redis: gestionado como Database Resource en Coolify (externo) + # Worker: corre dentro del contenedor app vía Supervisor + # Maintenance: deshabilitado en Coolify volumes: - redis-data: - driver: local app-logs: driver: local app-uploads: driver: local - maintenance-cron-logs: - driver: local networks: whatsapp-network: diff --git a/health.php b/health.php index 3028a97..e7f540c 100644 --- a/health.php +++ b/health.php @@ -53,7 +53,7 @@ try { $health['checks']['redis'] = [ 'status' => ((string)$ping === 'PONG' || $ping === true) ? 'ok' : 'error', - 'host' => getenv('REDIS_HOST') ?: 'redis' + 'host' => getenv('REDIS_HOST') ?: '127.0.0.1' ]; } catch (Exception $e) { $health['checks']['redis'] = [