Kapitel 15/README.md aktualisiert
This commit is contained in:
@@ -1,9 +1,26 @@
|
|||||||
# 📝 Kapitel 15 – Git (Self-Hosted mit Gitea)
|
# 📝 Kapitel 15 – Git (Self-Hosted mit Gitea)
|
||||||
|
|
||||||
## 🎯 Ziel
|
## 🎯 Ziel
|
||||||
In diesem Kapitel setzen wir einen eigenen **Git-Server mit Gitea** auf.
|
In diesem Kapitel richten wir unser eigenes **Git-Kontrollzentrum mit Gitea** ein.
|
||||||
Damit sichern wir unsere **Configs, Skripte und Dokumente versioniert** und behalten die volle Kontrolle.
|
Wir geben nicht länger fremden Plattformen die alleinige Hoheit über unsere Daten, sondern holen uns die Kontrolle zurück.
|
||||||
Zusätzlich können wir mit GitHub spiegeln – für **Hybridbetrieb** (intern privat, extern sichtbar).
|
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.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -21,7 +38,7 @@ Zusätzlich können wir mit GitHub spiegeln – für **Hybridbetrieb** (intern p
|
|||||||
apt update && apt upgrade -y
|
apt update && apt upgrade -y
|
||||||
apt install -y curl gnupg lsb-release ca-certificates nano
|
apt install -y curl gnupg lsb-release ca-certificates nano
|
||||||
```
|
```
|
||||||
👉 Damit stellen wir sicher, dass alle Pakete aktuell sind und wir wichtige Tools wie `curl` und `nano` haben.
|
👉 Wir aktualisieren den Container und stellen sicher, dass alle Werkzeuge für Installation und Konfiguration vorhanden sind.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -40,7 +57,7 @@ echo \
|
|||||||
apt update
|
apt update
|
||||||
apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
|
apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
|
||||||
```
|
```
|
||||||
👉 Damit haben wir **Docker Engine** + **Docker Compose Plugin** installiert.
|
👉 Damit haben wir die Grundlage für Container im Homelab geschaffen.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -68,11 +85,7 @@ services:
|
|||||||
- "222:22" # SSH
|
- "222:22" # SSH
|
||||||
restart: always
|
restart: always
|
||||||
```
|
```
|
||||||
|
👉 Wichtig: UID/GID sorgen für saubere Dateirechte. Port 222 ist unser SSH-Zugang nach außen.
|
||||||
👉 Erklärung:
|
|
||||||
- `USER_UID` / `USER_GID`: sorgt dafür, dass Gitea-Dateien deinem User (ID 1000) gehören.
|
|
||||||
- `3000:3000`: Web-UI erreichbar unter `http://<IP>:3000`.
|
|
||||||
- `222:22`: Host-Port 222 → Container-Port 22 (SSH). Wichtig für spätere Git-Clone-URLs.
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -81,126 +94,62 @@ services:
|
|||||||
docker compose up -d
|
docker compose up -d
|
||||||
docker ps
|
docker ps
|
||||||
```
|
```
|
||||||
👉 Jetzt sollte `gitea` laufen, Ports `3000` und `222` sichtbar.
|
👉 Jetzt sollte `gitea` laufen. Die Web-UI erreichst du unter Port 3000, SSH über Port 222.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 5️⃣ Erstkonfiguration im Browser
|
## 5️⃣ Erstkonfiguration im Browser
|
||||||
Browser öffnen: `http://<IP>:3000`
|
Browser öffnen: `http://<IP>:3000`
|
||||||
|
|
||||||
> **Wichtig:** Die Werte hier bestimmen URLs, Ports, Dateipfade und Sicherheitsverhalten deiner Instanz. Alles wird in `/data/gitea/conf/app.ini` gespeichert und ist später änderbar – aber je sauberer jetzt, desto weniger Nacharbeit.
|
Hier legst du die Basis deiner Instanz fest – was du jetzt einstellst, bestimmt dein weiteres Arbeiten.
|
||||||
|
|
||||||
### 5.1 Datenbankeinstellungen
|
### 5.1 Datenbankeinstellungen
|
||||||
- **Datenbanktyp:** `SQLite3`
|
- **Datenbanktyp:** `SQLite3` – leichtgewichtig, perfekt fürs Homelab.
|
||||||
*Warum:* Für Homelab klein & wartungsarm (keine Extra-DB).
|
- **Pfad:** `/data/gitea/gitea.db`
|
||||||
- **Pfad (nur bei SQLite):** `/data/gitea/gitea.db`
|
|
||||||
*Speicherort der DB im gemounteten Datenordner.*
|
|
||||||
|
|
||||||
> **Alternativen:** MariaDB/PostgreSQL sind für Teams/Größe sinnvoll – dann Host, Port, DB-Name, User, Passwort angeben. Für dieses Kapitel bleiben wir bei SQLite.
|
👉 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.2 Allgemeine / Server-Einstellungen
|
### 5.3 Speicherorte
|
||||||
- **Seitentitel:** frei (z. B. *Bratonien Git*)
|
- **Repo-Verzeichnis:** `/data/git/repositories`
|
||||||
- **Ausführen als (Run User):** `git`
|
- **LFS-Wurzelpfad:** leer lassen (Large File Storage nur für große Binärdateien).
|
||||||
*Vorgabe im Container; nicht ändern.*
|
|
||||||
- **Server‑Domain:** vorerst **IP** (z. B. `192.168.1.50`), später **Subdomain** (`git.deine-domain.tld`) über NPM/DynDNS.
|
|
||||||
- **SSH‑Server‑Port:** **`222`**
|
|
||||||
*Grund:* In `docker-compose.yml` haben wir `222:22` gemappt → Container lauscht auf 22, von außen nutzen wir 222. Wenn du hier 22 einträgst, generiert Gitea falsche Clone‑URLs.
|
|
||||||
- **HTTP‑Listen‑Port:** `3000`
|
|
||||||
*Entspricht dem Compose‑Mapping `3000:3000`.*
|
|
||||||
- **Basis‑URL (App URL):** `http://<IP>:3000/`
|
|
||||||
*Später auf `https://git.deine-domain.tld/` umstellen, wenn NPM/SSL steht.*
|
|
||||||
|
|
||||||
---
|
### 5.4 Nutzer & Sicherheit
|
||||||
|
- **Registrierung:** deaktiviert (Admin legt Accounts an).
|
||||||
|
- **Gravatar:** aus (Datenschutz).
|
||||||
|
- **Offline-Modus:** an.
|
||||||
|
- **Passwort-Hash:** `pbkdf2` (Standard, sicher).
|
||||||
|
|
||||||
### 5.3 Pfade & Speicher
|
### 5.5 E-Mail
|
||||||
- **Repository‑Verzeichnis:** `/data/git/repositories`
|
- Ohne SMTP reicht Dummy-Mail (z. B. `admin@localhost`).
|
||||||
*Ablage aller Repos (im Volume).*
|
- SMTP kann später für Passwort-Resets nachgerüstet werden.
|
||||||
- **Git‑LFS‑Wurzelpfad:** *leer lassen*
|
|
||||||
*LFS = Large File Storage für große Binärdateien. Für Konfigs/Markdown nicht nötig; später aktivierbar.*
|
|
||||||
- **Anhänge/Assets (falls angezeigt):** Standard belassen – Homelab nutzt selten große Datei‑Uploads über Gitea.
|
|
||||||
|
|
||||||
---
|
### 5.6 Logging
|
||||||
|
- **Pfad:** `/data/gitea/log`
|
||||||
|
|
||||||
### 5.4 Registrierung, Nutzer & Darstellung
|
### 5.7 Administrator-Konto
|
||||||
- **Öffentliche Registrierung erlauben:** *empfohlen: aus*
|
- Benutzername + Passwort wählen.
|
||||||
*Nur Admin legt Accounts an → kleiner, sicherer Kreis.*
|
- Dummy-Mail reicht.
|
||||||
- **Anmeldung erforderlich, um Seiten zu sehen:** optional
|
|
||||||
*Aktivieren, wenn das komplette UI privat sein soll.*
|
|
||||||
- **OpenID‑Anmeldung erlauben:** optional
|
|
||||||
*Ermöglicht SSO‑Login via OpenID; für Homelab meist nicht notwendig.*
|
|
||||||
- **OpenID‑Selbstregistrierung erlauben:** optional
|
|
||||||
- **Gravatar deaktivieren:** **an**
|
|
||||||
*Keine externen Avatar‑Anfragen → Datenschutz.*
|
|
||||||
- **Föderierte Avatare/Profile:** *aus*
|
|
||||||
*Nicht erforderlich im Homelab.*
|
|
||||||
- **Offline‑Modus:** **an**
|
|
||||||
*Unterbindet unnötige externe Requests.*
|
|
||||||
|
|
||||||
---
|
👉 Danach klickst du auf *Installieren* – Gitea startet durch.
|
||||||
|
|
||||||
### 5.5 E‑Mail (SMTP)
|
|
||||||
- **SMTP‑Host / Port / Benutzer / Passwort / From:** *leer lassen*, wenn kein Mailserver genutzt wird.
|
|
||||||
*Gitea funktioniert auch ohne SMTP; Passwort‑Reset per Mail geht dann natürlich nicht.*
|
|
||||||
- **TLS/STARTTLS:** nur konfigurieren, wenn SMTP genutzt wird.
|
|
||||||
- **Versteckte E‑Mail‑Domain:** Standard (`noreply.localhost`) belassen.
|
|
||||||
|
|
||||||
> **Admin‑E‑Mail** darf eine Dummy‑Adresse sein (z. B. `admin@localhost`), wenn kein SMTP vorhanden ist.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### 5.6 Sicherheit
|
|
||||||
- **Passwort‑Hash:** `pbkdf2` (Standard; sicher & ressourcenschonend)
|
|
||||||
- **Captcha / Registrierungsbestätigung:** nur relevant, wenn offene Registrierung aktiv ist; im Homelab meist aus.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### 5.7 Logging
|
|
||||||
- **Log‑Dateipfad:** `/data/gitea/log`
|
|
||||||
*Bleibt im Volume; einfach zu sichern/prüfen.*
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### 5.8 Administrator
|
|
||||||
- **Benutzername:** z. B. `admin`
|
|
||||||
- **Passwort:** stark wählen
|
|
||||||
- **E‑Mail:** `admin@localhost` (ohne SMTP ok)
|
|
||||||
- **Installieren** klicken → Gitea startet mit diesen Werten.
|
|
||||||
|
|
||||||
> Nach der Installation findest du die Konfig in `/data/gitea/conf/app.ini`. Änderungen sind dort oder im UI möglich.
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 6️⃣ Erstes Repository in der Web-UI anlegen
|
## 6️⃣ Erstes Repository in der Web-UI anlegen
|
||||||
Pflicht:
|
Ein Repo ist das Herzstück deiner Arbeit. Lege jetzt dein erstes Projekt an:
|
||||||
- **Besitzer:** z. B. `admin` (oder Organisation)
|
|
||||||
- **Name:** `testprojekt` (klein, mit Bindestrich)
|
|
||||||
- **Sichtbarkeit:** privat (Homelab) oder öffentlich (Sharing)
|
|
||||||
|
|
||||||
Initialdateien (mit Erklärung):
|
- **Besitzer:** `admin` (oder Organisation).
|
||||||
- **README erzeugen:** **empfohlen** → Startseite hat sofort Inhalt.
|
- **Name:** `testprojekt` (klein, sprechend).
|
||||||
- **.gitignore:** bei Codeprojekten sinnvoll (Build/Cache raus); bei reiner Doku optional.
|
- **Sichtbarkeit:** privat oder öffentlich.
|
||||||
- **Lizenz:** *Content/Leitfaden →* **CC BY** (freie Nutzung mit Namensnennung „Bratonien Tech“).
|
- **README:** anlegen (Startseite wirkt sofort vollständig).
|
||||||
*Hinweis:* Bei **echtem Code** wäre z. B. **MIT** üblich.
|
- **Lizenz:** Für Content dieses Tutorials → **CC BY** (freie Nutzung, Namensnennung „Bratonien Tech“).
|
||||||
|
|
||||||
Erweitert:
|
|
||||||
- **Standardbranch:** `main` (belassen)
|
|
||||||
- **Objektformat:** `sha1` (belassen)
|
|
||||||
|
|
||||||
**Pflichtfelder:**
|
|
||||||
- Besitzer: z. B. `admin`
|
|
||||||
- Name: `testprojekt`
|
|
||||||
- Sichtbarkeit: privat oder öffentlich
|
|
||||||
|
|
||||||
**Optionale Felder:**
|
|
||||||
- **README:** hinzufügen (empfohlen)
|
|
||||||
- **.gitignore:** optional (bei Codeprojekten)
|
|
||||||
- **Lizenz:** für Content → **CC BY** (Namensnennung „Bratonien Tech“)
|
|
||||||
|
|
||||||
**Erweitert:**
|
|
||||||
- Standardbranch: `main`
|
|
||||||
- Objektformat: `sha1`
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -220,36 +169,31 @@ git commit -m "Erster Commit"
|
|||||||
# Push
|
# Push
|
||||||
git push -u origin master
|
git push -u origin master
|
||||||
```
|
```
|
||||||
|
👉 Mit SSH statt HTTP:
|
||||||
👉 **SSH statt HTTP**:
|
|
||||||
```bash
|
```bash
|
||||||
git remote set-url origin ssh://git@<domain-oder-ip>:222/admin/testprojekt.git
|
git remote set-url origin ssh://git@<domain-oder-ip>:222/admin/testprojekt.git
|
||||||
```
|
```
|
||||||
(SSH-Key vorher im Gitea-Userprofil hochladen)
|
(SSH-Key im Userprofil hinterlegen.)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 8️⃣ GitHub-Mirroring
|
## 8️⃣ GitHub-Mirroring
|
||||||
- **Pull-Mirror:** GitHub → Gitea (Projekte importieren)
|
- **Pull-Mirror:** GitHub → Gitea (Externe Projekte sichern).
|
||||||
- **Push-Mirror:** Gitea → GitHub (eigene Projekte zusätzlich veröffentlichen)
|
- **Push-Mirror:** Gitea → GitHub (eigene Projekte zusätzlich sichtbar machen).
|
||||||
|
|
||||||
👉 Einrichtung im Repo unter *Settings → Mirroring*.
|
👉 Einrichtung im Repo unter *Settings → Mirroring*.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## ⚠️ Typische Stolperfallen
|
## ⚠️ Typische Stolperfallen
|
||||||
- ❌ **SSH-Port falsch:** immer `222` eintragen (wegen Mapping)
|
- ❌ **SSH-Port vergessen:** immer `222` eintragen.
|
||||||
- ❌ **UID/GID falsch:** Container kann keine Dateien schreiben → prüfe `USER_UID=1000`, `USER_GID=1000`
|
- ❌ **UID/GID falsch:** Container kann nicht schreiben.
|
||||||
- ❌ **Mailserver leer:** unkritisch, Gitea läuft auch ohne Mail
|
- ❌ **Lizenz ausgelassen:** bei Content immer **CC BY**.
|
||||||
- ❌ **Lizenz vergessen:** für Content immer **CC BY** wählen
|
- ❌ **SMTP erwartet:** nicht nötig fürs Homelab.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## ✅ Zusammenfassung
|
## ✅ Zusammenfassung
|
||||||
- Gitea läuft im Docker-Container, Daten persistieren in `/gitea/gitea`
|
Wir haben Gitea erfolgreich im Container eingerichtet.
|
||||||
- SSH-Port = **222**
|
Ab sofort liegt unsere Arbeit **unter eigener Kontrolle** – mit der Option, Inhalte auf GitHub zu spiegeln.
|
||||||
- Git LFS bleibt leer
|
Damit ist unser Homelab um einen weiteren Baustein reicher: **Versionskontrolle und Zusammenarbeit nach eigenen Regeln.**
|
||||||
- Erstes Repo → README + CC-BY-Lizenz
|
|
||||||
- GitHub-Mirroring möglich
|
|
||||||
|
|
||||||
Damit haben wir unser eigenes **Git-Kontrollzentrum** in Bratonien eingerichtet.
|
|
||||||
|
|||||||
Reference in New Issue
Block a user