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 (main store), staging (test store), mysql (database), grafana, loki, alloy
# Expected ports: 8080 (main app), 8081 (staging), 3306 (mysql), 3000 (grafana), 3100 (loki)

version: "3.8"

services:
  mysql:
    image: mysql:8.0.36
    container_name: gintaro-mysql
    environment:
      MYSQL_ROOT_PASSWORD: gintaro_root_2024
      MYSQL_DATABASE: gintaro_shop
      MYSQL_USER: gintaro_app
      MYSQL_PASSWORD: amber_jewelry_db
    ports:
      - "3306:3306"
    volumes:
      - ./vulnerable-app/db/init.sql:/docker-entrypoint-initdb.d/init.sql
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
      interval: 10s
      timeout: 5s
      retries: 5

  app:
    build:
      context: ./vulnerable-app
      dockerfile: Dockerfile
    container_name: gintaro-app
    ports:
      - "8080:80"
    depends_on:
      mysql:
        condition: service_healthy
    environment:
      DB_HOST: mysql
      DB_USER: gintaro_app
      DB_PASS: amber_jewelry_db
      DB_NAME: gintaro_shop

  staging:
    build:
      context: ./vulnerable-app
      dockerfile: Dockerfile
    container_name: gintaro-staging
    ports:
      - "8081:80"
    depends_on:
      mysql:
        condition: service_healthy
    environment:
      DB_HOST: mysql
      DB_USER: gintaro_app
      DB_PASS: amber_jewelry_db
      DB_NAME: gintaro_shop

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

  alloy:
    image: grafana/alloy:v1.0.0
    container_name: gintaro-alloy
    volumes:
      - ./vulnerable-app/alloy-config/config.alloy:/etc/alloy/config.alloy
      - /var/run/docker.sock:/var/run/docker.sock:ro
    command: run --server.http.listen-addr=0.0.0.0:12345 /etc/alloy/config.alloy
    depends_on:
      - loki
      - app
      - staging

  grafana:
    image: grafana/grafana:10.3.3
    container_name: gintaro-grafana
    ports:
      - "3000:3000"
    environment:
      GF_SECURITY_ADMIN_USER: admin
      GF_SECURITY_ADMIN_PASSWORD: admin
      GF_AUTH_ANONYMOUS_ENABLED: "true"
      GF_AUTH_ANONYMOUS_ORG_ROLE: Admin
    volumes:
      - ./vulnerable-app/grafana-provisioning:/etc/grafana/provisioning
    depends_on:
      - loki