Files
urlshort-qr-gen/docker-compose.yml
T
florian.wilde f4aece9557 build: Docker-Setup und Apache-Konfiguration
Apache mit mod_php statt PHP-FPM plus Nginx: dadurch verhalten sich
Docker und klassisches Shared Hosting gleich, es gilt dieselbe
.htaccess. MariaDB liegt hinter einem Compose-Profil.

Die Entwicklungspakete bleiben im Image installiert - beim Aufraeumen
mit apt-get purge --auto-remove verschwindet sonst auch die von imagick
benoetigte Laufzeitbibliothek.

Die .htaccess im Stammverzeichnis wird nur gebraucht, wenn der Webroot
nicht auf public/ gelegt werden kann; sie sperrt dann alle uebrigen
Verzeichnisse.
2026-08-03 18:11:40 +02:00

79 lines
2.5 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# =============================================================
# 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: