gitea – Der bessere Alternative zu gogs (Howto zur Installation)

Hallo Leute,

die Entwicklung schreitet manchmal mit weiten Schritten voran und man muss immer am Ball bleiben um auf dem neusten Stand zu sein. Und so hab ich mir gitea mal etwas genauer angesehen.

Was ist gitea, gogs, gitlab?

gitea ist ein fork von gogs einem wirklich sehr coolem und Ressourcen sparenden github.com Klon. Mit beiden Systemen kann man sich quasi sein ganz persönliches github aufbauen und zwar auf seinen eigenen Servern.

Im übrigen lasse ich gitlab für mich mal vollkommen außen vor, weil es mir kalt über den Rücken läuft, wenn ich an Ruby on Rails Anwendungen denke und zudem gogs/gitea deutlich (!) Ressourcen sparender ist.

Ich selbst betreibe zwei Instanzen von gogs (privat und in der Forschungsgruppe) und möchte in diesem Artikel auch die Erfahrungen mit der Migration teilen.

Warum plötzlich gitea und nicht weiter mit gogs?

Wie bereits gesagt ist gitea ein Klon vom quelloffenen gogs. Die Hauptentwicklung bei gogs hing mehr oder weniger an einer Person und die Entwicklung stagnierte in letzter Zeit enorm. In gitea sind mittlerweile einige Feature eingearbeitet, welche so nicht bei gogs vorkommen. Einige Beispiele:

  • GPG verification
  • 2-Faktor-Authentifizierung
  • OpenID

Vor Allem hat mich die 2-Faktor-Authentifizierung überzeugt. Auch glaube ich, dass die Entwicklung durch mehr Personen einfach mehr leisten und schneller Updates bringt.

Gitea ist ja schön und gut, aber wie migriere ich von gogs?

Ich habe nun insgesamt 2 Instanzen von gitea aufgesetzt:

  • Neuinstallation unter Debian 9 (Stretch)
  • Migration von gogs 0.11.19.* unter Arch

Neuinstallation von gitea unter Debian 9 (Stretch)

Die einfachste Variante ist wohl die Neuinstallation. Alle der folgenden Befehle werden als sudo ausgeführt. Zunächst sollte ein User angelegt werden:

adduser --system git

Stellt sicher, dass git Installiert ist:

apt-get install git

Anschließend Ordner erstellen, gitea herunterladen und rechte anpassen:

mkdir -p /opt/gitea/custom/conf
mkdir /opt/gitea/data
cd /opt/gitea/
wget -O gitea https://dl.gitea.io/gitea/master/gitea-master-linux-amd64
chmod +x gitea
chown -R git:git /opt/gitea/

Die jeweils aktuelle gitea Version findet man unter https://github.com/go-gitea/gitea/releases oder https://dl.gitea.io/gitea/

Nun kann man gitea bereits mit folgendem Befehl starten:

./gitea web

Dieser Befehl legt auch schonmal eine leere config-datei unter /opt/gitea/custom/conf/ an.
Wir möchten gitea aber nicht ständig manuell starten und legen stattdessen ein .service-file für systemd an. Dazu im die Datei /etc/systemd/system/gitea.service mit folgendem Inhalt anlegen:

[Unit]
Description=Gitea
After=syslog.target
After=network.target
After=mariadb.service mysqld.service postgresql.service memcached.service redis.service

[Service]
# Modify these two values and uncomment them if you have
# repos with lots of files and get an HTTP error 500 because
# of that
###
#LimitMEMLOCK=infinity
#LimitNOFILE=65535
Type=simple
User=git
Group=git
WorkingDirectory=/opt/gitea
ExecStart=/opt/gitea/gitea web
Restart=always

[Install]
WantedBy=multi-user.target

Mit folgenden Befehlen kann nun gitea gestartet, gestopt und enabled werden (Achtung: Vorher den Befehl „systemctl daemon-reload“ ausführen):

systemctl enable gitea.service
systemctl start gitea.service
systemctl stop gitea.service
systemctl status gitea.service

Hier auch noch der Auszug aus meiner nginx-config:

########################################
#
# git.website.tdl
#
########################################

server {
        listen 80;
        listen [::]:80;

        error_log /var/log/nginx/error.log warn;

        server_name git.website.tdl;
        return 301 https://$server_name$request_uri;
}

server {
        listen 443 ssl http2;
        listen [::]:443 ssl http2;

        server_name git.website.tdl;

        error_log /var/log/nginx/error.log warn;

        proxy_cache off;
        ssl_certificate /etc/letsencrypt/live/git.website.tdl/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/git.website.tdl/privkey.pem;
        ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;
        ssl_session_cache shared:SSL:10m;
        add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
        add_header X-Frame-Options SAMEORIGIN;
        add_header X-Content-Type-Options nosniff;
        ssl_session_tickets off; # Requires nginx >= 1.5.9
        ssl_stapling on; # Requires nginx >= 1.3.7
        ssl_stapling_verify on; # Requires nginx => 1.3.7
        ssl_trusted_certificate /etc/letsencrypt/live/git.website.tdl/chain.pem;
        resolver 8.8.8.8 8.8.4.4 208.67.222.222 208.67.220.220 valid=300s;
        resolver_timeout 5s;
        ssl_dhparam /etc/nginx/ssl/dhparams.pem;
        
	# Disalow to read .htaccess-Files
        location ~/\.ht {
                deny all;
        }

	client_max_body_size 1G;

	# Configuration for letsencrypt
    	location /.well-known {
		alias /srv/http/git.website.tdl/.well-known;
    	}

        location / {
                proxy_pass http://localhost:3000/;
        }

}

Es wird ein einfacher proxy_pass angelegt. Gitea sollte damit im Internet erreichbar sein. Nun noch wie üblich eine Datenbank anlegen (ich gehe davon aus, das schafft ihr) und man kann auch schon los legen.

Migration unter Arch

Zunächst einmal muss gitea installiert werden. Ich empfehle dabei das gitea aus dem user repository (mehr Infos: https://wiki.archlinux.org/index.php/Gitea) zu nehmen. Ich selbst habe mich dafür entschieden, die installation analog zu der unter Debian zu machen, da ich hier gerne das Upgrade selbst durchführen will.

Leider funktioniert die einfache Migration wie hier beschrieben nicht mehr: https://docs.gitea.io/en-us/upgrade-from-gogs/ Dazu wäre Version 0.9 nötig. Ich habe leider auch keine elegante Variante gefunden. Ich habe zwar die aufgezeigte Migration versucht, aber die Datenbank ist einfach nicht mehr konsistent. Einzige Migrationsmöglichkeit ist es, die Repos einzeln zu migrieren.

Ein Gedanke zu „gitea – Der bessere Alternative zu gogs (Howto zur Installation)

  1. Dorkniel Holgerson

    Danke für die Ausführungen und die Installationsanleitung.

    IMHO muss für den Befehl „chown -R git:git /opt/gitea/“ aber auch die Gruppe git existieren. Deshalb habe ich die adduser-Variante der offiziellen Anleitung der gitea-github-Seite (mit der ich im übrigen Probleme hatte) genommen:

    sudo adduser –system –shell /bin/bash –gecos ‚Git Version Control‘ –group –home /home/gitea –disabled-password git

    Hier wird durch die „–group“ Option auch automatisch die Gruppe angelegt.

    Im weiteren musste ich um gitea zu starten statt…
    ./gitea web
    …den Befehl als eben angelegter git-user starten:
    sudo runuser -l git -c ‚/opt/gitea/gitea‘

    Antworten

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.