# ============================================================= # 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