Serverkonfiguration
Alle Sync-in-Serverkonfigurationsoptionen sind in der Datei environment.yaml definiert.
Ein vollständiges Beispiel ist auf GitHub verfügbar: environment.dist.yaml.
Mit dieser Datei können Sie das Verhalten Ihrer Sync-in-Instanz anpassen: Netzwerk, Authentifizierung, Datenbank, Cache, E-Mail usw.
Environment.yaml
server
host: IP-Adresse, auf der der Server lauscht.- Standard:
0.0.0.0 - Typ: string (IP)
- Standard:
port: Port, der für die Webschnittstelle verwendet wird.- Standard:
8080 - Typ: number
- Standard:
publicUrl: Kanonische öffentliche URL, die zum Generieren von Benachrichtigungslinks und Editor-URLs verwendet wird.- Standard: nicht definiert
- Typ: string
- Erforderlich: nein (erforderlich in der nächsten Hauptversion)
- Beispiel:
https://sync-in.domain.com - Hinweis: Der Wert muss mit der den Benutzern angezeigten URL übereinstimmen, einschließlich des Schemas und aller nicht standardmäßigen Ports. Er muss über die Browser der Benutzer erreichbar sein und für Office-Editoren, die mit Sync-in kommunizieren, über ihre Dienste oder Container.
- Hinweis: Wenn die Option fehlt, werden Benachrichtigungs-E-Mails ohne Aktionslinks gesendet und Editoren verwenden den Ursprung der Anfrage als Kompatibilitätsfallback.
- Hinweis: Aus Sicherheitsgründen wird diese Option in der nächsten Hauptversion erforderlich sein, damit Editor-Endpunkte aus einem vertrauenswürdigen Ursprung erstellt werden und nicht aus Anfrage-Headern abgeleitet werden.
workers: Anzahl der Prozesse.- Standard:
1 - Typ: number |
auto|0 - Hinweis:
autooder0, um alle CPU-Kerne zu verwenden
- Standard:
trustProxy: Proxy-Verarbeitung aktivieren.- Standard:
true - Typ: boolean | string (numerische Werte werden vorübergehend unterstützt, sind jedoch veraltet)
- Hinweis: Seit Version 2.6.0 werden numerische Werte
>= 1zutrue; Werte< 1werden zufalse. Verwenden Sie nach Möglichkeit eine vertrauenswürdige Proxy-IP-Adresse bzw. einen CIDR-Bereich. - Hinweis: Verfügbare Optionen anzeigen
- Standard:
restartOnFailure: Worker nach einem Fehler automatisch neu starten.- Standard:
true - Typ: boolean
- Standard:
logger
level: Protokollierungsstufe des Servers.- Standard:
info - Typ:
trace|debug|info|warn|error|fatal
- Standard:
stdout: Protokolle in der Konsole ausgeben (true) oder in eine Datei schreiben (false).- Standard:
true - Typ: boolean
- Standard:
colorize: Farbige Protokollausgabe aktivieren.- Standard:
true - Typ: boolean
- Standard:
jsonOutput: JSON-Ausgabe aktivieren.- Standard:
false - Typ: boolean
- Hinweis: Bei aktivierter Option wird
colorizeignoriert.
- Standard:
filePath: Pfad der Protokolldatei, wennstdoutauffalsegesetzt ist.- Standard:
logs/server.log - Typ: string
- Standard:
mysql
url: MySQL-Verbindungs-URL.- Standard: nicht definiert
- Typ: string
- Erforderlich: Ja
- Beispiel:
mysql://user:password@localhost:3306/database
logQueries: Alle an die Datenbank gesendeten SQL-Abfragen protokollieren.- Standard:
false - Typ: boolean
- Standard:
cache
adapter: Cache-System.- Standard:
mysql - Typ:
mysql|redis
- Standard:
ttl: Lebensdauer der Cache-Daten in Sekunden.- Standard:
60 - Typ: number
- Standard:
redis: Redis-Verbindungs-URL (wennadapter: redisverwendet wird).- Standard:
redis://127.0.0.1:6379 - Typ: string
- Erforderlich: Ja (wenn
adapteraufredisgesetzt ist)
- Standard:
websocket
adapter: Legt fest, wie WebSocket-Verbindungen verwaltet werden.- Standard:
cluster - Typ:
cluster|redis
- Standard:
redis: Redis-Verbindungs-URL (wennadapter: redisverwendet wird).- Standard:
redis://127.0.0.1:6379 - Typ: string
- Erforderlich: Ja (wenn
adapteraufredisgesetzt ist)
- Standard:
mail
Der Abschnitt mail ist optional. Wenn er fehlt, sind E-Mail-Benachrichtigungen und E-Mail-basierte Funktionen deaktiviert.
host: Hostname des SMTP-Servers.- Standard: nicht definiert
- Typ: string
- Erforderlich: Ja (wenn der Abschnitt
maildefiniert ist)
port: SMTP-Port (z. B.587).- Standard:
25 - Typ: number
- Standard:
sender: Absenderadresse.- Standard:
Sync-in<notification@sync-in.com> - Typ: string
- Standard:
auth:user: SMTP-Benutzername.- Standard: nicht definiert
- Typ: string
pass: SMTP-Passwort.- Standard: nicht definiert
- Typ: string
secure: SSL-Verbindung verwenden.- Standard:
false - Typ: boolean
- Standard:
ignoreTLS: STARTTLS deaktivieren, auch wenn der Server es anbietet.- Standard:
false - Typ: boolean
- Standard:
rejectUnauthorized: Die Verbindung ablehnen, wenn das TLS-Zertifikat des Servers ungültig ist.- Standard:
true - Typ: boolean
- Nur für einen vertrauenswürdigen SMTP-Server mit selbst signiertem Zertifikat auf
falsesetzen. Dadurch wird die Zertifikatsprüfung deaktiviert, was für Produktionsumgebungen nicht empfohlen wird.
- Standard:
logger: Interne SMTP-Protokolle von Nodemailer aktivieren. Ihre Ausführlichkeit richtet sich nach dem allgemeinenlogger.level. Wennlogger.levelaufdebugodertracegesetzt wird, wird auch detaillierter SMTP-Datenverkehr protokolliert.- Standard:
false - Typ: boolean
- Standard:
auth
provider: Authentifizierungsmethode.- Standard:
mysql - Typ:
mysql|ldap|oidc
- Standard:
cookieSameSite: SameSite-Richtlinie für Cookies.- Standard:
strict - Typ:
lax|strict
- Standard:
encryptionKey: Verschlüsselungsschlüssel für Benutzergeheimnisse in der Datenbank, derzeit optional. Er wird in einer zukünftigen Hauptversion erforderlich sein.- Standard: nicht definiert
- Typ: string
- Hinweis: ⚠️ Sobald MFA aktiviert ist, macht jede Änderung oder Löschung des Verschlüsselungsschlüssels die Geheimnisse ungültig und verhindert jede spätere Authentifizierung.
mfa:totp:enabled: TOTP-Authentifizierung für alle Benutzer aktivieren.- Standard:
true - Typ: boolean
- Standard:
issuer: Name, der in der Authentifizierungs-App angezeigt wird.- Standard:
Sync-in - Typ: string
- Standard:
token:access:secret: JWT-Geheimnis für Zugriffstoken.- Standard: nicht definiert
- Typ: string
- Erforderlich: Ja
- Hinweis: Verwenden Sie einen langen, zufällig generierten Wert. Er muss sich vom Geheimnis des Aktualisierungstokens unterscheiden.
expiration: Gültigkeitsdauer des Zugriffstokens.- Standard:
15m - Typ: string
- Standard:
refresh:secret: JWT-Geheimnis für Aktualisierungstoken.- Standard: nicht definiert
- Typ: string
- Erforderlich: Ja
- Hinweis: Verwenden Sie einen langen, zufällig generierten Wert. Er muss sich vom Geheimnis des Zugriffstokens unterscheiden.
expiration: Gültigkeitsdauer des Aktualisierungstokens.- Standard:
4h - Typ: string
- Standard:
-
ldap(wennprovider: ldap):- Hinweis: Siehe die entsprechende Dokumentation
servers: Liste der LDAP-Server.- Standard:
[] - Typ: string[]
- Erforderlich: Ja
- Beispiel:
[ldap://localhost:389]
- Standard:
tlsOptions: Node.js TLS-Optionen, die für die sichere LDAP-Verbindung verwendet werden.rejectUnauthorized: Lehnt die Verbindung ab, wenn das TLS-Zertifikat des Servers ungültig ist.- Standard:
true - Typ: boolean
- Erforderlich: nein
- Standard:
ca: Liste gültiger Pfade zu Zertifikaten.- Standard:
[] - Typ: string[]
- Erforderlich: nein
- Beispiel:
[/app/certs/ca.pem]
- Standard:
*: Weitere Optionen sind in der Node.js-Dokumentation verfügbar.
baseDN: Basis-DN.- Standard: nicht definiert
- Typ: string
- Erforderlich: Ja
- Beispiel:
ou=people,dc=example,dc=com
filter: Optionaler LDAP-Filter zur Suche hinzugefügt.- Standard: nicht definiert
- Typ: string
- Beispiel:
(acl=admin)
upnSuffix: AD-Domänensuffix, das mituserPrincipalNameverwendet wird.- Standard: nicht definiert
- Typ: string
- Beispiel: user@
sync-in.com
netbiosName: NetBIOS-Domänenname, der mitsAMAccountNameverwendet wird.- Standard: nicht definiert
- Typ: string
- Beispiel:
SYNC_IN\user
serviceBindDN: DN eines Dienstkontos zum Durchführen von LDAP-Suchen.- Standard: nicht definiert
- Typ: string
serviceBindPassword: Passwort des Dienstkontos.- Standard: nicht definiert
- Typ: string
attributes:login: LDAP-Attribut, das zur Benutzeridentifizierung verwendet wird.- Standard:
uid - Typ:
uid|cn|mail|sAMAccountName|userPrincipalName
- Standard:
email: LDAP-Attribut, das die E-Mail-Adresse enthält (z. B.mail,email).- Standard:
mail - Typ: string
- Standard:
storageQuota: LDAP-Attribut, das das Speicherkontingent des Benutzers in Bytes enthält.- Standard:
storageQuota - Typ: string
- Hinweis: Ein fehlendes Attribut lässt das lokale Kontingent unverändert. Wenn das Attribut mit
nulloder0vorhanden ist, wird das Kontingent auf unbegrenzt gesetzt.
- Standard:
options:autoCreateUser: Erstellt bei der ersten LDAP-Anmeldung einen lokalen Benutzer.- Standard:
true - Typ: boolean
- Standard:
autoCreatePermissions: Automatisch erstellten Benutzern zugewiesene Berechtigungen.- Standard:
[] - Typ: string[]
- Hinweis: Siehe Berechtigungskennungen
- Standard:
adminGroup: LDAP-Gruppe, die Administratorrechte gewährt (einfacher CN oder vollständiger DN).- Standard: nicht definiert
- Typ: string
enablePasswordAuthFallback: Lokale Passwortauthentifizierung für Standardbenutzer zulassen, wenn LDAP nicht verfügbar ist.- Standard:
false - Typ: boolean
- Hinweis: Für Administratorkonten sollte ein lokales Sync-in-Passwort konfiguriert und für den Notfallzugriff verfügbar gehalten werden.
- Standard:
-
oidc(wennprovider: oidc):- Hinweis: Siehe die entsprechende Dokumentation
issuerUrl: Discovery-URL des OpenID-Connect-Anbieters.- Standard: nicht definiert
- Typ: string
- Erforderlich: Ja
clientId: OAuth 2.0-Client-ID.- Standard: nicht definiert
- Typ: string
- Erforderlich: Ja
clientSecret: OAuth 2.0-Client-Geheimnis.- Standard: nicht definiert
- Typ: string
- Erforderlich: Ja
redirectUri: Beim Anbieter registrierte Weiterleitungs-URL.- Standard: nicht definiert
- Typ: string
- Erforderlich: Ja
- Hinweis: ⚠️ Die URL muss mit
/api/auth/oidc/callbackenden.
options:autoCreateUser: Erstellt bei der ersten OIDC-Anmeldung einen lokalen Benutzer.- Standard:
true - Typ: boolean
- Standard:
autoCreatePermissions: Automatisch erstellten Benutzern zugewiesene Berechtigungen.- Standard:
[] - Typ: string[]
- Hinweis: Siehe Berechtigungskennungen
- Standard:
adminRoleOrGroup: Rolle oder Gruppe, die Administratorrechte gewährt.- Standard: nicht definiert
- Typ: string
storageQuotaClaim: OIDC-Claim, der das Speicherkontingent des Benutzers in Bytes enthält.- Standard:
storageQuota - Typ: string
- Hinweis: Ein fehlender Claim lässt das lokale Kontingent unverändert. Wenn der Claim mit
nulloder0vorhanden ist, wird das Kontingent auf unbegrenzt gesetzt.
- Standard:
enablePasswordAuth: Lokale Passwortauthentifizierung für vorhandene Standardbenutzer zulassen.- Standard:
false - Typ: boolean
- Hinweis: Für diesen lokalen Anmeldevorgang müssen Standardbenutzer ihr lokales Sync-in-Passwort kennen.
- Hinweis: Von OIDC erstellte Benutzer können ein bekanntes lokales Passwort aus ihrem Profil festlegen, während sie über OIDC authentifiziert werden.
- Hinweis: Dieses lokale Passwort ist auch erforderlich, um Sync-in 2FA über eine OIDC-Browsersitzung zu aktivieren, zurückzusetzen oder zu deaktivieren.
- Hinweis: Für Administratorkonten sollte ein lokales Sync-in-Passwort konfiguriert und für den Notfallzugriff verfügbar gehalten werden.
- Standard:
autoSyncAvatar: Lädt den Benutzeravatar automatisch aus dem OIDC-Claimpictureherunter und synchronisiert ihn.- Standard:
false - Typ: boolean
- Standard:
autoRedirect: Automatische Umleitung zum IdP.- Standard:
false - Typ: boolean
- Standard:
buttonText: Beschriftung der OIDC-Anmeldeschaltfläche.- Standard:
Continue with OpenID Connect - Typ: string
- Standard:
security:scope: Angeforderte OAuth-2.0-Scopes.- Standard:
openid email profile - Typ: string
- Standard:
supportPKCE: Aktiviert PKCE-Unterstützung im Autorisierungsfluss.- Standard:
true - Typ: boolean
- Standard:
allowInsecureRequests: OIDC-Erkennung und Token-Anfragen über unsicheres HTTP zulassen.- Standard:
false - Typ: boolean
- Hinweis: Nur für lokale Entwicklung oder vertrauenswürdige Legacy-Anbieter aktivieren.
- Standard:
tokenEndpointAuthMethod: Authentifizierungsmethode am Token-Endpunkt.- Standard:
client_secret_basic - Typ:
client_secret_basic|client_secret_post - Hinweis:
clientSecretist in der Sync-in-Konfiguration erforderlich.
- Standard:
tokenSigningAlg: Signierungsalgorithmus für ID-Tokens.- Standard:
RS256 - Typ: string
- Standard:
userInfoSigningAlg: Algorithmus für eine signierte UserInfo-Antwort.- Standard: nicht definiert
- Typ: string
skipSubjectCheck: Deaktiviert die Prüfung des Claimssub.- Standard:
false - Typ: boolean
- Standard:
requireVerifiedEmail: Verlangt vor der Kontoverknüpfung oder Profilsynchronisierung einen verifizierten E-Mail-Claim vom OIDC-Anbieter.- Standard:
true - Typ: boolean
- Standard:
allowPrivateIpAvatarDownload: OIDC-Avatar-Downloads aus privaten oder internen IP-Bereichen zulassen.- Standard:
false - Typ: boolean
- Standard:
applications
users:showUngroupedUsers: Macht Benutzer ohne Gruppe global für Standardbenutzer und Administratoren sichtbar.- Standard:
true - Typ: boolean
- Hinweis: Gastkonten sind von dieser globalen Sichtbarkeit ausgeschlossen, sowohl als aufgelistete Konten als auch als Anforderer.
- Standard:
files:dataPath: Speicherort für Anwendungsdateien, einschließlich persönlicher Bereiche, kollaborativer Bereiche und temporärer Dateien.- Standard: nicht definiert
- Typ: string
- Erforderlich: Ja
- Docker: wird vom Docker-Einstiegspunkt automatisch fest auf
/app/datagesetzt; lassen Sie diese Einstellung aus der Docker-Dateienvironment.yamlweg.
maxUploadSize: Maximale Größe für Dateien, die über HTTP-Uploads, WebDAV, Synchronisierung, Remote-Downloads oder Editor-Callbacks empfangen werden.- Standard:
5368709120(5 GB) - Typ: number
- Hinweis: Wert ausgedrückt in Bytes.
- Standard:
contentIndexing:enabled: Indizierung von Dateiinhalten für die Suche aktivieren (durch Deaktivieren dieser Option wird die Volltextsuche deaktiviert).- Standard:
true - Typ: boolean
- Standard:
ocr:- Hinweis: Siehe spezielle Dokumentation
enabled: OCR für PDF-Bilder aktivieren- Standard:
true - Typ: boolean
- Standard:
languages: Verwendete OCR-Sprachen.- Standard:
[eng] - Typ: string[]
- Beispiel:
[eng,fra] - Hinweis: Unterstützt ISO 639-2/T-Drei-Buchstaben-Codes:
eng,spa,fra,deuusw.
- Standard:
offline: Verhindert das Herunterladen von OCR-Sprachen und verwendet ausschließlich lokale Sprachdateien.- Standard:
false - Typ: boolean
- Standard:
languagesPath: Pfad zu lokalen OCR-Sprachdateien- Standard: integriertes OCR-Verzeichnis
- Typ: string
- Hinweis: Wird verwendet, wenn der Offline-Modus aktiviert ist oder um den Standardspeicherort zu überschreiben
trashRetention:users: Automatische Bereinigungsverzögerung für den Papierkorb im persönlichen Bereich in Tagen.- Standard:
false - Typ: number |
false - Hinweis:
falseoder0deaktiviert die Bereinigung.
- Standard:
spaces: Automatische Bereinigungsfrist für den Papierkorb in kollaborativen Bereichen in Tagen.- Standard:
false - Typ: number |
false - Hinweis:
falseoder0deaktiviert die Bereinigung.
- Standard:
sampleDocuments: Dokumentgruppen werden im Dialog „Neues Dokument“ angezeigt.- Standard:
[opendocument, microsoft, drawio] - Typ: string[]
- Werte:
opendocument|microsoft|drawio - Hinweis: Verwenden Sie
[], um nur Text, Markdown und Andere anzuzeigen.
- Standard:
editors: Kollaborative Editor-Integrationen.- Hinweis: Bei der Definition muss jeder
externalServer-Wert eine gültige absolute HTTP- oder HTTPS-URL sein. - Hinweis: Die alten Pfade
applications.files.onlyofficeundapplications.files.collaborawerden aus Kompatibilitätsgründen weiterhin unterstützt, sind jedoch veraltet und werden in einer zukünftigen Version entfernt. Verschieben Sie diese Einstellungen nachapplications.files.editors. onlyoffice:enabled: OnlyOffice-Integration aktivieren.- Standard:
false - Typ: boolean
- Standard:
secret: Gemeinsames JWT-Geheimnis mit OnlyOffice.- Standard: nicht definiert
- Typ: string
- Erforderlich: Ja (falls für OnlyOffice aktiviert)
externalServer: URL Ihres OnlyOffice-Servers.- Standard: nicht definiert
- Typ: string
- Beispiel:
https://onlyoffice.my-domain.com - Hinweis: Optional, wenn Sie Sync-in Docker Compose verwenden.
verifySSL: Überprüft das SSL-Zertifikat.- Standard:
false - Typ: boolean
- Standard:
eurooffice:enabled: Euro-Office-Integration aktivieren.- Standard:
false - Typ: boolean
- Standard:
secret: Mit Euro-Office geteiltes JWT-Geheimnis.- Standard: nicht definiert
- Typ: string
- Erforderlich: Ja (falls für Euro-Office aktiviert)
externalServer: URL Ihres Euro-Office-Servers.- Standard: nicht definiert
- Typ: string
- Beispiel:
https://eurooffice.my-domain.com
verifySSL: Überprüft das SSL-Zertifikat.- Standard:
false - Typ: boolean
- Standard:
collabora:enabled: Collabora Online-Integration aktivieren.- Standard:
false - Typ: boolean
- Standard:
externalServer: URL Ihres Collabora Online-Servers.- Standard: nicht definiert
- Typ: string
- Beispiel:
https://collabora.my-domain.com - Hinweis: Optional, wenn Sie Sync-in Docker Compose verwenden.
drawio:enabled: draw.io-Integration aktivieren.- Standard:
false - Typ: boolean
- Standard:
externalServer: URL Ihres externen draw.io-Servers.- Standard: nicht definiert
- Typ: string
- Beispiel:
https://drawio.my-domain.com - Hinweis: Optional, wenn Sie Sync-in Docker Compose verwenden. Verwenden Sie einen dedizierten Ursprung für einen externen Server.
- Hinweis: Bei der Definition muss jeder
appStore:repository: Repository-Auswahl für App-Client-Releases.- Standard:
public - Typ:
public|local - Hinweis: Dieser Abschnitt ist direkt unter
applicationsdefiniert, nicht unterapplications.files.
- Standard:
Umgebungsvariablen
Skalare Konfigurationsparameter des Sync-in-Servers können über Umgebungsvariablen mit dem Präfix SYNCIN_ festgelegt werden. Wenn eine Variable vom Typ SYNCIN_* definiert wird, hat ihr Wert Vorrang vor dem entsprechenden Wert in der Datei environment.yaml und ersetzt ihn.
Beispielsweise die folgende Konfiguration:
server:
# Derzeit optional; in der nächsten Hauptversion erforderlich
publicUrl: 'https://sync-in.domain.com'
mysql:
url: 'mysql://root:MySQLRootPassword@mariadb:3306/sync_in'
auth:
encryptionKey: 'REPLACE_WITH_LONG_RANDOM_ENCRYPTION_KEY'
token:
access:
secret: 'REPLACE_WITH_LONG_RANDOM_ACCESS_SECRET'
refresh:
secret: 'REPLACE_WITH_LONG_RANDOM_REFRESH_SECRET'
applications:
files:
dataPath: '/home/sync-in-data'
Kann mit den folgenden Umgebungsvariablen reproduziert werden:
SYNCIN_AUTH_ENCRYPTIONKEY='REPLACE_WITH_LONG_RANDOM_ENCRYPTION_KEY'
SYNCIN_AUTH_TOKEN_ACCESS_SECRET='REPLACE_WITH_LONG_RANDOM_ACCESS_SECRET'
SYNCIN_AUTH_TOKEN_REFRESH_SECRET='REPLACE_WITH_LONG_RANDOM_REFRESH_SECRET'
SYNCIN_MYSQL_URL='mysql://root:MySQLRootPassword@mariadb:3306/sync_in'
# Derzeit optional; in der nächsten Hauptversion erforderlich
SYNCIN_SERVER_PUBLICURL='https://sync-in.domain.com'
SYNCIN_APPLICATIONS_FILES_DATAPATH='/home/sync-in-data'
Diese Umgebungsvariablen bieten eine empfohlene Mindestkonfiguration zum Starten von Sync-in ohne eine environment.yaml-Datei.
- Für boolesche Werte verwenden Sie true oder false.
- Numerische Werte werden automatisch verarbeitet.
- Um Werte zu konfigurieren, die als Arrays erwartet werden, verwenden Sie eine durch Kommas getrennte Liste, sofern die Option dies unterstützt. Zum Beispiel:
SYNCIN_APPLICATIONS_FILES_SAMPLEDOCUMENTS=opendocument,microsoft,drawiokonfiguriertapplications.files.sampleDocuments.
⚠️ Wenn ein SYNCIN_*-Wert in ein Paar einfacher oder doppelter Anführungszeichen eingeschlossen ist, entfernt Sync-in diese äußeren Anführungszeichen. Verschachtelte oder nicht übereinstimmende Anführungszeichen bleiben unverändert.
Minimale Konfiguration
server:
# Derzeit optional; in der nächsten Hauptversion erforderlich
publicUrl: 'https://sync-in.domain.com'
mysql:
url: 'mysql://root:MySQLRootPassword@mariadb:3306/sync_in'
auth:
encryptionKey: 'REPLACE_WITH_LONG_RANDOM_ENCRYPTION_KEY'
token:
access:
secret: 'REPLACE_WITH_LONG_RANDOM_ACCESS_SECRET'
refresh:
secret: 'REPLACE_WITH_LONG_RANDOM_REFRESH_SECRET'
applications:
files:
dataPath: '/home/sync-in-data'
Vollständige Konfiguration
server:
# Standardhost: `0.0.0.0`
host: 0.0.0.0
# Standardport: `8080`
port: 8080
# publicUrl: Kanonische öffentliche URL zum Erstellen von Benachrichtigungslinks und Editor-URLs.
# Wenn sie nicht festgelegt ist, werden Benachrichtigungs-E-Mails ohne Aktionslinks gesendet und Editoren verwenden
# den Ursprung der Anfrage als Kompatibilitäts-Fallback. Aus Sicherheitsgründen wird die Option in der nächsten
# Hauptversion erforderlich, damit Editor-Endpunkte einen vertrauenswürdigen, vom Administrator kontrollierten Ursprung
# anstelle von Anfrage-Headern verwenden.
# z. B.: https://sync-in.domain.com
# optional
publicUrl:
# workers: `auto` oder `0` (alle CPUs verwenden) | Anzahl der zu verwendenden CPUs
# Standard: 1
workers: 1
# Proxy-Vertrauen: `true` (allen Proxys vertrauen) | `false` | `127.0.0.1,192.168.1.1/24`
# Seit Version 2.6.0 sind veraltete numerische Werte >= 1 als veraltet markiert und werden wie `true` behandelt
# Standard: true
trustProxy: true
# restartOnFailure: Worker automatisch neu starten, wenn sie beendet werden oder ausfallen
# Standard: `true`
restartOnFailure: true
mysql:
# erforderlich
url: 'mysql://root:MySQLPassword@localhost:3306/database'
# Standard: `false`
logQueries: false
logger:
# Stufe: `trace` | `debug` | `info` | `warn` | `error` | `fatal`
# Standard: `info`
level: info
# stdout: Bei false werden Protokolle in das Laufzeitverzeichnis geschrieben
# Standard: `true`
stdout: true
# Ausgabe farbig darstellen.
# Standard: `true`
colorize: true
# JSON-Ausgabe. Wenn aktiviert, wird `colorize` ignoriert.
# Standard: `false`
jsonOutput: false
# Pfad zur Protokolldatei, die verwendet wird, wenn stdout auf false gesetzt ist
filePath:
cache:
# Adapter: `mysql` | `redis`
# Standard: `mysql`
adapter: mysql
# TTL in Sekunden
# Standard: `60`
ttl: 60
# URL des Redis-Adapters
# Standard: `redis://127.0.0.1:6379`
redis: 'redis://127.0.0.1:6379'
websocket:
# Adapter: `cluster` (Node.js-Worker: Standard) | `redis`
# Standard: `cluster`
adapter: cluster
# URL des Redis-Adapters
# Standard: `redis://127.0.0.1:6379`
redis: 'redis://127.0.0.1:6379'
mail:
host: 'smtp.server.com'
# Standard: `25`
port: 25
# Standard: `Sync-in<notification@sync-in.com>`
sender: 'Sync-in<notification@sync-in.com>'
# optional
auth:
user: 'user'
pass: 'password'
# Legt fest, ob die Verbindung SSL verwenden soll (bei true) oder nicht (bei false)
# Hinweis: `secure: false` bedeutet nicht zwangsläufig, dass Nachrichten im Klartext gesendet werden
# Wenn der Server STARTTLS unterstützt, wird die Verbindung normalerweise automatisch auf TLS umgestellt
# Standard: `false`
secure: false
# ignoreTLS: Deaktiviert bei true die Verwendung von STARTTLS, selbst wenn der Server es ankündigt
# Standard: false
ignoreTLS: false
# rejectUnauthorized: Verbindung ablehnen, wenn das TLS-Zertifikat des Servers ungültig ist
# Standard: true
rejectUnauthorized: true
# Interne SMTP-Protokolle von Nodemailer aktivieren
# logger.level auf debug oder trace setzen, um detaillierten SMTP-Datenverkehr einzubeziehen
# Standard: `false`
logger: false
auth:
# Anbieter: `mysql` | `ldap` | `oidc`
# Standard: `mysql`
provider: mysql
# Schlüssel zum Verschlüsseln geheimer Benutzerschlüssel in der Datenbank
# Derzeit optional; in einer zukünftigen Hauptversion erforderlich
# Warnung: Den Verschlüsselungsschlüssel nach der MFA-Aktivierung nicht ändern oder entfernen, da die Codes sonst ungültig werden
encryptionKey:
# sameSite-Einstellung des Cookies: `lax` | `strict`
# Standard: `strict`
cookieSameSite: strict
token:
access:
# Für Token- und Cookie-Signaturen verwendet
# erforderlich
secret:
# Token-Ablaufzeit = maxAge des Cookies
# Standard: `15m`
expiration: 15m
refresh:
# Für Token- und Cookie-Signaturen verwendet
# erforderlich
secret:
# Token-Ablaufzeit = maxAge des Cookies
# Standard: `4h`
expiration: 4h
# Multi-Faktor-Authentifizierung
mfa:
# TOTP-Konfiguration
totp:
# TOTP-Authentifizierung aktivieren
# Standard: true
enabled: true
# In der Authentifizierungs-App angezeigter Name (FreeOTP, Proton Authenticator, Aegis Authenticator usw.)
# Standard: Sync-in
issuer: Sync-in
# LDAP-Authentifizierung
ldap:
# z. B.: [ldap://localhost:389, ldaps://localhost:636] (Array erforderlich)
# Mehrere Server werden der Reihe nach ausprobiert, bis eine Bindung oder Suche erfolgreich ist.
# erforderlich
servers: []
# tlsOptions: Node.js-TLS-Optionen für die sichere LDAP-Verbindung.
# Unterstützt Standard-TLS-Optionen wie `ca`, `rejectUnauthorized` usw.
# Siehe: https://nodejs.org/api/tls.html
# https://nodejs.org/api/tls.html#tlscreatesecurecontextoptions
# Beispiel:
# tlsOptions:
# rejectUnauthorized: true
# ca: [/app/certs/ca.pem]
# optional
tlsOptions:
# baseDN: Distinguished Name (z. B.: ou=people,dc=ldap,dc=sync-in,dc=com)
# Wird als Suchbasis für Benutzer und, wenn adminGroup ein CN ist, für Gruppen verwendet.
# erforderlich
baseDN: 'ou=people,dc=ldap,dc=sync-in,dc=com'
# Filter, z. B.: (acl=admin)
# Wird unverändert an den LDAP-Suchfilter angehängt (vertrauenswürdige Konfiguration).
# optional
filter:
# upnSuffix: AD-Domänensuffix, das mit `userPrincipalName` zum Erstellen von Anmeldenamen im UPN-Format verwendet wird (z. B.: user@`sync-in.com`)
# Wird nur verwendet, wenn login auf userPrincipalName gesetzt ist.
# optional
upnSuffix:
# netbiosName: NetBIOS-Domänenname, der mit `sAMAccountName` zum Erstellen veralteter Anmeldenamen verwendet wird (z. B.: `SYNC_IN`\user)
# Wird nur verwendet, wenn login auf sAMAccountName gesetzt ist.
# optional
netbiosName:
# serviceBindDN: Distinguished Name eines Dienstkontos für die Suche nach Benutzern und Gruppen.
# Wenn festgelegt, werden Suchen mit diesem Konto ausgeführt; die Benutzerbindung dient nur zur Passwortvalidierung.
# z. B.: cn=syncin,ou=services,dc=ldap,dc=sync-in,dc=com
# optional
serviceBindDN:
# serviceBindPassword: Passwort des Dienstkontos für die Suche nach Benutzern und Gruppen.
# optional
serviceBindPassword:
attributes:
# LDAP-Attribut, das dem in der Datenbank gespeicherten Anmeldenamen entspricht.
# Bei einer Dienstbindung wird damit der Benutzer gesucht und anschließend mit dem gefundenen DN gebunden.
# Ohne Dienstbindung wird damit der DN des Benutzers für die Bindung erstellt (außer bei AD: UPN/DOMAIN\\user).
# Wenn Sie mail auswählen, sollten die lokalen Anmeldenamen den E-Mail-Adressen der Benutzer entsprechen.
# z. B.: uid | cn | mail | sAMAccountName | userPrincipalName
# Standard: uid
login: uid
# Attribut zum Abrufen der E-Mail-Adresse des Benutzers
# E-Mail: `mail` oder `email`
# Standard: `mail`
email: mail
# Attribut zum Abrufen des Speicherkontingents des Benutzers in Byte.
# Wenn das Attribut fehlt, wird storageQuota des lokalen Kontos nicht aktualisiert.
# Wenn das Attribut null oder 0 ist, wird storageQuota des lokalen Kontos auf null (unbegrenzt) gesetzt.
# Standard: `storageQuota`
storageQuota: storageQuota
options:
# autoCreateUser: Bei der ersten erfolgreichen LDAP-Authentifizierung automatisch einen lokalen Benutzer erstellen.
# Das lokale Konto wird aus LDAP-Attributen erstellt:
# - login: aus dem konfigurierten LDAP-Anmeldeattribut (z. B.: uid, cn, sAMAccountName, userPrincipalName)
# - email: aus dem konfigurierten E-Mail-Attribut (erforderlich)
# - firstName / lastName: aus givenName+sn, displayName oder cn (Fallback)
# Wenn deaktiviert, können sich nur vorhandene Benutzer über LDAP authentifizieren.
# Standard: true
autoCreateUser: true
# autoCreatePermissions: Berechtigungen für automatisch über LDAP erstellte Benutzer.
# Wird nur bei der Benutzererstellung angewendet, wenn autoCreateUser aktiviert ist.
# Hat keine Auswirkung auf vorhandene Benutzer.
# Eine vollständige Liste der Berechtigungen finden Sie in der Dokumentation: https://sync-in.com/docs/admin-guide/permissions
# z. B.: [personal_space, spaces_access] (Array erforderlich)
# Standard: []
autoCreatePermissions: []
# adminGroup: LDAP-Gruppe, die Sync-in-Administratorrechte gewährt.
# Akzeptiert entweder einen einfachen CN (z. B.: "Admins") oder einen vollständigen DN (z. B.: "CN=Admins,OU=Groups,DC=ldap,DC=sync-in,DC=com").
# Wenn festgelegt, erhalten Benutzer die Administratorrolle, deren LDAP-Attribut `memberOf` diesen CN enthält oder deren Gruppen-DN übereinstimmt.
# Wenn `memberOf` fehlt, kann Sync-in die Mitgliedschaft auch durch eine Suche nach `groupOfNames`-Gruppen prüfen.
# Wenn Benutzer `groupOfNames` nicht lesen können, verwenden Sie für diese Suche ein Dienstbindungskonto.
# Wenn nicht festgelegt, behalten vorhandene Administratoren ihre Rolle und können nicht über LDAP herabgestuft werden.
# optional
adminGroup:
# enablePasswordAuthFallback: Lokale Passwortauthentifizierung für Standardbenutzer zulassen, wenn der LDAP-Dienst nicht verfügbar ist.
# Wenn aktiviert, können sich Standardbenutzer bei Nichtverfügbarkeit des LDAP-Dienstes mit ihrem lokalen Passwort authentifizieren.
# Für Administratoren immer zulässig (Notfallzugriff).
# Für Administratorkonten sollte ein lokales Sync-in-Passwort konfiguriert und für den Notfallzugriff verfügbar gehalten werden.
# Standard: false
enablePasswordAuthFallback: false
oidc:
# issuerUrl: URL des Discovery-Endpunkts des OIDC-Anbieters
# z. B.:
# - Keycloak: https://auth.example.com/realms/my-realm
# - Authentik: https://auth.example.com/application/o/my-app/
# - Google: https://accounts.google.com
# - Microsoft: https://login.microsoftonline.com/<tenant-id>/v2.0
# Der Server erkennt die Autorisierungs-, Token- und UserInfo-Endpunkte automatisch.
# erforderlich
issuerUrl:
# clientId: Vom OIDC-Anbieter erhaltene OAuth-2.0-Client-ID
# erforderlich
clientId:
# clientSecret: Vom OIDC-Anbieter erhaltenes OAuth-2.0-Client-Geheimnis
# erforderlich
clientSecret: 'changeOIDCClientSecret'
# redirectUri: Callback-URL, zu der Benutzer nach der Authentifizierung weitergeleitet werden
# Diese URL muss beim OIDC-Anbieter als zulässige Umleitungs-URI registriert sein
# z. B. (API-Callback): https://sync-in.domain.com/api/auth/oidc/callback
#
# Für die Authentifizierung über die Desktop-Anwendung müssen beim OIDC-Anbieter auch die folgenden Umleitungs-URLs registriert sein:
# - http://127.0.0.1:49152/oidc/callback
# - http://127.0.0.1:49153/oidc/callback
# - http://127.0.0.1:49154/oidc/callback
#
# Wenn der OIDC-Anbieter Platzhalter oder reguläre Ausdrücke unterstützt, können Sie stattdessen einen einzelnen Eintrag registrieren, zum Beispiel:
# - http://127.0.0.1/*
#
# erforderlich
redirectUri: 'https://sync-in.domain.com/api/auth/oidc/callback'
options:
# autoCreateUser: Bei der ersten erfolgreichen OIDC-Anmeldung automatisch ein lokales Benutzerkonto erstellen.
# Wenn aktiviert, wird der `login` aus OIDC-Claims abgeleitet: zuerst preferred_username, dann der lokale Teil der E-Mail-Adresse und als letzter Fallback `sub`.
# Wenn deaktiviert, können sich nur vorhandene Benutzer über OIDC authentifizieren.
# Standard: true
autoCreateUser: true
# autoCreatePermissions: Berechtigungen für automatisch über OIDC erstellte Benutzer.
# Wird nur bei der Benutzererstellung angewendet, wenn autoCreateUser aktiviert ist.
# Diese Option hat keine Auswirkung auf vorhandene Benutzer.
# Eine vollständige Liste der Berechtigungen finden Sie in der Dokumentation: https://sync-in.com/docs/admin-guide/permissions
# z. B.: [personal_space, spaces_access] (Array erforderlich)
# Standard: []
autoCreatePermissions: []
# storageQuotaClaim: OIDC-Claim zum Abrufen des Speicherkontingents des Benutzers in Byte.
# Wenn der Claim fehlt, wird storageQuota des lokalen Kontos nicht aktualisiert.
# Wenn der Claim null oder 0 ist, wird storageQuota des lokalen Kontos auf null (unbegrenzt) gesetzt.
# Standard: `storageQuota`
storageQuotaClaim: storageQuota
# adminRoleOrGroup: Name der Rolle oder Gruppe, die Sync-in-Administratorzugriff gewährt
# Benutzer mit diesem Wert erhalten Administratorrechte.
# Der Wert wird mit den vom IdP bereitgestellten Claims `roles` oder `groups` abgeglichen.
# Hinweis: Je nach Anbieter (z. B. Keycloak) werden Rollen oder Gruppen möglicherweise nur in Token bereitgestellt
# und benötigen passende IdP-Mapper, damit sie im ID-Token oder in der UserInfo-Antwort enthalten sind.
# optional
adminRoleOrGroup:
# enablePasswordAuth: Lokale Passwortauthentifizierung bei Verwendung von OIDC zulassen.
# Wenn aktiviert, können sich Benutzer anstelle von OIDC mit ihrem Sync-in-Passwort authentifizieren.
# Die Sync-in-MFA gilt für diesen lokalen Passwortablauf.
# Bei OIDC-Anmeldungen setzt der Identitätsanbieter die MFA-/SSO-Richtlinien durch.
# Die lokale Passwortauthentifizierung ist immer zulässig für:
# - Gäste
# - Administratoren (Notfallzugriff)
# - Anwendungskennwörter
# Für diesen lokalen Anmeldeablauf sind Standardbenutzer nur zugelassen, wenn diese Option aktiviert ist und sie ihr lokales Sync-in-Passwort kennen.
# Über OIDC erstellte Benutzer können in ihrem Profil ein bekanntes lokales Passwort festlegen, während sie über OIDC authentifiziert sind.
# Dieses lokale Passwort ist auch erforderlich, um Sync-in 2FA in einer OIDC-Browsersitzung zu aktivieren, zurückzusetzen oder zu deaktivieren.
# Für Administratorkonten sollte ein lokales Sync-in-Passwort konfiguriert und für den Notfallzugriff verfügbar gehalten werden.
# Standard: false
enablePasswordAuth: false
# autoSyncAvatar: Benutzeravatar automatisch aus dem OIDC-Claim `picture` herunterladen und synchronisieren.
# Standard: false
autoSyncAvatar: false
# autoRedirect: Benutzer automatisch zum OIDC-Anmeldeablauf weiterleiten.
# Wenn aktiviert, wird die Anmeldeseite übersprungen und Benutzer werden direkt zum OIDC-Anbieter weitergeleitet.
# Standard: false
autoRedirect: false
# buttonText: Auf der OIDC-Anmeldeschaltfläche angezeigter Text.
# Standard: Continue with OpenID Connect
buttonText: 'Continue with OpenID Connect'
security:
# scope: Anzufordernde OAuth-2.0-Scopes (durch Leerzeichen getrennte Zeichenfolge)
# Gängige Scopes: openid (erforderlich), email, profile, groups, roles
# Standard: `openid email profile`
scope: 'openid email profile'
# supportPKCE: PKCE (Proof Key for Code Exchange) im Autorisierungscode-Ablauf aktivieren.
# Bei true wird PKCE verwendet, sofern der OIDC-Anbieter es unterstützt.
# Standard: true
supportPKCE: true
# allowInsecureRequests: OIDC-Discovery- und Token-Anfragen über unsicheres HTTP zulassen.
# Nur für die lokale Entwicklung oder vertrauenswürdige Legacy-Anbieter auf true setzen.
# Standard: false
allowInsecureRequests: false
# Am Token-Endpunkt verwendete OAuth-2.0-/OIDC-Clientauthentifizierungsmethode.
# Mögliche Werte:
# - client_secret_basic (STANDARD): HTTP-Basisauthentifizierung mit client_id und client_secret.
# Empfohlen für vertrauliche Backend-Clients.
# - client_secret_post: client_id und client_secret werden im Anfragekörper gesendet.
# Standard: `client_secret_basic`
tokenEndpointAuthMethod: client_secret_basic
# tokenSigningAlg: Algorithmus zur Prüfung der Signatur der vom OpenID-Connect-Anbieter zurückgegebenen ID-Token (JWT).
# Gängige Werte: RS256, RS384, RS512, ES256, ES384, ES512
# Standard: `RS256`
tokenSigningAlg: RS256
# userInfoSigningAlg: Algorithmus zum Anfordern einer signierten UserInfo-Antwort vom OpenID-Connect-Anbieter.
# Wenn nicht festgelegt, gibt der UserInfo-Endpunkt eine nicht signierte Standard-JSON-Antwort zurück. Dies ist die gängigste und empfohlene Konfiguration.
# Gängige Werte: (leer), RS256, RS384, RS512, ES256, ES384, ES512
# Standard: leer
userInfoSigningAlg:
# skipSubjectCheck: Prüfung deaktivieren, ob der vom UserInfo-Endpunkt zurückgegebene Claim `sub`
# mit dem Claim `sub` des ID-Token übereinstimmt.
# Nur für nicht konforme oder veraltete OIDC-Anbieter auf true setzen.
# Standard: false
skipSubjectCheck: false
# requireVerifiedEmail: Vom OIDC-Anbieter verlangen, Profil-E-Mail-Adressen vor der Kontoverknüpfung oder Profilsynchronisierung als verifiziert zu kennzeichnen.
# Empfohlen, wenn der Anbieter einen zuverlässigen Claim `email_verified` bereitstellt.
# Einige Anbieter lassen diesen Claim aus, sofern keine bestimmten Scopes oder Mapper konfiguriert sind.
# Standard: true
requireVerifiedEmail: true
# allowPrivateIpAvatarDownload: OIDC-Avatar-Downloads aus privaten oder internen IP-Bereichen zulassen.
# Nur auf true setzen, wenn der OIDC-Anbieter vertrauenswürdige interne Avatar-URLs zurückgibt.
# Standard: false
allowPrivateIpAvatarDownload: false
applications:
users:
# showUngroupedUsers: Benutzer ohne Gruppe global für Standardbenutzer und Administratoren sichtbar machen.
# Gastkonten sind von dieser globalen Sichtbarkeit ausgeschlossen, sowohl als aufgelistete Konten als auch als Anfragende.
# Standard: `true`
showUngroupedUsers: true
files:
# erforderlich
dataPath: '/home/sync-in-data'
# maxUploadSize: Maximale Größe einer durch Uploads, WebDAV, Synchronisierung, Remote-Downloads oder Editor-Callbacks empfangenen Datei in Byte.
# Standard: 5368709120 (5 GB)
maxUploadSize: 5368709120
contentIndexing:
# Indizierung von Dateiinhalten für die Suche aktivieren (eine Deaktivierung schaltet die Volltextsuche aus)
# Standard: true
enabled: true
ocr:
# OCR für PDF-Dateien aktivieren
# Standard: true
enabled: true
# Von tesseract.js verwendete OCR-Sprachen
# Unterstützt dreibuchstabige ISO-639-2/T-Codes: 'eng', 'spa', 'fra', 'deu' usw.
# Beispiele: `[eng,fra]`, `[fra]`
# Standard: [eng]
languages: [eng]
# Offline-Modus: Keine OCR-Sprachen herunterladen, sondern nur lokale Sprachdateien aus dem integrierten OCR-Ordner verwenden
# Zum Herunterladen von Sprachen dieses Schema verwenden: https://cdn.jsdelivr.net/npm/@tesseract.js-data/<lang>@1.0.0/4.0.0_best_int/<lang>.traineddata.gz
# Standard: false
offline: false
# Pfad zu lokalen OCR-Sprachdateien
# Wird verwendet, wenn der Offline-Modus aktiviert ist oder um den Standardspeicherort zu überschreiben
# Standard: integriertes OCR-Verzeichnis
languagesPath:
# Aufbewahrungsdauer des Papierkorbs in Tagen. Legen Sie jeden Wert auf eine Anzahl von Tagen fest, um die automatische Papierkorbbereinigung zu aktivieren.
# Auf `false` oder `0` setzen, um die Bereinigung für den jeweiligen Speichertyp zu deaktivieren.
# Standard: users/spaces false
trashRetention:
users: false
spaces: false
# Optionale Dokumentgruppen, die im Dialog "Neues Dokument" angezeigt werden.
# Optionen: `microsoft` | `opendocument` | `drawio`
# [] verwenden, um nur Text, Markdown und Andere anzuzeigen
# Standard: [opendocument, microsoft, drawio]
sampleDocuments: [opendocument, microsoft, drawio]
editors:
onlyoffice:
# OnlyOffice-Integration aktivieren
# Standard: false
enabled: false
# Für JWT-Token verwendetes Geheimnis. Es muss mit dem auf dem OnlyOffice-Server konfigurierten Geheimnis übereinstimmen.
# erforderlich
secret:
# Wenn kein externer Server konfiguriert ist, wird der lokale Nginx-Dienst der Docker-Compose-Konfiguration verwendet.
# Wenn ein externer Server konfiguriert ist, wird stattdessen dieser verwendet.
# Hinweis: Stellen Sie bei Verwendung eines externen Servers (z. B.: https://onlyoffice.domain.com) sicher, dass er vom Client oder Browser erreichbar ist.
# Standard: null
externalServer:
# Bei Verwendung von HTTPS auf `true` setzen.
# Standard: false
verifySSL: false
eurooffice:
# Euro-Office-Integration aktivieren
# Standard: false
enabled: false
# Für JWT-Token verwendetes Geheimnis. Es muss mit dem auf dem Euro-Office-Server konfigurierten Geheimnis übereinstimmen.
# erforderlich
secret:
# Wenn ein externer Server konfiguriert ist, wird dieser verwendet.
# Hinweis: Stellen Sie sicher, dass er vom Client oder Browser erreichbar ist.
# Standard: null
externalServer:
# Bei Verwendung von HTTPS auf `true` setzen.
# Standard: false
verifySSL: false
collabora:
# Collabora-Online-Integration aktivieren
# Standard: false
enabled: false
# Wenn kein externer Server konfiguriert ist, wird der lokale Nginx-Dienst der Docker-Compose-Konfiguration verwendet.
# Wenn ein externer Server konfiguriert ist, wird stattdessen dieser verwendet.
# Hinweis: Stellen Sie bei Verwendung eines externen Servers (z. B.: https://collabora.domain.com) sicher, dass er vom Client oder Browser erreichbar ist.
# Standard: null
externalServer:
drawio:
# draw.io-Integration aktivieren
# Standard: false
enabled: false
# Wenn nicht festgelegt, wird der lokale Docker-Compose-Dienst über Nginx verwendet.
# Wenn festgelegt, wird stattdessen diese externe URL verwendet; sie muss vom Client oder Browser erreichbar sein.
# Für einen externen draw.io-Server einen eigenen Ursprung verwenden.
# Beispiel: https://drawio.domain.com
# Standard: null
externalServer:
# Konfiguration des Client-Anwendungs-Repositorys (Anwendungsebene, nicht applications.files)
appStore:
# Repository: `public` | `local`
# Standard: `public`
repository: public