finished gitlab

This commit is contained in:
ThetaDev 2023-07-22 02:13:02 +02:00
parent 0e45640871
commit 9732eff09a
14 changed files with 558 additions and 66 deletions

View file

@ -1,18 +1,21 @@
# Selfhosting von Open-Source-Entwicklertools
Um effizient an Open-Source-Projekten arbeiten zu können, benötigt man eine
Git-Hosting-Plattform. Diese erlaubt es einem, seinen Code zu veröffentlichen und mit
anderen Personen über das Internet zusammenzuarbeiten. Andere Nutzer und Entwickler
können Softwarefehler melden, Vorschläge für neue Features machen und neuen Code zum
Projekt beitragen.
Um effizient mit anderen Entwicklern an Open-Source-Projekten arbeiten zu können, muss
man den Quellcode seines Projekts veröffentlichen, Aufgaben koordinieren und neue
Codebeiträge entgegen nehmen.
Hierbei kommt fast immer eine Git-Hosting-Plattform zum Einsatz. Diese erlaubt es einem,
sein Repository zu veröffentlichen und mit anderen Personen über das Internet
zusammenzuarbeiten. Andere Nutzer und Entwickler können Softwarefehler melden,
Vorschläge für neue Features machen und neuen Code zum Projekt beitragen.
Der meistgenutzte Git-Hosting-Anbieter ist GitHub. Die Plattform wurde von Tom
Preston-Werner, Chris Wanstrath, P. J. Hyett and Scott Chacon gegründet und ging 2008
ans Netz. 2018 wurde die Firma von Microsoft übernommen.
Der große Vorteil von GitHub ist, dass der Dienst für öffentliche Projekte vollkommen
kostenlos ist. Zudem hat der Dienst mit der am Abstand größten Zahl von Nutzern auch die
meisten potenziellen Beitragenden.
kostenlos ist. Zudem hat der Dienst mit 100 Millionen Nutzern die mit Abstand größte
Community an potenziellen Beitragenden.
GitHub bietet auch einen Continuous-Integration-Dienst namens GitHub Actions an, mit dem
man sein Projekt automatisch testen und veröffentlichen lassen kann. Im Gegensatz zu
@ -29,13 +32,17 @@ ausschließen.
Beispielsweise wurde der russische Webentwickler Nikolay Kuchumov wegen eines einzigen
beleidigenden Issues
[2020 auf GitHub gesperrt](https://medium.com/@catamphetamine/how-github-blocked-me-and-all-my-libraries-c32c61f061d3).
Dabei wurden alle seine Repositories entfernt. Noch absurder: GitHub verlangte eine
Kopie seines Personalausweis um die Sperre wieder aufzuheben.
Dabei wurden alle seine Repositories von der Plattform entfernt. Noch absurder: GitHub
verlangte eine Kopie seines Personalausweis um die Sperre wieder aufzuheben.
Es gibt auch zahlreiche Bespiele von Open Source-Projekten, die von GitHub wegen
Verstößen gegen ihre Nutzungsbedingungen oder DMCA-Reports gesperrt wurden. Das
prominenteste Beispiel hierfür ist der Video-Downloader
Es gibt auch einige Fälle von Open Source-Projekten, die von GitHub wegen angeblichen
Verstößen gegen das amerikanische Urheberrecht (DMCA) gesperrt wurden. Das prominenteste
Beispiel hierfür ist der Video-Downloader
[youtube-dl](github.blog/2020-11-16-standing-up-for-developers-youtube-dl-is-back/).
Auch das Repository der alternativen Smartwatch-App
[Gadgetbridge](https://www.heise.de/news/Pebble-Gadgetbridge-unter-Beschuss-3740625.html)
wurde zeitweise von GitHub gesperrt. Eine selbstgehostete Plattform ist dagegen viel
schwieriger zu sperren.
Ein weiterer Grund für einige Entwickler, die GitHub-Plattform zu verlassen, ist die
Einführung von GitHub Copilot. Hierbei handelt es sich um ein künstliche Intelligenz,
@ -45,11 +52,11 @@ hierbei eine Urheberrechtsverletzung, da der AI-generierte Code Schnipsel aus de
Trainingsdaten enthalten kann, die dann ohne Erwähnung des Urhebers in andere Projekte
eingefügt werden.
Insbesondere bei privaten oder firmeninternen Projekten kann auch Datenschutz ein Grund
sein, auf Webanwendungen von Fremdanbietern (insbesondere im Ausland) zu verzichten und
die Daten auf eigenen Servern zu speichern. Da GitHub nicht quelloffen ist und nur mit
einer kostspieligen Enterprise-Lizenz selbst gehostet werden kann, ist is für solche
Fälle attraktiv, eine Open-Source-Anwendung einzusetzen.
Insbesondere bei privaten oder firmeninternen Projekten kann auch der Datenschutz ein
Grund sein, auf Webanwendungen von Fremdanbietern zu verzichten und die Daten auf
eigenen Servern zu speichern. Da GitHub nicht quelloffen ist und nur mit einer
kostspieligen Enterprise-Lizenz selbst gehostet werden kann, ist is für solche Fälle
attraktiv, eine Open-Source-Anwendung einzusetzen.
Mittlerweile gibt es mehrere Open-Source-Projekte, die Alternativen zu GitHub entwickelt
hat. Im Gegensatz zu proprietären Webdiensten lassen sich diese Anwendungen auf eigenen
@ -59,6 +66,9 @@ In dieser Arbeit werde ich vier von ihnen testen und vergleichen.
## Testkriterien
Ich habe jede Plattform auf meinem Rechner installiert und nach folgenden Kritierien
getestet:
0\. Über das Projekt
Zuerst werde ich einige grundlegende Informationen über die entsprechende Anwendung
@ -78,9 +88,6 @@ werde hierbei bewerten, wie einfach die Installation vonstatten geht.
Monolithisch (d.h. aus einem Dienst) aufgebaute Anwendungen sind in der Regel einfacher
einzurichten, bieten aber weniger Flexibilität bei der Skalierung für viele User.
Zusätzlich bewerte ich, wie gut das Projekt dokumentiert ist und wie schnell man alle
relevanten Informationen für die Einrichtung finden kann.
2\. Systemanforderungen
Hierbei geht es nicht nur um die unterstützten Betriebssysteme und CPU-Architekturen,
@ -94,12 +101,33 @@ Ryzen 5700G-Prozessor (16 Threads) und 32GB RAM. Die angegebene CPU-Auslastung b
sich auf die ausgelasteten Threads (wie in htop angezeigt), d.h. 100% entspricht einem
voll ausgelastetem Thread, 16.000% einem voll ausgelasteten Prozessor.
Neben dem Ressourcenverbrauch im Leerlauf habe ich auch die CPU-Auslastung unter Last
gemessen. Hierfür habe ich das Repository des Linux-Kernels importiert und mir die
Versionsgeschichte und die Blame-Ansicht der Makefile im Stammverzeichnis anzeigen
lassen.
3\. Bedienung
Wie einfach ist die Weboberfläche zu bedienen? Ist es möglich, schnell durch
Repositories zu navigieren? Gibt es eine Suchfunktion, um beispielsweise eine bestimmte
Funktion im Code zu finden?
Zudem habe ich dir Unterstützung für verschiedene Dateiformate getestet. Alle
Plattformen können Code, Markdown und Textdateien darstellen. Binärdateien können auf
diese Weise natürlich nicht dargestellt werden, weswegen einige Plattformen spezielle
Viewer für bestimmte Dateitypen mitbringen. Um dies zu testen, habe ich ein Repository
mit Dateien in folgenden Formaten angelegt.
- Bilder (\*.jpg, \*.svg)
- Tabellen (\*.csv, \*.xlsx, \*.ods)
- Text (\*.rst, \*.tex, \*.docx, \*.odt)
- PDF-Dokumente
- 3D-Modelle (\*.stl)
- Jupyter-Notebooks (\*.ipynb)
Zum Vergleich: GitHub unterstützt alle diese Dateitypen mit Ausnahme von LaTEX- und
MS/Open Office-Dokumenten.
4\. Import bestehender Projekte
Eine gute GitHub-Alternative sollte es dem Entwickler ermöglichen, bestehende Projekte
@ -123,8 +151,9 @@ lässt sie sich mit anderen CI-Diensten integrieren?
7\. Öffentliche Instanzen
Gibt es öffentliche Instanzen dieser Anwendung? Wenn ja, wie beliebt sind sie (ungefähre
Anzahl an Projekten, einige bekannte Projekte).
Nicht jeder möchte den Aufwand betreiben, seine Git-Hosting-Plattform selbst zu hosten.
Deswegen ist es vom Vorteil, wenn es die Möglichkeit gibt, anstelle dessen einer
öffentlichen Instanz beizutreten.
## Quellen

View file

@ -1,17 +1,278 @@
# GitLab
GitLab ist die erste
2011, drei Jahre nach dem Start von GitHub veröffentlichten Dmytro Zaporozhets und Sytse
Sijbrandij die erste Version von GitLab. Damit ist GitLab die erste und bekannteste
Open-Source-Alternative zu GitHub.
GitLab Community Edition ist unter der MIT-Lizenz veröffentlicht. Die Firma hinter
GitLab verfolgt ein "Open Core"-Geschäftsmodell, d.h. einige fortgeschrittene Features
sind nicht in der Community Edition enthalten und erfordern die proprietären Versionen
"Premium" bzw. "Ultimate". Diese sind nur in Form eines Abonnements zum Preis von 29
(Premium) bzw. 99USD (Ultimate) pro Nutzer und Monat erhältlich. Open-Source-Projekte
und Bildungseinrichtungen können die Ultimate-Version kostenfrei nutzen.
Im Kern ist GitLab eine Ruby-on-Rails-Webanwendung. Allerdings sind einige Funktionen
der Plattform (bspw. SSH oder Git-Operationen) an zusätzliche Services ausgelagert. Die
meisten dieser Services sind in Go implementiert. Das Webfrontend wurde mit Vue.js
implementiert.
<img src="./assets/gitlab/architecture.png" alt="GitLab Architektur" width="500"/>
- **Workhorse** Reverse Proxy, der HTTP-Anfragen an Git oder die Hauptanwendung
weiterleitet
- **Gitaly** Microservice zur Speicherung der Git-Repositories und Verarbeitung von
Git-Anfragen
- **GitLab Shell** SSH-Server
- **Sidekiq** Task Queue zur Ausführung von Aufgaben im Hintergrund
GitLab verwendet eine PostgreSQL-Datenbank zur Speicherung seiner Daten. Zudem kommt
eine Redis-Instanz als Cache und Event Queue zum Einsatz.
Getestet wurde GitLab in der Version 16.1.1.
## Installation
Um die Installation der Anwendung trotz ihres Aufbaus aus verschiedenen Services zu
vereinfachen, stellt GitLab ein Omnibus-Paket zur verfügung. Hierbei handelt es sich um
ein Linux-Softwarepaket, das die gesamte GitLab-Anwendung mit allen Services (inklusive
NGINX, Redis und Postgres) beinhalten. Die Pakete sind für die meisten
Linux-Distributionen (Ubuntu, Debian, Alma Linux, CentOS, OpenSUSE, Raspberry Pi OS)
verfügbar.
Um Gitlab als Omnibus-Paket zu installieren, muss man zuerst das Gitlab-Repository zu
seinem System hinzufügen. Hierfür kann man dieses Skript verwenden:
<https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh>.
Danach kann man GitLab mit diesem Befehl installieren und starten:
```
GITLAB_ROOT_PASSWORD="<strongpassword>" EXTERNAL_URL="http://gitlab.example.com" apt install gitlab-ce
```
Der Konfigurationsprozess dauert mehrere Minuten. Wenn der Webserver gestartet ist, kann
man die Weboberfläche aufrufen und sich anmelden (Benutzername: `root`).
GitLab stellt auch ein Docker-Image (`gitlab/gitlab-ce`) zur Verfügung, welches das
Omnibus-Paket beinhaltet. Der Einrichtungsprozess ist der gleiche wie bei einer bare
metal-Installation, mit dem Unterschied dass die Konfiguration durch die
Umgebungsvariable `GITLAB_OMNIBUS_CONFIG` erfolgt.
[Hier](./assets/gitlab/docker-compose.yml) ist die Docker-Compose-Datei, die ich für
meine Testinstallation verwendet habe.
Für Unternehmen und große Organisationen mit Tausenden Nutzern bietet GitLab in ihrer
Dokumentation auch Referenzarchitekturen für hochverfügbare Systemen mit mehreren
Servern.
## Systemanforderungen
GitLab bietet Pakete für eine
[Vielzahl von Linux-Distributionen](https://docs.gitlab.com/ee/administration/package_information/supported_os.html),
sowohl für Intel/AMD als auch für ARM-Prozessoren. Das offizielle Docker-Image ist
jedoch nur für die arm64-Architektur verfügbar.
GitLab hat unter allen getesteten Plattformen den höchsten Ressourcenverbrauch.
Im Leerlauf bewegt sich die CPU-Last auf meinem Testsystem zwischen 3 und 30 Prozent.
Der Arbeitsspeicherverbrauch beträgt ganze 6GB.
Aufwändige Git-Operationen können Lastspitzen über 100% für eine Dauer von bis zu 5
Sekunden pro Anfrage verursachen.
GitLab erwähnt in ihrer Dokumentation, dass man die Konfiguration anpassen kann, um den
Ressourcenverbrauch etwas zu senken. Nachdem ich diese Zeilen zur Konfigurationsdatei
hinzugefügt habe, sank der Speicherbedarf auf 2.8GB und die CPU-Auslastung auf 1-12%.
```
# Reduce the number of running workers to the minimum in order to reduce memory usage
puma['worker_processes'] = 2
sidekiq['max_concurrency'] = 9
# Turn off monitoring to reduce idle cpu and disk usage
prometheus_monitoring['enable'] = false
```
Für eine Installation auf Single Board-Computern und kleinen V-Servern ist der
Speicherverbrauch jedoch weiterhin zu hoch. GitLab gibt als Mindestanforderung 4
CPU-Kerne und 4GB RAM an.
## Bedienung
Gitlab's Weboberfläche wurde mit dem VueJS-Framework realisiert. Die gesamte
Weboberfläche wird somit clientseitig mittels JavaScript gerendert. Dies erlaubt eine
äußerst flüssige Navigation durch die Webseite, da die Seite nicht bei jedem
Navigationsschritt neu geladen wird. Der Nachteil dieser Lösung: Javascript ist für die
Darstellung der Webseite zwingend erforderlich.
GitLab bietet die Möglichkeit, den Code eines Repositories zu durchsuchen. Die
Verwendung einer externen Elasticsearch-Instanz für die Suche und die Möglichkeit, die
gesamte Gitlab-Instanz zu durchsuchen, ist allerdings den kostenpflichtigen Versionen
vorbehalten.
GitLab unterstützt in der Standardkonfiguration die meisten Dateiformate unter den
getesteten Plattformen. Auf der Weboberfläche können Bilder, CSV-Tabellen, PDF-Dokumente
und stl-Modelle betrachtet werden, alternative Markupsprachen wie Restructured Text
werden ebenfalls unterstützt. Es gibt sogar die Möglichkeit, GeoJSON-Dateien (Listen von
GPS-Standorten) auf einer OpenStreetMap-Karte darzustellen.
Eine Besonderheit der Gitea-Weboberfläche stellt die Web-IDE dar. GitLab verfügt über
eine modifizierte Version von Visual Studio Code, mit der man direkt im Browser an
seinen Projekten arbeiten kann.
![GitLab-Web-IDE](./assets/gitlab/web_ide.png)
## Import bestehender Projekte
GitLab erlaubt den Projektimport von GitHub, Bitbucket, FogBugz, Gitea sowie von anderen
GitLab-Instanzen.
Die Importfunktion ist standardmäßig deaktiviert und muss erst in der _Admin Area_
aktiviert werden (_Settings_ \> _General_ \> _Visibility and access controls_ \> _Import
sources_).
Für den Import von GitHub-Projekten muss man sich mit einem Access Token anmelden und
bekommt anschließend eine Übersicht aller Repositories angezeigt. Hier kann man
auswählen, welche Repositories übertragen werden sollten. Der Import umfasst auch
Issues, Pull Requests und Releases.
![GitLab-Import](./assets/gitlab/import.png)
Als einzige Plattform im Test bietet GitLab die Möglichkeit, ein Repository mit
sämtlichen gespeicherten Daten als zip-Datei zu exportieren. Dies erlaubt nicht nur den
Import auf anderen Instanzen sondern bietet dem Nutzer auch eine Backup-Option.
## Zusatzfeatures
GitLab hat von allen getesteten Plattformen die meisten Features. Einige Features sind
jedoch der proprietären Premium/Ultimate Edition vorbehalten, die ich nicht getestet
habe.
Die Projektmanagement-Features von GitLab sind die besten im Test. GitLab erlaubt das
Erstellen von Issues mit Labels, Verantwortlichen, Fälligkeitsterminen und geleisteter
Arbeitszeit. Zudem können Issues zu Meilensteinen hinzugefügt werden.
Issue Boards erlauben einen schnellen Überblick über den alle gerade bearbeiteten
Issues. Es lassen sich Spalten erstellen, die Issues mit einem bestimmten Tag auflisten.
Erstellt man also z.B. zwei Tags: "Implementierung" und "Review" und legt in seinem
Board zwei Spalten hierfür an, erhält man eine Übersicht über den Fortschritt aller
Issues. Issues lassen sich zwischen Spalten verschieben, wodurch sich auch die Tags des
Issues ändern.
![GitLab Kanban](./assets/gitlab/kanban.png)
Ein interessantes Feature ist die Möglichkeit, zu einem Issue mehrere Tasks
hinzuzufügen. Tasks sind Sub-Issues, die ihre eigene Beschreibung und Diskussion haben,
aber unter einem Issue zusammengefasst sind. Auf diese Weise lassen sich große Features
in kleinere Arbeitsschritte aufteilen, die von verschiedenen Teammitgliedern erledigt
werden können.
![GitLab Issue mit Task](./assets/gitlab/issue.png)
Viele fortgeschrittene Projektmanagement-Features sind allerdings der Enterprise Edition
vorbehalten. Hierzu gehört z.B. das Anlegen von Boards mit Filtern (z.B. für einen
bestimmten Meilenstein) oder Aufwandsschätzungen.
Um Projekte zu dokumentieren bietet GitLab ein auf Git und Markdown basierendes Wiki.
Zudem gibt es mit "Snippets" einen Pastebin, der ebenfalls Git zur Speicherung der
Codeschnipsel verwendet.
Es gibt auch die Möglichkeit, mit GitLab statische Webseiten zu hosten. Die Seiten
können mit GitLab CI gebaut und unter einer persönlichen Subdomain veröffentlicht
werden.
GitLab bietet auch eine Paketregistry für Bibliotheken verschiedener Programmiersprachen
(z.B. Maven, npm, Python) an. Die Unterstützung für einige Programmiersprachen wie Ruby
ist allerdings noch experimentell. \*.deb-Pakete sowie Docker-Images können ebenfalls
mit GitLab gehostet werden.
Zur einfachen Bedienung mit der Kommandozeile bietet GitLab das Tool `glab` an. Damit
lassen sich beispielsweise Issues und Pull Requests erstellen und bearbeiten, Snippets
hochladen und CI-Build starten. Es gibt auch ein offizielles VS-Code-Plugin, das
Pull-Requests, Issues und CI-Builds in den Texteditor integriert.
## Continous Integration
Gitlab verfügt über ein eingebautes CI-System, um Software automatisiert zu testen und
zu veröffentlichen. Das System kann Builds in Docker-Containern, auf einem
Kubernetes-Cluster, in einer VirtualBox-Maschine oder ohne Virtualisierung ausführen.
Hierfür verwendet Gitlab ein verteiltes System aus Runnern. Die Runner kommunizieren
über das Internet mit der Gitlab-Instanz und können so neue Buildaufträge
entgegennehmen.
Um einen Runner einzurichten, muss man zuerst die erforderliche Konfigurationsdatei
erstellen. Hierfür startet man den Runner mit dem Befehl `register`:
```
docker run --rm -it -v $(pwd)/runner-config:/etc/gitlab-runner gitlab/gitlab-runner register
```
Daraufhin fragt der Runner nach der URL der Gitlab-Instanz und einem
Registrierungstoken. Den Token kann man sich entweder in den Repository-Einstellungen
oder in der Admin-Oberfläche generieren lassen (je nachdem, ob man den Runner nur zu
einem Projekt oder der gesamten Instanz hinzufügen möchte). Anschließend muss man
festlegen, wie der Runner die Builds ausführen sollte. In meinem Test habe ich den
`docker`-Executor gewählt.
Wenn die Konfiguration abgeschlossen ist, kann man den Runner mit diesem Befehl starten
```
docker run --rm -it -v $(pwd)/runner-config:/etc/gitlab-runner gitlab/gitlab-runner
```
![Runner](./assets/gitlab/runners.png)
Anschließend kann man für sein Repository einen Build definieren. Hierfür muss man eine
Datei mit dem Namen `.gitlab-ci.yml` im Wurzelverzeichnes des Repositories erstellen, in
der die einzelnen Schritte des Builds beschrieben werden. GitLab stellt ein Repository
mit Beispielen für verschiedene Programmiersprachen und Frameworks zur Verfügung, um den
Einstieg zu erleichtern.
```yml
image: "rust:latest"
test:cargo:
script:
- rustc --version && cargo --version # Print version info for debugging
- rustup component add rustfmt clippy
- cargo fmt --all --check
- cargo clippy --all --features=rss -- -D warnings
- cargo test --features=rss --workspace
```
## Öffentliche Instanzen
Gitlab betreibt selbst eine öffentliche Instanz der proprietären Ultimate-Version unter
[gitlab.com](https://gitlab.com/explore/).
Daneben gibt es eine Vielzahl von communitybetriebenen GitLab-Instanzen, die die freie
Community Edition verwenden. Viele große Open-Source-Projekte und Organisationen hosten
eine eigene GitLab-Instanz, wie zum Beispiel [Debian](https://salsa.debian.org),
[Framasoft](https://framagit.org/public/projects/) oder [KDE](https://invent.kde.org).
## Fazit
GitLab ist zu Recht seit mehr als zehn Jahren die führende quelloffene
GitHub-Alternative. Mittlerweile bietet GitLab mehr Features als die Konkurrenz von
Microsoft.
Trotz seiner komplexen Architektur lässt sich GitLab relativ einfach und schnell
installieren, da das Omnibus-Paket die einzelnen Dienste automatisch konfiguriert.
Insbesondere Unternehmen und große Organisationen werden die professionellen Features
und den kommerziellen Support zu schätzen wissen.
Darüber hinaus bietet Gitlab selbst in der Open-Source-Version die besten
Projektmanagement-Features im Test. Wer also keine separate Projektmanagement-Anwendung
einsetzen möchte, ist mit Gitlab ebenfalls gut beraten.
Wer seine Plattform allerdings auf einem kleinen Single Board Computer oder V-Server
betreiben möchte, sollte sich dagegen nach einer leichtgewichtigeren Alternative
umsehen.
## Quellen
- Dokumentation <https://docs.gitlab.com/>
- Repository <https://gitlab.com/gitlab-org/gitlab-foss/>
- Architekturübersicht
<https://docs.gitlab.com/ee/development/architecture.html#gitlab-architecture-overview>
- Liste von öffentlichen GitLab-Instanzen
<https://wiki.p2pfoundation.net/List_of_Community-Hosted_GitLab_Instances>

View file

@ -1,16 +1,96 @@
# Gitea
Das Gitea-Projekt begann 2016 als Fork der Git-Hosting-Plattform Gogs. Lunny Xiao, einer
der Beitragenden von Gogs, war damit unzufrieden, dass der Gründer des Projekts, Joe
Chen, das Projekt alleine betreuen und keine weiteren Maintainer ernennen wollte.
2022 gründete Lunny Xiao die Firma Gitea Limited. Die Firma bietet Unternehmen Hosting-
und Supportdienstleistungen für Gitea an. Da einige Mitglieder der Community einem
kommerziell geleiteten Open-Source-Projekt misstrauen, entstand ein neuer Fork names
Forgejo. Forgejo steht unter der Leitung von Codeberg, einem Berliner Verein, der seit
2018 eine öffentliche Gitea-Instanz betreibt. Abgesehen von Design- und Namensänderungen
unterscheidet sich Forgejo von Gitea momentan kaum.
Gitea ist in Go geschrieben und besteht aus einer einzigen ausführbaren Datei.
Standardmäßig verwendet Gitea eine interne SQLite-Datenbank, alternativ werden auch
externe Datenbanken (MySQL, MariaDB, Postgres, MS SQL) unterstützt.
Getestet wurde die Version 1.20.0rc0.
Die Weboberfläche wied serverseitig mit Templates gerendert. Einige Websitekomponenten
wie z.B. Drop-Down-Menüs erfordern JavaScript.
Getestet wurde die Version 1.20.0-rc2.
## Installation
Gitea stellt kompilierte Binaries für alle gängigen Betriebssysteme unter
<https://dl.gitea.com/gitea/> zur Verfügung. Von dort aus lässt sich die Anwendung
einfach herunterladen und starten.
Alternativ gibt es auch [offizielle](https://pkgs.org/download/gitea) und
[inoffizielle](https://gitea.com/gitea/awesome-gitea/src/branch/main/README.md#user-content-packages)
Pakete für die meisten Linux-Distributionen.
Darüber hinaus stellt Gitea auch ein Docker-Image (`gitea/gitea`) zur Verfügung.
Die Einrichtung ist extrem simpel. Beim ersten Start wird diese Konfigurationsseite
angezeigt, auf der man die grundlegenden Einstellungen (z.B. Datenbank-URL,
Admin-Passwort) vornehmen kann. Nach der Bestätigung ist Gitea in wenigen Sekunden
bereit zur Verwendung.
![Gitea-Konfiguration](./assets/gitea/setup.png)
Dieser Konfigurationsassistent wird jedoch nur beim ersten Start angezeigt. Alle
weiteren Konfigurationsänderungen müssen durch die
`app.ini`-[Konfigurationsdatei](https://docs.gitea.com/1.20/administration/config-cheat-sheet)
erfolgen. Gitea verfügt zwar über eine Admin-Oberfläche, diese dient allerdings
hauptsächlich der Nutzerverwaltung und erlaubt keine Konfigurationsänderungen.
## Systemanforderungen
Gitea ist auf jedem Betriebssystem und jeder CPU-Architektur lauffähig, die von der
Programmiersprache Go unterstützt wird. Binaries für MacOS (amd64/aarch64), FreeBSD
(amd64), Windows (i386/amd64) und Linux (i386/amd64/arm5/arm6/aarch64) werden offiziell
zum Download angeboten. Das offizielle Docker-Image ist für die amd64- und
aarch64-Architektur verfügbar.
Im Leerlauf benötigt der Server ca. 150MB Arbeitsspeicher und verursacht unter 0.1%
CPU-Auslastung. Damit ist Gitea die mit Abstand leichtgewichtigste Plattform in Test und
eignet sich perfekt für den Einsatz auf schwächerer Hardware.
## Bedienung
Die Weboberfläche von Gitea wird serverseitig mit Hilfe von Templates gerendert
(klassische Multi-Page-Anwendung). Dies hat den Vorteil, dass die Seite auch ohne
JavaScript dargestellt werden kann (wenn auch mit eingeschränkter Bedienbarkeit).
Obwohl bei jedem Navigationsschritt durch ein Repository die gesamte Seite neu geladen
wird, läuft die Navigation durch Ordner sehr flüssig.
Optisch und funktional ist die Benutzerschnittstelle stark an GitHub angelehnt. Wer also
vorher GitHub verwendet hat, findet sich auf Gitea schnell zurecht
Der Code in Gitea-Repositories kann durchsucht werden, allerdings ist diese Funktion
standardmäßig deaktiviert. Um sie zu aktivieren, müssen diese Zeilen zur
Konfigurationsdatei hinzugefügt werden:
```
[indexer]
REPO_INDEXER_ENABLED=true
```
Standardmäßig verwendet Gitea die Bibliothek [Bleve](https://blevesearch.com/) für die
Suche, es kann jedoch auch eine externe Elasticsearch-Instanz verwendet werden.
![Gitea-Suche](./assets/gitea/search.png)
Gitea kann standardmäßig Bilder, CSV-Dateien, PDFs und Markdown-Dateien auf der
Weboberfläche darstellen. Andere Markupsprachen wie ReStructured Text werden
standardmäßig nicht unterstützt. Allerdings bietet Gitea als einzige getestete Plattform
die Möglichkeit, zusätzliche Renderer in der Konfigurationsdatei zu definieren.
Beispielsweise kann Gitea Pandoc verwenden, um RST, LaTEX oder Word-Dokumente in HTML zu
konvertieren und anzuzigen. Es ist auch möglich, mit etwas Bastelei einen Viewer für STL
oder Excel-Dateien zu installieren.
## Import bestehender Projekte
Gitea bietet die Möglichkeit, Projekte von GitHub, Gitlab, Gogs, OneDev, GitBucket und
@ -22,6 +102,64 @@ scheiterte jedoch mit einer Fehlermeldung.
## Zusatzfeatures
Gitea bietet grundlegende Features zum Projektmanagement. Issues können erstellt, mit
Labels versehen und bestimmten Entwicklern zugewiesen werden. Es können
Fälligkeitstermine für Issues festgelegt und die Arbeitszeit hinterlegt werden.
Dazu kommt die Möglichkeit, Issues zu Meilensteinen hinzuzufügen und somit
beispielsweise den Arbeitsfortschritt für eine neue Version zu verfolgen.
Darüber hinaus können in Gitea Kanbanboards erstellt werden. Allerdings sind diese
Boards nicht in das restliche Issue-System integriert und deswegen umständlich zu
nutzen. Issues müssen beispielsweise manuell den Boards hinzugefügt werden. Während
GitLab Labels verwendet, um die Issues den Spalten zuzuordnen ist in Gitea außerhalb des
Boards nicht ersichtlich, welchen Status ein Issue hat. Ein Issue, das in die
Done-Spalte verschoben wird, wird nicht automatisch geschlossen. Umgekehrt führt das
Schließen eines Issues nicht zu einer Platzierung in der Done-Spalte.
Dokumentation für Gitea-Repositories kann in einem simplen, auf Markdown basierenden
Wiki veröffentlicht werden.
Das Hosting statischer Webseiten unterstützt Gitea nicht, weswegen das Team von Codeberg
hierfür eine [eigene Lösung](https://codeberg.org/Codeberg/pages-server) entwickelt hat.
Gitea bietet eine integrierte Registry für Pakete aller gängigen Programiersprachen
(z.B. Python, npm, Rust). Wer eine Softwarebibliothek entwickelt, kann diese auf seiner
Gitea-Instanz veröffentlichen, sodass andere Entwickler sie nutzen können. Zudem
unterstützt die Gitea-Registry Linux-Pakete (.deb und .rpm) sowie Docker-Images.
Gitea unterstützt als einzige getestete Plattform agit. Dies ist ein alternativer
Git-Workflow, der von Alibaba entwickelt wurde. Agit erlaubt es Entwicklern, Pull
Requests zu erstellen ohne zuvor einen Fork des Projekts anzulegen. Hierbei wird die
Änderung mit diesem Befehl in einen versteckten Branch des Reposiories gepusht, worauf
Gitea automatisch eine PR erstellt.
Dieser Befehl erfordert im Gegensatz zum normalen push keine Schreibrechte im
entsprechenden Repository.
```
git push origin HEAD:refs/for/main -o topic="feat/user-search" -o title="Add user search"
```
Es existiert auch ein Git-Plugin für agit namens
[`git-repo`](https://git-repo.info/en/2020/03/agit-flow-and-git-repo/), damit man nicht
jedes Mal diesen langen Befehl eintippen muss, sondern den Beschreibungstext direkt in
die Kommandozeile tippen kann.
Gitea lässt sich auch mit dem Tool [`tea`](https://gitea.com/gitea/tea) auf der
Kommandozeile bedienen. Auf diese Weise lassen sich Issues erstellen und lesen oder Pull
Requests erstellen und abrufen.
Gitea bietet dem Administrator vollen Zugriff auf seinen Webserver und das
Templatesystem. Dadurch kann man Templates und Stylesheets durch eigens angepasste
Versionen ersetzen und die Weboberfläche nach seinen Bedürfnissen anpassen. Dies ist
insbesondere für große Organisationen und Firmen interessant, die ihre
Git-Hosting-Plattform nach ihrem Corporate Design gestalten möchten.
Ein Beispiel für eine stark angepasste Gitea-Oberfläche ist die Instanz des
[Blender-Projekts](https://projects.blender.org/), die sich nahtlos in die restliche
Projektseite einfügt.
## Continous Integration
## Öffentliche Instanzen
@ -35,15 +173,30 @@ Zusätzlich zu ihrer Gitea-Instanz bietet Codeberg auch einen Webhosting-Dienst
[\*.codeberg.page](codeberg.page) an. Codeberg betreibt auch einen Woodpecker-CI-Server,
für dessen Verwendung die Nutzer allerdings manuell freigeschaltet werden müssen.
Im Oktober 2022 hat sich Codeberg dazu entschieden, einen Gitea-Fork names Forgejo zu
erstellen. Dies geschah als Reaktion auf die Gründung der Firma Gitea Limited durch die
Maintainer des Projekts. Gitea Limited bietet Unternehmen Hostingdienste für ihre
Software an. Da viele Nutzer und Beitragende ein von der Community geleitetes Projekt
bevorzugen, wurde der Fork ins Leben gerufen. Abgesehen von Design- und Namensänderungen
unterscheidet sich Forgejo von Gitea momentan kaum.
Da Codeberg sehr einfach und günstig zu hosten ist, wird es von einigen Open
Da Gitea sehr einfach und günstig zu hosten ist, wird es von einigen Open
Source-Projekten auch als sekundäre Plattform zusätzlich zu GitHub verwendet.
Beispielsweise betreibt das Team hinter dem alternativen YouTube-Frontend Invidious eine
[Gitea-Instanz](https://gitea.invidious.io/iv-org), um vor eventuellen Takedowns des
Repositories auf GitHub sicher zu sein
## Fazit
Während GitLab meiner Meinung nach die beste Lösung für große Organisationen und
Unternehmen darstellt, ist Gitea das perfekte System für einzelne Entwickler, kleine
Teams und Hobbybastler. Durch seinen sparsamen Ressourcenverbrauch ist Gitea auf fast
jeder Hardware lauffähig und die Einrichtung funktioniert einfach und schnell.
Darüber hinaus lässt sich Gitea mit eigenen Themes und Templates individuell anpassen
und zu seiner persönlichen Website machen.
Die Projektmanagement-Features von Gitea sind allerdings eher rudimentär. Wer
Kanbanboards benötigt, sollte Gitlab oder OneDev in Betracht ziehen oder hierfür eine
externe Software verwenden.
## Quellen
- Projektseite <https://gitea.com>
- Repository <https://github.com/go-gitea/gitea/>
- Start von Codeberg (damals TeaHub)
<https://www.heise.de/news/Neue-Entwickler-Plattform-TeaHub-will-Github-beerben-4078811.html>,
<https://blog.codeberg.org/codebergorg-launched.html>

View file

@ -1,18 +1,18 @@
# Sourcehut
und einem mächtigen Buildsystem - so lässt sich Sourcehut am besten zusammenfassen.
Eine Git-Hosting-Plattform ohne Pull-Requests, einer spartanischen Weboberfläche und
einem mächtigen Buildsystem - so lässt sich Sourcehut am besten zusammenfassen.
![SourceHut homepage](./assets/sourcehut/homepage.png)
Das Projekt steht unter der GNU AGPL 3.0-Lizenz. Sourcehut wird hauptsächlich von Drew
DeVault selbst entwickelt, die einzelnen Repositories haben zwischen 50 und 100
Contributors.
SourceHut begann im
[Oktober 2016](https://git.sr.ht/~sircmpwn/meta.sr.ht/commit/40dcb38349af3f67845857c4ac9003911a653624)
als Hobbyprojekt von Drew DeVault. Drew wollte eine alternative zu den etablierten
Git-Hosting-Diensten entwickeln, die den klassischen E-Mail-basierten Git-Workflow
unterstützt anstatt das Funktionsprinzip von GitHub zu kopieren.
Der
[erste Commit](https://git.sr.ht/~sircmpwn/meta.sr.ht/commit/40dcb38349af3f67845857c4ac9003911a653624)
erfolgte im Oktober 2016,
[im Jahr 2018](https://drewdevault.com/2018/11/15/sr.ht-general-availability.html) war
die Alpha-Version der Software öffentlich unter <https://sr.ht> verfügbar.
[2018](https://drewdevault.com/2018/11/15/sr.ht-general-availability.html) war die
Alpha-Version der Software öffentlich unter <https://sr.ht> verfügbar.
Die Plattform besteht aus einzelnen Komponenten für die verschiedenen Features:
@ -61,7 +61,7 @@ im [Anhang](sourcehut_setup.md) aufgelistet.
## Systemanforderungen
Sourcehut ist auf jedem System lauffähig, das Python3.10 und Go unterstützt. Allerdings
Sourcehut ist auf jedem System lauffähig, das Python 3.10 und Go unterstützt. Allerdings
sind die Pakete momentan nur für die amd64-Architektur verfügbar. Wer Sourcehut also auf
einem Raspberry Pi oder ARM-Server installieren will, muss die Pakete selbst
kompilieren.
@ -84,7 +84,7 @@ besteht, summiert sich der Arbeitsspeicherbedarf auf ca. 1,5GB.
## Bedienung
Sourcehut's Weboberfläche ist spartanisch designt und kommt fast ohne JavaScript aus.
Dadurch ist die Webseite sehr performant, auch auf alten Geräten und Browsern.
Dadurch ist die Webseite ohne Probleme in alten Geräten und Browsern benutzbar.
Die Repository-Ansicht ist klar an GitWeb angelehnt und zeigt die Dateien ähnlich wie
der `ls -l`-Befehl zusammen mit Größe und Berechtigungen an.
@ -95,6 +95,9 @@ Auffinden bestimmter Ordner unter vielen Dateien erschwert.
Eine Suchfunktion gibt es nicht, dadurch ist es schwierig, auf der Webseite durch große
Projekte zu navigieren.
Hinzu kommt, dass die Webseite nur Code und Markdown-Dokumente darstellen kann. Bilder,
PDF-Dokumente oder andere Markupsprachen wie RST werden nicht unterstützt.
![Repository](./assets/sourcehut/repo.png)
Die einzelnen Komponenten von Sourcehut sind eigenständige Webanwendungen. Dies hat den
@ -276,10 +279,14 @@ Allerdings ist die Einrichtung von Sourcehut sehr aufwändig und einige grundleg
Features wie eine Suchfunktion fehlen weswegen ich das System in seinem momentanen
Zustand nicht empfehlen kann.
Hinzu kommt, dass Sourcehut trotz seiner spartanischen Weboberfläche und seinem
reduziertem Funktionsumfang das System mit dem zweithöchsten Ressourcenverbrauch im Test
war.
Da sich Sourcehut wie gesagt noch im Alpha-Stadium befindet, lohnt es sich jedoch das
Projekt weiter zu verfolgen.
## Quellen
- [Projektseite](https://sr.ht/~sircmpwn/sourcehut/)
- [Sourcehut Blog](https://sourcehut.org/blog/)
- Projektseite <https://sr.ht/~sircmpwn/sourcehut/>
- Sourcehut Blog <https://sourcehut.org/blog/>

View file

@ -1,5 +1,9 @@
# OneDev
Abschließen möchte ich meinen Test mit einer weitgehend unbekannten Plattform, die erst
2019 als Hobbyprojekt von zwei Entwicklern veröffentlicht wurde, sich aber in Sachen
Funktionalität nicht vor den anderen Plattformen verstecken muss: OneDev.
![OneDev homepage](./assets/onedev/homepage.png)
OneDev ist in Java geschrieben und verwendet das Webframework Apache Wicket. Das Projekt
@ -9,12 +13,12 @@ Beitragende. Das Projekt ist unter der MIT-Lizenz veröffentlicht.
Der
[erste Commit](https://code.onedev.io/onedev/server/~commits/6be8e3f97c97e44cf6b5a9b8360c299cc55388f6)
erfolgte im April 2012, die erste in Git getaggte Version (2.0.0) wurde 2019
veröffentlicht. Damit ist OneDev die jüngste der vier Plattformen, die ich getestet
habe.
veröffentlicht. Rechnet man mit dem Datum des ersten Release, ist OneDev die jüngste der
vier Plattformen, die ich getestet habe.
OneDev kann eine eingebettete HSQL-Datenbank nutzen, in diesem Fall sind keine
zusätzlichen Dienste zum Betrieb erforderlich. Es werden auch externe Datenbanken
(MySQL, MariaDB, Postgres, MS SQL, Oracle) unterstützt.
OneDev besteht aus einer einzigen Java-Anwendung und erfordert bei Verwendung der
eingebetteten HSQL-Datenbank keine zusätzlichen Dienste zum Betrieb. Es werden auch
externe Datenbanken (MySQL, MariaDB, Postgres, MS SQL, Oracle) unterstützt.
Getestet wurde die Version 8.5.2.
@ -66,6 +70,9 @@ seine Projekte öffentlich verfügbar zu machen, muss noch die Option _Security
## Systemanforderungen
OneDev ist auf jedem System mit Java-Unterstützung lauffähig. Das offizielle
Docker-Image wird für die 64bit Interl/AMD und ARM-Architektur angeboten.
Der Server benötigte auf meinem System ca. 1.2GB Arbeitsspeicher, der CI-Agent ca.
180MB. Die CPU-Auslastung im Leerlauf beträgt auf meinem System (AMD Ryzen 5700G) ca.
1%, mit gelegentlichen Spitzen auf 5-10%.
@ -76,8 +83,13 @@ Suchfunktion habe ich bis zu 50% Auslastung gemessen.
## Bedienung
Das Navigieren durch die Repositories geht sehr flüssig vonstatten, ohne dass die
gesamte Seite neu geladen werden muss.
OneDev verfügt über eine modern gestaltete Weboberfläche, die mit dem Webframework
Apache Wicket realisiert wurde. Das Framework lädt beim Navigieren nur die Teile der
Website vom Server, die sich durch den entsprechenden Navigationsschritt geändert haben
(also z.B. die Dateiliste).
Dadurch geht das Navigieren durch die Repositories sehr flüssig vonstatten, ohne dass
die gesamte Seite neu geladen werden muss.
Ein Alleinstellungsmerkmal von OneDev ist die Suchfunktion. OneDev verwendet nicht nur
eine Textsuchmaschine, sondern analysiert den Code im Repository und bietet so die
@ -96,6 +108,9 @@ CSS, SCSS, LESS und R verfügbar. Rust wird leider nicht unterstützt.
![Code-Navigation](./assets/onedev/code_navigation.png)
OneDev kann auf der Weboberfläche Code, Markdown-Dokumente und Bilder darstellen. Es
gibt keine Unterstützung für alternative Markupsprachen wie RST.
## Import bestehender Projekte
OneDev bietet einen Import-Assistenten mit Unterstützung für GitHub, Gitlab, BitBucket,
@ -110,23 +125,21 @@ Es gibt jedoch nicht die Möglichkeit, Projekte aus anderen OneDev-Instanzen zu
## Zusatzfeatures
OneDev verfügt umfangreiche Tools zum Projektmanagement. Es gibt die Möglichkeit, Issues
zu Meilensteinen zuzuordnen (z.B. _Sprint 14_ oder _Version 2.0_). Zudem verfügt OneDev
über ein Kanbanboard, um Issues je nach Status in mehreren Spalten anzuzeigen.
OneDev verfügt über umfangreiche Tools zum Projektmanagement. Es gibt die Möglichkeit,
Issues zu Meilensteinen zuzuordnen (z.B. _Sprint 14_ oder _Version 2.0_). Zudem verfügt
OneDev über Issue Boards, um Issues je nach Status in mehreren Spalten anzuzeigen.
![Kanbanboard](./assets/onedev/kanban.png)
![OneDev Issue Board](./assets/onedev/kanban.png)
Issues können bestimmten Entwicklern zugewiesen werden und es gibt die Möglichkeit,
Abhängigkeiten zwischen Issues zu definieren (z.B. Issue A muss vor Issue B erledigt
werden).
werden). Was allerdings fehlt ist die Möglichkeit, einem Issue mehrere Labels
zuzuordnen.
Issues können auch als vertraulich markiert werden, sodass sie nur von
Projektmaintainern gelesen werden können. Dies ist vor allem beim Melden von
Sicherheitslücken vorteilhaft.
Es gibt auch die Möglichkeit, statische Webseiten zu hosten. Hierfür ist im Gegensatz zu
Gitlab Pages keine separate Domain nötig. Stattdessen wird die Webseite im
Unterverzeichnis `~site` (z.B. `https://example.com/projectname/~site`) veröffentlicht.
OneDev bietet auch die Möglichkeit, statische Webseiten zu hosten. Hierfür ist im
Gegensatz zu Gitlab Pages keine separate Domain nötig. Stattdessen wird die Webseite im
Unterverzeichnis `~site` des Repositorys (z.B. `https://example.com/user/repo/~site`)
veröffentlicht.
Als einzige getestete Plattform verfügt OneDev über ein Plugin-System. Auf diese Weise
lassen sich neue Features implementieren, ohne die Software verändern zu müssen.
@ -205,7 +218,15 @@ Obwohl OneDev noch relativ jung und weitgehend unbekannt ist, kann es funktional
durchaus mit den Konkurrenten mithalten. Insbesondere die intelligente Suchfunktion und
das einfach zu bedienende CI-System haben mir im Test sehr gut gefallen.
Allerdings ist OneDev immer noch ein Hobbyprojekt von 2 Entwicklern und hat keine Firma
oder größere Organisation hinter sich. Wer OneDev beispielsweise in einem Unternehmen
einsetzen möchte, muss die Einrichtung und den Support selbst übernehmen, da es im
Gegensatz zu GitLab und Gitea keine öffentlichen Instanzen oder SaaS-Angebote gibt.
Wer sich hieran nicht stört, erhält mit OneDev eine leichtgewichtige, einfach zu
installierende und moderne Git-Hosting-Plattform.
## Quellen
- [Projektseite](https://onedev.io/)
- [Repository](https://code.onedev.io/onedev/server)
- Projektseite <https://onedev.io/>
- Repository <https://code.onedev.io/onedev/server>

Binary file not shown.

After

(image error) Size: 34 KiB

Binary file not shown.

After

(image error) Size: 103 KiB

Binary file not shown.

After

(image error) Size: 44 KiB

View file

@ -0,0 +1,21 @@
version: "3.6"
services:
web:
image: "gitlab/gitlab-ce:latest"
restart: unless-stopped
environment:
GITLAB_OMNIBUS_CONFIG: |
external_url 'http://localhost:8001'
nginx['listen_https'] = false
nginx['listen_port'] = 80
nginx['redirect_http_to_https'] = false
letsencrypt['enable'] = false
GITLAB_ROOT_PASSWORD: secret1234
ports:
- "8001:80"
- "2222:22"
volumes:
- "./config:/etc/gitlab"
- "./logs:/var/log/gitlab"
- "./data:/var/opt/gitlab"
shm_size: "256m"

Binary file not shown.

After

(image error) Size: 120 KiB

Binary file not shown.

After

(image error) Size: 61 KiB

Binary file not shown.

After

(image error) Size: 38 KiB

Binary file not shown.

After

(image error) Size: 30 KiB

Binary file not shown.

After

(image error) Size: 226 KiB