Zum Inhalt

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-Verbindungstreiber
QUEUE_CONNECTION=redis

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

FILESYSTEM_DISK=local      # Lokalen Speicher verwenden

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)

DB_HOST=db
DB_PORT=3306
REDIS_HOST=redis
REDIS_PORT=6379
QUEUE_CONNECTION=redis

Scheduler-Container (scheduler)

DB_HOST=db
DB_PORT=3306
REDIS_HOST=redis
REDIS_PORT=6379

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:

# Netzwerk erstellen (einmalige Einrichtung)
docker network create hostadmin

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

  1. Umgebungsdatei kopieren:

    cp .env.example .env
    

  2. Datenbank und Redis auf localhost mit exponierten Ports konfigurieren

  3. predis als Redis-Client verwenden

Einrichtung für Docker-Bereitstellung

  1. Docker-Umgebungsdatei kopieren:

    cp .env.docker .env
    

  2. Servicenamen (db, redis, s3) als Hosts konfigurieren

  3. phpredis als Redis-Client verwenden

  4. FILESYSTEM_DISK=s3 für MinIO-Speicher setzen

Erforderliche Dienste-Reihenfolge

  1. Zuerst Infrastruktur starten:

    cd hostadmin-data && docker-compose up -d
    

  2. Dann Anwendung starten:

    cd hostadmin && docker-compose up -d
    

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