version: "3.8" services: app: image: thecodingmachine/php:8.3-v4-apache user: "${APP_UID:-0}:${APP_GID:-0}" # root zum Stabilisieren; später gern 33:33 ports: - "${APP_PORT:-8009}:80" environment: PHP_EXTENSION_PDO_MYSQL: "1" APP_BASE_URL: ${APP_BASE_URL:-http://localhost:8009} AUTH_DISABLED: ${AUTH_DISABLED:-false} # DB DB_HOST: ${DB_HOST:-mariadb} DB_PORT: ${DB_PORT:-3306} DB_NAME: ${DB_NAME:-qa_tool} DB_USER: ${DB_USER:-qa} DB_PASS: ${DB_PASS:-change_me} # STORAGE – außerhalb des Code-Mounts PDF_STORAGE_DIR: ${PDF_STORAGE_DIR:-/var/reports} volumes: # CODE (Bind-Mount) – passe den Hostpfad an - ${APP_HTDOCS_HOST:-/opt/qa-tool/htdocs}:/var/www/html # STORAGE (Named Volume, **RW**!) - pdf_storage:/var/reports depends_on: mariadb: condition: service_healthy fix-pdf-perms: condition: service_completed_successfully restart: unless-stopped mariadb: image: mariadb:11 environment: MYSQL_DATABASE: ${DB_NAME:-qa_tool} MYSQL_USER: ${DB_USER:-qa} MYSQL_PASSWORD: ${DB_PASS:-change_me} MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASS:-change_me_root} volumes: - db_data:/var/lib/mysql restart: unless-stopped healthcheck: test: ["CMD", "mariadb-admin", "ping", "-h", "127.0.0.1", "-p${DB_PASS:-change_me}"] interval: 10s timeout: 5s retries: 30 start_period: 20s schema-loader: image: mariadb:11 depends_on: mariadb: condition: service_healthy environment: DB_HOST: ${DB_HOST:-mariadb} DB_PORT: ${DB_PORT:-3306} DB_NAME: ${DB_NAME:-qa_tool} DB_USER: ${DB_USER:-qa} DB_PASS: ${DB_PASS:-change_me} command: - bash - -lc - | until mariadb-admin -h"$DB_HOST" -P"$DB_PORT" -u"$DB_USER" -p"$DB_PASS" ping --silent; do sleep 2; done mariadb -h"$DB_HOST" -P"$DB_PORT" -u"$DB_USER" -p"$DB_PASS" "$DB_NAME" <<'SQL' CREATE TABLE IF NOT EXISTS reports ( id BIGINT AUTO_INCREMENT PRIMARY KEY, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, module VARCHAR(255), module_version VARCHAR(100), pbx_version VARCHAR(100), olm_nummer VARCHAR(100), tester VARCHAR(255), docbee_url TEXT, summary VARCHAR(255), pdf_path TEXT ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE IF NOT EXISTS steps ( id BIGINT AUTO_INCREMENT PRIMARY KEY, report_id BIGINT NOT NULL, step_index INT, step_id VARCHAR(50), title TEXT, expected TEXT, status ENUM('pass','fail','skip','na','') DEFAULT '', comment TEXT, evidence TEXT, group_title VARCHAR(255), group_index INT, CONSTRAINT fk_steps_report FOREIGN KEY (report_id) REFERENCES reports(id) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; SQL restart: "no" # Rechte-Fix fürs Storage-Volume – nie failen, maximal permissiv fix-pdf-perms: image: busybox:1.36 volumes: - pdf_storage:/target command: | sh -lc ' set +e mkdir -p /target chmod -R 0777 /target 2>/dev/null || true chown -R 0:0 /target 2>/dev/null || true exit 0 ' restart: "no" phpmyadmin: image: phpmyadmin:5 ports: - "${PHPMYADMIN_PORT:-8010}:80" environment: PMA_HOST: mariadb PMA_USER: ${DB_USER:-qa} PMA_PASSWORD: ${DB_PASS:-change_me} depends_on: mariadb: condition: service_healthy restart: unless-stopped volumes: db_data: pdf_storage: