📘 Kapitel 13: Git (Self-Hosted mit Gitea)
Logische Position: 13 (nach 12: Backup (Basis, privat) · vor 14: Wiki)
Ziel: Ein eigenes Git-System mit Gitea im LXC via Docker aufsetzen, vollständig konfigurieren, erstes Repository anlegen (Web-UI + Terminal) und GitHub-Mirroring nutzen – für Datenhoheit und Hybridbetrieb (Self-Hosted + GitHub).
✅ Voraussetzungen
- LXC: Debian 12 (Bookworm)
- Empfohlen: 1 vCPU, 512 MB–1 GB RAM, ≥ 5 GB Speicher
- Netzwerk: IPv4/IPv6
- Optional für externen Zugriff: Nginx Proxy Manager + DynDNS (siehe eigene Kapitel)
🧩 Was wir aufbauen
- Container:
gitea/gitea:latest - Ports:
3000:3000(Web),222:22(SSH in Container → Host nutzt 222) - Persistenz: Volume
./gitea:/data→ Daten liegen auf dem Host unter/gitea/gitea - Rechte:
USER_UID=1000,USER_GID=1000(Dateien gehören deinem Standard-User)
🗺️ Kapitelablauf (Kurzüberblick)
- System vorbereiten (Update, Tools)
- Docker & Compose installieren
- Arbeitsverzeichnis
/giteaanlegen,docker-compose.ymlschreiben - Container starten & prüfen (
docker compose up -d,docker ps) - Erstkonfiguration im Browser – alle Felder, inkl. SSH-Port 222 & LFS leer
- Repository in der Web-UI anlegen (mit README, Lizenz = CC BY für Content)
- Lokales Repo initialisieren & pushen (Terminal)
- GitHub-Mirroring (Pull- & Push-Mirror)
🔧 Kerneinstellungen (wichtig!)
- SSH-Port: In Gitea 222 eintragen
Hintergrund: In Compose ist
222:22gemappt → Container lauscht auf 22, von außen nutzt du 222. So stimmen die Clone-URLs. - LFS: leer lassen (Large File Storage nur für große Binärdateien nötig)
- UID/GID:
USER_UID=1000,USER_GID=1000→ korrekte Dateirechte auf dem Host
🌐 Erstkonfiguration (Setup-Formular)
Datenbank
- Typ:
SQLite3· Pfad:/data/gitea/gitea.db
Allgemein
- Seitentitel: frei (z. B. Bratonien Git)
- Repo-Verzeichnis:
/data/git/repositories - Git-LFS-Wurzelpfad: leer lassen
- Ausführen als:
git - Server-Domain: vorerst IP, später Subdomain (NPM + DynDNS)
- SSH-Server-Port: 222
Netzwerk
- HTTP-Port:
3000 - Basis-URL:
http://<IP>:3000/(späterhttps://git.deine-domain.tldvia NPM)
Logs
- Pfad:
/data/gitea/log
Optionen (Homelab-Empfehlung)
- ✅ Offline-Modus · ✅ Gravatar aus · ❌ Föderation aus
- 🔒 Registrierung deaktivieren (Admin lädt Nutzer ein) – optional
- OpenID nach Bedarf
- Für Homelab meist leer (kein SMTP nötig)
- Admin-E-Mail: Dummy (z. B.
admin@localhost) reicht ohne Mailserver
Sicherheit
- Passwort-Hash:
pbkdf2(Standard)
Admin-Benutzer
- Benutzername/Passwort setzen · Installieren
🆕 Repository über die Web-UI anlegen (mit Substanz)
Pflichtfelder
- Besitzer: dein User (z. B.
admin) oder eine Organisation - Repo-Name: kurz, kleinschreibung-mit-bindestrich (z. B.
testprojekt) - Sichtbarkeit: privat (Homelab) oder öffentlich (Beispiel/Sharing)
Initialdateien – wann sinnvoll?
- README: erzeugen → Startseite hat sofort Inhalt (empfohlen)
- .gitignore: bei Codeprojekten sinnvoll (Build/Cache raus) · bei reinen Markdown/Configs optional
- Lizenz:
- Content/Leitfaden: CC BY (freie Nutzung mit Namensnennung „Bratonien Tech“)
- (Bei echtem Software-Code wäre z. B. MIT üblich)
Erweitert
- Standardbranch:
main· Objektformat:sha1(beides belassen)
💻 Lokales Repo pushen (HTTP & SSH)
# Beispiel HTTP
mkdir testprojekt && cd testprojekt
git init
git remote add origin http://<IP>:3000/admin/testprojekt.git
echo "# Hallo Gitea" > README.md
git add .
git commit -m "Erster Commit"
git push -u origin master
SSH statt HTTP:
git remote set-url origin ssh://git@<domain-oder-ip>:222/admin/testprojekt.git
# SSH-Key vorher in Gitea: Settings → SSH Keys
🔁 GitHub-Mirroring – wann & warum?
- Pull-Mirror (GitHub → Gitea): Externe Repos sichern/weiterarbeiten.
- Push-Mirror (Gitea → GitHub): Intern arbeiten, öffentlich zeigen.
Einrichtung im Repo: Settings → Mirroring (Token/URL angeben).
⚠️ Stolperfallen
- SSH-Port ≠ 222 → falsche Clone-URLs
- UID/GID falsch → Schreibrechte fehlen
- SMTP erwartet → für Homelab nicht nötig (Dummy-Mail reicht)
- LFS aktiviert ohne Bedarf → Speicherfrass
🔗 Siehe auch
- Kap. 3 Nginx Proxy Manager (Domain/HTTPS)
- Kap. 4 DynDNS (Erreichbarkeit von außen)
- Kap. 14 Backup (Basis, privat) (Sicherung des
/gitea-Volumes) - Kap. 16 Wiki (Dokumentation passend zu Repos)
📜 Lizenz für dieses Kapitel
Creative Commons Attribution (CC BY) – Nutzung/Weitergabe/Anpassung erlaubt, mit Namensnennung „Bratonien Tech“.