W5T HostAdmin Konfiguration¶
Dieses Dokument beschreibt alle wichtigen Umgebungsvariablen, die in HostAdmin verwendet werden.
Umgebungsdateien¶
HostAdmin verwendet verschiedene Umgebungskonfigurationen je nach Bereitstellungsmethode:
.env.docker: Vorlage für Docker-Bereitstellung (empfohlen).env: Aktive Konfiguration (nicht in der Versionskontrolle, von Vorlage kopieren)
Anwendungskonfiguration¶
Grundeinstellungen¶
# Anwendungsname, der in der Benutzeroberfläche und E-Mails angezeigt wird
APP_NAME=HostAdmin
# Umgebung: local, production, staging
APP_ENV=production
# Laravel-Anwendungs-Verschlüsselungsschlüssel (generieren mit: php artisan key:generate)
APP_KEY=
# Debug-Modus aktivieren (niemals in Produktion aktivieren!)
APP_DEBUG=true
# Basis-URL der Anwendung
APP_URL=http://localhost:8000
# Port für den Webserver (nur Docker)
APP_PORT=8000
Lokalisierung¶
# Primäre Anwendungssprache
APP_LOCALE=de
# Ausweichsprache, wenn Übersetzung fehlt
APP_FALLBACK_LOCALE=de
# Sprache für Faker-Datengenerierung
APP_FAKER_LOCALE=de_DE
Leistung & Sicherheit¶
# Anzahl der PHP CLI-Server-Worker
PHP_CLI_SERVER_WORKERS=4
# BCrypt-Hashing-Runden (höher = sicherer, aber langsamer)
BCRYPT_ROUNDS=12
# PHP OPcache für bessere Leistung aktivieren (nur Docker)
PHP_OPCACHE_ENABLE=1
Datenbankkonfiguration¶
Lokale Entwicklung¶
Für lokale Entwicklung mit Verbindung zu hostadmin-data Containern:
DB_CONNECTION=mysql
DB_HOST=localhost
DB_PORT=33306 # Exponierter Port von hostadmin-data
DB_DATABASE=hostadmin
DB_USERNAME=laravel
DB_PASSWORD=password
Docker-Bereitstellung¶
Für Docker-Container mit internem Netzwerk:
DB_CONNECTION=mysql
DB_HOST=db # Docker-Servicename aus hostadmin-data
DB_PORT=3306 # Interner Docker-Port
DB_DATABASE=hostadmin
DB_USERNAME=laravel
DB_PASSWORD=password
Hinweis: Die Datenbank-Anmeldedaten müssen mit denen in hostadmin-data/docker-compose.yml übereinstimmen:
- Root-Passwort: root
- Datenbankname: hostadmin
- Anwendungsbenutzer: laravel / password
Redis-Konfiguration¶
Redis wird für Caching, Sitzungen und Warteschlangenverwaltung verwendet.
Lokale Entwicklung¶
REDIS_CLIENT=predis # predis-Bibliothek verwenden (reines PHP)
REDIS_HOST=localhost
REDIS_PASSWORD=null
REDIS_PORT=6379
Docker-Bereitstellung¶
REDIS_CLIENT=phpredis # PHP Redis-Erweiterung verwenden (schneller)
REDIS_HOST=redis # Docker-Servicename
REDIS_PASSWORD=null
REDIS_PORT=6379
Cache & Sitzung¶
# Cache-Treiber (Redis empfohlen für Produktion)
CACHE_STORE=redis
# Sitzungstreiber (Redis empfohlen für Multi-Container-Setups)
SESSION_DRIVER=redis
SESSION_LIFETIME=120 # Sitzungsdauer in Minuten
SESSION_ENCRYPT=false
SESSION_DOMAIN=null
SESSION_COOKIE=hostadmin # Cookie-Name
Warteschlangenkonfiguration¶
Hintergrundjobs werden über die Redis-Warteschlange verarbeitet.
Warteschlangen-Worker-Konfiguration (in docker-compose.yml):
- Warteschlangen: imports, emails, default (in Prioritätsreihenfolge)
- Maximale Versuche: 3 Versuche
- Zeitüberschreitung: 600 Sekunden
- Befehl: php artisan queue:work redis --queue=imports,emails,default --tries=3 --timeout=600 --verbose
Speicher & Dateisystem¶
Lokale Entwicklung¶
Docker-Bereitstellung (S3/MinIO)¶
FILESYSTEM_DISK=s3 # S3-kompatiblen Speicher verwenden
# AWS/MinIO S3-Konfiguration
AWS_ACCESS_KEY_ID=app-user
AWS_SECRET_ACCESS_KEY=AppUserPassword123
AWS_DEFAULT_REGION=us-east-1
AWS_BUCKET=hostadmin
AWS_ENDPOINT=http://hostadmin-s3:9000 # Interner Docker-Endpunkt
AWS_URL=http://localhost:9081 # Öffentlicher Endpunkt für Browser-Zugriff
AWS_USE_PATH_STYLE_ENDPOINT=true # Erforderlich für MinIO
MinIO-Konfiguration (aus hostadmin-data/docker-compose.yml):
- Konsole: http://localhost:9091
- API: http://localhost:9081
- Root-Benutzer: admin
- Root-Passwort: minioadmin123
- Anwendungsbenutzer: app-user / AppUserPassword123
- Bucket: hostadmin
Speicherstruktur:
- images/ - Interne Assets (Logos, E-Mail-Vorlagen)
- customer/{id}/docs/ - Kundendokumente (Verträge, SEPA-Mandate)
- customer/{id}/invoices/{year}/ - Generierte Rechnungs-PDFs
E-Mail-Konfiguration¶
Lokale Entwicklung (nur Protokollierung)¶
MAIL_MAILER=log # E-Mails protokollieren statt senden
MAIL_HOST=127.0.0.1
MAIL_PORT=2525
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_FROM_ADDRESS="hello@example.com"
MAIL_FROM_NAME="${APP_NAME}"
Docker-Bereitstellung (SMTP)¶
MAIL_MAILER=smtp
MAIL_HOST=be-webspace.de
MAIL_PORT=587
MAIL_USERNAME=test@be-webspace.de
MAIL_PASSWORD=smtp2025#bws
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS=test@be-webspace.de
MAIL_FROM_NAME="${APP_NAME}"
Wichtig: E-Mails werden niemals direkt gesendet. Alle E-Mails werden in der Datenbank mit Zustellungsstatus-Verfolgung gespeichert (draft, new, sent, error, stopped). Hintergrund-Worker übernehmen die ratenbegrenzte Zustellung.
Stripe-Integration¶
# Stripe API-Schlüssel (Testmodus)
STRIPE_KEY=pk_test_...
STRIPE_SECRET=sk_test_...
# Produktionsschlüssel (standardmäßig auskommentiert)
#STRIPE_KEY=pk_live_...
#STRIPE_SECRET=sk_live_...
# Stripe Webhook-Secret zur Verifizierung von Webhook-Signaturen
STRIPE_WEBHOOK_SECRET=powie_sein_secret_secret
Befehle:
- Kunden importieren: php artisan stripe:import-customers
Protokollierung¶
LOG_CHANNEL=stack # Stack-Kanal verwenden (mehrere Kanäle)
LOG_STACK=single # Einzeldatei-Protokollierung
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug # Protokollierungsstufe: debug, info, warning, error
Docker-spezifische Variablen¶
Diese Umgebungsvariablen werden in docker-compose.yml gesetzt und überschreiben .env-Werte:
Anwendungscontainer (app)¶
APP_ENV=${APP_ENV:-local}
APP_DEBUG=${APP_DEBUG:-true}
DB_HOST=db
DB_PORT=3306
REDIS_HOST=redis
REDIS_PORT=6379
CHOKIDAR_USEPOLLING=false # Polling für Dateiüberwachung deaktivieren (Leistung)
PHP_OPCACHE_ENABLE=1
Warteschlangen-Worker-Container (queue)¶
Scheduler-Container (scheduler)¶
Benutzer/Gruppen-Zuordnung (Build-Argumente)¶
USER_ID=${USER_ID:-1000} # Ordnet Container-Benutzer Host-Benutzer zu
GROUP_ID=${GROUP_ID:-1000} # Ordnet Container-Gruppe Host-Gruppe zu
Netzwerkkonfiguration¶
Alle Dienste kommunizieren über das hostadmin Docker-Netzwerk:
Dienste im Netzwerk:
- hostadmin-app (Webserver)
- hostadmin-queue (Warteschlangen-Worker)
- hostadmin-scheduler (Aufgabenplaner)
- hostadmin-init (Initialisierungscontainer)
- db (MariaDB aus hostadmin-data)
- redis (Redis aus hostadmin-data)
- s3 (MinIO aus hostadmin-data)
- phpmyadmin (phpMyAdmin aus hostadmin-data)
Service-Ports¶
Anwendung (hostadmin)¶
- 8000: Hauptanwendung (Admin & Panel)
Infrastruktur (hostadmin-data)¶
- 33306: MariaDB (externer Zugriff)
- 6379: Redis
- 9081: MinIO API
- 9091: MinIO-Konsole
- 8088: phpMyAdmin
Kurzreferenz¶
Einrichtung für lokale Entwicklung¶
-
Umgebungsdatei kopieren:
-
Datenbank und Redis auf localhost mit exponierten Ports konfigurieren
-
predisals Redis-Client verwenden
Einrichtung für Docker-Bereitstellung¶
-
Docker-Umgebungsdatei kopieren:
-
Servicenamen (
db,redis,s3) als Hosts konfigurieren -
phpredisals Redis-Client verwenden -
FILESYSTEM_DISK=s3für MinIO-Speicher setzen
Erforderliche Dienste-Reihenfolge¶
-
Zuerst Infrastruktur starten:
-
Dann Anwendung starten:
Sicherheitshinweise¶
Diese Dateien niemals in die Versionskontrolle einchecken:
- .env (enthält Geheimnisse)
- .env.local
- .env.production
In Produktion immer ändern:
- APP_KEY (neuen Schlüssel generieren)
- DB_PASSWORD (starkes Passwort verwenden)
- REDIS_PASSWORD (Passwort setzen)
- AWS_ACCESS_KEY_ID und AWS_SECRET_ACCESS_KEY (eindeutige Anmeldedaten verwenden)
- MAIL_PASSWORD (echte SMTP-Anmeldedaten verwenden)
- STRIPE_KEY und STRIPE_SECRET (Produktionsschlüssel verwenden)
- MinIO Root-Passwort (MINIO_ROOT_PASSWORD)
Produktionsempfehlungen:
- APP_DEBUG=false setzen
- APP_ENV=production setzen
- LOG_LEVEL=error oder warning verwenden
- SSL/TLS für alle externen Verbindungen aktivieren
- Firewall-Regeln verwenden, um Datenbank- und Redis-Zugriff einzuschränken
- Anmeldedaten und API-Schlüssel regelmäßig rotieren