Betrieb

Konfiguration (.env)

Nach jeder Änderung an der .env:

php artisan config:cache && php artisan queue:restart

Ohne das wirkt keine Änderung — der Config-Cache ignoriert die .env vollständig.

Zwei .env-Syntaxregeln, die stumm zuschlagen. Ein # in einem nicht quotierten Wert schneidet ihn ab — aus Ge#heim wird Ge, ohne Fehlermeldung. Ein Leerzeichen in einem nicht quotierten Wert ist ein Parse-Fehler, nach dem die Anwendung gar nicht mehr startet. Passwörter, Schlüssel und alles mit Sonderzeichen deshalb immer in doppelte Anführungszeichen setzen. Nachsehen statt annehmen: php artisan tinker --execute="var_dump(env('MAIL_PASSWORD'));"

Grundlagen

Schlüssel Bedeutung
APP_ENV Im Betrieb production
APP_DEBUG Im Betrieb false. true zeigt bei Fehlern interne Pfade und Konfigurationswerte
APP_KEY Wird von key:generate gesetzt. Verlust macht verschlüsselte Sitzungen und das gespeicherte Mail-Passwort unlesbar
APP_URL Vollständige öffentliche Adresse mit https://. Steht in allen Links in Mails
APP_TIMEZONE Zeitzone für Anzeige und gespeicherte Zeitstempel. Standard Europe/Berlin. Nur vor dem ersten Produktivdatensatz ändern — siehe unten
APP_NAME Nur Präfix für Cache-, Session- und Queue-Schlüssel — nicht der angezeigte Name
FILESHARE_NAME Ausgangswert des angezeigten Namens; überschreibbar in Einstellungen → Allgemein
DB_* Datenbank-Zugang
SESSION_DRIVER database (Standard)
SESSION_SECURE_COOKIE Auf einer Installation mit HTTPS true. Ohne diesen Schalter kann das Session-Cookie im Klartext übertragen werden
SESSION_SAME_SITE lax (Standard)
QUEUE_CONNECTION database und ein Worker. sync nur für Testinstallationen
MAIL_* Nur Ausgangswerte. Sobald unter Einstellungen → E-Mail ein Zugang gepflegt ist, hat dieser Vorrang

Fileshare-eigene Schlüssel

Schlüssel Standard Bedeutung
FILESHARE_MAX_UPLOAD_KB 20971520 (20 GB) Obergrenze pro Datei in Kilobyte — das Limit der Anwendung, nicht von PHP. Der gechunkte Upload umgeht upload_max_filesize und post_max_size, diese Grenze aber nicht
FILESHARE_ENCRYPTION_KEY Schlüssel für die Verschlüsselung gespeicherter Dateien. Ohne ihn ist die Funktion nicht verfügbar
FILESHARE_ENCRYPT_UPLOADS false Belegt die Upload-Option „verschlüsselt ablegen" vor
FILESHARE_DOWNLOAD_METHOD auto Ausgangswert; in Einstellungen → Auslieferung überschreibbar
FILESHARE_X_ACCEL_INTERNAL /__protected/ Interne nginx-Location für die beschleunigte Auslieferung
FILESHARE_EXTERNAL_FILE_EXPIRES_DAYS 7 Gültigkeit von Dateien, die Fremde über einen Upload-Link ablegen
FILESHARE_UPLOADER_IP_RETENTION_DAYS 30 Aufbewahrung der IP-Adresse fremder Uploader
FILESHARE_EXPIRED_RETENTION_DAYS 3 Karenz, bis ein abgelaufener Link samt Datei gelöscht wird. 0 = beim nächsten Lauf, -1 = nie
FILESHARE_DOWNLOAD_LOG_RETENTION_DAYS 90 Aufbewahrung der Download-Protokolle. -1 = nie löschen
FILESHARE_SEND_LOG_RETENTION_DAYS 90 Aufbewahrung des Versandprotokolls. -1 = nie löschen. Sinnvollerweise derselbe Wert wie die Zeile darüber — sonst zeigt die Zeitleiste Abrufe ohne den zugehörigen Versand
FILESHARE_UPDATE_CHECK true Einmal täglich beim Öffnen der Systemdaten nachsehen, ob es eine neuere Fassung gibt. false in abgeschotteten Netzen — die Abfrage verrät dem Anbieter, dass es diese Installation gibt
FILESHARE_UPDATE_SOURCE GitLab-API des Projekts Woher die Release-Liste kommt. Nur ändern, wenn du eine eigene Fassung pflegst

Der Verschlüsselungsschlüssel

php -r "echo base64_encode(random_bytes(32)).PHP_EOL;"

Dieser Schlüssel ist nicht ersetzbar. Ist er verloren, sind alle verschlüsselt gespeicherten Dateien unlesbar — es gibt keinen Nebenweg. Sichere ihn getrennt von der Datenbank und getrennt vom Dateispeicher. Ein Backup, das Schlüssel und Daten am selben Ort hält, hebt den Zweck der Verschlüsselung auf.

APP_KEY und FILESHARE_ENCRYPTION_KEY nach dem ersten Produktiveinsatz nicht neu erzeugen.

Zeitzone

Standard ist Europe/Berlin. Alle Zeitangaben dieser Anwendung sind für Menschen gedacht: das Ablaufdatum auf der Download-Seite, das „gültig bis" in der Mail an den Empfänger, die Zeitstempel in Übersicht und Systembericht. Eine Uhrzeit, die im Sommer zwei Stunden danebenliegt, ist für den Empfänger falsch.

Für Installationen in anderen Zonen: APP_TIMEZONE=Europe/Vienna (oder Europe/Zurich und so weiter).

Diese Entscheidung gehört an den Anfang. Zeitstempel werden in dieser Zone geschrieben und gelesen. Wird die Zone später gewechselt, verschieben sich die bereits gespeicherten Werte in ihrer Deutung: Ein Link, der „bis 23:59" gilt, gilt plötzlich bis 22:59 oder 00:59. Bei einer laufenden Installation ist das kein Konfigurations-, sondern ein Datenthema.

Quelle dieser Seite: docs/betrieb/konfiguration.md im Repository. Sie wird beim Bauen daraus erzeugt — Änderungen gehören in die Markdown-Datei, nicht in diese Seite.