commit 4bf2207dcf04fa4d721a4c6ff4b96dd3816e6996 Author: Martin Eckardt Date: Sun Dec 28 14:01:12 2025 +0100 Initial commit: Gitea Docker Setup für Proxmox - Docker-Compose Konfiguration - Setup-Script für LXC Container - Backup-Script mit Rotation - Installationsanleitung 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..6520aa3 --- /dev/null +++ b/.gitignore @@ -0,0 +1,17 @@ +# Backups +*.tar.gz +backups/ + +# Logs +*.log + +# Environment +.env + +# IDE +.vscode/ +.idea/ + +# OS +.DS_Store +Thumbs.db diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml new file mode 100644 index 0000000..304469c --- /dev/null +++ b/docker/docker-compose.yml @@ -0,0 +1,31 @@ +version: "3" + +services: + gitea: + image: gitea/gitea:latest + container_name: gitea + environment: + - USER_UID=1000 + - USER_GID=1000 + - GITEA__database__DB_TYPE=sqlite3 + - GITEA__server__ROOT_URL=http://git.local:3000/ + - GITEA__server__SSH_DOMAIN=git.local + - GITEA__server__SSH_PORT=2222 + volumes: + - gitea-data:/data + - /etc/timezone:/etc/timezone:ro + - /etc/localtime:/etc/localtime:ro + ports: + - "3000:3000" # Web UI + - "2222:22" # Git SSH + restart: unless-stopped + networks: + - gitea-net + +networks: + gitea-net: + driver: bridge + +volumes: + gitea-data: + driver: local diff --git a/docs/INSTALL.md b/docs/INSTALL.md new file mode 100644 index 0000000..1b11de3 --- /dev/null +++ b/docs/INSTALL.md @@ -0,0 +1,173 @@ +# Gitea Installation auf Proxmox + +## Voraussetzungen + +- Proxmox VE Server +- Netzwerkzugang zum Proxmox Host + +## 1. LXC Container erstellen + +### Via Proxmox Web-UI: + +1. **Container erstellen** → "Create CT" +2. **Template**: Debian 12 (bookworm) +3. **Ressourcen**: + - CPU: 1-2 Cores + - RAM: 1024 MB (min. 512 MB) + - Disk: 10 GB (erweiterbar) +4. **Netzwerk**: + - Bridge: vmbr0 + - IP: Statische IP empfohlen (z.B. 192.168.1.50/24) +5. **Features**: + - ✅ Nesting aktivieren (für Docker) + +### Via CLI: +```bash +pct create 200 local:vztmpl/debian-12-standard_12.2-1_amd64.tar.zst \ + --hostname gitea \ + --memory 1024 \ + --cores 2 \ + --rootfs local-lvm:10 \ + --net0 name=eth0,bridge=vmbr0,ip=192.168.1.50/24,gw=192.168.1.1 \ + --features nesting=1 \ + --unprivileged 1 \ + --start 1 +``` + +## 2. Container vorbereiten + +```bash +# In den Container einloggen +pct enter 200 + +# Oder via SSH +ssh root@192.168.1.50 +``` + +## 3. Setup-Script ausführen + +Die Dateien aus diesem Repository auf den Container kopieren: + +```bash +# Vom lokalen Rechner (Git Bash/PowerShell): +scp -r docker scripts root@192.168.1.50:/root/ + +# Auf dem Container: +cd /root +chmod +x scripts/*.sh +./scripts/setup.sh +``` + +## 4. Gitea konfigurieren + +1. **Browser öffnen**: `http://192.168.1.50:3000` + +2. **Initiale Konfiguration**: + - Database: SQLite3 (bereits konfiguriert) + - Site Title: "Gitea" + - Server Domain: `git.local` oder IP + - SSH Port: 2222 + +3. **Admin-Account erstellen**: + - Username: admin + - E-Mail: deine@email.de + - Passwort: sicheres Passwort + +## 5. DNS/Hosts konfigurieren (Optional) + +### Windows (als Admin): +``` +notepad C:\Windows\System32\drivers\etc\hosts +``` + +Hinzufügen: +``` +192.168.1.50 git.local +``` + +### Linux/Mac: +```bash +echo "192.168.1.50 git.local" | sudo tee -a /etc/hosts +``` + +## 6. Repository verbinden + +### Neues Repository in Gitea erstellen: +1. "+" → "New Repository" +2. Name: `glueckskonserve` +3. "Create Repository" + +### Lokales Projekt verbinden: +```bash +cd ~/Documents/Projekte/glueckskonserve + +# Remote hinzufügen +git remote add origin ssh://git@git.local:2222/deinuser/glueckskonserve.git + +# Oder via HTTP +git remote add origin http://git.local:3000/deinuser/glueckskonserve.git + +# Pushen +git push -u origin master +``` + +## 7. SSH-Key einrichten (empfohlen) + +```bash +# Key generieren (falls nicht vorhanden) +ssh-keygen -t ed25519 -C "deine@email.de" + +# Public Key anzeigen +cat ~/.ssh/id_ed25519.pub +``` + +Den Public Key in Gitea hinzufügen: +- Settings → SSH/GPG Keys → Add Key + +## Wartung + +### Backup manuell ausführen: +```bash +/opt/gitea/backup.sh +``` + +### Logs anzeigen: +```bash +docker logs gitea -f +``` + +### Gitea updaten: +```bash +cd /opt/gitea +docker compose pull +docker compose up -d +``` + +### Container-Status: +```bash +docker ps +docker stats gitea +``` + +## Troubleshooting + +### Port bereits belegt: +```bash +# Ports prüfen +ss -tlnp | grep -E '3000|2222' + +# docker-compose.yml anpassen falls nötig +``` + +### Gitea startet nicht: +```bash +docker logs gitea +docker compose -f /opt/gitea/docker-compose.yml down +docker compose -f /opt/gitea/docker-compose.yml up -d +``` + +### Berechtigungsprobleme: +```bash +# Volume-Berechtigungen prüfen +docker exec gitea ls -la /data +``` diff --git a/scripts/backup.sh b/scripts/backup.sh new file mode 100644 index 0000000..1aba0d5 --- /dev/null +++ b/scripts/backup.sh @@ -0,0 +1,46 @@ +#!/bin/bash +# Gitea Backup Script +# Erstellt ein Backup der Gitea-Daten + +set -e + +BACKUP_DIR="/opt/gitea-backups" +DATE=$(date +%Y%m%d_%H%M%S) +BACKUP_NAME="gitea-backup-${DATE}.tar.gz" +RETENTION_DAYS=7 + +# Backup-Verzeichnis erstellen +mkdir -p "$BACKUP_DIR" + +echo "=== Gitea Backup gestartet: $(date) ===" + +# Docker Volume Pfad ermitteln +VOLUME_PATH=$(docker volume inspect gitea-data --format '{{ .Mountpoint }}') + +if [ -z "$VOLUME_PATH" ]; then + echo "Fehler: gitea-data Volume nicht gefunden!" + exit 1 +fi + +# Gitea stoppen für konsistentes Backup +echo "Stoppe Gitea..." +cd /opt/gitea && docker compose stop gitea + +# Backup erstellen +echo "Erstelle Backup: $BACKUP_NAME" +tar -czf "${BACKUP_DIR}/${BACKUP_NAME}" -C "$VOLUME_PATH" . + +# Gitea wieder starten +echo "Starte Gitea..." +cd /opt/gitea && docker compose start gitea + +# Alte Backups löschen +echo "Lösche Backups älter als ${RETENTION_DAYS} Tage..." +find "$BACKUP_DIR" -name "gitea-backup-*.tar.gz" -mtime +${RETENTION_DAYS} -delete + +# Backup-Größe anzeigen +BACKUP_SIZE=$(du -h "${BACKUP_DIR}/${BACKUP_NAME}" | cut -f1) +echo "=== Backup abgeschlossen: ${BACKUP_NAME} (${BACKUP_SIZE}) ===" + +# Optional: Backup zu externem Speicher kopieren (auskommentiert) +# rsync -av "${BACKUP_DIR}/${BACKUP_NAME}" user@backup-server:/backups/gitea/ diff --git a/scripts/setup.sh b/scripts/setup.sh new file mode 100644 index 0000000..bd572a4 --- /dev/null +++ b/scripts/setup.sh @@ -0,0 +1,72 @@ +#!/bin/bash +# Gitea Setup Script für Debian/Ubuntu LXC Container +# Ausführen als root auf dem LXC Container + +set -e + +echo "=== Gitea Setup Script ===" +echo "" + +# Prüfen ob als root ausgeführt +if [ "$EUID" -ne 0 ]; then + echo "Bitte als root ausführen: sudo ./setup.sh" + exit 1 +fi + +# System aktualisieren +echo "[1/5] System aktualisieren..." +apt update && apt upgrade -y + +# Docker installieren +echo "[2/5] Docker installieren..." +apt install -y ca-certificates curl gnupg + +install -m 0755 -d /etc/apt/keyrings +curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg +chmod a+r /etc/apt/keyrings/docker.gpg + +echo \ + "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian \ + $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \ + tee /etc/apt/sources.list.d/docker.list > /dev/null + +apt update +apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin + +# Docker starten und aktivieren +systemctl enable docker +systemctl start docker + +# Gitea Verzeichnis erstellen +echo "[3/5] Gitea Verzeichnis einrichten..." +mkdir -p /opt/gitea +cp docker-compose.yml /opt/gitea/ + +# Gitea starten +echo "[4/5] Gitea starten..." +cd /opt/gitea +docker compose up -d + +# Backup-Script einrichten +echo "[5/5] Backup-Script einrichten..." +mkdir -p /opt/gitea-backups +cp backup.sh /opt/gitea/ +chmod +x /opt/gitea/backup.sh + +# Cron-Job für tägliches Backup (03:00 Uhr) +(crontab -l 2>/dev/null; echo "0 3 * * * /opt/gitea/backup.sh >> /var/log/gitea-backup.log 2>&1") | crontab - + +echo "" +echo "=== Setup abgeschlossen! ===" +echo "" +echo "Gitea ist erreichbar unter:" +echo " Web: http://:3000" +echo " SSH: ssh://git@:2222" +echo "" +echo "Nächste Schritte:" +echo " 1. Browser öffnen: http://:3000" +echo " 2. Admin-Account erstellen" +echo " 3. Repository anlegen" +echo "" +echo "Backup-Script: /opt/gitea/backup.sh" +echo "Backups unter: /opt/gitea-backups/"