Schlanker und schneller GIT-Server, Àhnlich GitHub (Docker)

Nachdem GitLab relativ viel Arbeitsspeicher und CPU benötigt und zudem auf meinem NAS relativ langsam ist, habe ich GitLab mit Gitea ersetzt. Gitea bietet eine Ă€hnliche WeboberflĂ€che wie GitHub, ist wesentlich sparsamer als GitLab und reagiert flinker. Auch wenn der Funktionsumfang nicht so hoch wie bei GitLab ist, reicht dieser fĂŒr die meisten Verwendungszwecke vollkommen aus.

SoftwareGitea
GitHubhttps://github.com/go-gitea/gitea
aktuelle Version 1.21.1
gefunden03.12.2023
 

Voraussetzungen

Docker Basics

Docker ermöglicht es, Services oder Applikationen per Befehl in einem sogenannten Container zu starten.
Ein Container ist eine vom Betriebssystem (OS) unabhÀngige isolierte Umgebung:
Beim ersten Start eines Containers, lÀdt Docker selbststÀndig alle notwendigen Quellen
aus dem Internet.
Docker kann unter Windows, macOS oder einer Linux-Distribution installiert werden,
siehe auch: Docker

Damit Gitea sicher vom Internet erreicht werden kann, setze ich Traefik als Let's Encrypt Reverse-Proxy ein. Der Reverse-Proxy stellt eine verschlĂŒsselte HTTPS-Verbindung zur VerfĂŒgung und ermöglicht es mehrere Websites auf einem Server zu betreiben.

Alternativ zu einem Reverse-Proxy kann auch ein Cloudflare-Tunnel fĂŒr das Veröffentlichen von Webservices aus dem eigenen Netzwerk verwendet werden:

Schritt fĂŒr Schritt Gitea in Docker inklusive Zugriff vom Internet

Hardwareanforderung:
  1. FĂŒr die Docker-Installation kann eine nahezu beliebige Hardware verwendet werden. Zum Beispiel ein virtueller Server eines Providers, oder fĂŒr zu Hause: ein Mini-PC, Notebook, MAC, ein NAS: QNAP, Synology oder eine andere Hardware mit x68-64 Architektur auf der sich Windows oder Linux installieren lĂ€sst.

Schematische Darstellung: Zugriff vom Internet
Voraussetzungen fĂŒr den Internetzugriff:
  1. Eigene registrierte Domain, siehe Domain und dessen Verwaltung.
  2. Cloudflare oder Reverse Proxy:
    1. Cloudflare-Tunnel Service
    2. oder alternativ:
    3. Port-Forwarding und Reverse Proxy mit Let's Encrypt-Zertifikat
    siehe auch: Cloudflare oder Reverse Proxy
Container fĂŒr Gitea:
  1. docker-compose.yml und .env anlegen und anpassen
  2. Container starten und 
  3. einrichten

docker-compose.yml

Um Gitea mittels docker compose zu starten, kann das offizielle Docker Gitea -Image und als Datenbank MySQL verwendet werden. Beide Images können mit einer simplen docker-compose.yml Datei heruntergeladen, erstellt und gestartet werden. Die Datei kann mit einem beliebigen Texteditor wie folgt befĂŒllt und dann angepasst werden:

Dateiname: docker-compose.yml, Inhalt:

[+]
services:
  giteaserver:
    image: gitea/gitea:1.13.6
    container_name: gitea
    environment:
      USER_UID: '1000'
      USER_GID: '1000'
      DB_TYPE: 'mysql'
      DB_HOST: 'giteadb:3306'
      DB_NAME: 'gitea'
      DB_USER: 'gitea'
      DB_PASSWD: '${DB_PASSWD}'
      HTTP_PORT: '80'
      DISABLE_SSH: 'true'
      DISABLE_REGISTRATION: 'true'
    restart: always

   #Labels fĂŒr ReverseProxy, siehe: https://www.libe.net/traefik
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.git.rule=Host(`git.domain.tld`)"      
      - "traefik.http.routers.git.entrypoints=web"
      - "traefik.http.routers.git.entrypoints=websecure"
      - "traefik.http.routers.git.tls.certresolver=myresolver"
      - "traefik.http.services.git.loadbalancer.server.port=80"
    volumes:
      - gitea:/data
      - /etc/timezone:/etc/timezone:ro
      - /etc/localtime:/etc/localtime:ro
    expose:
       - "80"
   #FĂŒr einen direkten Test-Zugriff, in den folgenden 2 Zeilen "#" entfernen. Aufruf: http://localhost:83 oder http://ServerIP:83
    #ports:   
      #- "83:80" 
  giteadb:
     image: mysql:5.7
     restart: always
     environment:
       MYSQL_ROOT_PASSWORD: 'gitea'
       MYSQL_USER: 'gitea'
       MYSQL_PASSWORD: '${DB_PASSWD}'
       MYSQL_DATABASE: 'gitea'
     volumes:
       - db:/var/lib/mysql
volumes:
  gitea:
  giteadb:

#Ohne dem Einsatz eines Reverse Proxy (https://www.libe.net/traefik) fehlt voraussichtlich das Netzwerk webproxy 
#und die folgenden Zeilen können entfernt oder auskommentiert werden. Alternativ kann das Netzwerk mit "docker network create webproxy" erstellt werden
networks:
  default:
    name: webproxy
    external: true

FĂŒr einen direkten Zugriff ĂŒber die IP-Adresse oder localhost - auch ohne Reverse Proxy, DNS oder öffentlicher IP - können die auskommentierten Port-Einstellung fĂŒr Testzwecke aktiviert werden:

...
   #FĂŒr einen direkten Test-Zugriff, in den folgenden 2 Zeilen "#" entfernen. Aufruf: http://localhost:83 oder http://ServerIP:83
    ports:   
      - "83:80" 
...

FĂŒr den InternetzugriffÂ ĂŒber den Traefik Reverse Proxy, muss in den Labels die DomĂ€ne mit den zuvor erstellten DNS-EintrĂ€gen ersetzt werden (im Beispiel: git.domain.tld).

Das Passwort fĂŒr die MySQL-Datenbank kann in einer .env-Datei hinterlegt werden:

.env

DB_PASSWD="password"

Der Start erfolgt aus dem Ordner der docker-compose.yml-Datei mit dem Befehl„"docker-compose up“:

docker-compose up -d

Einrichten

Beim initialen Setup auf der WeboberflÀche habe ich folgende Einstellungen getroffen:

  • SSH-Server-Domain* domain.tld
  • Gitea-Basis-URL* https://domain.tld

Um Gitea rein als privates Repository zu verwenden, habe ich im Setup folgendes eingestellt:

  • Registrierung deaktivieren
  • Ansehen erfordert Anmeldung
  • Bei deaktivierter Registrierung muss natĂŒrlich im Wizard ein Admin-User angegeben werden:
    Administrator-Benutzername, Passwort, E-Mail-Adresse 

Migration

Neue Migration aus dem GitLab-Docker-Container hat bei mir nicht geklappt, ist aber nicht so schlimm: Nach dem Anlegen der Repos können die von einem Git-Ordner einfach gepushed werden ...
 

Automatisches Deployment neuer Commits

Einen automatischen Pull neuer Commits habe ich mittels Webhooks gelöst. Als Gegenstelle habe ich einen sehr simplen Hook-Server in Verwendung: github.com/ncarlier/webhookd. Damit der Commit auf einen bestimmten Branch automatisch von einem bestimmten Docker-Container ĂŒbernommen wird, habe ich das Beispielscript wie folgt angepasst:

[+]
#!/bin/sh
TOKEN="???x"

# Functions
die() { echo "error: $@" 1>&2 ; exit 1; }
confDie() { echo "error: $@ Check the server configuration!" 1>&2 ; exit 2; }
debug() {
  [ "$debug" = "true" ] && echo "debug: $@"
}

# Validate global configuration
[ -z "$TOKEN" ] && confDie "GITEA_TOKEN not set."

# Validate Gitea hook
sec=$(echo "$1" | jq .secret -r)
if [ $sec ]; then
	[ $sec != $TOKEN ] && die "bad hook token"
else
	die "empty hook token"
fi

# Validate parameters
payload=$1
payload="$(echo "$payload"|tr -d '\n')"
[ -z "$payload" ] && die "missing request payload"
payload_type=$(echo $payload | jq type -r)

[ $? != 0 ] && die "bad body format: expecting JSON"
[ ! $payload_type = "object" ] && die "bad body format: expecting JSON object but having $payload_type"

debug "received payload: $payload"

# Extract values
  ref=$(echo $payload | jq .ref -r)
  branch=${ref#*refs/heads/}

# Pull and Reset commited Branch
 echo "branch: $branch push for $ref"
	if [ $branch != "master" ] 
	then
		docker exec $branch bash -c "git fetch origin $branch && git pull origin $branch && git reset --hard $branch"
	else
		echo "nothing todo: master"
	fi

In dem Beispiel wird der aktuelle Branch ĂŒbergeben und im gleichnamigen Docker-Container ein git pull ausgefĂŒhrt.

Fazit

FĂŒr meine Einsatzzwecke reicht Gitea derzeit vollkommen aus. FĂŒr grĂ¶ĂŸere Teams oder komplexere Deployments bietet sich dennoch GitLab an, siehe auch: GIT-Repositories selbst hosten: GitLab als Docker-Container starten. FĂŒr ein einfaches Verwalten der Docker Container ĂŒber eine WeboberflĂ€che, siehe auch: Docker Admin-OberflĂ€che: Portainer Community Edition

positive Bewertung({{pro_count}})
Beitrag bewerten:
{{percentage}} % positiv
negative Bewertung({{con_count}})

DANKE fĂŒr deine Bewertung!

Aktualisiert: 03.12.2023 von Bernhard | Translation English |🔔 | Kommentare:0

➚ Besucherstatistik: Matomo, Google Analytic Ersatz selbst hosten | ➊ Container | GIT-Repositories selbst hosten: GitLab als Docker-Container starten ➚
➊ Home Server | GĂŒnstiger und sparsamer Docker Mini Server fĂŒr zu Hause ➚

Top-Artikel in diesem Bereich


NAS selber bauen: flexibel, stromsparend und gĂŒnstig [HowTo]

Wer nach einem NAS (Network Attached Storage oder Netzwerkspeicher) fĂŒr den Heimgebrauch sucht, kommt an den Herstellern Synology und QNAP nicht vorbei. Beide Hersteller liefern kleine NAS-Komplettlösungen mit der Möglichkeit, Daten lokal oder ĂŒber das Internet zu synchronisieren und beide verlangen fĂŒr die verwendete Hardware nicht gerade wenig Geld.


ioBroker installieren - Docker

Mit ioBroker können verschiedene Automatisierungslösungen oder GerÀte in einem System zusammengefasst werden. Um bestimmte Gateways oder GerÀte ansprechen zu können, werden in ioBroker verschiedene Adapter verwendet.


Bitwarden in Docker betreiben - Setup Schritt fĂŒr Schritt

Bitwarden ist ein webbasierter Passwort-Manager, Ă€hnlich LastPass, aber Open Source und der Möglichkeit diesen selbst zu betreiben (hosten). Wie sich Bitwarden im Vergleich zu anderen Passwort-Managern einordnet, habe ich auf folgender Seite ĂŒberlegt: Passwort-Manager sicher? KeePass vs. LastPass vs. Bitwarden. Bitwarden besteht aus mehreren Services, welche ĂŒber verschiedene Container bereitgestellt werden können. Das relativ aufwĂ€ndige Setup wurde mit "Bitwarden Unified" speziell fĂŒr ein Selbs...

Fragen / Kommentare


Durch die weitere Nutzung der Seite stimmst du der Verwendung von Cookies zu Mehr Details