Service-Mitglieder
Ein Server, den ein vollwertiges Mitglied veröffentlicht, erreicht dein Netz, sobald jemand in ihn einbricht. Ein Service-Mitglied veröffentlicht ihn stattdessen von außerhalb deines Netzes.
So funktioniert es #
Ein Service-Mitglied ist ein eigenes, unprivilegiertes juistd neben dem Dienst. Es veröffentlicht die Namen des Dienstes wie jedes Mitglied, aber kein Gerät nimmt Verbindungen an, die es öffnet. Nur seine Antworten kommen durch. Es legt auf dem Host kein Netzwerkgerät an.
Das Service-Mitglied beendet TLS selbst, mit einem Zertifikat von Let’s Encrypt. Es antwortet nur für die Namen, die es veröffentlicht, und für den Log-Abgleich. Eine weitere Rolle hat es nicht.
Du brauchst eine Domain und einen Ingress, wie sie
Dienste veröffentlichen
einrichtet. Das Beispiel veröffentlicht Immich als immich.example.org.
Einrichten #
juist invite immich --service immichDas nimmt ein neues Gerät namens immich als Service-Mitglied auf, das
immich.example.org veröffentlicht, und gibt den Link zum Beitreten aus.
Unter Docker kommt das Service-Mitglied in das Compose-Projekt von Immich. Leg
eine docker-compose.override.yml neben Immichs docker-compose.yml; Compose
liest beide. Sie macht Immichs Netz intern, damit das Service-Mitglied sein
einziger Weg hinein und hinaus ist, und entfernt den Port, den
immich-server veröffentlicht. Das Image baust du mit make image im
Quellbaum und lädst es mit docker load:
services:
immich-server:
ports: !reset []
juist:
image: juist:VERSION
command: ["--serve", "immich=immich-server:2283"]
environment:
JUIST_JOIN: "juist:…"
volumes:
- juist:/var/lib/juist
networks: [default, out]
restart: unless-stopped
networks:
default:
internal: true
driver_opts:
com.docker.network.bridge.gateway_mode_ipv4: isolated
out: {}
volumes:
juist: {}docker compose down && docker compose up -dDas down ist nötig: Ein bestehendes Netz ändert Compose nicht, womöglich
ohne es zu sagen. !reset braucht Compose 2.24 oder neuer.
Das Service-Mitglied tritt mit dem Link bei und ignoriert ihn danach. Wie der
Beitritt lief, zeigt docker compose logs juist, samt den Wörtern zum
Vergleichen, wenn die Einladung danach fragt.
Eine vollständige Compose-Datei mit einem Webdienst zum Ausprobieren, für Docker und Podman, liegt in examples/service-member.
Ohne Docker #
Ein Service-Mitglied ist ein juistd unter einem beliebigen Benutzer. Es braucht kein root:
juistd --home ~/immich-juist --serve immich=127.0.0.1:2283 --join 'juist:…'In --home liegen seine Schlüssel und das Log. Beim ersten Start tritt es mit
dem Link bei, danach ignoriert es ihn. Was es ausgibt, ist sein Log: Starte es
deshalb über deinen Dienstverwalter, etwa als systemd-Benutzer-Unit.
--serve @=web:80 veröffentlicht die Domain selbst.
Gut zu wissen #
- Der Dienst hat keinen Zugang ins Internet. Lädt er beim ersten Start oder beim ersten Gebrauch etwas herunter, erledige das vorher.
- Der isolierte Gateway-Modus von Docker 29 trennt den Dienst auch vom Host.
Ohne ihn erreicht der Dienst alles auf dem Host, was auf allen Adressen
lauscht. Podman kennt keinen Gateway-Modus: Dort entfallen die
driver_opts. --serve NAME=ADDR --http3bietet HTTP/3 an,--membersmacht den Namen zu einem Namen nur für Mitglieder, und--serve status=status-page:allbietet die Statusseite an.- Den CAA-Eintrag für seine Namen findest du in seinem Log (warum er wichtig ist).
juist revoke immich servicemacht es wieder zu einem gewöhnlichen Mitglied, mit einer Warnung. Ein womöglich kompromittiertes Gerät entfernst du stattdessen mitjuist remove.