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: 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: