Sicherheit: - .htaccess im Projektstamm mit X-Content-Type-Options, X-Frame-Options, Referrer-Policy, Permissions-Policy und einer Content-Security-Policy; da alle Assets lokal liegen, erlaubt sie nur noch die eigene Herkunft (Ausnahme: hCaptcha, falls aktiviert) - includes/, tools/, tests/, updater/storage und uploads/ schützen sich über eigene .htaccess-Dateien – auch bei Installation im Unterordner - Docker: AllowOverride All, damit diese Regeln überhaupt greifen, und ein Volume für uploads/, damit Logos ein Image-Update überstehen Werkzeuge: - tools/screenshots.py erzeugt alle Bilder in docs/screenshots aus der Demo-Instanz; tools/README.md beschreibt beides - Einstellungs-Tabs sind per ?tab=… direkt verlinkbar (serverseitig, also auch ohne JavaScript) Dokumentation: Readme um Markenfarben, Bild-Upload, lokale Assets, Sicherheits-Header (inkl. Nginx-Entsprechung) und einen Abschnitt "Entwicklung" ergänzt; Screenshots neu erzeugt, Version 2.6.0. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
42 lines
1.1 KiB
YAML
42 lines
1.1 KiB
YAML
services:
|
|
app:
|
|
build: .
|
|
ports:
|
|
- "8080:80"
|
|
environment:
|
|
DB_HOST: db
|
|
DB_NAME: unifi_voucher
|
|
DB_USER: unifi_voucher
|
|
DB_PASS: change_me
|
|
# Dauerhaft setzen! Sonst koennen verschluesselte Werte nach Neustart
|
|
# nicht mehr gelesen werden. Erzeugen: php -r "echo base64_encode(random_bytes(32));"
|
|
APP_KEY: ""
|
|
TZ: Europe/Berlin
|
|
volumes:
|
|
# Hochgeladene Logos/Hintergruende ueberleben so ein Image-Update
|
|
- uploads:/var/www/html/uploads
|
|
depends_on:
|
|
db:
|
|
condition: service_healthy
|
|
restart: unless-stopped
|
|
|
|
db:
|
|
image: mariadb:11
|
|
environment:
|
|
MARIADB_DATABASE: unifi_voucher
|
|
MARIADB_USER: unifi_voucher
|
|
MARIADB_PASSWORD: change_me
|
|
MARIADB_ROOT_PASSWORD: change_me_root
|
|
volumes:
|
|
- db_data:/var/lib/mysql
|
|
- ./database.sql:/docker-entrypoint-initdb.d/01_schema.sql:ro
|
|
healthcheck:
|
|
test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"]
|
|
interval: 10s
|
|
timeout: 5s
|
|
retries: 10
|
|
restart: unless-stopped
|
|
|
|
volumes:
|
|
db_data:
|
|
uploads:
|