Learn by Directing AI
All materials

docker-compose.yml

ymldocker-compose.yml
# VERIFICATION: Run `docker compose up -d` and verify all services are healthy before use.
# Expected services: tourism-portal, guide-system, operations-platform, grafana, loki, alloy
# Expected ports: 3000 (tourism-portal), 5000 (guide-system), 8080 (operations-platform), 3001 (grafana), 3100 (loki)

services:
  tourism-portal:
    build: ./tourism-portal
    ports:
      - "3000:3000"
    environment:
      - NODE_ENV=production
      - DB_PATH=/app/data/tourism.db
    volumes:
      - tourism-data:/app/data
    depends_on:
      - loki

  guide-system:
    build: ./guide-system
    ports:
      - "5000:5000"
    environment:
      - FLASK_ENV=production
      - DATABASE_URI=sqlite:///data/guides.db
      - TOURISM_API_URL=http://tourism-portal:3000/api/tourist-data
    volumes:
      - guide-data:/app/data
    depends_on:
      - tourism-portal

  operations-platform:
    build: ./operations-platform
    ports:
      - "8080:8080"
    environment:
      - FLASK_ENV=production
      - DATABASE_URI=sqlite:///data/operations.db
      - GUIDE_API_URL=http://guide-system:5000/api/guides
      - TOURISM_API_URL=http://tourism-portal:3000/api/tourist-data
    volumes:
      - operations-data:/app/data
      - uploads:/app/uploads
    depends_on:
      - guide-system
      - tourism-portal

  grafana:
    image: grafana/grafana:10.4.0
    ports:
      - "3001:3000"
    environment:
      - GF_SECURITY_ADMIN_USER=admin
      - GF_SECURITY_ADMIN_PASSWORD=admin
      - GF_AUTH_ANONYMOUS_ENABLED=true
      - GF_AUTH_ANONYMOUS_ORG_ROLE=Viewer
    volumes:
      - grafana-data:/var/lib/grafana
      - ./grafana-provisioning:/etc/grafana/provisioning

  loki:
    image: grafana/loki:2.9.4
    ports:
      - "3100:3100"
    command: -config.file=/etc/loki/local-config.yaml
    volumes:
      - loki-data:/loki

  alloy:
    image: grafana/alloy:v1.0.0
    volumes:
      - ./alloy-config.yaml:/etc/alloy/config.alloy
      - /var/run/docker.sock:/var/run/docker.sock:ro
    depends_on:
      - loki

volumes:
  tourism-data:
  guide-data:
  operations-data:
  uploads:
  grafana-data:
  loki-data: