200 lines
6.1 KiB
Markdown
200 lines
6.1 KiB
Markdown
# 📝 Kapitel 15 – Git (Self-Hosted mit Gitea)
|
||
|
||
## 🎯 Ziel
|
||
In diesem Kapitel richten wir unser eigenes **Git-Kontrollzentrum mit Gitea** ein.
|
||
Wir geben nicht länger fremden Plattformen die alleinige Hoheit über unsere Daten, sondern holen uns die Kontrolle zurück.
|
||
Gitea ermöglicht uns, Konfigurationen, Skripte und Dokumente versioniert abzulegen – und bei Bedarf zusätzlich mit GitHub zu spiegeln.
|
||
So kombinieren wir **Datenhoheit im Homelab** mit der **Reichweite öffentlicher Plattformen**.
|
||
|
||
---
|
||
|
||
## 📖 Warum Gitea?
|
||
Viele Streamer und Technik-Nerds starten mit GitHub oder GitLab. Praktisch, aber:
|
||
- 🔒 Deine Daten liegen extern, oft ohne volle Kontrolle.
|
||
- 🚫 Private Projekte sind meist eingeschränkt oder kostenpflichtig.
|
||
- 🌍 Zugriff ist nur mit Internet möglich.
|
||
|
||
Mit **Gitea im eigenen Homelab** hast du dagegen:
|
||
- ✅ Volle Kontrolle über Repos und Nutzerverwaltung.
|
||
- ✅ Keine Abhängigkeit von Dritten.
|
||
- ✅ Zugriff auch offline oder im LAN.
|
||
- ✅ Trotzdem die Möglichkeit, Projekte mit GitHub zu spiegeln.
|
||
|
||
Kurz: Gitea ist leichtgewichtig, perfekt für Low-Budget-Homelabs und bietet trotzdem alle Kernfunktionen.
|
||
|
||
---
|
||
|
||
## ✅ Voraussetzungen
|
||
- LXC-Container mit **Debian 12 (Bookworm)**
|
||
- Empfohlen: **1 vCPU**, **512 MB – 1 GB RAM**, **≥ 5 GB Speicher**
|
||
- Netzwerkzugang (IPv4/IPv6)
|
||
- Optional: **Nginx Proxy Manager + DynDNS** (für Zugriff von außen)
|
||
- In diesem Kapitel installieren wir **Docker + Compose**
|
||
|
||
---
|
||
|
||
## 1️⃣ Container vorbereiten
|
||
```bash
|
||
apt update && apt upgrade -y
|
||
apt install -y curl gnupg lsb-release ca-certificates nano
|
||
```
|
||
👉 Wir aktualisieren den Container und stellen sicher, dass alle Werkzeuge für Installation und Konfiguration vorhanden sind.
|
||
|
||
---
|
||
|
||
## 2️⃣ Docker & Compose installieren
|
||
```bash
|
||
# Docker GPG-Key hinzufügen
|
||
mkdir -p /etc/apt/keyrings
|
||
curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg
|
||
|
||
# Repository hinzufügen
|
||
echo \
|
||
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian \
|
||
$(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
|
||
|
||
# Installation
|
||
apt update
|
||
apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
|
||
```
|
||
👉 Damit haben wir die Grundlage für Container im Homelab geschaffen.
|
||
|
||
---
|
||
|
||
## 3️⃣ Arbeitsverzeichnis & Compose-File
|
||
```bash
|
||
mkdir /gitea && cd /gitea
|
||
nano docker-compose.yml
|
||
```
|
||
|
||
**Beispiel `docker-compose.yml`:**
|
||
```yaml
|
||
version: "3"
|
||
|
||
services:
|
||
gitea:
|
||
image: gitea/gitea:latest
|
||
container_name: gitea
|
||
environment:
|
||
- USER_UID=1000
|
||
- USER_GID=1000
|
||
volumes:
|
||
- ./gitea:/data
|
||
ports:
|
||
- "3000:3000" # Web
|
||
- "222:22" # SSH
|
||
restart: always
|
||
```
|
||
👉 Wichtig: UID/GID sorgen für saubere Dateirechte. Port 222 ist unser SSH-Zugang nach außen.
|
||
|
||
---
|
||
|
||
## 4️⃣ Container starten & prüfen
|
||
```bash
|
||
docker compose up -d
|
||
docker ps
|
||
```
|
||
👉 Jetzt sollte `gitea` laufen. Die Web-UI erreichst du unter Port 3000, SSH über Port 222.
|
||
|
||
---
|
||
|
||
## 5️⃣ Erstkonfiguration im Browser
|
||
Browser öffnen: `http://<IP>:3000`
|
||
|
||
Hier legst du die Basis deiner Instanz fest – was du jetzt einstellst, bestimmt dein weiteres Arbeiten.
|
||
|
||
### 5.1 Datenbankeinstellungen
|
||
- **Datenbanktyp:** `SQLite3` – leichtgewichtig, perfekt fürs Homelab.
|
||
- **Pfad:** `/data/gitea/gitea.db`
|
||
|
||
👉 Für große Teams: MariaDB/PostgreSQL möglich.
|
||
|
||
### 5.2 Server-Einstellungen
|
||
- **Seitentitel:** frei wählbar, z. B. *Bratonien Git*.
|
||
- **Run User:** `git` (Standard im Container).
|
||
- **Domain:** zunächst IP, später Subdomain via DynDNS/NPM.
|
||
- **SSH-Port:** `222` (wegen Mapping).
|
||
- **HTTP-Port:** `3000`.
|
||
- **Basis-URL:** `http://<IP>:3000/` – später mit HTTPS über NPM.
|
||
|
||
### 5.3 Speicherorte
|
||
- **Repo-Verzeichnis:** `/data/git/repositories`
|
||
- **LFS-Wurzelpfad:** leer lassen (Large File Storage nur für große Binärdateien).
|
||
|
||
### 5.4 Nutzer & Sicherheit
|
||
- **Registrierung:** deaktiviert (Admin legt Accounts an).
|
||
- **Gravatar:** aus (Datenschutz).
|
||
- **Offline-Modus:** an.
|
||
- **Passwort-Hash:** `pbkdf2` (Standard, sicher).
|
||
|
||
### 5.5 E-Mail
|
||
- Ohne SMTP reicht Dummy-Mail (z. B. `admin@localhost`).
|
||
- SMTP kann später für Passwort-Resets nachgerüstet werden.
|
||
|
||
### 5.6 Logging
|
||
- **Pfad:** `/data/gitea/log`
|
||
|
||
### 5.7 Administrator-Konto
|
||
- Benutzername + Passwort wählen.
|
||
- Dummy-Mail reicht.
|
||
|
||
👉 Danach klickst du auf *Installieren* – Gitea startet durch.
|
||
|
||
---
|
||
|
||
## 6️⃣ Erstes Repository in der Web-UI anlegen
|
||
Ein Repo ist das Herzstück deiner Arbeit. Lege jetzt dein erstes Projekt an:
|
||
|
||
- **Besitzer:** `admin` (oder Organisation).
|
||
- **Name:** `testprojekt` (klein, sprechend).
|
||
- **Sichtbarkeit:** privat oder öffentlich.
|
||
- **README:** anlegen (Startseite wirkt sofort vollständig).
|
||
- **Lizenz:** Für Content dieses Tutorials → **CC BY** (freie Nutzung, Namensnennung „Bratonien Tech“).
|
||
|
||
---
|
||
|
||
## 7️⃣ Repository per Terminal nutzen
|
||
```bash
|
||
# Lokal initialisieren
|
||
mkdir testprojekt && cd testprojekt
|
||
git init
|
||
|
||
# Remote hinzufügen
|
||
git remote add origin http://<IP>:3000/admin/testprojekt.git
|
||
|
||
echo "# Hallo Gitea" > README.md
|
||
git add .
|
||
git commit -m "Erster Commit"
|
||
|
||
# Push
|
||
git push -u origin master
|
||
```
|
||
👉 Mit SSH statt HTTP:
|
||
```bash
|
||
git remote set-url origin ssh://git@<domain-oder-ip>:222/admin/testprojekt.git
|
||
```
|
||
(SSH-Key im Userprofil hinterlegen.)
|
||
|
||
---
|
||
|
||
## 8️⃣ GitHub-Mirroring
|
||
- **Pull-Mirror:** GitHub → Gitea (Externe Projekte sichern).
|
||
- **Push-Mirror:** Gitea → GitHub (eigene Projekte zusätzlich sichtbar machen).
|
||
|
||
👉 Einrichtung im Repo unter *Settings → Mirroring*.
|
||
|
||
---
|
||
|
||
## ⚠️ Typische Stolperfallen
|
||
- ❌ **SSH-Port vergessen:** immer `222` eintragen.
|
||
- ❌ **UID/GID falsch:** Container kann nicht schreiben.
|
||
- ❌ **Lizenz ausgelassen:** bei Content immer **CC BY**.
|
||
- ❌ **SMTP erwartet:** nicht nötig fürs Homelab.
|
||
|
||
---
|
||
|
||
## ✅ Zusammenfassung
|
||
Wir haben Gitea erfolgreich im Container eingerichtet.
|
||
Ab sofort liegt unsere Arbeit **unter eigener Kontrolle** – mit der Option, Inhalte auf GitHub zu spiegeln.
|
||
Damit ist unser Homelab um einen weiteren Baustein reicher: **Versionskontrolle und Zusammenarbeit nach eigenen Regeln.**
|