# Docker Compose Override for Redis Support # # This file extends the base docker-compose.yml with Redis services. # # Usage: # docker-compose -f docker-compose.yml -f docker-compose.redis.yml up -d # # Or merge into your main docker-compose.yml version: '3.8' services: # Redis service for caching, sessions, and rate limiting redis: image: redis:7-alpine container_name: trackeep-redis restart: unless-stopped volumes: - redis_data:/data - ./redis.conf:/usr/local/etc/redis/redis.conf:ro command: > sh -c "redis-server /usr/local/etc/redis/redis.conf --requirepass $${REDIS_PASSWORD:-changeme}" environment: - REDIS_PASSWORD=${REDIS_PASSWORD:-changeme} networks: - trackeep-network healthcheck: test: ["CMD", "redis-cli", "-a", "${REDIS_PASSWORD:-changeme}", "ping"] interval: 10s timeout: 5s retries: 3 start_period: 10s # Security: Only expose to internal network, not external # ports: # - "127.0.0.1:6379:6379" # Uncomment for local debugging only labels: - "traefik.enable=false" deploy: resources: limits: memory: 512M reservations: memory: 128M # Backend service with Redis environment variables trackeep-backend: environment: # Redis Configuration - REDIS_ADDR=${REDIS_ADDR:-redis:6379} - REDIS_PASSWORD=${REDIS_PASSWORD} - REDIS_DB=${REDIS_DB:-0} - REDIS_POOL_SIZE=${REDIS_POOL_SIZE:-20} - REDIS_DIAL_TIMEOUT=${REDIS_DIAL_TIMEOUT:-5s} - REDIS_READ_TIMEOUT=${REDIS_READ_TIMEOUT:-3s} - REDIS_WRITE_TIMEOUT=${REDIS_WRITE_TIMEOUT:-3s} # Feature Flags - REDIS_SESSIONS_ENABLED=${REDIS_SESSIONS_ENABLED:-true} - REDIS_CACHE_ENABLED=${REDIS_CACHE_ENABLED:-true} - REDIS_RATELIMIT_ENABLED=${REDIS_RATELIMIT_ENABLED:-true} - REDIS_PUBSUB_ENABLED=${REDIS_PUBSUB_ENABLED:-true} depends_on: redis: condition: service_healthy postgres: condition: service_healthy # Redis Commander - Optional Redis management UI # Uncomment to enable web-based Redis management at http://localhost:8081 # redis-commander: # image: rediscommander/redis-commander:latest # container_name: trackeep-redis-commander # restart: unless-stopped # environment: # - REDIS_HOST=redis # - REDIS_PORT=6379 # - REDIS_PASSWORD=${REDIS_PASSWORD} # ports: # - "127.0.0.1:8081:8081" # networks: # - trackeep-network # depends_on: # - redis volumes: # Redis persistent data volume redis_data: driver: local networks: trackeep-network: driver: bridge # ============================================================================= # REDIS SENTINEL CONFIGURATION (For High Availability) # ============================================================================= # Uncomment this section and comment out the single Redis instance above # to enable Redis Sentinel for automatic failover # # services: # redis-master: # image: redis:7-alpine # container_name: trackeep-redis-master # volumes: # - redis_master_data:/data # command: > # sh -c "redis-server # --appendonly yes # --maxmemory 256mb # --maxmemory-policy allkeys-lru # --requirepass $${REDIS_PASSWORD}" # networks: # - trackeep-network # # redis-replica-1: # image: redis:7-alpine # container_name: trackeep-redis-replica-1 # volumes: # - redis_replica1_data:/data # command: > # sh -c "redis-server # --appendonly yes # --replicaof redis-master 6379 # --masterauth $${REDIS_PASSWORD} # --requirepass $${REDIS_PASSWORD}" # networks: # - trackeep-network # depends_on: # - redis-master # # redis-replica-2: # image: redis:7-alpine # container_name: trackeep-redis-replica-2 # volumes: # - redis_replica2_data:/data # command: > # sh -c "redis-server # --appendonly yes # --replicaof redis-master 6379 # --masterauth $${REDIS_PASSWORD} # --requirepass $${REDIS_PASSWORD}" # networks: # - trackeep-network # depends_on: # - redis-master # # redis-sentinel-1: # image: redis:7-alpine # container_name: trackeep-sentinel-1 # command: > # sh -c "echo 'sentinel monitor mymaster redis-master 6379 2' > /etc/sentinel.conf && # echo 'sentinel auth-pass mymaster $${REDIS_PASSWORD}' >> /etc/sentinel.conf && # echo 'sentinel down-after-milliseconds mymaster 5000' >> /etc/sentinel.conf && # echo 'sentinel failover-timeout mymaster 60000' >> /etc/sentinel.conf && # redis-sentinel /etc/sentinel.conf" # networks: # - trackeep-network # depends_on: # - redis-master # - redis-replica-1 # - redis-replica-2 # # volumes: # redis_master_data: # redis_replica1_data: # redis_replica2_data: