# ============================================================================= # XMTP Prediction Bot Docker Compose # ============================================================================= # Production deployment setup for XMTP bot with Redis and monitoring version: '3.8' services: # XMTP Prediction Bot prediction-bot: build: context: . dockerfile: Dockerfile.bot container_name: imperfect-form-bot restart: unless-stopped environment: # XMTP Configuration - XMTP_ENV=${XMTP_ENV:-production} - BOT_PRIVATE_KEY=${BOT_PRIVATE_KEY} - ENCRYPTION_KEY=${ENCRYPTION_KEY} - PREDICTION_BOT_XMTP_ADDRESS=${PREDICTION_BOT_XMTP_ADDRESS} # AI Configuration - OPENAI_API_KEY=${OPENAI_API_KEY} - AI_MODEL_API=${AI_MODEL_API:-https://api.openai.com/v1/chat/completions} # Blockchain Configuration - BASE_SEPOLIA_RPC_URL=${BASE_SEPOLIA_RPC_URL} - NEXT_PUBLIC_PREDICTION_MARKET_ADDRESS=${NEXT_PUBLIC_PREDICTION_MARKET_ADDRESS} # External APIs - COINMARKETCAP_API_KEY=${COINMARKETCAP_API_KEY} - COINGECKO_API_KEY=${COINGECKO_API_KEY} - OPENWEATHER_API_KEY=${OPENWEATHER_API_KEY} - TIMEZONEDB_API_KEY=${TIMEZONEDB_API_KEY} # Database - DATABASE_URL=${DATABASE_URL} - REDIS_URL=redis://redis:6379 # Application Settings - NODE_ENV=production - NEXT_PUBLIC_APP_ENV=production - NEXT_PUBLIC_DEBUG_MODE=false # Feature Flags - ENABLE_EXTERNAL_PRICE_DATA=true - ENABLE_WEATHER_PREDICTIONS=true - ENABLE_LOCATION_CONTEXT=true - ENABLE_TIMEZONE_DETECTION=true volumes: # Persistent storage for XMTP data - bot_data:/app/data - ./logs:/app/logs ports: - "3001:3001" # Health check port depends_on: - redis networks: - bot_network healthcheck: test: ["CMD", "curl", "-f", "http://localhost:3001/health"] interval: 30s timeout: 10s retries: 3 start_period: 40s # Redis for caching and message queuing redis: image: redis:7-alpine container_name: imperfect-form-redis restart: unless-stopped command: redis-server --appendonly yes --maxmemory 256mb --maxmemory-policy allkeys-lru volumes: - redis_data:/data ports: - "6379:6379" networks: - bot_network healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 30s timeout: 10s retries: 3 # Monitoring with Prometheus (optional) prometheus: image: prom/prometheus:latest container_name: imperfect-form-prometheus restart: unless-stopped ports: - "9090:9090" volumes: - ./monitoring/prometheus.yml:/etc/prometheus/prometheus.yml - prometheus_data:/prometheus command: - '--config.file=/etc/prometheus/prometheus.yml' - '--storage.tsdb.path=/prometheus' - '--web.console.libraries=/etc/prometheus/console_libraries' - '--web.console.templates=/etc/prometheus/consoles' - '--storage.tsdb.retention.time=200h' - '--web.enable-lifecycle' networks: - bot_network profiles: - monitoring # Grafana for visualization (optional) grafana: image: grafana/grafana:latest container_name: imperfect-form-grafana restart: unless-stopped ports: - "3000:3000" environment: - GF_SECURITY_ADMIN_PASSWORD=${GRAFANA_PASSWORD:-admin} volumes: - grafana_data:/var/lib/grafana networks: - bot_network profiles: - monitoring volumes: bot_data: driver: local redis_data: driver: local prometheus_data: driver: local grafana_data: driver: local networks: bot_network: driver: bridge