Zum Inhalt springen

Betrieb

Konfiguration in der .env

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 und ist die Grundlage jedes ausgegebenen Kurz-Links
APP_TIMEZONE Zeitzone für Anzeige und gespeicherte Zeitstempel. Standard Europe/Berlin. Nur vor dem ersten Produktivdatensatz ändern — siehe unten
APP_NAME Nur noch Präfix für Cache-, Session- und Queue-Schlüssel — nicht der angezeigte Name
SHORTLINK_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) — Schutz gegen Cross-Site-Requests
QUEUE_CONNECTION sync genügt. Es gibt keine Hintergrundarbeit
MAIL_* Nur Ausgangswerte. Sobald unter Einstellungen → E-Mail ein Zugang gepflegt ist, hat dieser Vorrang

Die kurze Domain gehört in APP_URL, und diese Entscheidung ist schwer zurückzunehmen. Jeder ausgegebene Kurz-Link setzt sich aus APP_URL und dem Slug zusammen. Wird die Domain später gewechselt, sind alle bereits verschickten und gedruckten Adressen ungültig — der Slug allein hilft dann nichts. Wähle die Domain vor dem ersten produktiven Link, und wähle sie kurz: Bei einem Kürzungsdienst ist die Länge der Domain der Teil, den niemand mehr ändern kann.

Mehrere Domains auf derselben Installation: erlaubt, aber nur eine steht in den Adressen. Zeigen weitere Domains auf diesen Server — Altbestand, eine Testdomain, www. davor, die nackte IP —, dann funktioniert die Anwendung über jede von ihnen vollständig: Jede löst jeden Shortlink auf, zeigt jede Vorschauseite und lässt jede Anmeldung zu. Ausgegeben wird aber immer die Adresse aus APP_URL — im Feld „Kurz-Link", im QR-Code, im CSV-Export und in den System-Mails.

Das ist Absicht und nicht zu umgehen: Vorher bekam ein Link die Domain, über die jemand die Oberfläche zufällig gerade geöffnet hatte. Auf dem Bildschirm fällt so ein Link nicht auf — auf dem Plakat steht er dann für immer.

Das gilt für alles, was das Haus verlässt, nicht nur für Kurz-Links: Auch die Links in System-Mails — Passwort zurücksetzen, Einladung, Adresse bestätigen, Zwei-Faktor neu einrichten, „Link ansehen" — tragen die Adresse aus APP_URL. Eine Mail wird Stunden später in einem anderen Browser geöffnet, weitergeleitet, ausgedruckt, in ein Ticket kopiert; ab dem Absenden korrigiert diesen Link niemand mehr. Das ist dieselbe Lage wie bei einem Shortlink und deshalb dieselbe Regel.

Nicht betroffen sind Links und Formulare INNERHALB einer geöffneten Seite. Sie bleiben auf dem Host, über den zugegriffen wird — dort liegt die Sitzung des Nutzers. Ein Passwort-Formular, das auf die festgelegte Domain abschickt, vermerkte die Freischaltung auf einem Host, den der Besucher nie zu sehen bekommt, und er stünde danach wieder vor der Passwortmaske.

Wer die Oberfläche über eine andere Domain öffnet, sieht angemeldet einen dauerhaften Hinweis unter der Kopfzeile, der beide Adressen nennt. Er lässt sich nicht wegklicken, weil der Zustand fortbesteht, solange dort gearbeitet wird. Besucher sehen ihn nie.

Fehlt APP_URL oder steht dort kein https:// davor, gilt wieder der Host der Anfrage — geraten wird nichts. Einstellungen → Systemdaten meldet diesen Zustand als Warnung; Einstellungen → Links zeigt oben, welche Adresse gerade gilt.

Zwei .env-Syntaxregeln, die stumm zuschlagen. Ein # in einem nicht quotierten Wert schneidet ihn ab — aus Ge#heim wird Ge, ohne Fehlermeldung. Und 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. Im Zweifel nachsehen statt annehmen: php artisan tinker --execute="var_dump(env('MAIL_PASSWORD'));"

Schlüssel Standard Bedeutung
SHORTLINK_EXPIRED_RETENTION_DAYS 3 Karenz, bis ein abgelaufener Link stillgelegt wird. 0 = beim nächsten Lauf, -1 = nie. Stillgelegt, nicht gelöscht — der Slug bleibt dauerhaft belegt
SHORTLINK_CLICK_LOG_RETENTION_DAYS 90 Aufbewahrung der Klick-Protokolle (gekürzte IP, Zeitpunkt, Browserkennung). -1 = nie löschen. Der Zähler am Link bleibt
SHORTLINK_SEND_LOG_RETENTION_DAYS 90 Aufbewahrung des Versandprotokolls (Empfängeradresse, Zeitpunkt, Ergebnis). -1 = nie löschen. Sinnvollerweise derselbe Wert wie die Zeile darüber — sonst zeigt die Zeitleiste Aufrufe ohne den zugehörigen Versand
SHORTLINK_SUFFIX_LIST_SOURCE https://publicsuffix.org/list/public_suffix_list.dat Woher shortlink:suffix-list eine frische Liste holt. Auf einen internen Spiegel umstellbar
SHORTLINK_UPDATE_CHECK true Einmal täglich beim Öffnen der Systemdaten nachsehen, ob es eine neuere Fassung gibt. Auf false setzen, wenn diese Installation keine Verbindung nach außen aufbauen soll — die Abfrage verrät dem Anbieter, dass es sie gibt
SHORTLINK_UPDATE_SOURCE GitLab-API des Projekts Woher die Release-Liste kommt. Nur ändern, wenn du eine eigene Fassung pflegst

Zwei Pfade sind bewusst nicht über die .env einstellbar, sondern stehen in config/shortlink.php (suffix_list_file, version_file, env_file, Vorgabe jeweils null = „der echte Ort"). Der Ort dieser Dateien ist keine Betriebseinstellung; die Einstellbarkeit existiert, damit der Testlauf nicht ins Projektverzeichnis greift.

Nach jeder Änderung an der .env:

php artisan config:cache

Zeitzone

Standard ist Europe/Berlin — bewusst nicht Laravels Vorgabe UTC. Alle Zeitangaben dieser Anwendung sind für Menschen gedacht: das Ablaufdatum auf der Vorschauseite, 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 schlicht falsch — und niemand rechnet sie um.

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.