All materials
docker-compose.yml
ymldocker-compose.yml
# VERIFICATION: Run `docker compose up -d` and verify all services are healthy before use.
# Expected services: app (ordering platform), postgres (database), grafana (monitoring dashboard), loki (log aggregation), alloy (log collection)
# Expected ports: app=8080, postgres=5432, grafana=3000, loki=3100
services:
app:
build:
context: .
dockerfile: Dockerfile
ports:
- "8080:5000"
environment:
- DATABASE_URL=postgresql://kabylie:kabylie_gold_2024@postgres:5432/orders
- FLASK_ENV=production
depends_on:
postgres:
condition: service_healthy
volumes:
- /var/run/docker.sock:/var/run/docker.sock
restart: unless-stopped
logging:
driver: "json-file"
options:
max-size: "10m"
tag: "kabylie-app"
postgres:
image: postgres:16.2
environment:
- POSTGRES_USER=kabylie
- POSTGRES_PASSWORD=kabylie_gold_2024
- POSTGRES_DB=orders
ports:
- "5432:5432"
volumes:
- ./db/init.sql:/docker-entrypoint-initdb.d/init.sql
- pgdata:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U kabylie -d orders"]
interval: 5s
timeout: 5s
retries: 5
restart: unless-stopped
grafana:
image: grafana/grafana:10.4.1
ports:
- "3000: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-provisioning:/etc/grafana/provisioning
depends_on:
- loki
restart: unless-stopped
loki:
image: grafana/loki:2.9.4
ports:
- "3100:3100"
command: -config.file=/etc/loki/local-config.yaml
restart: unless-stopped
alloy:
image: grafana/alloy:v1.0.0
volumes:
- ./alloy-config/config.alloy:/etc/alloy/config.alloy
- /var/log:/var/log:ro
- /var/run/docker.sock:/var/run/docker.sock:ro
command: run /etc/alloy/config.alloy
depends_on:
- loki
restart: unless-stopped
volumes:
pgdata: