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.
This commit is contained in:
@@ -0,0 +1,78 @@
|
||||
# =============================================================
|
||||
# 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:
|
||||
Reference in New Issue
Block a user