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 <noreply@anthropic.com>
This commit is contained in:
17
.gitignore
vendored
Normal file
17
.gitignore
vendored
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
# Backups
|
||||||
|
*.tar.gz
|
||||||
|
backups/
|
||||||
|
|
||||||
|
# Logs
|
||||||
|
*.log
|
||||||
|
|
||||||
|
# Environment
|
||||||
|
.env
|
||||||
|
|
||||||
|
# IDE
|
||||||
|
.vscode/
|
||||||
|
.idea/
|
||||||
|
|
||||||
|
# OS
|
||||||
|
.DS_Store
|
||||||
|
Thumbs.db
|
||||||
31
docker/docker-compose.yml
Normal file
31
docker/docker-compose.yml
Normal file
@@ -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
|
||||||
173
docs/INSTALL.md
Normal file
173
docs/INSTALL.md
Normal file
@@ -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
|
||||||
|
```
|
||||||
46
scripts/backup.sh
Normal file
46
scripts/backup.sh
Normal file
@@ -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/
|
||||||
72
scripts/setup.sh
Normal file
72
scripts/setup.sh
Normal file
@@ -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://<SERVER-IP>:3000"
|
||||||
|
echo " SSH: ssh://git@<SERVER-IP>:2222"
|
||||||
|
echo ""
|
||||||
|
echo "Nächste Schritte:"
|
||||||
|
echo " 1. Browser öffnen: http://<SERVER-IP>:3000"
|
||||||
|
echo " 2. Admin-Account erstellen"
|
||||||
|
echo " 3. Repository anlegen"
|
||||||
|
echo ""
|
||||||
|
echo "Backup-Script: /opt/gitea/backup.sh"
|
||||||
|
echo "Backups unter: /opt/gitea-backups/"
|
||||||
Reference in New Issue
Block a user