Plattform & Einstellungen
Alle Produktkonfigurationen befinden sich unter „Admin → Einstellungen“ (gespeichert in „platform_settings“).
Das Ändern der Schlüssel hier erfordert keine erneute Erstellung von Docker-Containern. Pfad: /dashboard/admin/settings (Gruppenabfrage, z. B. ?group=payments).
Screenshot-Platzhalter: Admin → Einstellungen-Shell mit linken/vertikalen Gruppen
Nur-Infrastruktur-Elemente (DB, Redis, APP_URL, Host-Agent) bleiben in .env — siehe 01.
SMTP
Erforderlich für eine produktionsähnliche Plattform: Verifizierung, Passwortzurücksetzung, Abrechnung, Bereitstellungsergebnisse, Rückerstattungsbenachrichtigungen.
| Field | Purpose |
|---|---|
| Host / Port | e.g. smtp.mailgun.org / 587 |
| Username / Password | Provider credentials (password encrypted) |
| Encryption | tls, ssl, or empty |
| From address / name | Outbound identity |
| Admin alert emails | Comma-separated ops alert recipients |
Wenn der SMTP-Host leer ist, kann die App auf den .env Mailer zurückgreifen (oft beim Log-in von Docker — Nachrichten gehen in die Logs, nicht in Postfächer).
So testen: SMTP konfigurieren → einen nicht verifizierten Benutzer öffnen → Verifizierung erneut senden → den Posteingang bestätigen.
GitHub
Zog früher die NexoPOS-Core-Releases und Modulquellen von GitHub.
| Field | Purpose |
|---|---|
| Personal access token | Required for private repos (and higher rate limits) |
| NexoPOS repository | owner/name (default open-source NexoPOS) |
| Visibility | public or private |
| Install channel | latest or pinned |
| Pinned version / ref | Used when channel is pinned |
| Release cache hours | Scheduler refresh interval (min 1h); manual refresh still allowed |
Öffentliches NexoPOS: Token optional für öffentliche Ratenlimits, dennoch empfohlen.Private Forks / private Module: Erstelle ein fein abgestuftes oder klassisches PAT mit Repo (oder Inhaltslese) und speichere es hier.
Modulversionen können auch als ZIP-Datei ohne GitHub hochgeladen werden.
Abrechnung (Zahlungen)
Für Checkout- und Mid-Lifecycle-Gebühren ist nur ein Gateway aktiv.
| Provider | Status | Notes |
|---|---|---|
| Stripe | Implemented | Cards + Checkout; best default |
| Paddle | Implemented | Merchant of Record / Billing API |
| Mollie | Implemented | EU methods; first payment + recurring |
| Airwallex | Credentials only | Not selectable until a driver ships |
| Fake | Tests only | Never production; launch-check rejects |
Stripe konfigurieren (Beispiel)
- Aktiver Zahlungs-Gateway → Stripe.
- Veröffentlichbarer Schlüssel, geheimer Schlüssel, Webhook-Geheimnis.
- Production-Webhook-Endpunkt: https://{APP_HOST}/webhooks/stripeEvents: checkout.session.completed, invoice.paid, invoice.payment_failed, customer.subscription.deleted (und alle zusätzlichen Events, die dein Treiber erwartet).
- Lokaler Test: Stripe CLI → siehe
Paddle und Mollie folgen demselben Muster (API-Schlüssel + Webhook-Geheimnis; Paddle hat außerdem eine Sandbox-/Produktionsumgebung).
Screenshot-Platzhalter : Admin → Einstellungen → Zahlungen — aktiver Treiber + Stripe
Legacy-Env-only-Installationen können einmal importieren:
php artisan platform:import-env-settings
Entfernen Sie dann Produkgeheimnisse aus „.env“.
Markenbildung
| Field | Purpose |
|---|---|
| App name | Sidebar, titles, marketing |
| Logo (light / dark) | Theme-aware logos |
| Favicon | Browser tab |
Datum & Uhrzeit
Steuert, wie Daten in der UI der Steuerungsebene und in E-Mails angezeigt werden (nicht als rohes ISO in Vue).
| Field | Examples |
|---|---|
| Timezone | IANA, e.g. UTC, Africa/Douala, Europe/Paris |
| Date format | Y-m-d, d/m/Y, m/d/Y, d M Y |
| Time format | 24h or 12h |
In Plattform-Einstellungen gespeichert und über Inertia-Platform-Props geteilt.
Allgemein & Aufhängung-Seite
Allgemein
| Field | Purpose |
|---|---|
| Support email | Public contact; used on suspension page when enabled |
| Support phone / hours | Optional contact details |
| Two factor available | Allow customers to enable 2FA |
Bereitstellungen (Limits + Offline-Seite)
| Field | Purpose |
|---|---|
| Default max installations | Applied to new personal orgs |
| Default max seats | Applied to new personal orgs |
| Show suspension reason | Offline/suspended tenant page |
| Show support email / phone / hours | Same offline page |
Wenn eine Installation angehalten wird (Zahlungsfehler, AGB, Rückerstattungsweg usw.), sehen Besucher die Seite „Plattform angehalten“. Diese Schalter steuern, welche Kontaktinformationen und Begründungstexte angezeigt werden.
Screenshot-Platzhalter: Admin → Einstellungen → Bereitstellungen / Sperrungsumschalter
S3 & Backups
Backups sind ausschließlich unternehmenseigener S3-kompatibler Speicher (keine Kundendaten in Drive/OneDrive im MVP).
S3-Gruppe
| Field | Purpose |
|---|---|
| Key / Secret | Access credentials (encrypted) |
| Region / Bucket | Destination |
| Endpoint | Empty for AWS; set for MinIO, R2, etc. |
| Path-style | Provider-specific |
Unvollständiges Admin S3 greift nicht stillschweigend für echte Backup-Schreibvorgänge auf die lokale Festplatte zurück. Verwenden Sie die Admin-Testspeicheraktion, wenn sie verfügbar ist.
Sicherungsgruppe
| Field | Purpose / default |
|---|---|
| Platform automatic backups | Progressive wave for installs with the Backups add-on |
| Schedule cron (UTC) | e.g. 0 3 * * * |
| Concurrency | 1–5 installs at a time |
| Keep last N | Retention of succeeded backups per install (default 3) |
Kunden können ihren eigenen Backup-Zeitplan nicht festlegen; sie erhalten manuelle Backups plus automatische Backups der Plattform, wenn sie berechtigt sind.
Katalog: Veröffentlichen Sie ein Add-on mit Feature-Key-Backups.
Domäne
| Field | Purpose |
|---|---|
| Platform base domain | Suffix for free install hostnames |
| Custom domain mode | free / addon / disabled |
| Public IPv4 / IPv6 | Shown on customer Domain tab for DNS |
| Max verified domain changes / day | Per install; LE rate protection |
Wenn der Modus „addon“ ist, benötigen Kunden ein aktives „Custom domain“-Add-on (feature_key = custom_domain), bevor sie einen Hostnamen zuweisen können.
Abrechnungsaufbewahrung
| Field | Default | Meaning |
|---|---|---|
| Grace period (days) | 3 | After trial/period end: install stays online with renewal banner, then suspend |
| Soft-delete retention (days) | 30 | After soft-delete (cancel path, etc.) before hard purge |
| Refund hard-delete (days) | 7 | After approved refund soft-delete before hard purge |
Der Lifecycle wird durch geplante Abrechnungen gesteuert: billing:process-lifecycle (Compose-Scheduler-Dienst).
Benachrichtigungen
| Field | Purpose |
|---|---|
| Email footer | Appended to outbound mail |
| Support URL | Link in emails / help surfaces |
Einstellungsreihenfolge für eine neue Plattform
- Domain — Basisdomain + öffentliche IP
- SMTP — echte E-Mail
- Zahlungen – Stripe (oder Paddle/Mollie) + Webhooks
- GitHub – Zugriff auf core/modules
- S3 + Backups – wenn Sie ein Backup-Add-on verkaufen
- Branding + Datum/Uhrzeit — Polnisch
- Bereitstellungen / allgemein – Limits + Sperrseite
- Abrechnungsaufbewahrung – Kulanz- und Löschfenster
Dann führen Sie „php artisan platform:launch-check“ aus.