> ## Content Index
> Fetch the complete content index at: https://sakis.tech/llms.txt
> Use this file to discover other available public pages before exploring further.

# Syncthing einrichten: Ordner-Sync ohne Cloud per Docker
- URL: https://sakis.tech/syncthing-einrichten-docker-compose/
- Published: 2026-09-27T10:46:51.000Z
- Updated: 2026-09-27T10:46:51.000Z
- Description: Dropbox ohne Dropbox: Syncthing hält Ordner auf PC, Server und Handy gleich, ohne Konto und ohne Server in der Mitte. Als Container aufsetzen, Geräte koppeln, Ordner teilen, Versionierung an.
- Author: Sakis
- Tags: homelab, docker

Null Konten. Das ist die Zahl, an der sich Syncthing von Dropbox, Google Drive und OneDrive unterscheidet. Bei denen legst du ein Konto an, lädst deine Dateien auf einen Server des Anbieters, und der verteilt sie an deine Geräte. Bei Syncthing gibt es diesen Server in der Mitte nicht. Dein PC redet direkt mit deinem Homelab-Server, der mit deinem Handy, und was dabei über die Leitung geht, ist verschlüsselt und bleibt im Normalfall in deinem Netz. Niemand zählt Gigabyte, niemand kann das Konto sperren, weil es keins gibt.

Der Preis dafür: Die Kopplung machst du selbst. Jedes Gerät hat eine Kennung, und zwei Geräte reden erst miteinander, wenn beide die Kennung des anderen kennen. Genau an dieser Stelle bleiben Einsteiger hängen, weil die offizielle Doku sie auf drei Seiten verteilt. Hier steht sie am Stück: Syncthing als Container auf dem Server, ein PC als zweites Gerät, ein Ordner, der auf beiden Seiten gleich bleibt.

**Kurz gesagt:** Am Ende läuft Syncthing als Docker-Container auf deinem Server, dein PC ist als Gerät gekoppelt, ein Ordner gleicht sich in beide Richtungen ab, die Weboberfläche hat ein Passwort und der Ordner eine Versionierung, weil Sync kein Backup ist. Dauer: rund 30 Minuten. Stufe: Standard, Docker und Kommandozeile im Groben bekannt, alles Weitere wird erklärt. Stand: Syncthing 2.1.5, geprüft am 27-09-2026.

![Schaubild: Syncthing in drei Schritten: Container mit compose.yaml im Host-Netz starten, Geräte über die Kennung koppeln und auf dem Server bestätigen, Ordner am PC freigeben und am Server annehmen, dazu Dateiversionierung](https://sakis.tech/content/images/2026/09/grafik-40.png)

Der ganze Weg auf einen Blick: Container starten, Geräte koppeln, Ordner teilen.

## Was Syncthing ist, und was es nicht ist

Syncthing ist ein Programm, das auf jedem deiner Geräte läuft und dafür sorgt, dass ein Ordner überall denselben Inhalt hat. Änderst du eine Datei am PC, landet die Änderung auf dem Server und von dort auf dem Handy. Löschst du sie, ist sie überall weg. Es gibt keine zentrale Kopie, jedes Gerät hält seine eigene, und die Geräte gleichen sich untereinander ab. Ein Server im Homelab ist dabei nur das Gerät, das immer an ist: Wenn PC und Handy nie gleichzeitig laufen, trägt er die Änderungen dazwischen.

**Gerätekennung?** Jedes Syncthing-Gerät erzeugt beim ersten Start ein eigenes Zertifikat, den Ausweis, mit dem es sich gegenüber anderen Geräten ausweist. Die Gerätekennung (Device ID) ist der Fingerabdruck dieses Ausweises, 56 Zeichen in acht Blöcken wie `MFZWI3D-BONSGYC-…`. Sie ist kein Geheimnis, du darfst sie herumzeigen; ohne den privaten Schlüssel dahinter kann niemand etwas damit anfangen. Geheim ist die Datei `key.pem` im Konfigurationsordner.

PC→ Port 22000, verschlüsselt →Syncthing im Homelab→ Port 22000, verschlüsselt →Handy

Was Syncthing nicht ist, sagt die FAQ des Projekts selbst, und ich zitiere das, weil es die Frage ist, die im Forum am häufigsten falsch beantwortet wird: „No. Syncthing is not a great backup application because all changes to your files (modifications, deletions, etc.) will be propagated to all your devices." Ein versehentliches Löschen am Handy kommt zuverlässig auf dem Server an. Was dagegen hilft, ist die Dateiversionierung, und die stellen wir am Ende ein.

Zwei Dinge zur Lage der Apps, damit du sie nicht erst im Store suchst. Die offizielle Android-App gibt es nicht mehr: Simon Frei aus dem Kernteam hat sie im Oktober 2024 im Forum abgekündigt, mit der Begründung, Google mache das Veröffentlichen im Play Store „something between hard and impossible", die letzte Version kam im Dezember 2024\. Übernommen hat ein einzelner Entwickler mit **Syncthing-Fork**, das es auf F-Droid und im Play Store gibt; die Fork-Version 2.1.5.0 vom 11-09-2026 hält mit dem Kern Schritt. Dass ein Projekt dieser Größe auf Android an einer Person hängt, sagt mehr über die Stores als über Syncthing, und ich gönne ihm jeden Stern. Für iOS gibt es nichts Offizielles und laut FAQ auch keine Pläne; sie nennt die quelloffene App Sushitrain und die kostenpflichtige Möbius Sync.

Und wer eine Cloud mit Weboberfläche, Kalender und Freigabe-Links will, ist bei [Nextcloud](https://sakis.tech/nextcloud-docker-compose-installieren/) richtig. Syncthing macht eine Sache: Ordner gleich halten. Dafür macht es sie ohne Datenbank, ohne PHP und ohne vier Container.

## Was du brauchst

- Einen Linux-Rechner mit Docker und Compose, der durchläuft. Prüfen: `docker compose version` muss eine Versionsnummer ausgeben. Fehlt Docker, steht die Installation in der [Compose-Anleitung für Einsteiger](https://sakis.tech/docker-compose-grundlagen-fuer-einsteiger/), Schritt 1.
- Seine IP-Adresse im Heimnetz, und die sollte sich nicht ändern. `hostname -I` zeigt sie; fest machst du sie im Router, bei der FritzBox über „Diesem Netzwerkgerät immer die gleiche IPv4-Adresse zuweisen".
- Deine Benutzer-ID auf diesem Rechner. `id -u` gibt beim ersten angelegten Benutzer `1000` aus; steht da etwas anderes, trägst du das gleich in die Compose-Datei ein.
- Port 8384 und 22000 frei: `sudo ss -tulpn | grep -E ':(8384|22000) '` darf nichts ausgeben.
- Ein zweites Gerät. In dieser Anleitung ist es ein Windows-PC; ein Linux-Desktop oder ein Android-Handy geht genauso, dazu in Schritt 4 ein Absatz.

**So liest du diese Anleitung:** Alles, was du selbst tun sollst, steht in einem farbigen Kasten. **\[ per klick \]** heißt: Das erledigst du mit der Maus in einer Web-Oberfläche, hier der Weboberfläche von Syncthing im Browser, einmal die des Servers, einmal die des PCs. **\[ über die shell \]** heißt: Den Befehl kopieren, ins Terminal einfügen, Enter. Stehen beide Kästen direkt untereinander, führen sie zum selben Ergebnis. Du gehst EINEN davon, nicht beide.

Alle Befehle und Klicks rechnen mit denselben Beispielwerten. Wo sie unten auftauchen, setzt du deine ein:

- IP-Adresse des Servers: `192.168.178.20`
- Ordner für die Compose-Datei: `~/syncthing` (das `~` steht für dein Home-Verzeichnis)
- Datenordner auf dem Server: `~/syncthing/data`, im Container `/var/syncthing`
- Benutzer-ID und Gruppen-ID auf dem Server: `1000` und `1000`
- Gerätename des Servers in Syncthing: `homelab-sync`; Gerätename des PCs: `buero-pc`
- Weboberfläche des Servers: `http://192.168.178.20:8384`; die des PCs: `http://127.0.0.1:8384`
- Benutzer für die Weboberfläche: `sakis`, Passwort `Ordnerkette-2026` als Platzhalter; du nimmst ein eigenes, langes
- Erster gemeinsamer Ordner: Bezeichnung `Dokumente`, am PC `C:\Users\sakis\Syncthing\Dokumente`, am Server `/var/syncthing/Dokumente`

## Schritt 1: Ordner und compose.yaml anlegen

Syncthing bekommt einen eigenen Ordner, darin die Compose-Datei und ein Unterordner `data`, in dem später Konfiguration und die synchronisierten Dateien liegen. Den Unterordner legst du selbst an, damit er dir gehört und nicht Root; warum das zählt, steht unter „Wo es klemmt".

Ordner anlegen und hineinwechseln:

```bash
mkdir -p ~/syncthing/data
cd ~/syncthing
```

Datei anlegen; `nano` ist ein Texteditor fürs Terminal:

```bash
nano compose.yaml
```

Inhalt einfügen, mit Strg+O und Enter speichern, mit Strg+X schließen. Die Einrückung mit zwei Leerzeichen gehört zur Datei:

```yaml
services:
  syncthing:
    image: syncthing/syncthing:2
    container_name: syncthing
    hostname: homelab-sync
    environment:
      - PUID=1000
      - PGID=1000
      - STGUIADDRESS=0.0.0.0:8384
    volumes:
      - ./data:/var/syncthing
    network_mode: host
    restart: unless-stopped
    healthcheck:
      test: curl -fkLsS -m 2 127.0.0.1:8384/rest/noauth/health | grep -o --color=never OK || exit 1
      interval: 1m
      timeout: 10s
      retries: 3
```

Prüfen, ob Compose die Datei versteht:

```bash
docker compose config --quiet && echo "Datei in Ordnung"
```

```text
Datei in Ordnung
```

Die Datei ist das Compose-Beispiel aus der Docker-Doku von Syncthing, an drei Stellen verändert, und die drei erkläre ich, weil sie die Entscheidungen dieser Anleitung sind. Sie ist im Sandkasten dieser Seite gelaufen, bevor sie hier steht.

- `**image: syncthing/syncthing:2**` statt `latest`. Das Projekt bietet den Tag `2` ausdrücklich an, um der Hauptversion zu folgen; damit bekommst du bei jedem `pull` die aktuelle 2.x, aber keine 3.0, die eines Tages wieder eine Datenbank-Migration mitbringt wie der Sprung von 1 auf 2.
- `**STGUIADDRESS=0.0.0.0:8384**` statt der leeren Variable aus dem Beispiel. Das offizielle Beispiel lässt die Variable leer, und dann lauscht die Weboberfläche laut README nur auf `127.0.0.1`, also nur auf dem Server selbst. Auf einem Rechner mit Bildschirm ist das die sichere Wahl. Auf einem Server im Keller heißt es, dass du die Oberfläche von deinem PC aus nie zu sehen bekommst. Ich öffne sie deshalb fürs Heimnetz, und das Erste, was in Schritt 3 passiert, ist ein Passwort.
- **`hostname: homelab-sync`**: Den Hostnamen des Containers zeigt Syncthing den anderen Geräten als Gerätename. Ohne die Zeile hieße dein Server nach einer zufälligen Container-Kennung.

Die Zeile, die auffällt, ist `network_mode: host`. Sie ist keine Änderung, sie steht so im Beispiel, und die Doku nennt sie „strongly recommended".

**network\_mode: host?** Normalerweise bekommt ein Container ein eigenes kleines Netz hinter Docker, mit einer Adresse wie `172.17.0.2`, und du bohrst mit `ports:` einzelne Löcher hinein. Im Host-Modus fällt diese Trennung weg: Der Container benutzt die Netzwerkkarte des Servers direkt, sieht dessen Adresse `192.168.178.20` und lauscht auf dessen Ports. Syncthing braucht das, weil es andere Geräte im Heimnetz per Rundruf findet, und diese Rundrufe kommen aus Dockers Privatnetz nicht heraus. Der Preis: Es gibt keine `ports:`\-Zeilen mehr, Syncthing entscheidet allein, worauf es lauscht, und eine Firewall auf dem Server gilt für den Container wirklich, anders als sonst bei Docker.

`PUID` und `PGID` sagen dem Container, unter welcher Benutzer- und Gruppen-ID Syncthing laufen soll; mit `1000` gehören alle Dateien, die es in `data` schreibt, dir und nicht Root. Hat `id -u` oben etwas anderes gezeigt, trägst du das hier ein. Der `healthcheck` fragt einmal pro Minute die Gesundheitsseite ab, die Syncthing ohne Anmeldung ausliefert, damit `docker compose ps` gleich „healthy" sagen kann.

## Schritt 2: Starten und prüfen

Der eine Befehl lädt das Image, ein kleines auf Alpine-Basis, und startet den Container im Hintergrund.

```bash
docker compose up -d
```

```text
 Image syncthing/syncthing:2 Pulling
 Image syncthing/syncthing:2 Pulled
 Container syncthing Creating
 Container syncthing Created
 Container syncthing Starting
 Container syncthing Started
```

Zwischen Pulling und Pulled läuft der Download-Fortschritt durch, ein paar Dutzend Zeilen. Kein Netz und kein Volume in der Ausgabe, weil beides in dieser Datei nicht vorkommt: Das Netz ist das des Servers, der Speicher ist dein Ordner. Dann die Frage, ob der Container auch gesund ist und nicht nur gestartet:

```bash
docker compose ps
```

```text
NAME        IMAGE                   COMMAND                  SERVICE     CREATED              STATUS                        PORTS
syncthing   syncthing/syncthing:2   "/bin/entrypoint.sh …"   syncthing   About a minute ago   Up About a minute (healthy)
```

Die Spalte `STATUS` zählt. Direkt nach dem Start steht dort `(health: starting)`, nach der ersten Minute `(healthy)`. Die Spalte `PORTS` bleibt leer, das ist im Host-Modus richtig so. Was Syncthing beim Start getan hat, zeigen die Logs:

```bash
docker compose logs --tail 20
```

Darin stehen unter anderem die Zeile `Calculated our device ID` mit der Kennung deines Servers und eine Zeile `GUI and API listening`, die den Port 8384 nennt. Dann der direkte Klopftest an die Gesundheitsseite:

```bash
curl -s http://127.0.0.1:8384/rest/noauth/health
```

```text
{
  "status": "OK"
}
```

Das war es schon mit der Installation, und ich gebe zu, dass mich ein Dienst, der nach einem Befehl gesund meldet, kurz misstrauisch macht. Hier ist es in Ordnung: Syncthing hat noch nichts zu tun, weil es noch kein anderes Gerät kennt. Die eigentliche Arbeit kommt jetzt, und sie passiert im Browser.

## Schritt 3: Weboberfläche öffnen und absichern

Die Oberfläche folgt der Sprache deines Browsers; ich nenne die deutschen Bezeichnungen und in Klammern die englischen, falls dein Browser Englisch meldet. Bis zum Ende dieses Schritts kann jeder im Heimnetz die Seite öffnen. Das dauert eine Minute, und so lange ist es mir egal; danach nicht mehr.

Im Browser `http://192.168.178.20:8384` öffnen (Stand Syncthing 2.1). Beim ersten Aufruf fragt ein Fenster **Übertragung von anonymen Nutzungsberichten erlauben?** (Allow Anonymous Usage Reporting?); mit **Ja** oder **Nein** antworten, das lässt sich später ändern. Danach warnt die Startseite in einem roten Kasten, dass die Oberfläche noch ohne Passwort erreichbar ist; der Knopf **Einstellungen** darin führt zum selben Reiter wie der Weg über Aktionen. Dann oben rechts **Aktionen** (Actions), dort **Einstellungen** (Settings), im Fenster den Reiter **GUI**. Bei **Benutzername für Zugang zur Benutzeroberfläche** (GUI Authentication User) `sakis` eintragen, bei **Passwort für Zugang zur Benutzeroberfläche** (GUI Authentication Password) dein Passwort. Unten **Speichern** (Save). Syncthing lädt die Oberfläche neu und zeigt die Anmeldeseite; dort mit `sakis` und dem Passwort anmelden.

![Die Startseite von Syncthing fragt beim ersten Aufruf, ob anonyme Nutzungsberichte erlaubt sind, mit den Knöpfen Yes und No.](https://sakis.tech/content/images/2026/09/labor-syncthing-einrichten-docker-compose-01-2026-09-27.png)

(1) Frage beim ersten Aufruf; (2) Mit Ja oder Nein antworten

![Der Reiter GUI in den Syncthing-Einstellungen mit dem Benutzernamen sakis und dem ausgefüllten Passwortfeld, unten der Knopf Save.](https://sakis.tech/content/images/2026/09/labor-syncthing-einrichten-docker-compose-02-2026-09-27.png)

(1) Reiter GUI; (2) Benutzername: sakis; (3) Speichern

![Die Anmeldeseite von Syncthing mit dem Benutzer sakis, dem ausgefüllten Passwortfeld und dem Knopf Log In.](https://sakis.tech/content/images/2026/09/labor-syncthing-einrichten-docker-compose-03-2026-09-27.png)

(1) Benutzer: sakis; (2) Anmelden

Erscheint die Anmeldeseite, ist die Tür zu. Im selben Reiter siehst du das Feld **Adresse der Benutzeroberfläche** (GUI Listen Address) mit dem Hinweis, dass es durch Startoptionen überschrieben wird; das ist unsere Variable `STGUIADDRESS`, und wer die Adresse ändern will, ändert sie in der Compose-Datei, nicht hier. Den Haken **HTTPS für Benutzeroberfläche verwenden** (Use HTTPS for GUI) lasse ich im Heimnetz aus, weil er nur ein selbst ausgestelltes Zertifikat bringt und der Browser dann bei jedem Aufruf warnt. Anders wäre das, sobald die Oberfläche von außen erreichbar ist, und das ist sie hier nicht.

Die Frage nach dem Nutzungsbericht ist echtes Opt-in: Ohne Ja wird nichts gesendet. Ich würde Ja sagen, weil das Projekt quelloffen ist und aus den Zahlen sieht, welche Versionen und Systeme noch im Einsatz sind, aber es ist deine Entscheidung, und Nein kostet dich nichts.

## Schritt 4: Syncthing auf dem PC installieren

Syncthing selbst ist auf jeder Plattform dasselbe Programm mit derselben Weboberfläche. Was sich unterscheidet, ist die Hülle, die es im Hintergrund startet. Für Windows empfiehlt die Download-Seite des Projekts zwei davon; ich nehme den Installer, weil er Autostart und Update in einem erledigt.

Auf [syncthing.net/downloads](https://syncthing.net/downloads/?ref=sakis.tech) im Abschnitt Windows den Link **Syncthing Windows Setup** öffnen, dort die aktuelle Datei nach dem Muster `syncthing-windows-amd64-v2.1.5.zip` laden, entpacken und den Installer starten. Die Vorgabe „nur für diesen Benutzer" lassen: Syncthing landet dann in deinem Benutzerprofil und startet bei jeder Anmeldung von selbst. Danach im Browser `http://127.0.0.1:8384` öffnen. Fragt Windows beim ersten Start, ob `syncthing.exe` im Netzwerk kommunizieren darf, für private Netzwerke zulassen. Die Frage nach dem Nutzungsbericht beantworten wie am Server.

Auf dem PC braucht die Oberfläche kein Passwort, weil sie nur unter `127.0.0.1` lauscht, also nur für den, der vor dem Rechner sitzt. Wer stattdessen einen Linux-Desktop koppelt, nimmt das Paket aus dem offiziellen apt-Repository; die vier Zeilen dafür stehen auf [apt.syncthing.net](https://apt.syncthing.net/?ref=sakis.tech), und danach startet `systemctl --user enable --now syncthing.service` den Dienst bei jeder Anmeldung. Auf Android installierst du Syncthing-Fork aus F-Droid oder dem Play Store; die App bringt eine eigene Oberfläche mit, die Kopplung läuft aber genauso wie unten, und den Dialog mit der Kennung kann sie als QR-Code einlesen.

## Schritt 5: Die Geräte koppeln

Jetzt der Teil, der in der Doku über drei Seiten geht. Das Prinzip: Der PC bekommt die Kennung des Servers, meldet sich damit, und der Server bestätigt. Erst dann reden beide. Zuerst die Kennung des Servers holen:

In der Oberfläche des Servers (`http://192.168.178.20:8384`) oben rechts **Aktionen**, dann **Eigene Kennung** (Show ID). Das Fenster zeigt die Kennung als Text und als QR-Code. Den Text markieren und kopieren, oder den Knopf **Kopieren** neben der Kennung drücken, der dasselbe mit einem Klick erledigt.

![Das Fenster Device Identification von homelab-sync zeigt die Gerätekennung als Text und QR-Code, daneben der Knopf Copy.](https://sakis.tech/content/images/2026/09/labor-syncthing-einrichten-docker-compose-04-2026-09-27.png)

(1) Kennung des Servers; (2) Kopieren

Dann am PC das Gerät eintragen. Weil beide im selben Netz sind und der Server im Host-Modus läuft, hat der PC ihn per Rundruf meist schon gesehen und bietet ihn an; die Kennung einzufügen ist der Weg, der immer geht:

In der Oberfläche des PCs (`http://127.0.0.1:8384`) unten rechts **Gerät hinzufügen** (Add Remote Device). Steht unter **Sie können auch eines dieser in der Nähe befindlichen Geräte auswählen** die Kennung des Servers, darauf klicken; sonst die kopierte Kennung ins Feld **Gerätekennung** (Device ID) einfügen. Bei **Gerätename** (Device Name) `homelab-sync` eintragen. Unten **Speichern**.

Der PC versucht ab jetzt, den Server zu erreichen, und der Server kennt den PC noch nicht. Deshalb bekommt der Server eine Anfrage, und die musst du annehmen:

Zurück in der Oberfläche des Servers. Oben erscheint nach wenigen Sekunden ein Hinweis **Gerät „buero-pc" (…) möchte sich verbinden. Gerät hinzufügen?** Dort auf **Gerät hinzufügen** (Add Device) klicken. Das Fenster ist schon ausgefüllt; bei **Gerätename** steht der Name des PCs, den du ändern kannst. **Speichern**.

Kommt der Hinweis nicht, lade die Seite einmal neu. Die Erfolgskontrolle steht auf beiden Seiten rechts unter **Externe Geräte** (Remote Devices): Der Eintrag des jeweils anderen Geräts wechselt von **Getrennt** auf **Verbunden** (Connected), und wenn du ihn aufklappst, steht bei Adresse eine `192.168.178.`\-Adresse mit Port 22000 und bei der Verbindung `tcp-client` oder `tcp-server`. Das ist der Moment, den ich bei Syncthing am liebsten mag: zwei Geräte, die sich ohne Konto, ohne Server und ohne Anmeldung gefunden haben, allein über einen Fingerabdruck. Kurz freuen, dann weiter, denn noch teilen sie nichts.

## Schritt 6: Den ersten Ordner teilen

Ein Ordner wird in Syncthing zweimal angelegt: einmal auf dem Gerät, das ihn anbietet, einmal auf dem, das ihn annimmt. Beide dürfen einen anderen Pfad haben, sie teilen nur die Ordnerkennung. Für den ersten Versuch nimm einen neuen, leeren Ordner und nicht deine echten Dokumente; die kommen dran, wenn du gesehen hast, wie es sich verhält.

Am PC im Explorer den Ordner `C:\Users\sakis\Syncthing\Dokumente` anlegen. Dann in der Oberfläche des PCs links oben **Ordner hinzufügen** (Add Folder). Bei **Ordnerbezeichnung** (Folder Label) `Dokumente` eintragen; die **Ordnerkennung** (Folder ID) darunter füllt Syncthing mit einer Zufallskennung, die bleibt so. Bei **Ordnerpfad** (Folder Path) `C:\Users\sakis\Syncthing\Dokumente`. Oben im Fenster auf den Reiter **Teilen** (Sharing) wechseln und den Haken bei **homelab-sync** setzen. Unten **Speichern**.

Der Server bekommt wieder eine Anfrage, diesmal für den Ordner, und beim Annehmen legst du fest, wo er auf dem Server liegen soll:

In der Oberfläche des Servers erscheint oben **buero-pc möchte den Ordner „Dokumente" (…) teilen.** Dort auf **Hinzufügen** (Add) klicken. Im Fenster ist die Ordnerkennung schon eingetragen; bei **Ordnerpfad** `/var/syncthing/Dokumente` eintragen. Steht dort ein Vorschlag mit `~`, ist das derselbe Ort, denn `~` ist im Container `/var/syncthing`. **Speichern**.

Der Ordner existiert auf dem Server noch nicht; Syncthing legt ihn an. Auf dem Server liegt er dann unter `~/syncthing/data/Dokumente`, weil `/var/syncthing` im Container dein `data`\-Ordner ist. Der Beweis ist eine Datei: Lege am PC in den Ordner eine Textdatei `hallo.txt`, warte ein paar Sekunden, dann auf dem Server:

```bash
ls -la ~/syncthing/data/Dokumente
```

```text
drwxr-xr-x 3 sakis sakis 4096 27. Sep 10:12 .
drwxr-xr-x 4 sakis sakis 4096 27. Sep 10:12 ..
drwxr-xr-x 2 sakis sakis 4096 27. Sep 10:12 .stfolder
-rw-r--r-- 1 sakis sakis   14 27. Sep 10:12 hallo.txt
```

Zwei Dinge in dieser Ausgabe: Die Datei gehört `sakis`, nicht Root, das ist `PUID` bei der Arbeit. Und der leere Ordner `.stfolder` ist die Markierung, an der Syncthing erkennt, dass dieser Ordner ihm gehört; wird sie gelöscht, hört Syncthing hier auf zu synchronisieren, statt versehentlich alles zu löschen. In den Oberflächen steht der Ordner jetzt auf beiden Seiten mit **Aktuell** (Up to Date). Ab hier ist jede Änderung auf einer Seite nach Sekunden auf der anderen.

## Was am Ende eingestellt ist

1. **Die Oberfläche des Servers hat ein Passwort, aber kein HTTPS.** Sie ist im ganzen Heimnetz erreichbar und aus dem Internet nicht, solange im Router keine Freigabe für 8384 steht, und die würde ich nie anlegen. Wer von unterwegs an die Oberfläche will, geht durch ein [VPN ins Heimnetz](https://sakis.tech/wg-easy-docker-compose/); für den Sync selbst braucht es das nicht, dazu Punkt 4.
2. **Der Ordner ist vom Typ „Senden & Empfangen".** Im Reiter **Erweitert** (Advanced) des Ordners gibt es außerdem **Nur senden** und **Nur empfangen**. Sie steuern, wer Änderungen verteilen darf, aber sie verhindern kein Löschen, das vom sendenden Gerät kommt. Die Versionierung ist der Schutz, der Typ ist Ordnung.
3. **Globale Gerätesuche und Weiterleitung sind an.** Der Server meldet alle 30 Sekunden per Rundruf ins Heimnetz, dass es ihn gibt, das ist die lokale Gerätesuche, die Schritt 5 so kurz gemacht hat. Zusätzlich meldet er Kennung und Port an die Discovery-Server des Projekts und darf über dessen Relais reden; so findet dich das Handy auch aus dem Mobilfunknetz, und die Daten bleiben laut Security-Seite auch über ein Relais Ende-zu-Ende verschlüsselt. Wer nur im Heimnetz synchronisiert, schaltet beides unter **Aktionen**, **Einstellungen**, Reiter **Verbindungen** (Connections) aus: **Globale Gerätesuche** (Global Discovery) und **Weiterleitung aktivieren** (Enable Relaying). Ich lasse beides an, weil das Handy von unterwegs der halbe Grund für Syncthing ist, und eine öffentliche Kennung verrät nichts, was ein Angreifer brauchen könnte.
4. **Updates kommen mit `pull`, nicht von selbst.** Der Tag `2` folgt der Hauptversion, also im Ordner `~/syncthing` einmal im Monat `docker compose pull` und `docker compose up -d`. Das Projekt liefert stabile Versionen laut apt-Seite meist am ersten Dienstag des Monats, und die Release Notes auf GitHub sind kurz genug, um sie vorher zu lesen.
5. **Das Backup ist ein Ordner, und die Identität liegt darin.** `~/syncthing/data/config` enthält `cert.pem` und `key.pem`, den Ausweis deines Servers; geht er verloren, hat der Server nach dem Neuaufbau eine neue Kennung, und du koppelst alle Geräte neu. Die synchronisierten Ordner daneben sind deine Dateien, und die Versionierung darin ist kein Ersatz für ein Backup an einem zweiten Ort. Ja, das ist derselbe Satz wie bei jeder Anleitung hier, und er gilt bei einem Programm, das Löschungen absichtlich verteilt, mehr als sonst.

**Der Ordner hat noch keine Versionierung, und das ändern wir jetzt.** Syncthing kann beim Überschreiben oder Löschen die alte Fassung in einen Unterordner `.stversions` legen. Das ist der Schutz vor dem versehentlichen Löschen am Handy, und ich stelle ihn auf dem Server ein, weil der immer läuft:

In der Oberfläche des Servers links den Ordner **Dokumente** aufklappen, unten rechts **Bearbeiten** (Edit), im Fenster den Reiter **Dateiversionierung** (File Versioning). Im Auswahlfeld **Einfache Dateiversionierung** (Simple File Versioning) wählen, bei **Versionen erhalten** (Keep Versions) `5` lassen, bei **Löschen nach** (Clean out after) `90` Tage eintragen. **Speichern**.

Fünf alte Fassungen je Datei, nach 90 Tagen räumt Syncthing sie weg. Die Vorgabe wäre 0 Tage, und 0 heißt hier „nie aufräumen"; für einen Ordner mit Fotos wächst `.stversions` dann so lange, bis die Platte voll ist. Die Versionen liegen unter `~/syncthing/data/Dokumente/.stversions`, als normale Dateien mit Zeitstempel im Namen.

## Wo es klemmt

**`Failed to create folder marker: mkdir /var/syncthing/Dokumente/.stfolder: permission denied`.** Der häufigste Treffer im Forum, und die Google-Vorschläge zu „syncthing docker" führen ihn direkt an. In einem Thread von November 2022 gehörte der Ordner `data` dem Benutzer mit ID 1000, ein darin liegender Unterordner aber Root, weil Docker ihn angelegt hatte, und Syncthing lief als 1000\. Genau deshalb legst du `data` in Schritt 1 selbst an. Ist es trotzdem passiert, nimmst du dir den ganzen Ordner zurück:

```bash
sudo chown -R 1000:1000 ~/syncthing/data
```

**Die Geräte sehen sich nicht.** Wenn du die Compose-Datei aus einer anderen Anleitung genommen hast, in der `ports:` statt `network_mode: host` steht, funktioniert die Oberfläche, aber die lokale Gerätesuche schweigt, weil die Rundrufe Dockers Privatnetz nicht verlassen. Ein Forumsmitglied hat das im August 2025 als eigene Warnung gepostet: „discovery won't work if you use Docker's standard NAT/port mapping; you'll need to use host networking". Die Datei oben hat das schon richtig; wer beim Bridge-Modus bleiben muss, trägt laut Firewall-Doku die Adresse des Servers am PC von Hand ein, als `tcp://192.168.178.20:22000` im Feld Adressen des Geräts.

**Die Geräte sehen sich nicht, und die Datei ist richtig.** Dann ist es meist die Firewall auf dem Server. Im Host-Modus gilt sie für den Container, und das ist der eine Fall, in dem Docker [deine ufw-Regeln nicht umgeht](https://sakis.tech/docker-ufw-ports-trotz-firewall-offen/). Syncthing braucht laut Doku 22000 TCP und UDP für den Abgleich und 21027 UDP für die Gerätesuche, dazu 8384 für die Oberfläche aus dem Heimnetz:

Erst nachsehen, ob ufw überhaupt aktiv ist; steht da `Status: inactive`, ist sie es nicht:

```bash
sudo ufw status
```

Ist sie aktiv, die Ports freigeben:

```bash
sudo ufw allow 22000/tcp
sudo ufw allow 22000/udp
sudo ufw allow 21027/udp
sudo ufw allow from 192.168.178.0/24 to any port 8384 proto tcp
```

**Der Hinweis „möchte sich verbinden" kommt nie.** Die Oberfläche des Servers zeigt ihn nur, wenn der PC den Server erreicht hat. Am PC unter **Externe Geräte** nachsehen, welche Adresse er probiert; steht dort nur `dynamic` und keine 192.168er-Adresse, sind es wieder Rundruf oder Firewall. Zur Not geht es auch andersherum: die Kennung des PCs am Server per **Gerät hinzufügen** eintragen, dann bestätigt der PC.

**Die Oberfläche ist plötzlich Englisch, obwohl gestern Deutsch.** Syncthing nimmt die Sprache aus dem Browser, nicht aus einer Einstellung. Ein anderer Browser oder ein Profil mit englischer Voreinstellung ändert sie. Die Bezeichnungen in dieser Anleitung stehen deshalb beide Male da.

Was du jetzt hast, ist der Teil von Dropbox, den man wirklich braucht, auf Hardware, die dir gehört, ohne dass jemand zwischen deinem PC und deinem Server sitzt. Welcher Ordner ist bei dir der erste, der aus der Cloud in Syncthing zieht, und an welchem Schritt hat die Kopplung gehakt? Schreib's in die Kommentare.

Wenn du jetzt weißt, wie zwei Geräte sich ohne Konto finden, ist die Frage, wie du den Server von unterwegs erreichst, ohne einen Port aufzumachen, die nächste; die beantwortet der Beitrag zu [wg-easy und WireGuard](https://sakis.tech/wg-easy-docker-compose/).

sakis@homelab:\~$ echo "bleib neugierig — und mach backups" 

## Quellen

- [Syncthing: README-Docker.md (Compose-Beispiel, PUID/PGID, STGUIADDRESS, Host-Netz, GUI-Sicherheit)](https://github.com/syncthing/syncthing/blob/main/README-Docker.md?ref=sakis.tech)
- [Syncthing Docs: Docker (Umgebungsvariablen, Discovery im Host-Modus)](https://docs.syncthing.net/users/docker.html?ref=sakis.tech)
- [Syncthing: Dockerfile (Vorgabe STGUIADDRESS=0.0.0.0:8384, Ports, Healthcheck)](https://github.com/syncthing/syncthing/blob/main/Dockerfile?ref=sakis.tech)
- [Docker Hub: syncthing/syncthing (Tags 2, 2.1, 2.1.5, latest)](https://hub.docker.com/r/syncthing/syncthing?ref=sakis.tech)
- [Syncthing v2.1.5: Release Notes (08-09-2026)](https://github.com/syncthing/syncthing/releases/tag/v2.1.5?ref=sakis.tech)
- [Syncthing v2.0.0: Release Notes (SQLite-Migration, kein Vorgabeordner mehr, Tag :2)](https://github.com/syncthing/syncthing/releases/tag/v2.0.0?ref=sakis.tech)
- [Syncthing Docs: Getting Started (Eigene Kennung, Gerät hinzufügen, Ordner teilen)](https://docs.syncthing.net/intro/getting-started.html?ref=sakis.tech)
- [Syncthing Docs: Device IDs (Aufbau der Gerätekennung)](https://docs.syncthing.net/dev/device-ids.html?ref=sakis.tech)
- [Syncthing Docs: Security Principles (lokale und globale Gerätesuche, Relais, Verschlüsselung)](https://docs.syncthing.net/users/security.html?ref=sakis.tech)
- [Syncthing Docs: FAQ (kein Backup, iOS, GUI von außen)](https://docs.syncthing.net/users/faq.html?ref=sakis.tech)
- [Syncthing Docs: File Versioning (Einfache Dateiversionierung, .stversions)](https://docs.syncthing.net/users/versioning.html?ref=sakis.tech)
- [Syncthing Docs: Folder Types](https://docs.syncthing.net/users/foldertypes.html?ref=sakis.tech)
- [Syncthing Docs: Firewall Setup (22000 TCP/UDP, 21027 UDP, feste Adressen)](https://docs.syncthing.net/users/firewall.html?ref=sakis.tech)
- [Syncthing Docs: GET /rest/noauth/health](https://docs.syncthing.net/rest/noauth-health-get.html?ref=sakis.tech)
- [Syncthing: deutsche Sprachdatei der Oberfläche (Bezeichnungen der Menüs und Felder)](https://github.com/syncthing/syncthing/blob/main/gui/default/assets/lang/lang-de.json?ref=sakis.tech)
- [Syncthing: Downloads (Syncthing Windows Setup, SyncTrayzor, macOS, apt)](https://syncthing.net/downloads/?ref=sakis.tech)
- [Syncthing Windows Setup (Installation pro Benutzer, Autostart)](https://github.com/Bill-Stewart/SyncthingWindowsSetup?ref=sakis.tech)
- [Syncthing: apt-Repository (Debian/Ubuntu, stable-v2)](https://apt.syncthing.net/?ref=sakis.tech)
- [Syncthing-Forum: Discontinuing syncthing-android (20-10-2024)](https://forum.syncthing.net/t/discontinuing-syncthing-android/23002?ref=sakis.tech)
- [F-Droid: Syncthing-Fork 2.1.5.0](https://f-droid.org/packages/com.github.catfriend1.syncthingfork/?ref=sakis.tech)
- [Syncthing-Forum: PSA, discovery and Syncthing in a container (01-08-2025)](https://forum.syncthing.net/t/psa-discovery-and-syncthing-in-a-container-use-docker-host-networking/24709?ref=sakis.tech)
- [Syncthing-Forum: Syncthing doesn't have permission to create folder (11-2022)](https://forum.syncthing.net/t/syncthing-doesnt-have-permission-to-create-folder/19302?ref=sakis.tech)