Kapitel 13/Free Rohtext.md hinzugefügt
This commit is contained in:
790
Kapitel 13/Free Rohtext.md
Normal file
790
Kapitel 13/Free Rohtext.md
Normal file
@@ -0,0 +1,790 @@
|
||||
# Kapitel 13 – Git (Self-Hosted mit Gitea)
|
||||
|
||||
## Einleitung
|
||||
|
||||
Das **selbst gehostete Git-System** ist ein zentrales Element des **UCC** und bildet die technische Basis für alle Projekte, Skripte und Dokumentationen.
|
||||
Mit **Gitea** betreibst du dein eigenes Versionskontrollsystem – unabhängig von GitHub, GitLab oder anderen externen Plattformen.
|
||||
Dadurch behältst du die volle Kontrolle über deine Daten, kannst Änderungen lückenlos nachverfolgen und Projekte sicher archivieren.
|
||||
|
||||
👉 **Screenshot geeignet:** Übersicht UCC-Struktur mit hervorgehobener Position von Gitea zwischen Automatisierung (n8n) und Dokumentation (Nextcloud/Affine)
|
||||
|
||||
Gerade für Content Creator, Streamer oder kleine Teams ist ein eigenes Git-System ein enormer Vorteil:
|
||||
Es ermöglicht eine klare Struktur für Skripte, Overlays, Automatisierungen oder Tutorials – ohne Risiko, dass Plattformen plötzlich verschwinden oder kostenpflichtig werden.
|
||||
|
||||
Gitea ist leichtgewichtig, performant und speziell für den privaten oder semiprofessionellen Einsatz optimiert.
|
||||
Es benötigt kaum Ressourcen, lässt sich in wenigen Minuten aufsetzen und bietet trotzdem alle wichtigen Funktionen: Repository-Verwaltung, Nutzer- und Rechte-Management, Weboberfläche, SSH-Zugriff und wahlweise Spiegelung zu GitHub oder anderen Instanzen.
|
||||
|
||||
> [!NOTE]
|
||||
> Gitea ist keine abgespeckte Git-Variante, sondern eine vollwertige Lösung für alle gängigen Git-Workflows.
|
||||
> Es eignet sich sowohl für einfache Projekte im Homelab als auch für komplexe Mehrbenutzer-Setups mit externem Zugriff über den Nginx Proxy Manager.
|
||||
|
||||
Ziel dieses Kapitels ist der Aufbau eines stabilen und sicheren Containers, der Gitea als eigenständigen Dienst bereitstellt.
|
||||
Nach Abschluss steht ein **vollwertiges, selbst gehostetes Git-System** zur Verfügung, das deine Arbeit dauerhaft versioniert, zentralisiert und vollständig unter deiner Kontrolle hält.
|
||||
|
||||
👉 **Screenshot geeignet:** Zielzustand – Browserfenster mit Gitea-Startseite unter eigener Domain (`https://git.deinedomain.tld`)
|
||||
|
||||
---
|
||||
|
||||
## Voraussetzungen & Ressourcen
|
||||
|
||||
Bevor du mit der Einrichtung des Git-LXC beginnst, überprüfe, ob dein System vollständig vorbereitet ist.
|
||||
Die folgenden Punkte legen fest, welche Ressourcen und Bedingungen zwingend erfüllt sein müssen, damit Gitea zuverlässig betrieben werden kann.
|
||||
|
||||
### Container-Ressourcen
|
||||
|
||||
* **CPU: 2 vCPUs**
|
||||
Diese Zuweisung stellt sicher, dass Gitea auch bei gleichzeitigen Zugriffen (z. B. Push, Pull, Web-UI) stabil arbeitet.
|
||||
Eine geringere Zuweisung kann zu Verzögerungen bei Git-Operationen führen.
|
||||
|
||||
* **RAM: 2 GB**
|
||||
Diese Größe deckt Weboberfläche, Git-Prozesse und Docker-Umgebung zuverlässig ab.
|
||||
Bei weniger Arbeitsspeicher kann es bei Repository-Klons oder größeren Commits zu Performance-Einbrüchen kommen.
|
||||
|
||||
* **Speicherplatz: 20 GB**
|
||||
Reicht für System, Repositories, Logs und temporäre Git-Daten.
|
||||
Wenn du große Medienprojekte versionierst (z. B. mit LFS), sollte der Speicher bereits beim Erstellen des Containers erweitert werden.
|
||||
|
||||
* **Betriebssystem: Debian 12 (Bookworm)**
|
||||
Debian bietet maximale Stabilität und Kompatibilität für Docker und Gitea.
|
||||
Alle Befehle und Pfade in diesem Kapitel beziehen sich auf Debian 12.
|
||||
|
||||
* **Netzwerk: statische IP-Adresse oder DHCP-Reservierung**
|
||||
Der Container muss dauerhaft unter derselben IP erreichbar sein,
|
||||
da die Proxy-Einbindung über feste Zieladressen erfolgt.
|
||||
|
||||
> [!TIP]
|
||||
> Weise die IP-Adresse direkt beim Erstellen des Containers zu.
|
||||
> Eine nachträgliche Änderung würde sämtliche Proxy- und SSH-Einträge betreffen.
|
||||
|
||||
### Technische Voraussetzungen
|
||||
|
||||
* **Proxmox VE ist installiert und funktionsfähig.**
|
||||
Der Container wird direkt über die Proxmox-Oberfläche erstellt und verwaltet.
|
||||
|
||||
* **Nginx Proxy Manager (NPM) ist eingerichtet.**
|
||||
Er wird benötigt, um die Gitea-Weboberfläche über HTTPS bereitzustellen.
|
||||
|
||||
* **DNS- oder DynDNS-Eintrag ist vorhanden.**
|
||||
Eine Subdomain wie `git.deinedomain.tld` ist vorbereitet und im DNS eingetragen.
|
||||
|
||||
* **SSH-Zugriff auf den Container ist möglich.**
|
||||
Entweder über die Proxmox-Konsole oder per Terminal (z. B. `ssh root@10.0.0.13`).
|
||||
|
||||
* **Docker und Docker Compose werden im Container installiert.**
|
||||
Diese dienen als Grundlage für den späteren Gitea-Dienst.
|
||||
|
||||
* **Grundstruktur des UCC ist aktiv.**
|
||||
Proxmox, Proxy Manager und Netzwerkverbindungen laufen stabil,
|
||||
damit der Container nach Fertigstellung sofort integriert werden kann.
|
||||
|
||||
> [!IMPORTANT]
|
||||
> Der Git-LXC ist ein dauerhaft aktiver Dienst.
|
||||
> Stelle sicher, dass er auf einem Host mit stabiler Netzwerkverbindung liegt und nicht gemeinsam mit anderen produktiven Containern auf einem kritischen Volume betrieben wird.
|
||||
|
||||
👉 **Screenshot geeignet:** Ressourcen-Übersicht im Proxmox-Dialog beim Anlegen des Git-LXC (vCPU, RAM, Storage)
|
||||
|
||||
---
|
||||
|
||||
## Schritt-für-Schritt-Anleitung
|
||||
|
||||
In diesem Abschnitt richtest du den **Git-LXC** vollständig ein.
|
||||
Alle Befehle sind direkt übernehmbar und so gewählt, dass sie ohne Anpassung ausgeführt werden können.
|
||||
Am Ende dieses Abschnitts steht ein vollständig lauffähiger Gitea-Container, erreichbar über HTTPS und mit funktionsfähiger Repository-Verwaltung.
|
||||
|
||||
### Schritt 1 – System aktualisieren
|
||||
|
||||
Starte den Container über die Proxmox-Oberfläche und öffne anschließend die Konsole oder verbinde dich per SSH.
|
||||
Bringe das System auf den aktuellen Stand:
|
||||
|
||||
```bash
|
||||
apt update && apt upgrade -y
|
||||
reboot
|
||||
```
|
||||
|
||||
Nach dem Neustart erneut einloggen.
|
||||
|
||||
> [!NOTE]
|
||||
> Auch bei frisch erstellten Containern ist ein Systemupdate erforderlich.
|
||||
> Veraltete Paketquellen führen später zu Problemen bei der Installation von Docker oder Gitea.
|
||||
|
||||
👉 **Screenshot geeignet:** Proxmox-Konsole mit erfolgreichem Systemupdate
|
||||
|
||||
### Schritt 2 – Grundpakete installieren
|
||||
|
||||
Installiere die grundlegenden Werkzeuge, die für die Docker-Installation benötigt werden:
|
||||
|
||||
```bash
|
||||
apt install -y curl gnupg lsb-release ca-certificates nano
|
||||
```
|
||||
|
||||
Diese Pakete stellen sicher, dass Zertifikate, GPG-Schlüssel und Repositorys korrekt verwaltet werden.
|
||||
|
||||
> [!TIP]
|
||||
> Wenn du Docker bereits in anderen Containern nutzt, kannst du die Installation künftig in einem zentralen Skript automatisieren.
|
||||
|
||||
### Schritt 3 – Docker und Docker Compose installieren
|
||||
|
||||
Damit Gitea im Container als eigenständiger Dienst laufen kann, benötigst du Docker.
|
||||
Füge zuerst den offiziellen GPG-Schlüssel und das Repository hinzu:
|
||||
|
||||
```bash
|
||||
mkdir -p /etc/apt/keyrings
|
||||
curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg
|
||||
|
||||
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
|
||||
|
||||
apt update
|
||||
apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
|
||||
```
|
||||
|
||||
Prüfe anschließend, ob Docker korrekt läuft:
|
||||
|
||||
```bash
|
||||
systemctl status docker
|
||||
```
|
||||
|
||||
Wenn der Status **active (running)** angezeigt wird, ist Docker einsatzbereit.
|
||||
|
||||
> [!NOTE]
|
||||
> Docker Compose wird in dieser Anleitung als Plugin installiert.
|
||||
> Der Befehl lautet daher `docker compose` (mit Leerzeichen) statt `docker-compose`.
|
||||
|
||||
👉 **Screenshot geeignet:** Statusanzeige von Docker im Terminal (active running)
|
||||
|
||||
### Schritt 4 – Arbeitsverzeichnis und Compose-Datei anlegen
|
||||
|
||||
Lege den Arbeitsordner für Gitea an und erstelle die Konfigurationsdatei für Docker Compose:
|
||||
|
||||
```bash
|
||||
mkdir /gitea && cd /gitea
|
||||
nano docker-compose.yml
|
||||
```
|
||||
|
||||
Füge folgenden Inhalt ein:
|
||||
|
||||
```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" # Weboberfläche
|
||||
- "222:22" # SSH-Zugriff
|
||||
restart: always
|
||||
```
|
||||
|
||||
Datei speichern (**Strg + O**, **Enter**, **Strg + X**).
|
||||
|
||||
> [!TIP]
|
||||
> Die UID /GID sorgen für korrekte Dateiberechtigungen.
|
||||
> Port 222 wird als SSH-Port nach außen weitergeleitet, um Konflikte mit anderen Diensten zu vermeiden.
|
||||
|
||||
👉 **Screenshot geeignet:** geöffnete `docker-compose.yml` mit vollständigem Inhalt
|
||||
|
||||
### Schritt 5 – Gitea starten und Funktion prüfen
|
||||
|
||||
Starte den Containerdienst:
|
||||
|
||||
```bash
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
Prüfe anschließend den Status:
|
||||
|
||||
```bash
|
||||
docker ps
|
||||
```
|
||||
|
||||
Wenn Gitea in der Liste erscheint, läuft der Dienst erfolgreich.
|
||||
Die Weboberfläche ist jetzt erreichbar unter:
|
||||
|
||||
```
|
||||
http://<IP-des-Containers>:3000
|
||||
```
|
||||
|
||||
> [!NOTE]
|
||||
> Der erste Start kann bis zu 30 Sekunden dauern, während Gitea seine interne Struktur anlegt.
|
||||
|
||||
👉 **Screenshot geeignet:** Browser mit Gitea-Setup-Seite (`http://<IP>:3000`)
|
||||
|
||||
### Schritt 6 – Erstkonfiguration im Browser
|
||||
|
||||
Öffne im Browser die Adresse deines Containers:
|
||||
|
||||
```
|
||||
http://<IP-des-Containers>:3000
|
||||
```
|
||||
|
||||
Hier richtest du deine Gitea-Instanz zum ersten Mal ein.
|
||||
Alle Einstellungen, die du jetzt festlegst, bestimmen das Verhalten und die Erreichbarkeit des Systems.
|
||||
|
||||
#### Datenbankeinstellungen
|
||||
|
||||
Für das Homelab genügt die integrierte SQLite-Datenbank.
|
||||
Sie ist schnell, wartungsarm und benötigt keine zusätzliche Konfiguration.
|
||||
|
||||
| Feld | Wert |
|
||||
|------|------|
|
||||
| **Datenbanktyp** | SQLite3 |
|
||||
| **Pfad** | `/data/gitea/gitea.db` |
|
||||
|
||||
> [!TIP]
|
||||
> SQLite ist ideal für Einzelanwender oder kleine Teams.
|
||||
> Für größere Strukturen kann Gitea später jederzeit auf MariaDB oder PostgreSQL umgestellt werden.
|
||||
|
||||
#### Server-Einstellungen
|
||||
|
||||
| Feld | Empfohlener Wert |
|
||||
|------|------------------|
|
||||
| **Seitentitel** | Bratonien Git |
|
||||
| **Run User** | `git` |
|
||||
| **Domain** | IP-Adresse des Containers (z. B. `10.0.0.13`) |
|
||||
| **SSH-Port** | `222` |
|
||||
| **HTTP-Port** | `3000` |
|
||||
| **Basis-URL** | `http://10.0.0.13:3000/` |
|
||||
|
||||
> [!NOTE]
|
||||
> Nach der Integration in den Proxy Manager wird die Basis-URL später auf HTTPS umgestellt.
|
||||
|
||||
#### Benutzer und Sicherheit
|
||||
|
||||
- **Registrierung erlauben:** deaktiviert
|
||||
- **Gravatar aktivieren:** deaktiviert
|
||||
- **Offline-Modus:** aktiviert
|
||||
- **Passwort-Hash:** `pbkdf2` (Standard und sicher)
|
||||
|
||||
Damit ist deine Instanz vollständig lokal und datenschutzfreundlich konfiguriert.
|
||||
|
||||
#### Administrator-Konto
|
||||
|
||||
Trage deinen gewünschten Benutzernamen und Passwort ein.
|
||||
E-Mail-Adresse kann als Dummy gesetzt werden, z. B. `admin@localhost`.
|
||||
Klicke anschließend auf **Installieren**.
|
||||
|
||||
Nach wenigen Sekunden startet Gitea automatisch neu und zeigt die Login-Seite an.
|
||||
|
||||
👉 **Screenshot geeignet:** Gitea-Setup-Seite mit ausgefüllten Feldern (vor Installation)
|
||||
|
||||
> [!IMPORTANT]
|
||||
> Speichere die gewählten Zugangsdaten sicher ab.
|
||||
> Der Administrator ist der einzige Benutzer mit Vollzugriff, bis weitere Accounts angelegt werden.
|
||||
|
||||
### Schritt 7 – Erstes Repository anlegen
|
||||
|
||||
Melde dich mit deinem Administrator-Account an.
|
||||
Klicke in der Weboberfläche oben auf **Neues Repository**.
|
||||
|
||||
| Feld | Beispielwert |
|
||||
|------|---------------|
|
||||
| **Besitzer** | `admin` |
|
||||
| **Repository-Name** | `tutorials` |
|
||||
| **Sichtbarkeit** | privat |
|
||||
| **README erstellen** | aktiviert |
|
||||
| **Lizenz** | CC BY (Namensnennung „Bratonien Tech“) |
|
||||
|
||||
> [!TIP]
|
||||
> Ein initiales README hilft dir, sofort einen Überblick über neue Projekte zu behalten.
|
||||
> So erscheint dein Repository direkt mit einer Startseite und Beschreibung.
|
||||
|
||||
Nach dem Erstellen kannst du das Repository direkt im Browser durchsuchen oder per Git verbinden.
|
||||
|
||||
👉 **Screenshot geeignet:** Neues Repository mit Beispielname „tutorials“
|
||||
|
||||
### Schritt 8 – Verbindung über das Terminal herstellen
|
||||
|
||||
Wechsle auf dein lokales System (z. B. Streaming-PC, Laptop oder Arbeitsrechner).
|
||||
Erstelle dort ein Testverzeichnis und initialisiere dein erstes Projekt:
|
||||
|
||||
```bash
|
||||
mkdir testprojekt && cd testprojekt
|
||||
git init
|
||||
git remote add origin http://<IP-des-Containers>:3000/admin/tutorials.git
|
||||
echo "# Hallo Gitea" > README.md
|
||||
git add .
|
||||
git commit -m "Erster Commit"
|
||||
git push -u origin master
|
||||
```
|
||||
|
||||
> [!NOTE]
|
||||
> Wenn du SSH bevorzugst, kannst du alternativ diese Verbindung verwenden:
|
||||
> ```bash
|
||||
> git remote set-url origin ssh://git@<domain-oder-ip>:222/admin/tutorials.git
|
||||
> ```
|
||||
> Den benötigten SSH-Schlüssel legst du im Benutzerprofil in Gitea an.
|
||||
|
||||
👉 **Screenshot geeignet:** Terminalausgabe nach erfolgreichem Push
|
||||
|
||||
> [!TIP]
|
||||
> Sobald dein erstes Repository erfolgreich gepusht wurde, gilt dein Gitea-Server als vollständig funktionsfähig.
|
||||
> Weitere Projekte können direkt in der Weboberfläche oder per Git-Befehl angelegt werden.
|
||||
|
||||
### Schritt 9 – Einbindung in Nginx Proxy Manager (NPM)
|
||||
|
||||
Nachdem Gitea intern getestet wurde und über `http://<IP>:3000` erreichbar ist, erfolgt nun die Integration in den **Nginx Proxy Manager**.
|
||||
Dadurch wird die Weboberfläche über HTTPS bereitgestellt und erhält eine feste, leicht merkbare Subdomain.
|
||||
|
||||
> [!IMPORTANT]
|
||||
> Führe diesen Schritt erst aus, wenn du die Gitea-Oberfläche bereits über die interne IP-Adresse aufrufen kannst.
|
||||
> So lässt sich sicherstellen, dass eventuelle Fehler eindeutig auf den Proxy und nicht auf den Container zurückzuführen sind.
|
||||
|
||||
#### Proxy-Host für Gitea anlegen
|
||||
|
||||
1. Öffne das Dashboard des **Nginx Proxy Manager**.
|
||||
2. Klicke auf **Add Proxy Host**.
|
||||
3. Trage folgende Werte ein:
|
||||
|
||||
| Feld | Wert |
|
||||
|------|------|
|
||||
| **Domain Names** | `git.deinedomain.tld` |
|
||||
| **Scheme** | `http` |
|
||||
| **Forward Hostname / IP** | IP-Adresse des Git-LXC |
|
||||
| **Forward Port** | `3000` |
|
||||
| **Block Common Exploits** | aktivieren |
|
||||
| **Websockets Support** | aktivieren |
|
||||
|
||||
Wechsle anschließend in den Reiter **SSL**:
|
||||
|
||||
- **Request a new SSL Certificate** → aktivieren
|
||||
- **Force SSL** → aktivieren
|
||||
- **HTTP/2 Support** → aktivieren
|
||||
|
||||
Speichere die Konfiguration mit **Save**.
|
||||
|
||||
👉 **Screenshot geeignet:** NPM-Maske mit eingetragenem Proxy-Host `git.deinedomain.tld`
|
||||
|
||||
> [!NOTE]
|
||||
> Nach dem Speichern wird automatisch ein gültiges Let’s-Encrypt-Zertifikat erstellt.
|
||||
> Damit ist die Verbindung zu deiner Git-Instanz verschlüsselt und über HTTPS erreichbar.
|
||||
|
||||
#### Verbindung prüfen
|
||||
|
||||
Öffne im Browser:
|
||||
|
||||
```
|
||||
https://git.deinedomain.tld
|
||||
```
|
||||
|
||||
Wenn die Login-Seite von Gitea angezeigt wird, funktioniert die Weiterleitung korrekt.
|
||||
Logge dich mit deinem Administrator-Account ein und überprüfe, ob alle Repositories sichtbar sind.
|
||||
|
||||
👉 **Screenshot geeignet:** Browserfenster mit Gitea-Login unter `https://git.deinedomain.tld`
|
||||
|
||||
> [!TIP]
|
||||
> Wenn die Seite nicht lädt oder eine Fehlermeldung erscheint, prüfe im NPM-Dashboard,
|
||||
> ob der Forward-Port korrekt auf `3000` gesetzt ist und das SSL-Zertifikat gültig ist.
|
||||
|
||||
#### Basis-URL in Gitea anpassen
|
||||
|
||||
Damit interne Links, Repository-URLs und Web-Hooks über die neue Domain funktionieren,
|
||||
muss die **ROOT_URL** direkt in der Konfigurationsdatei `app.ini` geändert werden.
|
||||
|
||||
1. Öffne ein Terminal oder die Proxmox-Konsole.
|
||||
2. Öffne die Gitea-Konfigurationsdatei im Container:
|
||||
|
||||
```bash
|
||||
nano /gitea/gitea/conf/app.ini
|
||||
```
|
||||
|
||||
3. Suche im Abschnitt `[server]` den Eintrag `ROOT_URL`.
|
||||
Wenn dieser noch nicht vorhanden ist, füge ihn hinzu oder passe ihn an:
|
||||
|
||||
```
|
||||
[server]
|
||||
DOMAIN = git.deinedomain.tld
|
||||
SSH_DOMAIN = git.deinedomain.tld
|
||||
HTTP_PORT = 3000
|
||||
ROOT_URL = https://git.deinedomain.tld/
|
||||
DISABLE_SSH = false
|
||||
START_SSH_SERVER = false
|
||||
```
|
||||
|
||||
4. Datei speichern (**Strg + O**, **Enter**, **Strg + X**)
|
||||
5. Gitea-Container neu starten:
|
||||
|
||||
```bash
|
||||
docker compose restart
|
||||
```
|
||||
|
||||
> [!NOTE]
|
||||
> Die Datei `app.ini` liegt innerhalb des Volume-Verzeichnisses, das im Compose-File mit `./gitea:/data` eingebunden ist.
|
||||
> Wenn du also ein anderes Verzeichnis verwendest, musst du den Pfad entsprechend anpassen (z. B. `/data/gitea/conf/app.ini`).
|
||||
|
||||
> [!IMPORTANT]
|
||||
> Änderungen an der `app.ini` werden erst nach einem Neustart wirksam.
|
||||
> Anschließend generiert Gitea alle Links und Web-Hooks automatisch mit der neuen HTTPS-Domain.
|
||||
|
||||
👉 **Screenshot geeignet:** geöffnete `app.ini` mit korrekt eingetragener ROOT_URL
|
||||
|
||||
### Schritt 10 – Benutzerverwaltung und Rechte in Gitea
|
||||
|
||||
Öffne Gitea im Browser und melde dich als Administrator an.
|
||||
|
||||
#### 1. Selbstregistrierung deaktivieren (falls noch aktiv)
|
||||
**Site Administration → Konfiguration → Benutzerregistrierung:** deaktivieren
|
||||
Speichern.
|
||||
|
||||
#### 2. Standard-Rollen und Sichtbarkeit festlegen
|
||||
**Site Administration → Benutzer:**
|
||||
- Lege für Team-Mitglieder individuelle Benutzer an.
|
||||
- Weise Benutzern nur die nötigen Rechte pro Repository zu (z. B. **Write** statt **Admin**).
|
||||
|
||||
#### 3. (Optional) Organisation anlegen
|
||||
- **Neu → Organisation** (z. B. `bratonien`)
|
||||
- Teams anlegen (z. B. `editor`, `viewer`) und Rechte je Repo definieren.
|
||||
|
||||
#### 4. SSH-Schlüssel hinterlegen
|
||||
**Profil (oben rechts) → SSH Keys → Add Key:**
|
||||
- Öffentlichen Schlüssel einfügen und speichern.
|
||||
- Klonen per SSH testen (siehe Schritt 12).
|
||||
|
||||
> [!TIP]
|
||||
> Nutze Organisation + Teams, wenn mehrere Personen arbeiten. Für Solo-Setups reichen Benutzer + Repo-Rechte.
|
||||
|
||||
|
||||
### Schritt 11 – Sicherheit und Zugriff beschränken
|
||||
|
||||
#### 1. Admin-Konto absichern
|
||||
- Starkes Passwort (≥ 16 Zeichen).
|
||||
- Zweites Admin-Konto für Notfälle anlegen, erstes Admin-Konto nicht im Alltag nutzen.
|
||||
|
||||
#### 2. ROOT_URL und Domains in `app.ini` fest verankern
|
||||
```ini
|
||||
# Datei: /gitea/gitea/conf/app.ini
|
||||
[server]
|
||||
DOMAIN = git.deinedomain.tld
|
||||
SSH_DOMAIN = git.deinedomain.tld
|
||||
HTTP_PORT = 3000
|
||||
ROOT_URL = https://git.deinedomain.tld/
|
||||
DISABLE_SSH = false
|
||||
START_SSH_SERVER = true
|
||||
```
|
||||
Speichern, dann:
|
||||
```bash
|
||||
docker compose restart
|
||||
```
|
||||
|
||||
> [!IMPORTANT]
|
||||
> NPM kann **kein SSH** terminieren. Für SSH-Zugriff von außen Port **222** am Router auf den LXC weiterleiten – oder SSH extern deaktivieren und nur **HTTPS** (Klon via Token) erlauben.
|
||||
|
||||
#### 3. Firewall im LXC (UFW) setzen
|
||||
Nur internes Netz zulassen, direkte Zugriffe auf 3000/222 von außen blocken (Zugriff läuft über NPM bzw. gezielte Portweiterleitung):
|
||||
|
||||
```bash
|
||||
apt install -y ufw
|
||||
ufw allow from 127.0.0.1
|
||||
ufw allow from 192.168.100.0/24
|
||||
ufw deny 3000
|
||||
ufw deny 222
|
||||
ufw enable
|
||||
```
|
||||
|
||||
> [!NOTE]
|
||||
> Ersetze `192.168.100.0/24` durch deinen LAN-Bereich. Wenn du SSH extern brauchst, **keinen** generellen `deny 222` setzen, sondern sauber am Router weiterleiten.
|
||||
|
||||
#### 4. Backups einplanen
|
||||
- Volume `/gitea` regelmäßig sichern (Repos, `app.ini`, DB).
|
||||
- Für SQLite genügt Dateisicherung; bei MariaDB/PostgreSQL zusätzlich DB-Dump.
|
||||
|
||||
|
||||
### Schritt 12 – Funktionstest (HTTPS, SSH, Push/Pull)
|
||||
|
||||
#### 1. Web-Zugriff prüfen
|
||||
```
|
||||
https://git.deinedomain.tld
|
||||
```
|
||||
Login als Admin → Startseite wird geladen.
|
||||
|
||||
#### 2. Klonen & Push über HTTPS (mit Personal Access Token)
|
||||
**Profil → Applications → Generate Token** (Scope: repo).
|
||||
Dann lokal:
|
||||
```bash
|
||||
git clone https://git.deinedomain.tld/admin/tutorials.git
|
||||
cd tutorials
|
||||
echo "Test" >> CHECK.md
|
||||
git add .
|
||||
git commit -m "Connectivity test (HTTPS)"
|
||||
git push
|
||||
```
|
||||
|
||||
#### 3. (Optional) Klonen & Push über SSH
|
||||
```bash
|
||||
git clone ssh://git@git.deinedomain.tld:222/admin/tutorials.git
|
||||
cd tutorials
|
||||
echo "SSH OK" >> SSH_CHECK.md
|
||||
git add .
|
||||
git commit -m "Connectivity test (SSH)"
|
||||
git push
|
||||
```
|
||||
|
||||
#### 4. Links und RAW-Ansicht prüfen
|
||||
- Datei im Browser öffnen → **Raw** laden muss sofort funktionieren.
|
||||
- Repo-URL zeigt die korrekte **HTTPS-Domain** (keine IP).
|
||||
|
||||
> [!TIP]
|
||||
> Wenn Push per HTTPS nach Token fragt: Benutzername = dein Gitea-User, Passwort = **Token**.
|
||||
|
||||
---
|
||||
|
||||
## Troubleshooting & Tipps
|
||||
|
||||
Auch wenn Gitea im Normalbetrieb sehr stabil läuft, können während oder nach der Einrichtung kleinere Probleme auftreten.
|
||||
Die folgenden Punkte decken die häufigsten Ursachen ab und zeigen, wie du sie schnell behebst.
|
||||
|
||||
### Gitea-Weboberfläche nicht erreichbar
|
||||
|
||||
Wenn `https://git.deinedomain.tld` nicht geladen wird oder eine Fehlermeldung wie *Verbindung fehlgeschlagen* erscheint:
|
||||
|
||||
1. Prüfe, ob der Container aktiv ist:
|
||||
```bash
|
||||
docker ps
|
||||
```
|
||||
Wenn Gitea nicht angezeigt wird, neu starten:
|
||||
```bash
|
||||
docker compose up -d
|
||||
```
|
||||
2. Wenn der Dienst läuft, aber nur per IP erreichbar ist, liegt der Fehler meist am Proxy-Eintrag:
|
||||
- Im Nginx Proxy Manager prüfen, ob der **Forward-Port** auf `3000` gesetzt ist.
|
||||
- Gültiges SSL-Zertifikat bestätigen.
|
||||
3. Browser-Cache leeren und Seite erneut aufrufen.
|
||||
|
||||
> [!TIP]
|
||||
> Wenn du Gitea erst frisch über HTTPS angebunden hast, kann es bis zu einer Minute dauern, bis der Proxy und das Zertifikat aktiv sind.
|
||||
|
||||
### Anmeldung funktioniert, aber Repositories fehlen
|
||||
|
||||
Wenn du dich erfolgreich anmeldest, aber keine Repositories angezeigt werden:
|
||||
|
||||
- Prüfe in **Site Administration → Benutzer**, ob dein Konto Besitzer oder Mitglied eines Repositories ist.
|
||||
- Bei **privaten Repositories** musst du explizit Berechtigungen vergeben.
|
||||
- Bei Organisationen sicherstellen, dass der Benutzer einem Team mit Zugriffsrechten zugeordnet ist.
|
||||
|
||||
> [!NOTE]
|
||||
> Administratoren sehen Repositories nicht automatisch.
|
||||
> Die Rechte müssen pro Projekt oder Organisation vergeben werden.
|
||||
|
||||
### Push schlägt fehl
|
||||
|
||||
Wenn beim Push-Vorgang eine Fehlermeldung wie
|
||||
`remote: invalid username or password`
|
||||
oder
|
||||
`fatal: Authentication failed`
|
||||
erscheint:
|
||||
|
||||
- Prüfe, ob du über **HTTPS mit Token** oder **SSH mit Schlüssel** arbeitest.
|
||||
- Für HTTPS: Im Benutzerprofil unter **Applications → Generate Token** einen neuen Token erzeugen und als Passwort verwenden.
|
||||
- Für SSH: Schlüssel neu hinterlegen (**Profil → SSH Keys → Add Key**) und Verbindung prüfen.
|
||||
|
||||
> [!TIP]
|
||||
> Benutzername beim Push ist dein Gitea-Account, Passwort ist der Token.
|
||||
> Tokens können beliebig oft neu erzeugt werden, ohne das Benutzerpasswort zu ändern.
|
||||
|
||||
### Fehlerhafte ROOT_URL oder falsche Links
|
||||
|
||||
Wenn Repository-Links oder Webhooks noch auf die interne IP zeigen, obwohl HTTPS aktiv ist:
|
||||
|
||||
1. Datei `/gitea/gitea/conf/app.ini` öffnen.
|
||||
2. Im Abschnitt `[server]` prüfen:
|
||||
```
|
||||
ROOT_URL = https://git.deinedomain.tld/
|
||||
```
|
||||
3. Gitea neu starten:
|
||||
```bash
|
||||
docker compose restart
|
||||
```
|
||||
|
||||
> [!NOTE]
|
||||
> Änderungen an der ROOT_URL werden erst nach dem Neustart wirksam.
|
||||
|
||||
### SSH-Verbindung schlägt fehl
|
||||
|
||||
Wenn `ssh git@git.deinedomain.tld -p 222` keine Verbindung aufbaut:
|
||||
|
||||
- Prüfen, ob im Compose-File der Port `222:22` korrekt gesetzt ist.
|
||||
- Firewall (UFW) prüfen, ob `222` erlaubt ist.
|
||||
- Wenn du SSH nur intern verwenden willst, Portweiterleitung im Router entfernen.
|
||||
|
||||
### Port oder Dienst blockiert
|
||||
|
||||
Wenn der Container nicht startet oder „port already in use“ erscheint:
|
||||
|
||||
1. Prüfen, ob ein anderer Dienst Port 3000 oder 222 nutzt:
|
||||
```bash
|
||||
ss -tuln | grep 3000
|
||||
```
|
||||
2. Falls ja, Compose-File anpassen und einen anderen Host-Port verwenden, z. B. `3020:3000`.
|
||||
|
||||
### Datenbank- oder Berechtigungsfehler
|
||||
|
||||
Wenn beim Starten im Log ein Fehler wie `permission denied` oder `read-only file system` erscheint:
|
||||
|
||||
- Prüfen, ob das Volume korrekt gemountet ist (`./gitea:/data`).
|
||||
- Dateirechte sicherstellen:
|
||||
```bash
|
||||
chown -R 1000:1000 /gitea
|
||||
chmod -R 755 /gitea
|
||||
```
|
||||
- Container neu starten.
|
||||
|
||||
> [!TIP]
|
||||
> UID 1000 entspricht dem Standardbenutzer `git` im Container.
|
||||
> Diese Zuordnung muss stimmen, sonst kann Gitea keine Repositories anlegen.
|
||||
|
||||
### Regelmäßige Kontrolle
|
||||
|
||||
Damit der Container langfristig stabil bleibt:
|
||||
|
||||
- Einmal pro Monat Systemupdates durchführen:
|
||||
```bash
|
||||
apt update && apt upgrade -y
|
||||
```
|
||||
- Docker-Container und Volumes regelmäßig prüfen:
|
||||
```bash
|
||||
docker ps -a
|
||||
docker system prune
|
||||
```
|
||||
- Backups des Ordners `/gitea` in dein Kopia- oder externes Sicherungssystem einbinden.
|
||||
|
||||
> [!TIP]
|
||||
> Eine einfache Routine:
|
||||
> - Monatlich Updates
|
||||
> - Wöchentlich Funktionstest
|
||||
> - Nach jeder Änderung an Repositories ein Backup starten
|
||||
> Damit bleibt deine Gitea-Instanz wartungsarm und jederzeit einsatzbereit.
|
||||
|
||||
---
|
||||
|
||||
## Troubleshooting & Tipps
|
||||
|
||||
Auch wenn Gitea im Normalbetrieb sehr stabil läuft, können während oder nach der Einrichtung kleinere Probleme auftreten.
|
||||
Die folgenden Punkte decken die häufigsten Ursachen ab und zeigen, wie du sie schnell behebst.
|
||||
|
||||
### Gitea-Weboberfläche nicht erreichbar
|
||||
|
||||
Wenn `https://git.deinedomain.tld` nicht geladen wird oder eine Fehlermeldung wie *Verbindung fehlgeschlagen* erscheint:
|
||||
|
||||
1. Prüfe, ob der Container aktiv ist:
|
||||
```bash
|
||||
docker ps
|
||||
```
|
||||
Wenn Gitea nicht angezeigt wird, neu starten:
|
||||
```bash
|
||||
docker compose up -d
|
||||
```
|
||||
2. Wenn der Dienst läuft, aber nur per IP erreichbar ist, liegt der Fehler meist am Proxy-Eintrag:
|
||||
- Im Nginx Proxy Manager prüfen, ob der **Forward-Port** auf `3000` gesetzt ist.
|
||||
- Gültiges SSL-Zertifikat bestätigen.
|
||||
3. Browser-Cache leeren und Seite erneut aufrufen.
|
||||
|
||||
> [!TIP]
|
||||
> Wenn du Gitea erst frisch über HTTPS angebunden hast, kann es bis zu einer Minute dauern, bis der Proxy und das Zertifikat aktiv sind.
|
||||
|
||||
### Anmeldung funktioniert, aber Repositories fehlen
|
||||
|
||||
Wenn du dich erfolgreich anmeldest, aber keine Repositories angezeigt werden:
|
||||
|
||||
- Prüfe in **Site Administration → Benutzer**, ob dein Konto Besitzer oder Mitglied eines Repositories ist.
|
||||
- Bei **privaten Repositories** musst du explizit Berechtigungen vergeben.
|
||||
- Bei Organisationen sicherstellen, dass der Benutzer einem Team mit Zugriffsrechten zugeordnet ist.
|
||||
|
||||
> [!NOTE]
|
||||
> Administratoren sehen Repositories nicht automatisch.
|
||||
> Die Rechte müssen pro Projekt oder Organisation vergeben werden.
|
||||
|
||||
### Push schlägt fehl
|
||||
|
||||
Wenn beim Push-Vorgang eine Fehlermeldung wie
|
||||
`remote: invalid username or password`
|
||||
oder
|
||||
`fatal: Authentication failed`
|
||||
erscheint:
|
||||
|
||||
- Prüfe, ob du über **HTTPS mit Token** oder **SSH mit Schlüssel** arbeitest.
|
||||
- Für HTTPS: Im Benutzerprofil unter **Applications → Generate Token** einen neuen Token erzeugen und als Passwort verwenden.
|
||||
- Für SSH: Schlüssel neu hinterlegen (**Profil → SSH Keys → Add Key**) und Verbindung prüfen.
|
||||
|
||||
> [!TIP]
|
||||
> Benutzername beim Push ist dein Gitea-Account, Passwort ist der Token.
|
||||
> Tokens können beliebig oft neu erzeugt werden, ohne das Benutzerpasswort zu ändern.
|
||||
|
||||
### Fehlerhafte ROOT_URL oder falsche Links
|
||||
|
||||
Wenn Repository-Links oder Webhooks noch auf die interne IP zeigen, obwohl HTTPS aktiv ist:
|
||||
|
||||
1. Datei `/gitea/gitea/conf/app.ini` öffnen.
|
||||
2. Im Abschnitt `[server]` prüfen:
|
||||
```
|
||||
ROOT_URL = https://git.deinedomain.tld/
|
||||
```
|
||||
3. Gitea neu starten:
|
||||
```bash
|
||||
docker compose restart
|
||||
```
|
||||
|
||||
> [!NOTE]
|
||||
> Änderungen an der ROOT_URL werden erst nach dem Neustart wirksam.
|
||||
|
||||
### SSH-Verbindung schlägt fehl
|
||||
|
||||
Wenn `ssh git@git.deinedomain.tld -p 222` keine Verbindung aufbaut:
|
||||
|
||||
- Prüfen, ob im Compose-File der Port `222:22` korrekt gesetzt ist.
|
||||
- Firewall (UFW) prüfen, ob `222` erlaubt ist.
|
||||
- Wenn du SSH nur intern verwenden willst, Portweiterleitung im Router entfernen.
|
||||
|
||||
### Port oder Dienst blockiert
|
||||
|
||||
Wenn der Container nicht startet oder „port already in use“ erscheint:
|
||||
|
||||
1. Prüfen, ob ein anderer Dienst Port 3000 oder 222 nutzt:
|
||||
```bash
|
||||
ss -tuln | grep 3000
|
||||
```
|
||||
2. Falls ja, Compose-File anpassen und einen anderen Host-Port verwenden, z. B. `3020:3000`.
|
||||
|
||||
### Datenbank- oder Berechtigungsfehler
|
||||
|
||||
Wenn beim Starten im Log ein Fehler wie `permission denied` oder `read-only file system` erscheint:
|
||||
|
||||
- Prüfen, ob das Volume korrekt gemountet ist (`./gitea:/data`).
|
||||
- Dateirechte sicherstellen:
|
||||
```bash
|
||||
chown -R 1000:1000 /gitea
|
||||
chmod -R 755 /gitea
|
||||
```
|
||||
- Container neu starten.
|
||||
|
||||
> [!TIP]
|
||||
> UID 1000 entspricht dem Standardbenutzer `git` im Container.
|
||||
> Diese Zuordnung muss stimmen, sonst kann Gitea keine Repositories anlegen.
|
||||
|
||||
### Regelmäßige Kontrolle
|
||||
|
||||
Damit der Container langfristig stabil bleibt:
|
||||
|
||||
- Einmal pro Monat Systemupdates durchführen:
|
||||
```bash
|
||||
apt update && apt upgrade -y
|
||||
```
|
||||
- Docker-Container und Volumes regelmäßig prüfen:
|
||||
```bash
|
||||
docker ps -a
|
||||
docker system prune
|
||||
```
|
||||
- Backups des Ordners `/gitea` in dein Kopia- oder externes Sicherungssystem einbinden.
|
||||
|
||||
> [!TIP]
|
||||
> Eine einfache Routine:
|
||||
> - Monatlich Updates
|
||||
> - Wöchentlich Funktionstest
|
||||
> - Nach jeder Änderung an Repositories ein Backup starten
|
||||
> Damit bleibt deine Gitea-Instanz wartungsarm und jederzeit einsatzbereit.
|
||||
|
||||
Reference in New Issue
Block a user