'Integrationen', 'subtitle' => 'Angebundene Dienste, gruppiert nach Zweck — Zugangsdaten und Einstellungen nebeneinander, nicht auf getrennten Seiten nach Speicherort.', 'payments_title' => 'Zahlungen (Stripe)', 'payments_body' => 'Der Secret Key, mit dem Zahlungen entgegengenommen und Webhooks geprüft werden.', 'dns_title' => 'DNS (Hetzner)', 'dns_body' => 'API-Token, Zone und wo Traefik seine dynamische Konfiguration erwartet.', 'dns_zone' => 'DNS-Zone', 'dns_zone_hint' => 'Zum Beispiel clupilot.com — Kundeninstanzen erhalten ..', 'traefik_path' => 'Traefik: Pfad für dynamische Konfiguration', 'traefik_path_hint' => 'Verzeichnis auf dem Traffic-Host, in das Routen geschrieben werden.', 'monitoring_title' => 'Monitoring', 'monitoring_body' => 'API-Token und wo die Kuma-Bridge erreichbar ist.', 'monitoring_url' => 'Monitoring-Bridge-URL', 'monitoring_url_hint' => 'Zum Beispiel http://kuma-bridge:8080. Leer lässt Monitoring aus.', 'vpn_title' => 'VPN/WireGuard', 'vpn_body' => 'Wie ein neuer Host CluPilot als VPN-Hub erreicht. Der private Hub-Schlüssel bleibt in der Serverdatei — hier stehen nur der öffentliche Teil und die Adresse.', 'wg_endpoint' => 'Hub-Endpunkt', 'wg_endpoint_hint' => 'Öffentlich erreichbare Adresse und Port, z. B. vpn.clupilot.com:51820.', 'wg_hub_pubkey' => 'Hub-Public-Key', 'wg_hub_pubkey_hint' => 'Ausgabe von wg pubkey < /etc/wireguard/privatekey auf diesem Server.', 'ssh_title' => 'SSH-Identität', 'ssh_body' => 'Der Schlüssel, der auf jedem neuen Host hinterlegt wird — öffentlicher und privater Teil zusammen an einer Stelle.', 'ssh_public_key' => 'SSH-Schlüssel (öffentlich)', 'ssh_public_key_hint' => 'Wird bei der Host-Aufnahme in authorized_keys eingetragen.', 'save_settings' => 'Einstellungen speichern', 'settings_saved' => 'Gespeichert. Der neue Wert gilt ab sofort.', // .env-Editor (Teil B). 'env_title' => 'Erweitert: Serverdatei (.env)', 'env_subtitle' => 'Alles, was oben kein eigenes Feld hat — roh, wie auf dem Server. Ohne diesen Editor bräuchte es dafür eine Shell.', 'env_locked' => 'Gesperrt. Oben entsperren, um die Serverdatei zu sehen.', 'env_danger_title' => 'Diese Zeilen können die Konsole selbst aussperren', 'env_danger_body' => 'Ein falscher Wert in einer dieser Zeilen macht die Konsole für Sie selbst unerreichbar: APP_KEY, DB_* (Datenbankverbindung), REDIS_* (Sitzungen, Cache, Warteschlange), SESSION_*. Nicht gesperrt — volle Kontrolle war die Entscheidung —, aber diese Zeilen verdienen einen zweiten Blick.', 'env_vault_title' => 'Von der Zugangsdaten-Verwaltung verwaltet', 'env_vault_body' => 'SecretVault::get() bevorzugt einen hier hinterlegten Wert und weicht nur auf die Serverdatei aus, wenn keiner hinterlegt ist. Solange oben ein Wert hinterlegt ist, ändert die passende Zeile unten nichts — sonst widerspräche sich die Konsole selbst.', 'env_vault_active' => 'hinterlegt — diese Zeile wirkt nicht', 'env_vault_inactive' => 'nicht hinterlegt — diese Zeile gilt', 'env_label' => 'Inhalt von .env', 'env_save' => 'Speichern', 'env_backup_title' => 'Sicherung', 'env_backup_body' => 'Vor jedem Speichern wird eine Kopie neben .env abgelegt (Dateiname .env.bak-Zeitstempel). Sie werden nicht automatisch gelöscht.', // queue, queue-provisioning, scheduler und reverb lesen .env nur beim // eigenen Start. Bis hierher war das Homework — „starten Sie das jetzt // selbst neu" — dieselbe Klage wie beim Update-Knopf davor: über die // Kommandozeile nacharbeiten, was die Konsole schon wusste. Speichern // löst das jetzt selbst aus (App\Livewire\Admin\Integrations::saveEnv()): // den Konfigurations-Cache leeren (sofort, ohne den Host-Agenten — dafür // braucht es keine besonderen Rechte) und den Neustart beim Agenten // anfordern (App\Services\Deployment\UpdateChannel::requestRestart()). 'env_restart_title' => 'Was beim Speichern automatisch passiert', 'env_restart_body' => 'queue, queue-provisioning, scheduler und reverb lesen .env nur beim eigenen Start. Speichern hier löst deshalb automatisch aus: der Konfigurations-Cache wird geleert, und diese vier Dienste werden neu gestartet. Diese Konsole selbst (app) wird dabei nie angefasst — sie bedient gerade die Anfrage, die das ausgelöst hat, und ihr PHP liest .env bei jeder neuen Anfrage ohnehin frisch.', 'env_restarting' => 'Dienste werden neu gestartet …', 'env_restart_done' => 'Dienste neu gestartet.', 'env_save_title' => '.env wirklich überschreiben?', 'env_save_body' => 'Sie enthält jedes Zugangsdatum im System. Eine Sicherung wird zuvor angelegt, und die betroffenen Dienste werden nach dem Speichern automatisch neu gestartet.', 'env_save_confirm' => 'Überschreiben', // Drei Ausgänge nach dem Schreiben, nie eine geschönte Erfolgsmeldung: der // Neustart wurde angefordert, oder er konnte es nicht — weil der // Host-Agent nicht läuft oder weil schon etwas anderes läuft — und dann // steht hier der manuelle Befehl statt eines Versprechens. 'env_saved_restarting' => 'Gespeichert. Sicherung: :backup. Konfigurations-Cache geleert — queue, queue-provisioning, scheduler und reverb werden jetzt neu gestartet.', 'env_saved_restart_busy' => 'Gespeichert. Sicherung: :backup. Es läuft gerade schon eine andere Anfrage an den Update-Dienst — der Neustart entfällt diesmal automatisch. Bitte manuell ausführen: docker compose restart queue queue-provisioning scheduler reverb.', 'env_saved_no_agent' => 'Gespeichert. Sicherung: :backup. Der Update-Dienst auf dem Server läuft nicht — queue, queue-provisioning, scheduler und reverb halten noch die alten Werte. Bitte manuell ausführen: docker compose restart queue queue-provisioning scheduler reverb.', // Nur wenn keine .env vorher existierte — dann gibt es nichts zu sichern. 'env_no_previous_file' => 'keine, da zuvor keine Datei existierte', 'env_invalid' => 'Zeile :line ist weder leer, noch ein Kommentar, noch SCHLÜSSEL=Wert. Nichts wurde gespeichert.', 'env_empty' => 'Eine leere Datei würde jede Einstellung löschen. Nichts wurde gespeichert.', 'inbound_title' => 'Support-Postfach (Posteingang)', 'inbound_body' => 'Von hier holt CluPilot Kundenmails ab und zeigt sie unter Betrieb → Posteingang. IMAP, nicht die mailcow-API: die API verwaltet Domains und Postfächer, gelesen wird ein Postfach über IMAP. Das Passwort liegt verschlüsselt im Tresor.', 'inbound_host' => 'IMAP-Server', 'inbound_port' => 'Port', 'inbound_port_hint' => '993 ist IMAP über TLS. Alles andere läuft unverschlüsselt — dieser Zugang trägt ein Passwort und die Worte Ihrer Kunden.', 'inbound_username' => 'Postfach', 'inbound_folder' => 'Ordner', // Die Reiter. Getrennt nach dem, wofür ein Abschnitt da ist — nicht danach, // welcher Speichermechanismus einen Wert zufällig hält. 'tab' => [ 'services' => 'Dienste', 'platform' => 'Plattform', 'env' => 'Umgebung (.env)', ], ];