SFTPGo mit Docker Compose: Lokalen SFTP-Server samt Web-Admin sauber starten
Nicht jeder Docker-Fallback sollte noch ein weiterer Feed-Reader oder Log-Viewer sein. SFTPGo loest ein sehr konkretes Problem: Dateien kontrolliert austauschen, ohne gleich eine grosse Groupware oder ein komplettes NAS-Frontend aufzubauen. Du bekommst eine Web-Administration, SFTP-Zugriff und spaeter bei Bedarf auch HTTP, HTTPS, FTP/S oder WebDAV.
Der Stand fuer 22. April 2026 ist sauber genug fuer ein belastbares Tutorial. Das offizielle Projekt nennt weiterhin ein offizielles Docker-Image, die Docker-Doku dokumentiert die Persistenzpfade /srv/sftpgo und /var/lib/sftpgo sowie den Standard-UID/GID-Wert 1000, und auf GitHub ist v2.7.1 vom 13. Maerz 2026 als aktuellster Release markiert.
Was du am Ende hast
- SFTPGo lokal unter
http://127.0.0.1:8080/web/admin - Einen erreichbaren SFTP-Endpunkt auf
127.0.0.1:2022 - Persistente Daten- und Konfigurationsordner auf dem Host
- Pruefschritte mit
docker compose,curl, Logs und einem echtensftp-Login
Voraussetzungen
- Docker Engine und
docker composesind installiert - Die Ports
8080und2022sind lokal frei - Du arbeitest in einem neuen Ordner statt in einem alten Compose-Projekt
1. Arbeitsordner anlegen
Erst sauber anfangen, dann Dienste starten:
mkdir sftpgo-lab && cd sftpgo-lab
2. Persistenzordner vorbereiten
Die offizielle Docker-Doku unterscheidet klar zwischen zwei Host-Mounts:
/srv/sftpgofuer Nutzdaten und spaetere Benutzerverzeichnisse/var/lib/sftpgofuer den internen Arbeitsbereich, Host-Keys und Konfiguration
Lege beides lokal an:
mkdir data config
Weil das offizielle Image standardmaessig als UID/GID 1000 laeuft, sollten diese Ordner fuer diese Kennung beschreibbar sein:
sudo chown -R 1000:1000 data config
Wenn dein Docker-Setup ohnehin mit passender UID/GID arbeitet, kann dieser Schritt bereits passen. Fuer ein reproduzierbares Tutorial ist die explizite Besitzvergabe aber die sicherere Variante.
3. Compose-Datei erstellen
Ich binde die Ports bewusst nur an 127.0.0.1, damit der erste Start lokal bleibt. Das vermeidet unnötig offene Dienste auf allen Netzwerkschnittstellen.
sftpgo-lab/compose.yaml:
services:
sftpgo:
image: drakkan/sftpgo:v2.7.1
container_name: sftpgo
ports:
- "127.0.0.1:8080:8080"
- "127.0.0.1:2022:2022"
volumes:
- ./data:/srv/sftpgo
- ./config:/var/lib/sftpgo
restart: unless-stopped
Mehr braucht es fuer den lokalen Start nicht. Den ersten Admin legst du direkt in der Weboberflaeche an.
4. Stack starten
Jetzt Image ziehen und Container im Hintergrund hochfahren:
docker compose pull
docker compose up -d
Danach sollte die Admin-Oberflaeche hier reagieren:
http://127.0.0.1:8080/web/admin
5. Funktion direkt pruefen
Bevor du im Browser Benutzer anlegst, pruefe einmal den Zustand des Containers:
docker compose ps
docker compose logs --tail=100 sftpgo
curl -I http://127.0.0.1:8080/web/admin
Wenn curl einen erfolgreichen Status oder Redirect liefert und docker compose ps den Container als laufend zeigt, ist die erste sichtbare Haelfte des Setups bereits da.
6. Ersten Admin in der Weboberflaeche anlegen
Oeffne http://127.0.0.1:8080/web/admin. Laut offizieller Docker-Doku legst du dort den ersten Admin direkt beim ersten Aufruf an.
Nimm fuer den Start:
- einen eindeutigen Admin-Namen
- ein langes Passwort
- eine Mailadresse, falls du den Account spaeter sauber dokumentieren willst
Nach dem Speichern landest du im WebAdmin und kannst dort Benutzer, Ordner, Shares und Protokolle verwalten.
7. Testbenutzer fuer echten Datei-Transfer anlegen
Damit das Tutorial nicht bei einer leeren Admin-Seite endet, lege im WebAdmin gleich einen normalen Nutzer an, zum Beispiel demo.
Sinnvolle Minimalwerte:
- Username:
demo - Passwort: selbst setzen
- Home Dir: leer lassen oder auf den vorgeschlagenen Standardpfad gehen
- Status: aktiv
SFTPGo legt Benutzer standardmaessig unter /srv/sftpgo/data/<username> ab. Durch den Host-Mount landet das bei dir lokal unter sftpgo-lab/data/data/<username>.
8. SFTP wirklich testen
Jetzt pruefst du nicht nur die Weboberflaeche, sondern den eigentlichen Zweck des Projekts:
ssh-keyscan -p 2022 127.0.0.1
sftp -P 2022 [email protected]
Wenn der Login klappt, kannst du mit put und ls sofort einen echten Transfer pruefen. Genau das ist das sichtbare Endergebnis, das ein brauchbarer Compose-Artikel haben muss.
9. Warum SFTPGo als Compose-Projekt stark ist
Der praktische Wert liegt hier in der Kombination:
- SFTP fuer klassische Dateiuebergaben
- WebAdmin fuer Benutzer und Rechte ohne Handarbeit in Config-Dateien
- lokale Persistenz ohne separate Datenbank im einfachsten Start
- Ausbaufaehig fuer WebDAV, HTTP/S, Cloud-Backends und spaetere Automatisierung
Gerade fuer Freelancer, kleine Teams, Agenturen oder Homelab-Setups ist das deutlich brauchbarer als ein generischer "Docker fuer Dateien"-Text ohne echten Login und ohne pruefbaren Endpunkt.
10. Sinnvolle Alltagsbefehle
Fuer Logs, Stoppen und Updates reichen anfangs diese Kommandos:
docker compose logs -f sftpgo
docker compose pull
docker compose up -d
docker compose down
Die Daten bleiben in ./data und ./config erhalten.
11. Was du nach dem ersten Start haerten solltest
Lokal auf 127.0.0.1 ist das Setup absichtlich eng. Sobald du extern zugreifen willst, gehoeren mindestens diese Punkte dazu:
- Reverse Proxy oder direkte TLS-Konfiguration
- starke Passwoerter und saubere Benutzertrennung
- Backup von
sftpgo-lab/dataundsftpgo-lab/config - kein unnoetiges Oeffnen von FTP/S oder HTTP/S, wenn du nur SFTP brauchst
Die gute Nachricht: Fuer den ersten lokalen Aufbau musst du das noch nicht alles sofort mitziehen.
Fazit
Wenn aktuelle News fuer einen Lauf nicht sauber genug tragen, sollte der Ersatz wenigstens ein reales Problem loesen und direkt pruefbar sein. Genau das schafft SFTPGo: Du startest einen echten Datei-Transfer-Dienst mit Web-Admin, behieltst die Daten lokal auf dem Host und kannst nach wenigen Minuten nicht nur klicken, sondern wirklich per SFTP verbinden.
Fuer den 22. April 2026 ist das ein deutlich staerkerer Fallback als noch ein austauschbarer Docker-Grundlagenartikel ohne sichtbares Ergebnis.