Gitea Self Hosted Git Server Installation
Gitea Self-Hosted Git Server Installation auf Ubuntu
Was ist Gitea?
Gitea ist ein leichtgewichtiger, selbst gehosteter Git-Service, der eine einfachere und ressourcenschonendere Alternative zu GitHub oder GitLab darstellt. Gitea bietet die Kernfunktionalität zur Verwaltung von Git-Repositories, Benutzerkonten, Zugriffskontrolle und mehr – alles auf Ihrem eigenen Server.
Vorteile von Gitea
- Sehr leichtgewichtig (kann auf kleinsten Servern laufen)
- Einfache Installation und Konfiguration
- Geringer Memory-Footprint (<100MB)
- Schnelle Performance
- Vollständige Kontrolle über Ihre Code-Repositories
- Keine unnötigen Features wie GitLab
- Web-UI für Repository-Verwaltung
- API für Automatisierung
Voraussetzungen
- Ubuntu 20.04 oder neuer
- Docker und Docker Compose
- Eine Domain für Zugriff (z.B. git.example.com)
- Nginx als Reverse Proxy
- SSH-Server für Git-over-SSH
- Mindestens 1GB RAM, 20GB Speicher
Installation mit Docker Compose
Schritt 1: Verzeichnis vorbereiten
mkdir -p /opt/gitea cd /opt/gitea mkdir -p gitea_data
Schritt 2: docker-compose.yml erstellen
cat > docker-compose.yml << 'EOF'
version: '3.8'
services:
gitea:
image: gitea/gitea:latest
container_name: gitea
restart: always
ports:
- "3000:3000"
- "2222:22"
environment:
- USER_UID=1000
- USER_GID=1000
- GITEA__database__DB_TYPE=sqlite3
- GITEA__database__PATH=/data/gitea/gitea.db
- GITEA__server__ROOT_URL=https://git.example.com/
- GITEA__server__DOMAIN=git.example.com
- GITEA__server__HTTP_PORT=3000
- GITEA__server__SSH_PORT=2222
- GITEA__server__START_SSH_SERVER=true
- GITEA__service__DISABLE_REGISTRATION=false
- GITEA__security__INSTALL_LOCK=true
- GITEA__mailer__ENABLED=true
- GITEA__mailer__SMTP_ADDR=mail.example.com
- GITEA__mailer__SMTP_PORT=587
- GITEA__mailer__FROM=gitea@example.com
- GITEA__mailer__USER=your-smtp-user
- GITEA__mailer__PASSWD=your-smtp-password
volumes:
- ./gitea_data:/data
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
networks:
- gitea-net
networks:
gitea-net:
driver: bridge
EOF
Schritt 3: Optional – PostgreSQL für größere Installationen
Für einfache Setups ist SQLite ausreichend. Für mehr als 100 Benutzer sollten Sie PostgreSQL verwenden:
cat > docker-compose-postgres.yml << 'EOF'
version: '3.8'
services:
postgres:
image: postgres:15-alpine
container_name: gitea-db
restart: always
environment:
POSTGRES_DB: gitea
POSTGRES_USER: gitea
POSTGRES_PASSWORD: ${DB_PASSWORD}
volumes:
- postgres_data:/var/lib/postgresql/data
networks:
- gitea-net
gitea:
image: gitea/gitea:latest
container_name: gitea
restart: always
ports:
- "3000:3000"
- "2222:22"
environment:
- GITEA__database__DB_TYPE=postgres
- GITEA__database__HOST=postgres:5432
- GITEA__database__NAME=gitea
- GITEA__database__USER=gitea
- GITEA__database__PASSWD=${DB_PASSWORD}
- GITEA__server__ROOT_URL=https://git.example.com/
- GITEA__server__DOMAIN=git.example.com
- GITEA__server__HTTP_PORT=3000
- GITEA__server__SSH_PORT=2222
volumes:
- ./gitea_data:/data
depends_on:
- postgres
networks:
- gitea-net
volumes:
postgres_data:
networks:
gitea-net:
driver: bridge
EOF
Nginx Reverse Proxy Konfiguration
Nginx-Konfiguration erstellen
cat > /etc/nginx/sites-available/gitea << 'EOF'
upstream gitea {
server 127.0.0.1:3000;
}
server {
listen 80;
server_name git.example.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
server_name git.example.com;
ssl_certificate /etc/letsencrypt/live/git.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/git.example.com/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
client_max_body_size 512M;
location / {
proxy_pass http://gitea;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_http_version 1.1;
proxy_set_header Connection "";
}
}
EOF
Nginx aktivieren und SSL-Zertifikat
sudo ln -s /etc/nginx/sites-available/gitea /etc/nginx/sites-enabled/ sudo apt-get install certbot python3-certbot-nginx sudo certbot certonly --nginx -d git.example.com sudo nginx -t sudo systemctl restart nginx
Gitea starten
cd /opt/gitea docker-compose up -d
Überprüfen Sie die Logs:
docker-compose logs -f gitea
Initiales Setup
Schritt 1: Willkommen-Seite aufrufen
Öffnen Sie: https://git.example.com
Sie sehen die Installationsseite, wo Sie folgende Einstellungen vornehmen:
Datenbankeinstellungen
- Datenbanktyp: SQLite3 (oder PostgreSQL)
- Pfad: /data/gitea/gitea.db (für SQLite)
Allgemeine Einstellungen
- Seiten-URL: https://git.example.com
- SSH-Port: 2222
Admin-Konto erstellen
- Admin-Benutzername: admin
- Admin-Passwort: (starkes Passwort)
- Admin-E-Mail: admin@example.com
Zusätzliche Einstellungen
- Registrierung aktivieren: Ja (später deaktivierbar)
- E-Mail-Konfiguration: Optional
Klicken Sie "Install Gitea" um die Initialisierung abzuschließen.
Benutzer und Repositories erstellen
Benutzer registrieren/erstellen
- Klicken Sie auf "Register" oben rechts
- Benutzername, E-Mail, Passwort eingeben
- Register Account klicken
Oder als Admin über: Admin Panel → Benutzerverwaltung → Neuen Benutzer erstellen
Erstes Repository erstellen
- Oben rechts "Neues Repository"
- Repository-Name: z.B. "mein-projekt"
- Beschreibung: Optional
- Sichtbarkeit: Public oder Private
- "Repository erstellen" klicken
SSH-Access konfigurieren
SSH-Key auf dem Client generieren
ssh-keygen -t ed25519 -C "max@example.com"
Speichern Sie den Key in ~/.ssh/id_ed25519
Public Key in Gitea hinzufügen
- Oben rechts auf Profil-Icon klicken
- "Settings" → "SSH Keys"
- "Add SSH Key" klicken
- Inhalt von ~/.ssh/id_ed25519.pub einfügen
- Speichern
SSH-Port Forwarding (optional)
Wenn Sie Gitea nicht auf Port 22 laufen lassen, verwenden Sie in .ssh/config:
Host git.example.com
HostName git.example.com
User git
Port 2222
IdentityFile ~/.ssh/id_ed25519
Repository über SSH klonen
git clone ssh://git@git.example.com:2222/username/repository.git
E-Mail-Benachrichtigungen einrichten
SMTP in der Konfiguration
Die SMTP-Einstellungen sind bereits in docker-compose.yml vorhanden. Sie können diese auch im Admin-Panel konfigurieren:
- Admin Panel → Konfiguration → E-Mail-Konfiguration
- SMTP-Server, Port, Benutzername, Passwort eintragen
- Test-E-Mail senden
Backup und Wiederherstellung
Backup erstellen
#!/bin/bash BACKUP_DIR="/backups/gitea" mkdir -p $BACKUP_DIR DATE=$(date +%Y%m%d_%H%M%S) # Gitea-Daten sichern tar -czf $BACKUP_DIR/gitea_$DATE.tar.gz /opt/gitea/gitea_data/ # Optional: In das Admin-Panel gehen und Dump erstellen docker-compose exec gitea bash -c "cd /tmp && gitea dump -c /data/gitea/conf/app.ini" docker cp gitea:/tmp/gitea-dump-*.zip $BACKUP_DIR/ echo "Backup erstellt: $BACKUP_DIR"
Automatisches Backup mit Cron
0 2 * * * /opt/gitea/backup.sh
Wiederherstellung
docker-compose down rm -rf /opt/gitea/gitea_data/* tar -xzf /backups/gitea/gitea_YYYYMMDD_HHMMSS.tar.gz -C /opt/gitea/ docker-compose up -d
Verwaltung und Wartung
Admin-Panel aufrufen
Als Admin-Benutzer: Oben rechts auf Profil → Admin Panel
Benutzer verwalten
- Admin Panel → Benutzerverwaltung
- Benutzer aktivieren/deaktivieren/löschen
- Admin-Rechte vergeben
Repositories sperren/löschen
- Admin Panel → Repositories
- Repository auswählen → Optionen
Gitea vs. GitHub/GitLab – Vergleich
| Merkmal | Gitea | GitHub | GitLab |
|---|---|---|---|
| Self-Hosted | Ja, vollständig | Enterprise nur | Ja, Community und Enterprise |
| Resource-Nutzung | Sehr niedrig (<100MB RAM) | N/A (Cloud) | Hoch (2-4GB RAM) |
| Features | Core-Git-Features | Sehr umfangreich | Sehr umfangreich |
| Setup-Aufwand | Sehr niedrig (5-10 Min) | N/A | Hoch (1+ Stunden) |
| Kosten | Kostenlos (nur Server-Kosten) | Kostenlos/Bezahlt | Kostenlos/Bezahlt |
Häufig gestellte Fragen
Kann ich Repositories von GitHub importieren?
Ja! Beim Erstellen eines Repositories können Sie eine "Mirror" URL angeben und Gitea wird das Repository von GitHub klonen.
Unterstützt Gitea CI/CD?
Gitea selbst hat keine eingebaute CI/CD. Sie können aber externe CI/CD wie Drone, Jenkins oder GitHub Actions über Webhooks integrieren.
Wie kann ich Registrierungen deaktivieren?
Admin Panel → Konfiguration → Service → "Registrierung erlauben" deaktivieren
Updates durchführen
cd /opt/gitea docker-compose pull docker-compose down docker-compose up -d docker-compose logs -f gitea