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: