Installation
Voraussetzungen
Abschnitt betitelt „Voraussetzungen“- Docker (Docker Desktop mit WSL-Integration oder Docker Engine auf Linux)
- Node.js 22 für den Asset-Build
- Domain mit TLS-Zertifikat für den Produktivbetrieb
Der Stack besteht aus PHP 8.5 (Laravel 13), MySQL 8.4, Redis und optional Mailpit für die Entwicklung.
Erstinstallation
Abschnitt betitelt „Erstinstallation“cp .env.example .env # Konfiguration anlegendocker run --rm -u "$(id -u):$(id -g)" -v "$(pwd):/app" -w /app composer:2 install./vendor/bin/sail up -d # App, MySQL, Redis, Mailpit starten./vendor/bin/sail artisan key:generate./vendor/bin/sail artisan migrate --seed # Tabellen, Rollen, Demodaten./vendor/bin/sail artisan storage:link # öffentliche Uploads (Logo, Bilder)./vendor/bin/sail npm install && ./vendor/bin/sail npm run buildDanach ist die Anwendung unter http://localhost:8000 erreichbar. Demo-Zugänge (Passwort password): admin@example.com, anna@example.com, kunde@example.com. Entfernen Sie die Demodaten vor dem Produktivbetrieb (migrate:fresh ohne --seed und anschließend einen Administrator anlegen).
Produktivbetrieb mit Docker
Abschnitt betitelt „Produktivbetrieb mit Docker“Für den Produktivbetrieb liegt ein eigener Stack bei: docker/prod/Dockerfile baut ein Image mit PHP-FPM, nginx, Horizon und Scheduler (alle unter demselben Benutzer), docker-compose.prod.yml startet App, MySQL und Redis.
cp .env.production.example .env # Werte in <…> ausfüllen, APP_KEY mit key:generate --showdocker compose -f docker-compose.prod.yml up -d --builddocker compose -f docker-compose.prod.yml exec app php artisan app:install \ --name="Max Admin" --email=admin@firma.de --company="Firma GmbH"app:install führt Migrationen aus, legt Rollen und Standardwerte an, fragt das Passwort ab (mindestens 12 Zeichen, geprüft gegen bekannte Leaks) und erstellt den ersten Administrator – ohne Demodaten. Der Befehl ist idempotent und kann nach Updates erneut laufen. Beim Containerstart laufen Migrationen und Cache-Aufwärmung automatisch; /health dient als Docker-Healthcheck.
Vor den Container gehört ein Reverse-Proxy mit TLS (z. B. Caddy, Traefik oder nginx), der Port 8080 weiterleitet. Für S3-kompatiblen Speicher (Rechnungen, Anhänge, Backups) FILESYSTEM_DISK=s3 und die AWS_*-Variablen setzen.
Dauerhaft laufende Prozesse (ohne Docker-Image)
Abschnitt betitelt „Dauerhaft laufende Prozesse (ohne Docker-Image)“./vendor/bin/sail artisan horizon # Queue-Worker./vendor/bin/sail artisan schedule:work # Scheduler (Backups, Mahnlauf, Bereinigung)In Produktion betreiben Sie beide als Supervisor- oder systemd-Dienste unter demselben Unix-Benutzer wie PHP-FPM, sonst sind vom Worker erzeugte PDFs für den Webprozess nicht lesbar.