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

This page is also available in English

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.17.2
gefunden07.09.2022
 

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 einen Let's Encrypt Reverse-Proxy ein. Zuerst habe ich Nginx als Reverse-Proxy verwendet, diesen aber später mit Traefik ersetzt. Der Reverse-Proxy stellt eine verschlüsselte HTTPS-Verbindung zur Verfügung und ermöglicht es mehrere Websites auf einem Server zu betreiben.

Schritt für Schritt Gitea mit Docker inkl. 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 PC, Notebook, Raspberry PI, MAC, eine NAS: QNAP, Synology oder eine beliebige andere Hardware auf der sich Windows oder Linux installieren lässt.
Voraussetzungen für den Internetzugriff:
  1. Der sichere Aufruf aus dem Internet erfolgt am besten über eine Domain mit einem DNS-Eintrag auf die öffentliche IP-Adresse, siehe Domain und dessen Verwaltung. Bei einem gemieteten Server eines Providers vergibt dieser eine IP-Adresse. Wer einen Server im eigenen Heimnetzwerk betreiben will, benötigt ein Port-Forwarding.
  2. Für die Zertifikatsverwaltung und den sicheren Zugriff auf die Webservices verwende ich einen Reverse Proxy und Let's Encrypt-Zertifikate
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:

[+]
version: "3"
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:
    external:
      name: webproxy

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 Proxymuss 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="xxxx"

# 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: 07.09.2022 von Bernhard


Top-Artikel in diesem Bereich


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.

Home-Assistant Docker Conbee 2 und Zigbee2MQTT / deCONZ
Dank zahlreicher Integrationsmöglichkeiten ist Home-Assistant eine einfache Plattform für das Steuern verschiedenster Smart-Home Geräte. Im Vergleich zu ioBroker ist mir der Start mit Home Assistant wesentlich einfacher gefallen. Während ich für ioBroker noch am Suchen war, welches Frontend ich für meine Dashboards verwenden könnte, hatte ich mit Home-Assistant out of the box ein fertig eingerichtetes System. Die Lovelance Dashboards von Home Assistant können einfach in der GUI zusammengeklickt...

Conbee 2: Phoscon deCONZ - Docker Inbetriebnahme | Review
Mit dem kleinen USB-Stick Conbee2 habe ich meinen NAS um ein Zigbee-Gateway erweitert. Conbee2 kann auf Raspbian, Ubuntu, Docker oder Windows installiert werden.

Fragen / Kommentare


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