Wer mit Software arbeitet (ob alleine oder im Team) kommt irgendwann zu der Erkenntnis, dass man seinen Quellcode in irgendeiner Weise versionieren sollte. Über die Jahre in denen ich mit Software arbeite habe ich schon einige Systeme wie CVS, SVN, FreeVCS oder GIT ausprobiert.
In den letzten Jahren war es dann fast ausschließlich GIT. Alle anderen Systeme waren nur noch marginal anzutreffen.
Meine VCS Geschichte
Schon sehr früh wollte ich mein eigenes Version Control System (VCS) haben. So hatte ich 2012 z.B. mit Gitosis gearbeitet. Gitosis war ein einfaches Tool, welches seine Konfiguration selbst in GIT ablegte um GIT Repositories zu verwalten. Dafür hatte ich seinerzeit sogar Web-Oberfläche programmiert und diese über Github veröffentlicht.
Da ich im Büro Gitlab als VCS eingeführt hatte, dachte ich, dass es eine gute Idee wäre dieses auch privat zu betreiben. Auf meinem NAS über Docker war diese auch möglich. Allerdings hat Gitlab doch relativ hohe Anforderungen. Irgendwann musste ich schon zugeben, dass Gitlab für eine Person wie mich doch etwas überdimensioniert war. Ich hatte quasi mit Kanonen auf Spatzen geschossen.
Als ich dann Gitea entdeckte, war Gitlab auch relativ schnell ersetzt.
Warum Gitea?
Gitea ist eine golang kompilierte Software die auf allen gängigen Betriebssystemen lauffähig ist (auch unter Windows). Auf der Webseite beschreibt sich Gitea selbst als A painless self-hosted Git service. Und das kann ich nur unterstreichen.
Die Installation geht wie in letzter Zeit bei mir gewohnt über Docker recht schnell. Es wird ein offizielles Docker-Image angeboten.
Es existieren eigentlich keine Abhängigkeiten. Zur Datenverwaltung kann Gitea mit einer der folgenden Datenbanken betrieben werden:
- MySQL
- PostgreSQL
- SQLite3
- MSSQL
- TiDB
Wie fast alle in golang geschrieben Anwendungen wird relativ wenig Arbeitsspeicher benötigt. Auch die Docker-Images sind sehr klein. Wo Gitlab bei mir noch (nach Optimierung) mindestens 1 GB Arbeitsspeicher benötigt hatte, komme ich nun mit ca. 130 MB aus. Das Docker-Image der Version 1.10 ist 103,2 MB groß.
Mein Setup
Wenn relativ wenig Betrieb auf dem System ist, reicht sogar eine SQLite DB aus. Ich habe mich für die empfohlene PostgreSQL Variante entschieden.
version: "2"
services:
gitea:
container_name: gitea
image: gitea/gitea:1.10
restart: unless-stopped
ports:
- "3000:3000"
- "22:22"
volumes:
- ./volumes/gitea:/data
depends_on:
- gitea_db
gitea_db:
container_name: gitea_db
image: postgres:9.6
restart: unless-stopped
environment:
- POSTGRES_USER=gitea
- POSTGRES_PASSWORD=<my-password>
- POSTGRES_DB=gitea
volumes:
- ./volumes/postgres:/var/lib/postgresql/data
Funktionen
Wer Gitlab nutzt weiß, dass die Software zwar viel Speicher benötigt aber auch einige Funktionen mitbringt. Wer jetzt glaube, dass Gitea wenig Funktionen besitzt, der täuscht sich.
Gitea kommt u.A. damit um die Ecke:
- Dashboard mit Statistiken
- Wiki
- Issues mit Milestones
- Pull Requests
- Mehrsprachigkeit
- Authentifizierung über diverse Quellen (u.a. OAuth, PAM, LDAP)
- 2FA
- Umfangreiche REST API
- Repository Importer
- Benutzerverwaltung
- Release Management
- Source Code Browser
- Git-Hooks
- Webhooks
- Deploy-Key Verwaltung
Fazit
Für mich ist das System nicht mehr wegzudenken. Es läuft einfach super stabil. Probleme hatte ich bisher seit der Einführung keine.
Ich selbst habe das System noch mit dem CI-System Drone-CI kombiniert. Dadurch kann man sich auch eine Continuous Integration Umgebung zuhause einrichten. Dazu werde ich bei Gelegenheit aber einen eigenen Artikel verfassen.
Vielleicht habe ich euch damit jetzt etwas für das System interessiert und ihr wollt es selbst Mal ausprobieren.
Fragen, Anregungen oder Erfahrung dürft Ihr gerne hier als Kommentar hinterlassen.
Viel Spaß!