chore: Projektgeruest, Abhaengigkeiten und Werkzeuge

Plain PHP 8.2+ ohne Framework. Einzige Laufzeit-Abhaengigkeit ist
endroid/qr-code; intl und imagick sind optional (es gibt jeweils einen
Rueckfallweg). Konfiguration ueber .env oder Umgebungsvariablen, damit
dieselbe Anwendung per FTP und per Docker deploybar ist.
This commit is contained in:
2026-08-03 18:11:38 +02:00
commit b41dd1d3d7
6 changed files with 2028 additions and 0 deletions
+91
View File
@@ -0,0 +1,91 @@
# =============================================================
# urlshort-qr-gen – Konfiguration
# Diese Datei nach ".env" kopieren und anpassen.
# Alle Werte koennen alternativ als echte Umgebungsvariablen
# gesetzt werden (Docker); die .env hat dann Vorrang, wenn der
# Schluessel dort vorhanden ist.
# =============================================================
# --- Anwendung -----------------------------------------------
# Basis-URL OHNE abschliessenden Slash. Wird fuer die Kurzlinks
# und die QR-Codes verwendet.
APP_BASE_URL=http://localhost:8080
# production | development (development zeigt Fehlermeldungen an)
APP_ENV=production
APP_TIMEZONE=Europe/Berlin
# HTTP-Status fuer Weiterleitungen: 301 (permanent, wird vom
# Browser gecacht -> weniger Klicks werden gezaehlt) oder
# 302 / 307 (temporaer, empfohlen fuer korrekte Statistik).
REDIRECT_STATUS=302
# --- Datenbank ------------------------------------------------
# sqlite | mysql
DB_DRIVER=sqlite
# Nur fuer sqlite: Pfad zur Datenbankdatei.
# Relative Pfade werden vom Projekt-Stammverzeichnis aus aufgeloest.
DB_SQLITE_PATH=data/database.sqlite
# Nur fuer mysql:
DB_HOST=127.0.0.1
DB_PORT=3306
DB_NAME=urlshort
DB_USER=urlshort
DB_PASSWORD=
DB_CHARSET=utf8mb4
# --- Admin-Zugang ---------------------------------------------
ADMIN_USER=admin
# bcrypt-Hash des Passworts. Leer lassen -> beim ersten Aufruf startet
# der Setup-Assistent. Dieser verlangt zusaetzlich ein Einmal-Token,
# das in data/setup-token.txt steht (und im Serverprotokoll), damit
# niemand anderes die frische Installation uebernehmen kann.
# Hash erzeugen: php -r "echo password_hash('geheim', PASSWORD_DEFAULT), PHP_EOL;"
ADMIN_PASSWORD_HASH=
# --- Sessions / Sicherheit ------------------------------------
SESSION_NAME=urlshort_session
# Abmeldung nach Inaktivitaet (Sekunden)
SESSION_LIFETIME=7200
# Harte Obergrenze je Sitzung, unabhaengig von Aktivitaet (0 = aus)
SESSION_ABSOLUTE_LIFETIME=43200
# Cookies nur ueber HTTPS senden. Wird bei einer HTTPS-Anfrage
# automatisch aktiviert; hier auf true setzen, wenn die Anwendung
# ausschliesslich ueber HTTPS erreichbar ist.
SESSION_SECURE=false
# --- Betrieb hinter einem Proxy / Loadbalancer ----------------
# Nur IPs und CIDR-Bereiche aus dieser Liste duerfen X-Forwarded-For
# und X-Forwarded-Proto setzen. LEER LASSEN, wenn kein Proxy davor
# steht - sonst koennte jeder die Client-IP faelschen und damit die
# Login-Sperre umgehen.
# Beispiel: TRUSTED_PROXIES=10.0.0.0/8,172.18.0.1
TRUSTED_PROXIES=
# HTTP Strict Transport Security in Sekunden (0 = aus).
# Wird nur bei HTTPS-Anfragen gesendet.
HSTS_MAX_AGE=31536000
# Login-Ratenbegrenzung
LOGIN_MAX_ATTEMPTS=5
LOGIN_LOCKOUT_SECONDS=900
# --- Datenschutz ----------------------------------------------
# none = IP wird gar nicht gespeichert (Standard, DSGVO-freundlich)
# hash = nur ein gesalzener, gekuerzter Hash (fuer Unique-Zaehlung)
TRACK_IP=none
# Zufaelliger Salt, nur relevant bei TRACK_IP=hash
IP_HASH_SALT=
# Tage, nach denen einzelne Besuchsdatensaetze automatisch geloescht
# werden (0 = nie loeschen). Die Gesamt-Klickzahl bleibt erhalten.
VISIT_RETENTION_DAYS=365
# --- Uploads (QR-Logos) ---------------------------------------
# Ablage der Logos, relativ zum Projekt-Stammverzeichnis.
# Liegt bewusst ausserhalb des Webroots.
UPLOAD_DIR=data/uploads
UPLOAD_MAX_BYTES=2097152