# ============================================================= # urlshort-qr-gen – Docker Compose # # Schnellstart (SQLite, nichts weiter noetig): # docker compose up -d --build # -> http://localhost:8080 # # Mit MariaDB statt SQLite: # docker compose --profile mysql up -d --build # (vorher in der .env DB_DRIVER=mysql und DB_HOST=db setzen) # ============================================================= services: app: build: context: . dockerfile: Dockerfile image: urlshort-qr-gen:latest container_name: urlshort-app restart: unless-stopped ports: - "${APP_PORT:-8080}:80" environment: # Diese Werte haben Vorrang vor Defaults, aber NICHT vor einer # gemounteten .env-Datei. Fuer Docker daher entweder hier # konfigurieren oder eine .env mitliefern - nicht beides. APP_BASE_URL: "${APP_BASE_URL:-http://localhost:8080}" APP_ENV: "${APP_ENV:-production}" APP_TIMEZONE: "${APP_TIMEZONE:-Europe/Berlin}" REDIRECT_STATUS: "${REDIRECT_STATUS:-302}" DB_DRIVER: "${DB_DRIVER:-sqlite}" DB_SQLITE_PATH: "${DB_SQLITE_PATH:-data/database.sqlite}" DB_HOST: "${DB_HOST:-db}" DB_PORT: "${DB_PORT:-3306}" DB_NAME: "${DB_NAME:-urlshort}" DB_USER: "${DB_USER:-urlshort}" DB_PASSWORD: "${DB_PASSWORD:-urlshort}" # Leer lassen -> beim ersten Aufruf startet der Setup-Assistent. ADMIN_USER: "${ADMIN_USER:-admin}" ADMIN_PASSWORD_HASH: "${ADMIN_PASSWORD_HASH:-}" SESSION_SECURE: "${SESSION_SECURE:-false}" TRACK_IP: "${TRACK_IP:-none}" IP_HASH_SALT: "${IP_HASH_SALT:-}" VISIT_RETENTION_DAYS: "${VISIT_RETENTION_DAYS:-365}" volumes: # Datenbank und hochgeladene Logos ueberleben Neubauten. - app-data:/var/www/html/data healthcheck: test: ["CMD", "php", "-r", "exit(@file_get_contents('http://127.0.0.1/login') === false ? 1 : 0);"] interval: 30s timeout: 5s retries: 3 start_period: 20s db: image: mariadb:11 container_name: urlshort-db restart: unless-stopped profiles: ["mysql"] environment: MARIADB_DATABASE: "${DB_NAME:-urlshort}" MARIADB_USER: "${DB_USER:-urlshort}" MARIADB_PASSWORD: "${DB_PASSWORD:-urlshort}" MARIADB_ROOT_PASSWORD: "${DB_ROOT_PASSWORD:-root-geheim}" volumes: - db-data:/var/lib/mysql healthcheck: test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"] interval: 10s timeout: 5s retries: 10 volumes: app-data: db-data: