version: '3.8'

services:
  # CDK Mint service

  prometheus:
    image: prom/prometheus:latest
    ports:
      - "9090:9090"
    volumes:
      - ./misc/provisioning/prometheus.yml:/etc/prometheus/prometheus.yml:ro
    command:
      - '--config.file=/etc/prometheus/prometheus.yml'
      - '--storage.tsdb.path=/prometheus'
      - '--web.console.libraries=/etc/prometheus/console_libraries'
      - '--web.console.templates=/etc/prometheus/consoles'
      - '--web.enable-lifecycle'
      - '--enable-feature=otlp-write-receiver'
    extra_hosts:
      - "host.docker.internal:host-gateway"
    networks:
      - cdk

  # Grafana for visualization
  grafana:
    image: grafana/grafana:latest
    ports:
      - "3011:3000"
    volumes:
      - ./misc/provisioning/datasources:/etc/grafana/provisioning/datasources
      - ./misc/provisioning/dashboards:/etc/grafana/provisioning/dashboards
    environment:
      - GF_DASHBOARDS_JSON_ENABLED=true
      - GF_SECURITY_ADMIN_PASSWORD=admin
      - GF_PROVISIONING_PATHS=/etc/grafana/provisioning
    networks:
      - cdk
  mintd:
    build:
      context: .
      dockerfile: Dockerfile
    container_name: mint
    ports:
      - "8085:8085"
    environment:
      - CDK_MINTD_URL=https://example.com
      - CDK_MINTD_LN_BACKEND=fakewallet
      - CDK_MINTD_LISTEN_HOST=0.0.0.0
      - CDK_MINTD_LISTEN_PORT=8085
      - CDK_MINTD_MNEMONIC=
      # Database configuration - choose one:
      # Option 1: SQLite (embedded, no additional setup needed)
      - CDK_MINTD_DATABASE=sqlite
      # Option 2: ReDB (embedded, no additional setup needed)
      # - CDK_MINTD_DATABASE=redb
      # Option 3: PostgreSQL (requires postgres service, enable with: docker-compose --profile postgres up)
      # - CDK_MINTD_DATABASE=postgres
      # - CDK_MINTD_DATABASE_URL=postgresql://cdk_user:cdk_password@postgres:5432/cdk_mint
      # Cache configuration
      - CDK_MINTD_CACHE_BACKEND=memory
      # For Redis cache (requires redis service, enable with: docker-compose --profile redis up):
      # - CDK_MINTD_CACHE_REDIS_URL=redis://redis:6379
      # - CDK_MINTD_CACHE_REDIS_KEY_PREFIX=cdk-mintd
      - CDK_MINTD_PROMETHEUS_ENABLED=true
      - CDK_MINTD_PROMETHEUS_ADDRESS=0.0.0.0
      - CDK_MINTD_PROMETHEUS_PORT=9000
    command: ["cdk-mintd"]
    depends_on:
      - prometheus
      - grafana
    networks:
      - cdk
    # Uncomment when using PostgreSQL:
    # depends_on:
    #   - postgres


  # PostgreSQL database service
  # Enable with: docker-compose --profile postgres up
  # postgres:
  #   image: postgres:16-alpine
  #   container_name: mint_postgres
  #   restart: unless-stopped
  #   profiles:
  #     - postgres
  #   environment:
  #     - POSTGRES_USER=cdk_user
  #     - POSTGRES_PASSWORD=cdk_password
  #     - POSTGRES_DB=cdk_mint
  #     - POSTGRES_INITDB_ARGS=--encoding=UTF-8 --lc-collate=C --lc-ctype=C
  #   ports:
  #     - "5432:5432"
  #   volumes:
  #     - postgres_data:/var/lib/postgresql/data
  #   healthcheck:
  #     test: ["CMD-SHELL", "pg_isready -U cdk_user -d cdk_mint"]
  #     interval: 10s
  #     timeout: 5s
  #     retries: 5

  # Redis cache service (optional)
  # Enable with: docker-compose --profile redis up
#   redis:
#     image: redis:7-alpine
#     container_name: mint_redis
#     restart: unless-stopped
#     profiles:
#       - redis
#     ports:
#       - "6379:6379"
#     volumes:
#       - redis_data:/data
#     command: redis-server --save 60 1 --loglevel warning
#     healthcheck:
#       test: ["CMD", "redis-cli", "ping"]
#       interval: 10s
#       timeout: 3s
#       retries: 5

volumes:
  postgres_data:
    driver: local
  ldk_node_data:
    driver: local
# redis_data:
#   driver: local



networks:
  cdk:
    driver: bridge
