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