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 ausAPP_URLund 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 ausAPP_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_URLoder steht dort keinhttps://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 — ausGe#heimwirdGe, 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'));"
Shortlink-eigene Schlüssel
| 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.