144 lines
5.0 KiB
Markdown
144 lines
5.0 KiB
Markdown
# 📘 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)
|
||
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://<IP>: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://<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:**
|
||
```bash
|
||
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“**.
|