Inhaltsverzeichnis
Wir erstellen auf dem UGREEN NAS einen Docker-Container. In diesem Docker-Container lassen wir einen Git-Server laufen, auf den wir per SSH von einem externen PC aus zugreifen und ein Repository klonen können.
Ausgangslage
Wir nutzen das UGREEN NAS mit dem UGOS Pro Betriebssystem. Weiterhin haben wir 2 Speicherpools angelegt:
- Speicherpool 1: Vier HDD-Festplatten in RAID 6
/volume1/ - Speicherpool 2: Zwei SSD-Festplatten in RAID 1
/volume2/
In Speicherpool 1 findet unsere Datensicherung statt. Auf den SSD-Festplatten installieren wir sämtliche Programme wie Docker.
Git soll also auf dem Speicherpool 2 auf den SSD-Festplatten laufen, wohingegen die Repositories im Speicherpool 1 unter /volume1/@home/git/ liegen sollen.
Schritt 1: Git-Adminbenutzer anlegen
Es ist leider ein klassisches NAS-„Feature“, dass du dich mit einem normalen Benutzerkonto nicht per ssh am NAS anmelden kannst. Aus Sicherheitsgründen entscheiden wir uns hier, ein eigenes Git-Adminkonto anzulegen und diesem nur die Verwendung von Git über ssh zu erlauben.
Lege also in den Einstellungen einen neuen Admin-Benutzer an und nenne ihn „git“. Alles weitere folgt dann in den nächsten Schritten.
Schritt 2: Docker auf dem UGREEN NAS installieren
Stelle sicher, dass Docker bereits auf deinem UGREEN NAS läuft. Falls nicht, findest du Docker im App Center und kannst es mit wenigen Klicks installieren.

Schritt 3: SSH auf der UGREEN NAS aktivieren
In der Systemsteuerung musst du nun unter Terminal SSH auf Port 22 aktivieren, damit du per Remote-Shell von Deinem PC aus auf die NAS zugreifen kannst.

Schritt 4: Neues Docker-Projekt anlegen
In meinem Fall habe ich eine SSD-Festplatte eingesetzt, auf der ich die Docker-Container laufen lassen möchte. Daher ist mein Zielpfad /volume2/docker/. Auf deinem System kann sich dieser Pfad unterscheiden.
Erstelle nun dein Docker-Projekt und verwende folgenden Speicherpfad:

Als Docker-Compose Setup verwende folgendes Skript. Wenn du Docker und Git auf dem selben Volume laufen lassen möchtest, musst du die hier nochmal dementsprechend anpassen:
services:
git-shell:
image: alpine:latest
container_name: git-shell
command: sleep infinity
tty: true
stdin_open: true
volumes:
- /volume2/docker/git-alpine:/git-alpine # Docker
- /volume1/@home/git/repositories:/git-repos # Git-Repos
ports:
- "2222:22"
restart: unless-stopped
Wichtig zu beachten: Das Image von alpine/git enthält nur Git, aber keine Shell-Kommandos wie sleep oder sh. Dies ist aber erforderlich, wenn du den Container dauerhaft laufen lassen möchtest. Mit der Option tty: true wird eine virutelle Konsole geöffnet und stdin_open: true ermöglicht es, dass der Container Eingaben akzeptiert.
Die Port-Angabe 2222:22 bedeutet, dass Verbindungen zum Port 2222 des Host-Systems an den SSH-Port 22 im Docker-Container weitergeleitet werden, während der Container weiterhin auf Port 22 für SSH-Verbindungen lauscht.
Anschließend läuft der Container und du kannst per Shell auf Git zugreifen.

Schritt 5: In Docker-Container einloggen und Git sowie OpenSSH installieren
Nun erstellst du ein Git-Repository innerhalb des Alpine-Docker-Containers auf deinem NAS:
1. Einloggen
Logge dich nun per SSH mit dem Git-Benutzer ein und gehe in das Verzeichnis, in dem die Docker-Compose-Datei liegt:
ssh [email protected]
cd /volume2/docker/git-alpine
Logge dich nun in den Docker-Container ein:
sudo docker exec -it git-shell /bin/sh
2. Git und OpenSSH installieren
Da es sich um ein schlankes Alpine-Image handelt, musst du Git sowie OpenSSH erst noch installieren:
apk update
apk add --no-cache git
apk add --no-cache openssh
In den nächsten Schritten zeige ich dir, wie du per SSH von einem externen Rechner aus auf das Repo zugreifen und es wie einen echten Git-Server nutzen kannst.
Schritt 6: Im Docker-Container Benutzer anlegen
Du musst jetzt im Docker-Container einen Benutzer mit dem Namen git anlegen. Dieser sollte die selbe UID des Git-Benutzers im Host-System (UGREEM-NAS) haben. Öffne ein neues Terminal und gib im Hostsystem folgendes ein:
git@DXP4800PLUS:~$ id -u git
Diese UID (in unserem Fall 1005) merkst du dir nun und legst den neuen Benutzer im Docker-Container wie folgt an und vergibst diesem Benutzer das selbe Passwort wie dem des Hostsystems:
adduser -D -u 1005 -G wheel git
passwd git
Schritt 7: SSH-Konfiguration im Container anpassen
Suche in der Datei /etc/ssh/sshd_config die folgenden Zeile und kommentiere sie als root ein:
vi /etc/ssh/sshd_config
PubkeyAuthentication yes
Wenn du Änderungen an der SSH-Konfiguration vorgenommen hast, starte den SSH-Daemon neu. Zuvor erstellst du aber noch einen Hostschlüssel:
ssh-keygen -A
/usr/sbin/sshd
Mit folgendem Befehl kannst du testen, ob der SSH-Dienst korrekt läuft:
ps aux | grep sshd
Schritt 8: Git-Repository anlegen
Wie anfangs erwähnt, soll das Git-Repository auf den HDD-Festplatten erstellt werden. Einen Git-Benutzer haben wir angelegt und das Verzeichnis /volume1/@home/git/repositories/ existiert bereits und ist im Docker-Container unter /git-repos/ gemountet.
Jetzt kannst du das Git-Repository im Verzeichnis /git-repo als Benutzer git erstellen:
su git
cd /git-repos
git init --bare mein-repo.git
Schritt 9: Git von Remote testen
Nun testen wir die Verbindung. Öffne ein Terminal auf deinem PC (in unserem Fall ein Linux-PC) und klone das Repository:
git clone ssh://[email protected]:2222/git-repos/mein-repo.git
Wichtig hierbei ist die Portangabe 2222 hinter dem Host. Du musst nun den Fingerprint mit yes bestätigen und dich mit deinem Passwort anmelden. Anschließend kannst du dein Git-Repository nutzen.
Solltest du ein Problem mit dem Fingerprint haben, kannst du den Eintrag mit folgender Zeile entfernen:
ssh-keygen -R [192.168.178.185]:2222
Optional: Einrichtung einer passwortlosen SSH-Verbindung mit Public/Private Key
Mit der vorherigen Anleitung musst du dich bei jedem Git-Befehl, den du an den Server schickst, mit einem Passwort authentifizieren. Stattdessen nutzen wir Public/Private Key Authentication. Dies erhöht nicht nur den Komfort, sondern auch die Sicherheit deiner Verbindung, da Passwörter vermieden werden.
Schritt 1: SSH-Schlüssel auf dem Host-System erstellen
Zuerst musst du ein SSH-Schlüsselpaar auf deinem Remote-PC erstellen. Dies kannst du mit dem folgenden Befehl tun:
ssh-keygen -t rsa -b 4096 -C "[email protected]"
- Du wirst nach einem Speicherort gefragt. Standardmäßig wird der Schlüssel unter
~/.ssh/id_rsagespeichert. Drücke einfach Enter, um diesen Standard zu verwenden. - Du kannst auch ein Passwort für den privaten Schlüssel festlegen. Wenn du keinen möchtest, lasse das Feld leer.
Schritt 2: Public Key in den Docker-Container kopieren
Nun musst du deinen Public Key in den Docker-Container übertragen, damit er zur Authentifizierung verwendet werden kann.
Zeige den Inhalt deines Public Keys auf deinem Remote-System an:
cat ~/.ssh/id_rsa.pub
Erstelle das .ssh-Verzeichnis im Home-Verzeichnis mit deinem git-Benutzer, falls es noch nicht existiert, und setze die richtigen Berechtigungen:
mkdir -p /home/git/.ssh
chmod 700 /home/git/.ssh
Füge nun deinen Public Key in die Datei authorized_keys wie folgt ein:
vi /home/git/.ssh/authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQC...
Prüfe, dass das Verzeichnis /home/git/.ssh auch wirklich dem Benutzer git gehört, sonst funktioniert es nicht. Falls du die Verzeichnis-Berechtigung ändern möchtest, kannst du das mit folgendem Befehl tun: chown -R git:wheel /home/git/.ssh
Schritt 3: SSH-Server neustarten
Falls der SSH-Server im Container bereits läuft, starte ihn als root neu, um sicherzustellen, dass die Änderungen an der authorized_keys-Datei wirksam werden:
/usr/sbin/sshd -t
/usr/sbin/sshd
Schritt 4: Passwortlose Verbindung testen
Jetzt kannst du die passwortlose SSH-Verbindung testen. Versuche, dich von deinem Host-System aus mit dem Docker-Container zu verbinden:
ssh [email protected] -p 2222
bzw. das Git-Repository klonen:
git clone ssh://[email protected]:2222/git-repos/mein-repo.git
Docker Image sichern
Normalerweise ist es bei Docker so, dass ein Container beim Neustart wieder auf den ursprünglichen Zustand des zugrunde liegenden Images zurückgesetzt wird. Deshalb empfiehlt es sich, eine Dockerfile anzulegen, in der alle Änderungen dokumentiert und bei Bedarf wiederhergestellt werden können.

Bei der Docker-Integration des UGREEN NAS ist es allerdings etwas anders: Zu jedem Container wird automatisch ein lokales Image erstellt. Wenn du also Änderungen innerhalb des Containers vornimmst – etwa Pakete installierst oder Konfigurationsdateien anpasst – werden diese direkt in diesem lokalen Image gespeichert. Dadurch bleiben deine Anpassungen auch nach einem Neustart des Containers erhalten.
Docker-Container oder -Image exportieren
Sobald du mit deiner Konfiguration zufrieden bist, solltest du dein Docker-Setup dennoch sichern – am besten durch einen Export. So kannst du bei Bedarf jederzeit darauf zurückgreifen oder es auf ein anderes NAS-System übertragen.
- Container exportieren
Öffne die Docker-App → Schnellzugriff → Container auswählen → Exportieren
→ Ergebnis: eine .json-Datei mit Containerkonfiguration (keine Daten oder Images) sowie eine .tar-Datei, die das Image enthält
Bitte beachte, dass nachdem du den Container aus einer json-Datei wiederhergestellt hast, du diesen Container keinem Projekt zuweisen kannst.
Häufig gestellte Fragen (FAQ)
Wie kann ich Git, SSH und andere Pakete im Docker-Container updaten?
Um Git, SSH und andere Pakete in deinem Docker-Container zu aktualisieren, ohne das Setup zu verlieren, kannst du die folgenden Schritte durchführen im Docker-Container ausführen:
# Paketlisten aktualisieren:
apk update
# Alle Pakete auf die neueste Version aktualisieren:
apk upgrade
# Einzelne Pakete aktualisieren:
apk add --no-cache git openssh
# Container neu starten (optional):
sudo docker restart git-shell
Nach einem Neustart des Container bekomme ich beim Auschecken die Meldung connection refused – Was kann ich tun?
Es kann sein, dass der SSH-Dienst nach einem Restart im Container nicht richtig läuft oder der Port ist nicht korrekt gemappt. Führe in Docker folgende Befehle als root aus:
# Prüfen ob der Prozess läuft, falls nicht...
ps aux | grep sshd
# SSH-Key generieren (nur beim ersten Mal notwendig):
ssh-keygen -A
# SSH-Dienst neustarten
/usr/sbin/sshd
Anschließend sollte wieder alles funktionieren.
Was kann ich tun, wenn ich auf meinem Remote-PC diese Warnung angezeigt bekomme: Remote Host Identification has changed.
Diese Warnung erscheint, weil sich der SSH-Host-Key auf dem Server geändert hat – z. B. nach einem Neustart des Containers oder wenn du den SSH-Dienst neu initialisiert hast (ssh-keygen -A). Dein System erkennt den neuen Key nicht und warnt dich vor einem möglichen Man-in-the-Middle-Angriff. Das ist eine normale Sicherheitsmaßnahme.
Lösung: Führe folgenden Befehl aus, um den veralteten Eintrag zu entfernen.
ssh-keygen -R [192.168.178.185]:2222
Jetzt kannst du dich neu verbinden und musst beim ersten Verbindungsaufbau den Fingerprint akzeptieren.
Fazit
Herzlichen Glückwunsch! Du hast nun erfolgreich einen schlanken und Ressourcen schonenden Git-Server auf deinem UGREEN NAS eingerichtet und kannst per SSH darauf zugreifen. Mit Docker hast du eine isolierte und saubere Umgebung für Git geschaffen, die sich leicht verwalten lässt. Jetzt kannst du deine Projekte sicher und effektiv versionieren, ohne dich mit unnötigen Installationen und Konfigurationen auseinanderzusetzen.
Optional kannst du auch eine passwortlose SSH-Verbindung einrichten, um den Zugang noch sicherer und bequemer zu gestalten. Wenn du weitere Anpassungen wünschst, gibt es noch viele Möglichkeiten, deinen Git-Server weiter zu optimieren und abzusichern.
Sobald UGREEN in seinem UGOS Pro bzw. App Center eine native Git-App bereitstellt, kannst du die Git-Repositories, die auf Volume2 liegen, damit dann einfach weiter nutzen und den Docker-Container löschen. Bis es soweit ist, hast du mit Docker eine stabile Git-Lösung.
