Zum Inhalt springen

Verwaltung09.10.20265 Minuten Lesezeit

Konfiguration

Mitra wird vollständig über Umgebungsvariablen konfiguriert. Es gibt keine Konfigurationsdatei, die du einbinden müsstest: Du setzt Variablen am Container, und Mitra liest sie beim Start. Jede Variable ist optional, und eine, die du nicht setzt, nutzt den unten aufgeführten Standardwert.

Mit Docker Compose kommen sie in den Block environment:

services:
mitra:
image: ghcr.io/a11delavar/mitra:latest
environment:
MITRA_URL: 'https://mitra.example.com'
MITRA_NAME: 'Family Calendar'

Eine .env-Datei oder Docker Secrets funktionieren genauso gut, wenn du Geheimnisse lieber aus der Compose-Datei heraushalten willst. Eine Änderung wird beim nächsten Start von Mitra wirksam:

Terminal window
docker compose up -d

Was auf dem Server eingerichtet werden muss

Section titled “Was auf dem Server eingerichtet werden muss”

Fast nichts. Nutzer fügen Mitra-Kalender, CalDAV, Apple Calendar, Kalenderabonnements, Notion und Tempo selbst in der App hinzu.

Zwei Dinge brauchen Zugangsdaten, die du zuerst bei jemand anderem registrierst: Google Calendar (MITRA_GOOGLE_*) und die Anmeldung (MITRA_OIDC_*).

Sobald Mitra von mehr als deinem eigenen Rechner erreichbar ist, stell es hinter einen Reverse Proxy wie Caddy, Traefik oder nginx und lass den Proxy HTTPS übernehmen. Mitra selbst spricht im Container reines HTTP. Manche Funktionen gehen nur über HTTPS:

  • Browser erlauben Erinnerungen und das Installieren der App nur auf https://-Adressen (und auf http://localhost).
  • Cookies der Anmeldung werden nur auf https:// als sicher markiert, und die meisten Identitätsanbieter bestehen auf einer https://-Weiterleitungsadresse.
  • Google Calendar verlangt eine https://-Weiterleitungsadresse.

Setz dann MITRA_URL auf die öffentliche Adresse.

Mit Caddy genügt das hier:

mitra.example.com {
reverse_proxy localhost:3000
}

Mit Traefik leitest du per Labels am Dienst zu Mitra:

services:
mitra:
image: ghcr.io/a11delavar/mitra:latest
restart: unless-stopped
volumes:
- ~/mitra:/app/data
labels:
- "traefik.enable=true"
- "traefik.http.routers.mitra.rule=Host(`mitra.example.com`)"
- "traefik.http.services.mitra.loadbalancer.server.port=3000"
environment:
MITRA_URL: 'https://mitra.example.com'

MITRA_URL ist die Adresse, die Leute im Browser eingeben, um Mitra zu erreichen, nicht die interne Adresse des Containers:

environment:
MITRA_URL: 'https://mitra.example.com'

Mitra baut daraus die Rückkehradressen für Google Calendar und die Anmeldung und markiert seine Cookies als sicher, wenn sie mit https:// beginnt. Du kannst sie weglassen, solange du Mitra auf http://localhost ausprobierst. Setz sie, sobald Mitra eine echte Adresse hat, und du musst sie setzen, um die Anmeldung einzuschalten.

MITRA_NAME ersetzt „Mitra“ in der Seitenleiste und im Browser-Tab:

environment:
MITRA_NAME: 'Family Calendar'

Ein Klick auf den Namen öffnet den Dialog Über, der die Version und den Commit zeigt, die du betreibst. Die installierte App behält Namen und Symbol „Mitra“, weil sie beim Bauen der App festgelegt werden.

VariableStandardBeschreibung
MITRA_URL(nicht gesetzt)Die öffentliche Adresse, unter der Leute Mitra erreichen, etwa https://mitra.example.com. Rückkehradressen für die Anmeldung und Google Calendar sowie ob Cookies sicher sind, stammen daraus. Optional, solange du Mitra auf localhost ausprobierst, erforderlich für die Anmeldung und empfohlen für Google Calendar und jeden öffentlichen Server.
MITRA_NAME(Mitra, in der Sprache jeder Person)Der Name in der Seitenleiste und im Browser-Tab. Die installierte App bleibt „Mitra“.
MITRA_PORT3000Der Port, auf dem der Server lauscht. Ändere mit Docker stattdessen die Host-Seite der Portzuordnung; setz diese Variable nur, wenn der Prozess selbst woanders lauschen muss. Der eingebaute Health-Check folgt ihr.
MITRA_LOG_LEVELinfoWie viel Mitra protokolliert: error, warn, info, debug oder trace. Jede Stufe enthält alles, was leiser ist.
MITRA_UPDATE_CHECK(an)Setz sie auf off (oder false, 0, no), um die Update-Prüfung auszuschalten.
VariableStandardBeschreibung
MITRA_VAPID_SUBJECTmailto:mitra@localhostDer Kontakt, den Push-Dienste für die Erinnerungen deines Servers sehen, meist eine mailto:-Adresse. Niemand, der Mitra nutzt, sieht ihn. Die Signaturschlüssel werden automatisch erzeugt, du musst also nichts weiter setzen.
VariableStandardBeschreibung
MITRA_PHOTON_URLhttps://photon.komoot.ioDer Photon-Geocoder hinter dem Ortsfeld. Richte sie auf deine eigene Photon-Instanz statt auf den öffentlichen Server von komoot.

Setz beide, damit Leute Google Calendar verbinden können. Wenn du nur die ID setzt, startet Mitra nicht.

VariableStandardBeschreibung
MITRA_GOOGLE_CLIENT_ID(nicht gesetzt)Die OAuth-Client-ID aus der Google Cloud Console.
MITRA_GOOGLE_CLIENT_SECRET(nicht gesetzt)Das OAuth-Client-Secret. Erforderlich, sobald MITRA_GOOGLE_CLIENT_ID gesetzt ist.

Wenn du MITRA_OIDC_ISSUER setzt, schaltet das die Anmeldung ein. Fehlen die dafür nötigen Variablen, weigert sich Mitra zu starten.

VariableStandardBeschreibung
MITRA_OIDC_ISSUER(nicht gesetzt)Die Issuer-URL deines OIDC-Anbieters. Erfordert MITRA_OIDC_CLIENT_ID und MITRA_URL.
MITRA_OIDC_CLIENT_ID(nicht gesetzt)Die bei deinem Anbieter registrierte Client-ID.
MITRA_OIDC_CLIENT_SECRET(nicht gesetzt)Das Client-Secret. Lass es für einen öffentlichen Client weg; Mitra nutzt immer PKCE.
MITRA_OIDC_SCOPESopenid profile emailDie Scopes, die Mitra anfordert, durch Leerzeichen getrennt. openid ist erforderlich; profile und email geben Mitra Namen und E-Mail-Adresse jeder Person.

Du setzt diese nicht auf einem Server. Der Build oder das Image setzt sie, oder sie sind für die Arbeit an Mitra selbst.

VariableGesetzt durchBeschreibung
MITRA_VERSIONBuildDie ins Image eingebaute Version.
MITRA_COMMITBuildDer ins Image eingebaute Commit.
MITRA_DEVEntwicklungBietet die Integration Demo an, eine Reihe von Beispielkalendern, während du an Mitra arbeitest.
NODE_ENVImageproduction im Container-Image.

Ein Server mit Anmeldung, Google Calendar und eigenem Geocoder:

services:
mitra:
image: ghcr.io/a11delavar/mitra:latest
restart: unless-stopped
ports:
- '3000:3000'
volumes:
- ~/mitra:/app/data
environment:
MITRA_URL: 'https://mitra.example.com'
MITRA_NAME: 'Family Calendar'
# Sign-in
MITRA_OIDC_ISSUER: 'https://auth.example.com'
MITRA_OIDC_CLIENT_ID: 'mitra'
MITRA_OIDC_CLIENT_SECRET: '…'
# Google Calendar
MITRA_GOOGLE_CLIENT_ID: '….apps.googleusercontent.com'
MITRA_GOOGLE_CLIENT_SECRET: '…'
# Your own geocoder
MITRA_PHOTON_URL: 'https://photon.internal.example.com'