LeaveFlow: Installation
Installation von LeaveFlow per Docker Compose: Voraussetzungen, Migrationen, Einrichtungsassistent, Umgebungsvariablen, HTTPS, Update und Entwicklungsumgebung.
LeaveFlow: Installation
Voraussetzungen
Du brauchst Docker mit dem Compose-Plugin (docker compose) und Git. PHP und MariaDB musst du nicht selbst installieren, beides liefert der Compose-Stack. Die weiteren Anforderungen stehen auf der Übersichtsseite.
Installation
-
Repository klonen:
git clone https://github.com/markus-michalski/leaveflow.git cd leaveflow -
Container starten (baut das Image und startet App, Datenbank, Mailpit und OpenLDAP):
docker compose up -d --buildBeim ersten Start installiert der Container die Composer-Abhängigkeiten selbst und baut das Tailwind-Stylesheet. Das dauert einen Moment, den Fortschritt siehst du mit
docker compose logs -f app. -
Datenbankmigrationen ausführen:
docker compose exec -u app app php bin/console doctrine:migrations:migrate --no-interaction -
Die Anwendung im Browser öffnen:
http://localhost:8080. Solange noch kein Unternehmen existiert, leitet LeaveFlow jede Seite auf den Einrichtungsassistenten unter/setupum.
Der Stack ist ein Entwicklungs-Stack:
compose.yamlbaut das Docker-Zieldevund setztAPP_ENV: dev. Die Host-Ports kommen auscompose.override.yaml(8080:80,8443:443und3306,1025,8025für Datenbank und Mailpit). Das Dockerfile enthält zusätzlich ein Zielprod, eine fertige Produktions-Compose-Datei liefert das Repository nicht mit.
Einrichtungsassistent
Der Assistent unter /setup prüft zuerst die Systemvoraussetzungen und legt danach Unternehmen und ersten Admin an.
| Prüfung | Was geprüft wird |
|---|---|
| PHP version | PHP 8.4.0 oder neuer |
| PHP extensions | pdo_mysql, intl, gd, mbstring, json, curl, ctype, fileinfo |
| Database connection | Verbindung zur Datenbank |
| Database migrations | Alle Migrationen sind eingespielt |
| var directory | Verzeichnis var/ ist beschreibbar |
| public/uploads directory | Verzeichnis public/uploads/ ist beschreibbar |
Solange eine Prüfung rot ist, lässt sich das Formular nicht absenden. Das Formular verlangt Firmenname, Admin-E-Mail und ein Admin-Passwort mit mindestens 12 Zeichen. Der Assistent legt ausschließlich das Unternehmen und das Admin-Konto an und ist einmalig. Nach der Anlage zeigt er die Abschlussseite unter /setup/done mit einer Liste der nächsten Schritte und der Schaltfläche Zur Anmeldung, die zur Anmeldeseite führt.
Der Assistent legt weder Urlaubsarten noch Standorte, Teams oder Mitarbeiter an. Das erledigst du danach im Admin-Menü, die Reihenfolge steht im Admin-Leitfaden.
Konfiguration über Umgebungsvariablen
Symfony liest .env, .env.local und .env.dev. Umgebungsvariablen, die der Container direkt erhält, haben Vorrang vor allen diesen Dateien.
compose.yamlsetztDATABASE_URL(mit dem Passwort!ChangeMe!) undMAILER_DSN(smtp://mailer:1025) fest als Umgebungsvariablen des Containers. Werte aus.env.localgreifen für diese beiden Variablen deshalb nicht. Zum Ändern passt ducompose.yamlan und änderst das Datenbankpasswort an allen drei Stellen (MARIADB_PASSWORD,MARIADB_ROOT_PASSWORDundDATABASE_URL).
| Variable | Bedeutung |
|---|---|
APP_ENV |
Umgebung; compose.yaml setzt dev |
APP_SECRET |
Geheimer Schlüssel für CSRF-Token und Signaturen, pro Installation eindeutig. In .env leer, .env.dev bringt einen Wert für die Entwicklung mit |
DATABASE_URL |
Datenbankverbindung; Host im Stack ist database |
MAILER_DSN |
Mail-Transport; im Stack smtp://mailer:1025 (Mailpit) |
MESSENGER_TRANSPORT_DSN |
Warteschlange für asynchrone Nachrichten; Standard doctrine://default?auto_setup=0 |
DEFAULT_URI |
Basis-URL für Links, die ohne Browser-Anfrage erzeugt werden (Konsolenbefehle, Cron-Jobs, Mails aus der Warteschlange); Standard http://localhost:8080 |
SERVER_NAME |
Adresse, auf der der integrierte Webserver lauscht; Standard :80 |
APP_LDAP_ENCRYPTION_KEY |
32-Byte-Schlüssel (Base64) zur Verschlüsselung gespeicherter Zugangsdaten für LDAP und Slack |
GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET |
OAuth-Zugangsdaten für die Anmeldung mit Google |
ENTRA_CLIENT_ID, ENTRA_CLIENT_SECRET |
OAuth-Zugangsdaten für die Anmeldung mit Microsoft |
ENTRA_TENANT_ID |
Tenant für die Microsoft-Anmeldung; Standard common |
Es gibt keine Variable
APP_URL. Die Basis-URL für Links außerhalb von Browser-Anfragen setztDEFAULT_URI.
SERVER_NAME wertet Docker Compose beim Start aus der Shell-Umgebung oder der .env im Projektverzeichnis aus, nicht aus .env.local. Den Schlüssel für APP_LDAP_ENCRYPTION_KEY erzeugst du mit:
php -r "echo base64_encode(random_bytes(SODIUM_CRYPTO_SECRETBOX_KEYBYTES)) . PHP_EOL;"
Ohne diesen Schlüssel lassen sich Slack-Token, Slack-Signing-Secret und das LDAP-Bind-Passwort nicht speichern. Wer den Schlüssel später ändert, kann bereits gespeicherte Werte nicht mehr entschlüsseln.
HTTPS und Domain
Die PHP-Konfiguration setzt Session-Cookies mit session.cookie_secure = 1. Betreibe die Instanz deshalb außerhalb von localhost hinter HTTPS und setze DEFAULT_URI auf die öffentliche Adresse. Der integrierte Webserver (Caddy in FrankenPHP) bedient die in SERVER_NAME angegebene Adresse.
Update
git pull
docker compose up -d --build
make install
docker compose exec -u app app php bin/console doctrine:migrations:migrate --no-interaction
Offene Migrationen zeigt dir der Einrichtungsassistent nicht mehr an, sobald ein Unternehmen existiert. Spiele sie deshalb nach jedem Update ein.
Entwicklungsumgebung
| Befehl | Wirkung |
|---|---|
make up / make down |
Container starten und stoppen |
make test |
PHPUnit-Testsuite |
make stan |
PHPStan |
make fixtures |
Datenbank leeren und Demo-Daten laden |
make fixturesleert die Datenbank vollständig, bevor die Demo-Daten geladen werden. Führe den Befehl niemals gegen eine Instanz mit echten Daten aus.
Nach make fixtures gibt es das Demo-Unternehmen mit Standorten, Teams, Mitarbeitern, sieben Urlaubsarten und drei Testkonten.
| Passwort | Rolle | |
|---|---|---|
admin@leaveflow.test |
leaveflow-dev |
Administrator |
manager@leaveflow.test |
leaveflow-dev |
Manager |
employee@leaveflow.test |
leaveflow-dev |
Mitarbeiter |
Mailpit, der E-Mail-Catcher des Stacks, ist unter http://localhost:8025 erreichbar.