Letzte Aktualisierung am 20. März 2025

Die Installation und Nutzung von Gitea ist nicht zwingend erforderlich für die Installation der weiteren Stacks. Diese kannst du auch alle mit dem in Portainer eingebauten Web editor erstellen. Oder alternativ die docker-compose.yml reinkopieren, wenn du sie im Dateisystem ablegst. Bei diesem Vorgehen musst du darauf achten, dass du auch alle notwendigen Umgebungsvariablen für den Stack einträgst. Im Abschnitt „Stack für Gitea anlegen und starten“ ist diese Vorgehensweise exemplarisch beschrieben.
Warum Gitea?
Ich war auf der Suche nach einer Lösung, um die Skripte, Konfigurationsdateien usw. für meine Docker-Container vernünftig abzulegen und gleichzeitig die Möglichkeit haben, verschiedene Endgeräte fürs Bearbeiten zu nutzen. Bei mir kommt es relativ häufig vor, dass ich gerade im Wohnzimmer sitze und eine Idee habe, allerdings nicht am Rechner. Bis ich im Büro bin, habe ich die Idee meistens schon wieder vergessen. In solchen Situationen schnell ans iPad und die Gedanken gleich im Quellcode aufschreiben, wäre toll. Daher musste eine Lösung her.
Jetzt hätte ich natürlich hergehen können und einfach ein Share auf meinem NAS dafür einrichten können, und ehrlicherweise hatte ich das zunächst auch. Allerdings kamen schnell Ideen (aus meinem alten Entwicklerherz) wie Änderungshistorie, von überall aus zugreifen können und nicht zuletzt die Frage, ob ich vielleicht sogar eine Art CI/CD-Umgebung aufbauen könnte.
Mit Portainer hatte ich bereits eine Komponente in Benutzung, die ein wenig in Richtung CI/CD-Umgebung geht. Immerhin kann Portainer mit einem Git-Repository zusammenarbeiten. Was lag also näher sämtliche Quellen in einem Git-Repository abzulegen, am besten noch lokal in meiner Umgebung gehostet. Und so viel nach etwas Recherche im Internet meine Wahl auf Gitea.
Installation
Bevor Poertainer zusammen mit einem Git-Repository verwendet werden kann, muss dieses Repository installiert werden. Ich zeige dir im Folgenden die Installation von Gitea mit der Portainer-GUI
Ich habe mich entschieden jeden meiner Docker-Container in einem eigenen Docker-Netzwerk laufen zu lassen, sodass es maximale Trennung zwischen den Containern gibt. Das führt durchaus zu Mehrfach-Installationen von z.B. Datenbanken, sorgt allerdings auf der anderen Seite für mehr Stabilität. Der Ausfall einer zentrale Datenbank hätte u.U. zur Folge, dass alle davon abhängigen Container nicht mehr stabil bzw. gar nicht mehr funktionieren.
Die Installation und Nutzung von Gitea ist nicht zwingend erforderlich für die Installation der weiteren Stacks. Diese kannst du auch alle
Doch der Reihe nach…
Docker-Netztwerk mit Portainer anlegen
Der erste Schritt ist das Anlegen eines neuen Netzwerkes innerhalb deiner Docker-Umgebung. Das kannst du sehr einfach mit Portainer erledigen.
Zunächst wählst du nach der Anmeldung an Portainer im Dashboard die Docker-Umgebung aus, in der du das Netzwerk anlegen möchtest. Anschließend findest du im linken Navigationsbereich den Punkt „Networks“ in der Liste unterhalb deiner Umgebung. Ein Klick darauf öffnet die Liste aller vorhandenen Netzwerk.

Über die Schaltfläche „Add network“ in der rechten oberen Ecke fügst du ein weiteres Netzwerk hinzu. Dafür reicht es in diesem Fall einen Netzwerk-Namen zu vergeben und die weiteren Einstellungen so zu belassen wie sie sind. Mit der Schaltfläche „Create the network“ wird das Netzwerk schließlich erstellt und erscheint in der Netzwerkliste. Der IP-Adressbereich wurde automatisch von deiner Docker-Umgebung eingetragen.

Ich verwende im weiteren Verlauf das Netzwerk nw-dekayone-dev. Du musst diese Angabe im Folgenden und insbesondere in der verwendeten docker-compose.yml ggf. an deinen Netzwerknamen anpassen.
Stack für Gitea anlegen und starten
Nachdem das Netzwerk angelegt ist, können wir innerhalb Portainer einen neuen Stack anlegen, über den Gitea an sich und die dafür notwendige Datenbank gestartet werden.
Zunächst wählst du in der linken Navigation für deine Umgebung den Punkt „Stacks“ und anschließend erstellst du über die Schaltfläche „Add stack“ einen neuen Stack.

Für den Stack kannst du einen beliebigen Namen vergeben, z.B. gitea. Die Option „Web editor“ lässt du bestehen und kopierst den Inhalt der docker-compose.yml weiter unten in den Editorbereich. Den Inhalt der docker-compose.yml erläutere ich weiter unten.

Wie schon bei der Portainer-Installation verwendet auch dieser Container einige Umgebungsvariablen. Diese gibst du im Bereich „Environment variables“ ein, wenn du auf der Seite weiter nach unten scrollst. Die Passwörter für den Datenbanknutzer und Datenbankadministrator kannst du ebenso frei nach deinem Geschmack wählen wie den Datenbank- und Nutzernamen. Wichtig ist hier wieder, dass die Umgebungsvariable DATA_ROOT
auf deine Datenablage verweist.

Ein Klick auf die Schaltfläche „Deploy the stack“ bewirkt das, was ein docker compose up -d
auf der Konsole macht: Wenn ein Image nicht lokal vorliegt, wird es heruntergeladen, die Container werden gem. der docker-compose.yml im Web editor erstellt und gestartet. Tritt dabei ein Fehler auf, erhälst du einen entsprechenden Hinweis in der Portainer-GUI.
Wenn dein Stack erfolgreich erstellt und gestartet wurde, siehst du ihn anschließend in der Übersicht aller Stacks. Ein Klick auf den Stack-Namen öffnet eine Detailseite, die die beide laufenden Container gitea und gitea_db mit einigen zusätzlichen Informationen anzeigt. Deine Anzeige sollte es ähnlich wie in der folgenden Abbildung aussehen.

In der Auflistung findest du u.a. die publizierten Ports. Hier ist bei Gitea der Port 3000 der wichtige, denn darüber erreichst du die Gitea-GUI in deinem Browser.
docker-compose.yml und Umgebungsvariablen für Gitea
docker-compose.yml
services:
gitea:
image: gitea/gitea:latest
restart: unless-stopped
container_name: gitea
depends_on:
- db
volumes:
- ${DATA_ROOT}/gitea/server:/data
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
environment:
- USER_UID=1000
- USER_GID=1000
- DB_TYPE=mysql
- DB_HOST=db:3306
- DB_NAME=${GITEA_DB_NAME}
- DB_USER=${GITEA_DB_USER}
- DB_PASSWD=${GITEA_DB_PASSWORD}
ports:
- 3000:3000
- 222:22
networks:
- nw-dekayone-dev
labels:
- com.centurylinklabs.watchtower.enable=true
db:
image: mariadb:10.5
container_name: gitea_db
restart: unless-stopped
volumes:
- ${DATA_ROOT}/gitea/db:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=${GITEA_DB_ADMIN_PASSWORD}
- MYSQL_USER=${GITEA_DB_USER}
- MYSQL_PASSWORD=${GITEA_DB_PASSWORD}
- MYSQL_DATABASE=${GITEA_DB_NAME}
- TZ=${TIMEZONE}
networks:
- nw-dekayone-dev
networks:
nw-dekayone-dev:
external:
true
Umgebungsvariablen
# general timezone
TIMEZONE=Europe/Berlin
# mountpoint of persistent data storage on NAS
DATA_ROOT=<dein_datenablage_share>
# environment gitea
GITEA_DB_NAME=gitea
GITEA_DB_USER=gitea
GITEA_DB_PASSWORD=secretuserpwd
GITEA_DB_ADMIN_PASSWORD=supersecretadminpwd
Gitea nutzen
Die Gitea-GUI erreichst du durch Eingabe der IP-Adresse deines Pi mit dem Port 3000. In meinem Fall ist das 192.168.1.221:3000.
Erstkonfiguration
Beim ersten Start wird dir zunächst die Erstkonfiguration für Gitea angezeigt. Hier sind die Angaben zur Datenbank bereits mit den Werten der Umgebungsvariablen aus dem Stack vorbelegt und können so belassen werden. Bei den allgemeinen Einstellungen kannst du den Seitentitel deinen Wünschen entsprechend anpassen.

Wenn du auf der Seite weiter nach unten scrollst, definierst du bei den optionalen Einstellungen ein Administratorkonto nach deinen eigenen Wünschen. Die restlichen Angaben kannst du so zu belassen, wie sie vorbefüllt sind.
Die Erstkonifguration schließt du mit einem Klick auf die Schaltfläche „Gitea installieren“ ab.

Nach etwas Geduld wirst du mit dem Administrator-Konto bei Gitea automatisch angemeldet und landest in der Gitea-GUI. Hier kannst du nun nach Herzenslust Organisationen, Nutzer, Repositories und Projekte anlegen.

Weitere Einrichtung von Gitea – Basics
Wenn du Gitea für die Quellcodeverwaltung einsetzen möchtest, musst du zunächst Repositories einrichten. Dazu habe ich zunächst eine private Organisation „DKONE“ innerhalb Gitea angelegt, in der am Ende alle Repositories zusammengefasst sind. Mit mindestens einem Repository zusammen mit dem Admin-Nutzer hast du die Grundlagen für die Nutzung von Gitea zusammen mit Visual Studio Code, worauf ich im Abschnitt „Entwicklungsumgebung mit Visual Studio Code“ eingehe.
Organisation erstellen
Ausgehend von der Startseite für den Admin-Nutzer zuvor benutzt du die „+“-Schaltfläche neben „Meine Organisationen“ für die Anlage einer neuen. Du kannst einen beliebigen Namen dafür vergeben und die Sichtbarkeit bestimmen. Ich habe als Namen „DKONE“ und bei der Sichtbarkeit „Privat“ gewählt.

Ein Klick auf „Organisation erstellen“ macht genau dieses und du kommst auf die Startseite der gerade erstellten Organisation. Hier kannst du nun über das „+“-Zeichen neben „Repositories“ beliebig viele Repositories innerhalb deiner Organisation erstellen.

Repository erstellen
Ich habe zunächst ein Repository „infra“ erstellt, in das ich die docker-compose.yml und die dazugehörigen .env-Dateien für Portainer und später Watchtower verwalte.

Die von Gitea vorgeschlagenen Einstellungen habe ich übernommen und mit einem Klick auf „Repository erstellen“ weiter unten auf der Seite wird das Repository erstellt. Anschließend landest du wieder auf der Übersichtsseite des gerade angelegten Repositories.

Wenn du hier auf den Namen deiner Organisation, landest du wieder auf der Übersichtsseite deiner Organisation. Hier wird jetzt das gerade angelegte Repository ebenfalls angezeigt.

Auf dieselbe Art und Weise habe ich weitere Repositories angelegt:
- dmz für Cloudflare und Traefik
- iobroker für ioBroker
- paperless für Paperless Ngx
- wordpress für WordPress
Nutzer anlegen
Wenn du nicht ausschließlich mit dem Admin-Nutzer arbeiten möchtest, kannst du in deiner Organisation neue Nutzer anlegen. Dazu klickst du in der Ecke rechts oben auf das Admin-Profil und wählst den Punkt „Administration“.

Du landest dann auf der gleichnamigen Seite zur Administration und kannst unter dem Punkt „Identität & Zugriff“ durch Auswahl der Option „Benutzerkonten“ nach Belieben neue Konten anlegen und organisieren.

Für das Hinzufügen eines neuen Nutzers wählst du rechts oben die Schaltfläche „Benutzerkonto erstellen“.

Quellen & Links
- Gitea
https://about.gitea.com
https://docs.gitea.com - Portainer-Dokumentation‘
https://docs.portainer.io - c’t Die 20 wichtigsten Linux-Kommandos
https://www.heise.de/tipps-tricks/Linux-Befehle-Die-20-wichtigsten-Kommandos-3843388.html - Docker-Dokumentation
https://docs.docker.com/manuals/ - Docker Hub für Image-Dokumentation
https://hub.docker.com - Git Hub für Image-Dokumentation
https://github.comDocker-Doku