Zum Hauptinhalt springen

Referenz zu selbstgehosteten Umgebungen

Beginnen Sie mit den Veröffentlichungen env.example, die Sie heruntergeladen haben als .env in Erste Schritte. Es handelt sich um die kleinste unterstützte Compose-Konfiguration. Benutzen env.full.example wenn Sie eine optionale Einstellung benötigen; Auf dieser Seite wird erklärt, welche Einstellungen zusammengehören und wann sie geändert werden müssen.

Nach der Bearbeitung .env, validieren Sie die Interpolation, ohne die aufgelöste Konfiguration zu drucken:

docker compose config --quiet

Legen Sie keine Verpflichtungen fest .env, fügen Sie es in Supportanfragen ein oder stellen Sie die Ausgabe von bereit docker compose config: Die aufgelöste Ausgabe enthält Geheimnisse.

Erforderliche Produktionswerte​

Generieren Sie jedes Geheimnis unabhängig mit openssl rand -hex 32. Behalten Sie die alten Werte bei jedem Upgrade bei und speichern Sie eine Wiederherstellungskopie außerhalb des Servers.

VariabelProduktionswertWarum es wichtig ist
POSTGRES_PASSWORDEinzigartiges zufälliges PasswortSchützt die gebündelte PostgreSQL-Datenbank.
WEB_ORIGINÖffentlicher HTTPS-App-Ursprung, z. B https://kanera.example.comWird für Browser-Links, CORS und Authentifizierungsflüsse verwendet. Fügen Sie keinen abschließenden Schrägstrich ein.
COOKIE_DOMAINApp-Hostname, z. B kanera.example.comBereich für das Aktualisierungscookie.
COOKIE_SECUREtrueErforderlich, wenn die App über HTTPS bereitgestellt wird.
JWT_SECRETStabiles Zufallsgeheimnis, mindestens 16 ZeichenSigniert Benutzersitzungen. Die Rotation meldet alle ab.
MCP_INTERNAL_SECRETStabiles Zufallsgeheimnis, mindestens 32 Zeichen und unterschiedlich JWT_SECRETErmöglicht dem MCP und den öffentlichen API-Diensten den Austausch zielgruppengebundener OAuth-Anmeldeinformationen, ohne dass ein MCP-Token weitergeleitet werden muss /api/v1. Beide Dienste müssen immer den gleichen Wert verwenden.
MFA_ENCRYPTION_KEYStabiles Zufallsgeheimnis, mindestens 32 ZeichenSchützt die Registrierung und Herausforderungen des Authentifikators. Durch die Rotation werden registrierte Authentifikatoren ungültig.
MEDIA_SIGNING_SECRETStabiles Zufallsgeheimnis, mindestens 32 ZeichenSigniert private Medien-URLs. Durch die Rotation werden vorhandene signierte URLs ungültig.
SECRETS_ENCRYPTION_KEYStabiles Zufallsgeheimnis, mindestens 32 Zeichen und unterschiedlich JWT_SECRETVerschlüsselt in der Datenbank gespeicherte SMTP-, Speicher-, Webhook- und Integrationsanmeldeinformationen.

KANERA_DEPLOYMENT_MODE Standardmäßig ist self_hosted. Der gehostete Modus und seine Stripe-, PostHog-, Plan-Limit- und Lizenzierungsvariablen gelten für von Kanera betriebene Bereitstellungen und sollten bei einer selbst gehosteten Installation deaktiviert bleiben.

Stellen Sie Vorräte zusammen NODE_ENV=production und ANALYTICS_ENABLED=false. Geh ANALYTICS_PROVIDER, POSTHOG_PROJECT_KEY, POSTHOG_API_HOST, alle STRIPE_*, HOSTED_*, und das Token für den gehosteten Modus ist nicht gesetzt. Diese Einstellungen verwandeln eine selbstgehostete Installation nicht in Kanera Cloud.

Öffentliche URLs und Dienste​

VariabelStandardStellen Sie es ein, wann
KANERA_ENVIRONMENTproduction in Produktion ComposeSie benötigen ein anderes API-Schlüsselpräfix für Entwicklung, Test oder Staging.
API_PUBLIC_URLWEB_ORIGINDie browserseitige App-API verwendet einen anderen öffentlichen Ursprung.
KANERA_PUBLIC_API_URLhttp://public-api:3001 im KomponierenMCP oder ein anderer interner Prozess erreicht die öffentliche API an einem anderen Ort als seiner Compose-Dienstadresse. Dies ist eine interne URL, nicht der browserseitige API-Ursprung.
PUBLIC_API_OAUTH_ISSUERhttp://localhost:3001Sie stellen OAuth oder die öffentliche API remote zur Verfügung; Verwenden Sie seinen über den Browser erreichbaren HTTPS-Ursprung.
MCP_SERVER_PUBLIC_URLhttp://localhost:3002/mcpSie machen Remote-MCP verfügbar; die komplette Öffentlichkeit nutzen /mcp URL.
MCP_PUBLIC_URLAbgeleitet von MCP_SERVER_PUBLIC_URL von ComposeSie führen den MCP-Dienst außerhalb der gebündelten Compose-Verkabelung aus.
OAUTH_ISSUER_URLAbgeleitet von PUBLIC_API_OAUTH_ISSUER von ComposeSie führen MCP außerhalb der gebündelten Compose-Verkabelung aus.
API_PORT, PUBLIC_API_PORT, WORKER_PORT, MCP_PORT3000, 3001, 3003, 3002Sie führen Dienste außerhalb von Compose aus oder benötigen andere interne Listener-Ports.
API_TRUST_PROXY, PUBLIC_API_TRUST_PROXY, MCP_TRUST_PROXYfalse, false, trueEin vertrauenswürdiger Reverse-Proxy stellt die echte Client-IP bereit. Vertrauen Sie niemals weitergeleiteten Headern von beliebigen Clients.

Der Browser stellt eine Verbindung her web; Veröffentlichen Sie nicht die Hauptseite api Dienst. Siehe Dienste und Routing bevor Sie die öffentliche API oder MCP verfügbar machen.

Konten und Authentifizierung​

VariabelStandardZweck
SIGNUPS_ENABLEDtrueSet false um die öffentliche Anmeldung und die Gründung neuer Organisationen zu stoppen. Bestehende Organisationseinladungslinks funktionieren weiterhin.
EMAIL_VERIFICATION_ENABLEDfalseFür die Anmeldung, Einladungsanmeldung und E-Mail-Änderungen ist eine Überprüfung der sechsstelligen E-Mail-Adresse erforderlich. Nur aktivieren, wenn SMTP funktioniert.
AUTH_RATE_LIMIT_ENABLEDtrueAktivieren Sie die Brute-Force-Drosselung pro IP auf nicht authentifizierten Authentifizierungsrouten.
AUTH_RATE_LIMIT_MAX / AUTH_RATE_LIMIT_WINDOW_MS10 / 60000Zulässige Authentifizierungsversuche pro Fenster.
JWT_ACCESS_TTL / JWT_REFRESH_TTL_DAYS5m / 10Lebensdauer von Zugriffstoken und Aktualisierungssitzungen.
CLOUDFLARE_TURNSTILE_SITE_KEY / CLOUDFLARE_TURNSTILE_SECRET_KEYUnscharfGehosteter Anmeldeschutz. Lassen Sie die Option für normales Selbsthosting deaktiviert.

Benutzer konfigurieren unten ihren eigenen Authentifikator Einstellungen -> Ihr Konto -> Sicherheit. Organisationsadministratoren können dies unten anfordern Einstellungen -> Organisation -> Sicherheit. Siehe Profil und Sicherheit.

Öffentliche API- und MCP-Grenzwerte​

VariabelStandardZweck
PUBLIC_API_RATE_LIMIT_ENABLEDtrueAktiviert öffentliche API- und MCP-Anforderungslimits.
PUBLIC_API_IP_RATE_LIMIT_PER_MINUTE60Beschränkung für nicht authentifizierte Erkennung und ungültige Trägerformate.
PUBLIC_API_FAILED_KEY_RATE_LIMIT_PER_MINUTE10Pro-IP-Limit für fehlgeschlagen kanera_* Schlüsselversuche.
PUBLIC_API_KEY_RATE_LIMIT_PER_MINUTE400Anforderungslimit pro Schlüssel nach erfolgreicher Authentifizierung.
PUBLIC_API_UPLOAD_RATE_LIMIT_PER_MINUTE30Limit für das Hochladen von Anhängen pro Schlüssel.
PUBLIC_API_RATE_LIMIT_WINDOW_MS60000Ratenbegrenzungsfenster, das von der öffentlichen API und dem MCP gemeinsam genutzt wird.
MCP_BODY_MAX_BYTES1048576Maximaler MCP-Anfragetext.
MCP_REQUEST_TIMEOUT_MS30000Maximale Zeit für eine MCP-Anfrage.
MCP_HEADERS_TIMEOUT_MS / MCP_KEEP_ALIVE_TIMEOUT_MS10000 / 5000Zeitüberschreitungen bei MCP-HTTP-Verbindungen.
KANERA_API_KEYUnscharfWird nur von der lokalen Standard-MCP-Bridge benötigt, nicht vom HTTP-MCP-Dienst.

Datenbank, Cache und Kapazität​

Stellen Sie Vorräte zusammen DATABASE_URL und REDIS_URL für die gebündelten PostgreSQL- und Valkey-Dienste. Legen Sie sie nur dann selbst fest, wenn Sie einen Prozess außerhalb dieses Netzwerks ausführen oder verwaltete Dienste verwenden.

VariabelStandard verfassenZweck
DATABASE_SSLfalseNur aktivieren, wenn eine externe Datenbank SSL erfordert.
POSTGRES_BIND_PORT5433Nur-Loopback-Host-Port für gebündeltes PostgreSQL.
API_REPLICAS / PUBLIC_API_REPLICAS / MCP_REPLICAS2 / 1 / 1Der Serviceprozess zählt. Halten Sie den Arbeiter bei genau eins.
PG_POOL_MAX / WORKER_PG_POOL_MAX20 / 5Maximale Datenbankverbindungen pro App-Prozess und für den Worker.
PG_IDLE_TIMEOUT_MS / PG_CONNECTION_TIMEOUT_MS30000 / 5000Pool-Leerlauf- und Erfassungszeitüberschreitungen.
PG_STATEMENT_TIMEOUT_MS / SLOW_QUERY_LOG_MS30000 / 250Zeitüberschreitung bei Datenbankabfragen und Protokollierungsschwellenwert für langsame Abfragen.
NODE_OPTIONSUnscharfOptionale Knotenflags, z. B. ein Heap-Limit.
UV_THREADPOOL_SIZE16Native Arbeitsthreads, die von Hashing, Krypto und Bildverarbeitung verwendet werden.
REALTIME_WEBSOCKET_COMPRESSION_ENABLEDtrueKomprimieren Sie größere Socket.IO-WebSocket-Nachrichten.
REALTIME_WEBSOCKET_COMPRESSION_THRESHOLD_BYTES1024Minimale Echtzeit-Framegröße zum Komprimieren.
REALTIME_OUTBOX_POLL_MS500 im KomponierenWorker-Fallback-Abfrageintervall für Echtzeit- und Webhook-Postausgangszeilen.
USER_DISPLAY_CACHE_TTL_MS60000Lebensdauer des prozessinternen Caches für die Suche nach Anzeigenamen.

Erhöhen Sie Replikate und Pools erst dann gemeinsam, wenn die Kapazität gemessen wurde. Siehe Updates und Skalierung.

Datei- und Objektspeicher​

VariabelStandardZweck
UPLOADS_DIR/data/uploads im KomponierenLokales Upload-Verzeichnis. Bundled Compose behebt diesen Pfad und behält ihn bei kanera_uploads; Ändern Sie stattdessen die Lautstärkezuordnung .env.
ATTACHMENT_MAX_BYTES104857600Maximale Größe des hochgeladenen Anhangs in Bytes.
S3_REGION / S3_BUCKETUnscharfStarten Sie den bereitstellungsweiten S3-kompatiblen Speicher, wenn Sie über Anmeldeinformationen verfügen.
S3_ACCESS_KEY_ID / S3_SECRET_ACCESS_KEYUnscharfAnmeldeinformationen für den Upload-Bucket. Beide sind für umgebungsbasiertes S3 erforderlich.
S3_ENDPOINTUnscharfBenutzerdefinierter Endpunkt für MinIO, R2 oder einen anderen S3-kompatiblen Anbieter. Wenn Sie es festlegen, werden Anforderungen im Pfadstil aktiviert.
S3_PUBLIC_URL_PREFIXUnscharfOptionales öffentliches oder CDN-Präfix für gespeicherte Objekte.

Der Umgebungsspeicher hat Vorrang vor dem in der App konfigurierten Organisationsspeicher. Siehe Speicherung und Backups bevor Sie eine Installation wechseln, die bereits über Uploads verfügt.

E-Mail, Benachrichtigungen und Integrationen​

VariabelStandardZweck
SMTP_HOST, SMTP_USER, SMTP_PASSWORD, SMTP_FROM_EMAILUnscharfStandardmäßige ausgehende SMTP-Verbindung und Absender.
SMTP_PORT / SMTP_SECURITY587 / starttlsSMTP-Port und Transport: starttls, tls, oder none.
SMTP_FROM_NAMEKaneraAnzeigename des Absenders.
SMTP_IDENTITY_DOMAINE-Mail-Domäne des AbsendersEHLO- und Message-ID-Domäne.
INTERNAL_NOTIFICATION_EMAILSUnscharfDurch Kommas getrennte Empfänger für Klartext-Anmelde- und Einladungsbenachrichtigungen. Erfordert Umgebungs-SMTP.
KANERA_ALLOW_PRIVATE_NOTIFICATION_DESTINATIONSfalseErlauben Sie persönliche NTFY-, Gotify- und Webhook-Empfänger in HTTP oder privaten Netzwerken. Reservierte Adressen und Metadatenadressen bleiben gesperrt.
ALERT_WEBHOOK_URLUnscharfSlack-kompatibles Ziel für Bereitschafts-, Laufzeit- und Grafana-Benachrichtigungen.
OPS_ALERTS_ENABLED / OPS_ALERT_THROTTLE_MStrue / 300000Aktivieren und deduplizieren Sie Betriebswarnungen. Ohne Ziel wird nichts verschickt.
SLOW_REQUEST_LOG_MS2500Schwellenwert für eine Warnung zu einer langsamen Anforderung in Protokollen.
GITHUB_APP_ID, GITHUB_APP_SLUG, GITHUB_APP_PRIVATE_KEYUnscharfOptionale, durch die Bereitstellung definierte GitHub-App für private Linkvorschauen. Selbstgehostete Administratoren können stattdessen den In-App-Manifestfluss verwenden.
TRELLO_API_KEYUnscharfErmöglicht Trello-Importen die Authentifizierung und das Kopieren von Anhängen.

Siehe E-Mail und Benachrichtigungen und Integrationen und APIs.

Backups und Aufbewahrung​

VariabelStandardZweck
DB_BACKUPS_ENABLEDfalseAktivieren Sie geplante verschlüsselte PostgreSQL-Backups auf S3-kompatiblem Speicher.
DB_BACKUP_ENCRYPTION_PASSPHRASEUnscharfErforderlich, wenn Sicherungen aktiviert sind, und erneut erforderlich, um sie wiederherzustellen.
DB_BACKUP_TIMES_UTC00:15,12:15,16:45Durch Kommas getrennte tägliche UTC-Sicherungszeiten.
DB_BACKUP_RETENTION_DAYS14Erfolgreiches Backup-Aufbewahrungsfenster.
DB_BACKUP_S3_PREFIXbackups/postgresObjektpräfix für Datenbank-Dumps.
DB_BACKUP_S3_BUCKET, DB_BACKUP_S3_REGION, DB_BACKUP_S3_ENDPOINTUpload-SpeicherwerteOptionales separates Backup-Ziel.
DB_BACKUP_S3_ACCESS_KEY_ID, DB_BACKUP_S3_SECRET_ACCESS_KEYUpload-SpeicherwerteOptionale separate Backup-Anmeldeinformationen.
ACTIVITY_EVENT_RETENTION_DAYS730Aufbewahrung des Aktivitätsverlaufs.
ADMIN_AUDIT_LOG_RETENTION_DAYS1095Aufbewahrung des Management-Audit-Protokolls.
NOTIFICATION_READ_RETENTION_DAYS / NOTIFICATION_MAX_RETENTION_DAYS90 / 365Lesebenachrichtigung und absolute Benachrichtigungsspeicherung.
AUTH_TOKEN_RETENTION_DAYS30Kulanzzeitraum, bevor abgelaufene oder verbrauchte Authentifizierungsartefakte gelöscht werden.
REALTIME_OUTBOX_RETENTION_DAYS / OUTBOX_STUCK_RETENTION_DAYS30 / 30Verarbeitete und dauerhaft hängengebliebene Postausgangsaufbewahrung.

Siehe Speicherung und Backups für Backup-Anforderungen und Wiederherstellungsplanung.

Überwachung​

VariabelStandardZweck
METRICS_ENABLEDtrueRegistriert Prometheus-Metrikendpunkte. Sie kehren zurück 404 ohne gültigen Token.
METRICS_TOKENUnscharfInhabertoken, mindestens 16 Zeichen, zum Scrapen erforderlich.
COMPOSE_PROFILESUnscharfEinbeziehen monitoring Grafana, Prometheus, Loki, Alloy und Exporteure zu gründen; einschließen admin für das Verwaltungsportal.
COMPOSE_PROJECT_NAMEkaneraStellen Sie eine Identität zusammen, die Alloy verwendet, um die Protokolle dieser Bereitstellung auszuwählen. Überprüfen docker compose ls auf verwalteten Plattformen.
GRAFANA_ADMIN_PASSWORDUnscharfErforderlich, wenn das Überwachungsprofil aktiviert ist.
MONITORING_BIND_IP127.0.0.1Host-Schnittstelle für Grafana und Prometheus. Verwenden Sie niemals eine private VPN-Adresse 0.0.0.0 in der Produktion.
GRAFANA_BIND_PORT / PROMETHEUS_BIND_PORT3000 / 9090Host-Ports für die beiden Überwachungs-UIs.
PROMETHEUS_RETENTION / PROMETHEUS_RETENTION_SIZE30d / 5GBZeit- und Festplattenobergrenzen für Prometheus-Daten.
GRAFANA_ROOT_URLUnscharfExterne Grafana-URL bei der Bereitstellung über einen Proxy.
POSTGRES_EXPORTER_DSNGebündelte DatenbankÜberschreibung für einen externen PostgreSQL-Server.
REALTIME_EMIT_METRICS_ENABLEDfalseAktivieren Sie abgetastete Nutzlastmetriken in Echtzeit.
REALTIME_EMIT_METRICS_SAMPLE_RATE / REALTIME_EMIT_METRICS_MIN_BYTES0.01 / 0Echtzeit-Metrik-Sampling und minimale Nutzlastgröße.

Optionales Verwaltungsportal​

Das Verwaltungsportal ist von den Mandanteneinstellungen getrennt und verfügt über eine eigene Authentifizierungsgrenze. Aktivieren Sie es nur, wenn Betreiber eine organisationsübergreifende Verwaltung oder geprüfte Supportsitzungen benötigen.

VariabelStandardZweck
ADMIN_WEB_ORIGINhttp://localhost:4300Öffentlicher Ursprung und CORS-Grenze für die Admin-Konsole.
ADMIN_API_PORT3002Interner Admin-API-Listener-Port, wenn er außerhalb der gebündelten Verkabelung ausgeführt wird.
ADMIN_COOKIE_DOMAINUnscharfCookie-Domänenüberschreibung, wenn der Administrator-Hostname außerhalb liegt COOKIE_DOMAIN.
ADMIN_JWT_SECRETUnscharfErforderlich für die Admin-API und muss von abweichen JWT_SECRET.
ADMIN_EMAIL / ADMIN_PASSWORDUnscharfSetzen Sie den ersten Superadmin nur, wenn die Admin-Benutzer-Tabelle leer ist. Sie setzen ein bestehendes Konto nicht zurück.
ADMIN_JWT_ACCESS_TTL / ADMIN_JWT_REFRESH_TTL_DAYS15m / 7Administratorzugriff und Aktualisierungsdauer.
ADMIN_LOGIN_RATE_LIMIT_MAX / ADMIN_LOGIN_RATE_LIMIT_WINDOW_MS5 / 300000Drosselung der Administratoranmeldung pro IP.
ADMIN_TRUST_PROXYtrueVertrauen Sie dem Admin-Reverse-Proxy für echte Client-IPs.
SUPPORT_SESSION_TTL_MINUTES60Kurze Lebensdauer der Support-Sitzung; maximal acht Stunden und kein Aktualisierungstoken.

Halten Sie das Verwaltungsportal privat, verwenden Sie einen separaten Hostnamen und ein separates Geheimnis und überprüfen Sie das Prüfprotokoll. Die vollständige Einsatzverkabelung ist in dokumentiert DEPLOY.md im Kanera-Repository.

Änderungen anwenden und überprüfen​

Die meisten Änderungen erfordern die Neuerstellung der betroffenen Dienste:

docker compose config --quiet
docker compose up -d
docker compose ps

Überprüfen Sie die relevanten Dienstprotokolle, nachdem Sie Authentifizierungs-, Zustellungs-, Speicher-, API-, MCP- oder Administratoreinstellungen geändert haben. Eine syntaktisch gültige .env beweist nicht, dass externe Anmeldeinformationen oder URLs funktionieren.