Gitea / Forgejo Installation: Self-Hosted Git-Server
Gitea oder Forgejo Docker-Installation, Repository-Verwaltung, CI/CD (Gitea Actions), SSH-Key-Konfiguration, Organisations- und Teamverwaltung, Mirror und Webhook.
Inhaltsverzeichnis
Gitea / Forgejo Installation: Self-Hosted Git-Server
Gitea und Forgejo sind quelloffene, leichtgewichtige, self-hosted Alternativen zu GitHub und GitLab. Sie können Git-Repositories auf Ihrem eigenen Server hosten, CI/CD-Pipelines ausführen und mit Ihrem Team an Code zusammenarbeiten. Forgejo ist ein community-fokussierter Fork von Gitea, und beide sind weitgehend miteinander kompatibel.
Gitea vs Forgejo
| Merkmal | Gitea | Forgejo |
|---|---|---|
| Lizenz | MIT | GPL-3.0 |
| Verwaltung | Unternehmensgestützt | Community-verwaltet |
| Kompatibilität | Referenzimplementierung | Gitea-kompatibel |
| Updates | Regelmäßig | Häufiger |
| Empfohlen für | Unternehmen | Community |
Beide Projekte verwenden dieselbe docker-compose-Struktur; nur der Image-Name unterscheidet sich.
Systemanforderungen
- Server mit Docker und Docker Compose
- Mindestens 512 MB RAM (1 GB empfohlen)
- PostgreSQL oder MySQL (empfohlen) oder SQLite
- Port 22 oder benutzerdefinierter Port für SSH-Zugriff
Installation mit Docker
docker-compose.yml (Gitea)
version: '3.8'
services:
gitea:
image: gitea/gitea:latest
container_name: gitea
restart: unless-stopped
environment:
- USER_UID=1000
- USER_GID=1000
- GITEA__database__DB_TYPE=postgres
- GITEA__database__HOST=db:5432
- GITEA__database__NAME=gitea
- GITEA__database__USER=gitea
- GITEA__database__PASSWD=starkes-passwort
- GITEA__server__DOMAIN=git.example.com
- GITEA__server__SSH_DOMAIN=git.example.com
- GITEA__server__ROOT_URL=https://git.example.com/
- GITEA__server__SSH_PORT=2222
volumes:
- ./gitea-data:/data
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
ports:
- "127.0.0.1:3000:3000"
- "2222:22"
depends_on:
- db
db:
image: postgres:15
container_name: gitea-db
restart: unless-stopped
environment:
POSTGRES_DB: gitea
POSTGRES_USER: gitea
POSTGRES_PASSWORD: starkes-passwort
volumes:
- postgres-data:/var/lib/postgresql/data
volumes:
postgres-data:
Wechsel zu Forgejo
# Nur die Image-Zeile ändern:
image: codeberg.org/forgejo/forgejo:latest
# Container starten
docker compose up -d
# Logs prüfen
docker logs gitea -f
Nginx Reverse Proxy
server {
listen 80;
server_name git.example.com;
return 301 https://$host$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;
client_max_body_size 512M;
location / {
proxy_pass http://127.0.0.1:3000;
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;
}
}
Erstkonfiguration
Nach der Installation unter https://git.example.com:
- Datenbankeinstellungen werden automatisch ausgefüllt (aus env)
- Allgemeine Einstellungen: Seitentitel, Admin-E-Mail
- Admin-Konto erstellen
- Einrichtung abschließen
Erweiterte Konfiguration mit app.ini
[server]
DOMAIN = git.example.com
ROOT_URL = https://git.example.com/
SSH_DOMAIN = git.example.com
SSH_PORT = 2222
DISABLE_SSH = false
[service]
DISABLE_REGISTRATION = true
REQUIRE_SIGNIN_VIEW = false
[mailer]
ENABLED = true
FROM = gitea@example.com
SMTP_ADDR = smtp.example.com
SMTP_PORT = 587
USER = gitea@example.com
PASSWD = smtp-passwort
SSH-Key-Konfiguration
Benutzer-SSH-Key hinzufügen
# SSH-Key generieren
ssh-keygen -t ed25519 -C "benutzer@example.com"
# Public Key kopieren
cat ~/.ssh/id_ed25519.pub
In Gitea: Profil → Einstellungen → SSH/GPG-Schlüssel → SSH-Schlüssel hinzufügen
Clone via SSH
# Clone via SSH (Port 2222)
git clone ssh://git@git.example.com:2222/benutzer/repo.git
# Vereinfachung mit ~/.ssh/config
Host git.example.com
HostName git.example.com
User git
Port 2222
IdentityFile ~/.ssh/id_ed25519
# Nach der Konfiguration
git clone git@git.example.com:benutzer/repo.git
Repository-Verwaltung
Repository erstellen
mkdir myproject && cd myproject
git init
git add .
git commit -m "Erster Commit"
git remote add origin https://git.example.com/benutzer/myproject.git
git push -u origin main
Mirror-Repository
Neues Repository → Migrieren → GitHub/GitLab/Bitbucket
- Clone-URL: https://github.com/user/repo.git
- Mirror (Auto-Sync): Aktiviert
- Sync-Intervall: 8 Stunden
Gitea Actions (CI/CD)
Actions Runner einrichten
runner:
image: gitea/act_runner:latest
container_name: gitea-runner
restart: unless-stopped
environment:
- GITEA_INSTANCE_URL=https://git.example.com
- GITEA_RUNNER_REGISTRATION_TOKEN=RUNNER_TOKEN
- GITEA_RUNNER_NAME=my-runner
volumes:
- ./runner-data:/data
- /var/run/docker.sock:/var/run/docker.sock
Workflow-Datei
# .gitea/workflows/ci.yml
name: CI Pipeline
on:
push:
branches: [main, develop]
pull_request:
branches: [main]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Node.js einrichten
uses: actions/setup-node@v3
with:
node-version: '20'
- name: Abhängigkeiten installieren
run: npm ci
- name: Tests ausführen
run: npm test
- name: Build
run: npm run build
Organisations- und Teamverwaltung
Organisation erstellen:
+ → Neue Organisation → Name und Sichtbarkeit
Team erstellen:
Organisation → Teams → Neues Team
- Berechtigungen: Eigentümer, Admin, Schreiben, Lesen
- Repository-Zugriff: Spezifisch oder alle
Mitglied einladen:
Team → Mitglieder → Benutzer hinzufügen
Backup
# Gitea-Daten sichern
docker exec gitea gitea dump -c /data/gitea/conf/app.ini
# Datenbank-Backup
docker exec gitea-db pg_dump -U gitea gitea > gitea-db-$(date +%Y%m%d).sql
# Gesamtes Datenverzeichnis
tar -czf gitea-backup-$(date +%Y%m%d).tar.gz ./gitea-data/
Mit Gitea/Forgejo auf REXE VPS-Servern können Sie die gesamte Code-Infrastruktur Ihres Teams verwalten. 1 GB RAM ist ideal für kleine bis mittlere Teams.
Verwandte Artikel
Coolify Installation: Anwendungs-Deployment mit Self-Hosted PaaS
Coolify-Installation, Docker- und Git-Integration, Anwendungs-Deployment, Datenbankverwaltung, SSL-Zertifikate, Umgebungsvariablen und Self-Hosted PaaS als Alternative zu Heroku/Netlify.
Nextcloud Installation: Self-Hosted Cloud-Speicher und Zusammenarbeit
Nextcloud-Installation mit Docker, Apache/Nginx-Konfiguration, Datenbankeinrichtung, SSL-Zertifikat, Dateisynchronisierung, App-Store und Leistungsoptimierung.
Docker-Verwaltung mit Portainer: Webbasierte Container-Kontrolle
Portainer CE Installation, Docker- und Kubernetes-Verwaltung, Stack-Deployment, Volume/Netzwerk-Verwaltung, Benutzerautorisierung, Webhook und GitOps-Integration.