Gitea mit Docker Compose: Eigene Git-Plattform lokal auf Port 3000 starten
Wenn Code, Issues und kleine interne Repositories nicht direkt in einer grossen SaaS-Plattform landen sollen, ist Gitea einer der sinnvollsten Self-Hosting-Kandidaten. Das Projekt bleibt leicht genug fuer einen kleinen Homeserver oder Dev-Host, liefert aber sofort ein sichtbares Ergebnis: Repos, Nutzer, Web-UI und optional Git ueber SSH im Browser und auf der Shell.
Fuer diesen Artikel ist die Grundlage sauber genug. Die offizielle Gitea-Doku beschreibt am 17. April 2026 weiterhin ein Compose-Setup mit SQLite3 fuer den einfachen Start, nennt Port 3000 fuer die Weboberflaeche, Port 22 im Container fuer SSH und zeigt als konkrete stabile Variante docker.gitea.com/gitea:1.25.5. Genau diese Version pinne ich hier bewusst, damit das Tutorial reproduzierbar bleibt und nicht spaeter von latest abhaengt.
Was du am Ende hast
- Gitea lokal unter
http://127.0.0.1:3000 - Git ueber SSH lokal auf
ssh://[email protected]:222/... - Eine kleine Compose-Umgebung mit nur einem Dienst und SQLite
- Persistente Daten in einem lokalen Projektordner statt nur in einem fluechtigen Container
Warum dieses Setup gerade stark genug ist
Nicht jeder Docker-Fallback taugt als Artikel. Hier passt der Nutzwert aber sofort:
- Gitea loest ein reales Problem fuer kleine Teams, Sideprojects und private Repos
- die offizielle Doku zeigt weiterhin einen klaren Compose-Weg statt nur lose Snippets
1.25.5ist als stabile Release in der offiziellen Installationsseite ausdruecklich genannt- das Ergebnis ist direkt sichtbar: Login, erstes Repo, Clone-URL und Weboberflaeche
Voraussetzungen
- Docker Engine und
docker composesind installiert - Port
3000fuer HTTP ist frei - Port
222ist frei, wenn du Git lokal auch per SSH nutzen willst
Pruefe Docker vorab kurz:
docker --version
docker compose version
1. Eigenen Arbeitsordner anlegen
Nicht in einem beliebigen alten Compose-Verzeichnis anfangen. Lege dir zuerst einen dedizierten Ordner an:
mkdir gitea-local
cd gitea-local
mkdir gitea
Der Unterordner gitea wird spaeter nach /data in den Container gemountet und enthaelt Konfiguration, Repositories und SQLite-Daten.
2. UID und GID fuer dein System pruefen
Die offizielle Doku verwendet im Beispiel 1000:1000. Das passt oft, aber nicht immer. Pruefe deshalb zuerst deine echte lokale ID:
id -u
id -g
Wenn beide Werte bei dir 1000 sind, kannst du das Beispiel unten direkt uebernehmen. Falls nicht, trage deine eigenen Werte ein.
3. Compose-Datei anlegen
Lege jetzt die Datei gitea-local/docker-compose.yaml an:
services:
gitea:
image: docker.gitea.com/gitea:1.25.5
container_name: gitea
restart: unless-stopped
environment:
USER_UID: 1000
USER_GID: 1000
ports:
- "127.0.0.1:3000:3000"
- "127.0.0.1:222:22"
volumes:
- ./gitea:/data
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
Wenn id -u oder id -g bei dir nicht 1000 ergeben haben, ersetze die beiden Werte direkt hier.
Warum genau dieses Setup?
docker.gitea.com/gitea:1.25.5folgt der aktuell dokumentierten stabilen Release127.0.0.1:3000:3000haelt die Weboberflaeche zuerst lokal statt sie direkt im ganzen Netz freizugeben127.0.0.1:222:22gibt dir SSH fuer lokale Tests, ohne den Standard-SSH-Port des Hosts zu blockieren./gitea:/datamacht die Ablage fuer Repos und Konfiguration nachvollziehbar und persistent
4. Stack starten
Jetzt ziehst du das Image und startest Gitea:
docker compose pull
docker compose up -d
Danach sollte die lokale Weboberflaeche unter dieser Adresse antworten:
http://127.0.0.1:3000
5. Technisch pruefen, bevor du im Browser klickst
Pruefe zuerst den Containerzustand:
docker compose ps
Danach pruefst du die HTTP-Antwort:
curl -I http://127.0.0.1:3000
Wenn die App noch hochfaehrt, sind die Logs der schnellste Weg zur Ursache:
docker compose logs --tail=100 gitea
Ein 200 OK oder ein sauberer Redirect ist hier das richtige Signal.
6. Ersten Start im Browser abschliessen
Oeffne jetzt http://127.0.0.1:3000 im Browser. Beim ersten Aufruf landest du im Installationsdialog.
Fuer dieses lokale Ein-Container-Setup ist der einfache Weg genau der richtige:
- Datenbank:
SQLite3 - Pfade und Standardwerte im Gitea-Dialog nicht unnoetig verkomplizieren
- SSH-Server-Port in der Oberflaeche auf
222setzen, wenn du die angezeigten Clone-Hinweise exakt an dein lokales Port-Mapping anpassen willst
Sobald der erste Admin-Nutzer angelegt ist, ist das sichtbare Ergebnis da:
- du kannst ein erstes Repository erstellen
- Issues und Pull Requests stehen sofort bereit
- Git-Clone-URLs sind direkt in der Oberflaeche sichtbar
- du hast eine eigene kleine Forge statt nur einen gestarteten Container
Genau an diesem Punkt taugt das Projekt als Tutorial. Der Mehrwert ist nicht abstrakt, sondern direkt benutzbar.
7. Git ueber SSH lokal testen
Wenn du auch den SSH-Pfad pruefen willst, kannst du nach dem ersten Login ein Test-Repository anlegen und die SSH-Erreichbarkeit lokal gegen Port 222 pruefen:
ssh -p 222 [email protected]
Je nach Gitea-Status und eingerichtetem Schluessel bekommst du noch keinen erfolgreichen Login, aber du solltest zumindest sehen, dass der SSH-Dienst auf dem gemappten Port antwortet statt ins Leere zu laufen.
Sinnvolle Alltagsbefehle
Fuer den Alltag brauchst du am Anfang nur diese Kommandos:
docker compose logs -f gitea
docker compose pull
docker compose up -d
docker compose down
Deine Daten bleiben dabei im lokalen Ordner ./gitea erhalten.
Wichtige Hinweise fuer den echten Einsatz
Das hier ist absichtlich ein lokaler, sicherer Start und kein sofort internetoffenes Produktivsetup. Fuer den echten Dauerbetrieb solltest du direkt mitdenken:
127.0.0.1nur dann auf echte Netz-IP oder0.0.0.0aendern, wenn du den Zugriff bewusst oeffnen willst- vor einem Reverse Proxy spaeter die
ROOT_URLsauber auf die echte Zieladresse setzen - SSH-Schluessel und Admin-Zugang direkt nach dem ersten Start ordentlich einrichten
Fazit
Wenn aktuelle News im Moment nicht sauber genug oder zu nah an bereits behandelten Themen liegen, muss der Ersatz klar besser sein als der naechste generische Stack. Gitea schafft das heute. Die offizielle Doku liefert am 17. April 2026 weiterhin einen einfachen Compose-Weg mit SQLite, die stabile Version 1.25.5 ist klar benannt, und das sichtbare Ergebnis steht nach wenigen Minuten im Browser.
Fuer kleine Teams, private Repos oder ein lokales Dev-Setup ist das ein deutlich staerkerer Fallback als irgendein austauschbarer Container ohne klares Endprodukt.