version: "3.8" services: redis: image: redis:alpine container_name: ticket-redis ports: - "6379:6379" volumes: - redis_data:/data command: redis-server --appendonly yes healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 10s timeout: 3s retries: 3 networks: - ticket-network app: build: . container_name: ticket-microservice ports: - "3049:3049" environment: - NODE_ENV=production - REDIS_URL=redis://redis:6379 - PORT=3049 - LOG_LEVEL=info depends_on: redis: condition: service_healthy volumes: - ./logs:/app/logs - ./tickets:/app/tickets networks: - ticket-network restart: unless-stopped prometheus: image: prom/prometheus:latest container_name: ticket-prometheus ports: - "9090:9090" volumes: - ./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: - ticket-network profiles: - monitoring grafana: image: grafana/grafana:latest container_name: ticket-grafana ports: - "3000:3000" environment: - GF_SECURITY_ADMIN_PASSWORD=admin volumes: - grafana_data:/var/lib/grafana networks: - ticket-network profiles: - monitoring volumes: redis_data: prometheus_data: grafana_data: networks: ticket-network: driver: bridge