# 📘 Kapitel 15: Git (Self-Hosted mit Gitea) **Logische Position:** 15 (nach **14: Backup (Basis, privat)** · vor **16: 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) 1. System vorbereiten (Update, Tools) 2. **Docker & Compose** installieren 3. Arbeitsverzeichnis **`/gitea`** anlegen, `docker-compose.yml` schreiben 4. Container starten & prĂŒfen (`docker compose up -d`, `docker ps`) 5. **Erstkonfiguration im Browser** – alle Felder, inkl. **SSH-Port 222** & **LFS leer** 6. **Repository in der Web-UI** anlegen (mit **README**, **Lizenz** = **CC BY** fĂŒr Content) 7. Lokales Repo initialisieren & pushen (Terminal) 8. **GitHub-Mirroring** (Pull- & Push-Mirror) --- ## 🔧 Kerneinstellungen (wichtig!) - **SSH-Port:** In Gitea **222** eintragen > Hintergrund: In Compose ist `222:22` gemappt → 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://:3000/` (spĂ€ter `https://git.deine-domain.tld` via 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 **E-Mail** - 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) ```bash # Beispiel HTTP mkdir testprojekt && cd testprojekt git init git remote add origin http://:3000/admin/testprojekt.git echo "# Hallo Gitea" > README.md git add . git commit -m "Erster Commit" git push -u origin master ``` **SSH statt HTTP:** ```bash git remote set-url origin ssh://git@: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“**.