Installation eines Gitea Server

Es gibt durch aus Skripte und Quellcode von Programmen, die auch heute noch nicht in der Cloud bei GitHub & Co. gespeichert werden sollen bzw. dürfen. Es gibt viele Git-Server, die man selbst betreiben kann. Einer der bekanntesten Vertreter ist sicherlich GitLab in der Community Edition (CE).

Vorwort

Für ein berufliches Vorhaben habe ich mir verschiedene Lösungen und Anbieter im Bereich Code-Hosting angeschaut. Schlussendlich bin ich bei Gitea hängen geblieben. Es ist ein schlankes Produkt, dass in Go geschrieben ist. Zudem handelt es sich um einen Fork von Gogs und wird unter der MIT Lizenz veröffentlicht.

Es ist einfach ohne Container Technik (z.B. Docker) zu installieren, die Aktualisierung ist einfach gehalten, Unterstützung von verschiedenen Datenbanken und benötigt wenig Ressourcen im Betrieb.

Nachstehend eine Beispiel Installation auf einem virtuellen Server der Hetzner Cloud.

Servername & Internetadresse

Bevor es an die eigentliche Arbeit geht, muss ein Servername festgelegt werden. Damit verbunden auch ein Internetadresse, über die später Gitea erreichbar sein soll. Diese ist auch relevant für den Abruf des SSL-Zertifikats bei Let’s Encrypt.

Internetadresse des Servers in Variable speichern.

export serverFqdn=static.30.177.47.78.clients.your-server.de
echo $serverFqdn

Firewall konfigurieren

Bevor die eigentliche Installation und Konfiguration durchgeführt wird, ist es sinnvoll die Firewall mit einem Regelset zu füttern und anschließend zu aktivieren. Dafür greife ich auf ufw zurück.

Regel für OpenSSH Server anlegen.

ufw allow 22/tcp
ufw allow 80/tcp
ufw allow 443/tcp

Firewall aktivieren.

echo y | ufw enable

Status prüfen.

ufw status

Installation von Gitea

Installation der Anwendung git.

apt install -y git

Dedizierten Benutzer anlegen.

adduser --system --shell /bin/bash --gecos 'Gitea user' --group --disabled-password --home /home/git git

Verzeichnisse anlegen.

mkdir -p /home/git/gitea/{custom,data,indexers,public,log}

Berechtigungen und Besitzer anpassen.

chmod 750 /home/git/gitea/{custom,data,indexers,public,log}
chown git:git /home/git/gitea/{custom,data,indexers,public,log}
chown git:git /home/git/gitea

Anwendung herunterladen.

cd /home/git/gitea
wget -O gitea-1.14.3-linux-amd64 https://dl.gitea.io/gitea/1.14.3/gitea-1.14.3-linux-amd64

Berechtigungen anpassen.

chmod +x gitea-1.14.3-linux-amd64

Symbolischen Link auf neue Programmversion setzen.

ln -s gitea-1.14.3-linux-amd64 gitea

Download der systemd Vorlage.

cd /home/git/gitea
wget https://raw.githubusercontent.com/go-gitea/gitea/master/contrib/systemd/gitea.service

Konfiguration der systemd Vorlage anpassen.

cp gitea.service gitea.service.original

sed -i 's/WorkingDirectory=\/var\/lib\/gitea\//WorkingDirectory=\/home\/git\/gitea\//g' gitea.service
sed -i 's/ExecStart=\/usr\/local\/bin\/gitea web --config \/etc\/gitea\/app.ini/ExecStart=\/home\/git\/gitea\/gitea web -c \/home\/git\/gitea\/custom\/conf\/app.ini/g' gitea.service
sed -i 's/Environment=USER=git HOME=\/home\/git GITEA_WORK_DIR=\/var\/lib\/gitea/Environment=USER=git HOME=\/home\/git GITEA_WORK_DIR=\/home\/git\/gitea/g' gitea.service

ln -s /home/git/gitea/gitea.service /lib/systemd/system/gitea.service
systemctl daemon-reload

Anwendung starten.

systemctl start gitea

Status der Anwendung prüfen.

systemctl status gitea

Automatischer Start aktivieren.

systemctl enable gitea
systemctl is-enabled gitea

Datenbank installieren

Grundsätzlich bin ich ein Fan davon klein zu beginnen. Das gilt sowohl für die Ressourcen des virtuellen Servers als auch für die eingesetzte Applikationen.

SQLite3

Da auf dem Gitea Server später kein Quellcode von Applikationen abgelegt wird, sondern erst einmal nur Skripte reicht auch eine schlanke Datenbank wie SQLite3.

apt install -y sqlite3

Aktualisierung von Gitea

Gitea ist in der Programmiersprache Go geschrieben. Zudem besteht die Anwendung aus einer binären Datei. Somit ist die Aktualisierung sehr einfach gestaltet.

Dienst anhalten

systemctl stop gitea

In das Anwendungsverzeichnis wechseln

cd /home/git/gitea

Download der aktuellen/neuen Programmversion.

wget -O gitea-1.14.4-linux-amd64 https://dl.gitea.io/gitea/1.14.4/gitea-1.14.4-linux-amd64

Berechtigungen anpassen.

chmod +x gitea-1.14.4-linux-amd64

Symbolischen Link auf neue Programmversion setzen.

ln -s -f gitea-1.14.4-linux-amd64 gitea

Dienst starten.

systemctl start gitea

Installation Reverse Proxy

Ich habe mich für die Nutzung des schlanken und schnellen Nginx entschieden.

Installation des Nginx mit Certbot.

apt install -y python3-certbot-nginx

SSL Zertifikat abrufen.

certbot --nginx -d $serverFqdn --register-unsafely-without-email --agree-tos --rsa-key-size 4096 --non-interactive --no-redirect

Generieren von DH-Parametern.

openssl dhparam -out /etc/ssl/dhparams4096.pem 4096

Neue Konfiguration anlegen.

touch /etc/nginx/sites-available/$serverFqdn.conf

cat << EOF > /etc/nginx/sites-available/$serverFqdn.conf
server {
        listen 80;
        listen [::]:80;
        server_name $serverFqdn;
        return 301 https://\$server_name\$request_uri;
}

server {
        listen 443 ssl http2;
        listen [::]:443 ssl http2;
        server_name $serverFqdn.de;
    
    
        ssl_certificate /etc/letsencrypt/live/$serverFqdn/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/$serverFqdn/privkey.pem;
    
        ssl_protocols TLSv1.2 TLSv1.3;
        ssl_ciphers "TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES256-CCM8:DHE-RSA-AES256-CCM:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES256-SHA";
        ssl_prefer_server_ciphers on;
        ssl_ecdh_curve secp521r1:secp384r1:prime256v1;
        ssl_dhparam /etc/ssl/dhparams4096.pem;
        
        resolver_timeout 5s;
        ssl_stapling on;
        ssl_stapling_verify on;
        #ssl_session_cache shared:SSL:50m;
        
        ssl_session_timeout 10m;
        ssl_session_cache off;
        ssl_session_tickets off;
        
        add_header Strict-Transport-Security "max-age=31536000; includeSubdomains; preload";
        add_header X-Frame-Options DENY;
        
        client_max_body_size 20m;
        
        location / {
                proxy_pass http://127.0.0.1:3000/;
        }
}
EOF

Neue Konfiguration verlinken/aktivieren.

ln -s /etc/nginx/sites-available/$serverFqdn.conf /etc/nginx/sites-enabled/$serverFqdn.conf

Nginx Standard Konfiguration deaktivieren.

rm /etc/nginx/sites-enabled/default

Dienst Nginx neu starten

service nginx restart
service nginx status

Erstkonfiguration von Gitea

Einen Browser starten und die oben definierte Internetadresse des Servers eingeben. In meinem Fall ist es die https://static.30.177.47.78.clients.your-server.de. Gitea sollte den Erstinstallationsdialog anzeigen.

Zuerst muss ein Datenbanktyp ausgewählt werden. Wie ich oben beschrieben habe, habe ich SQLite3 auf dem Server installiert.

Anschließend können in den Allgemeinen Einstellungen der Seitentitel angepasst werden.

Wer neben HTTPS auch SSH für Kommunikation nutzen möchte, muss den Parameter SSH-Server-Domain ändern.

Auf jeden Fall muss beim Parameter Gitea-Basis-URL die definierte Internetadresse eingetragen werden.

Wer für den E-Mail Versand einen dedizierten Service oder ein bestehendes E-Mail-Konto nutzen möchte, kann die Parameter unter E-Mail-Einstellungen konfigurieren.

Im Bereich Sonstige Server- und Drittserviceeinstellungen habe ich für meine Instanz folgende Einstellungen (de)aktiviert.

Zu guter Letzt muss natürlich noch ein administratives Konto für Gitea eingerichtet werden. Dazu den Bereich Administratoreinstellungen aufklappen.

Sind alle Pflichtfelder ausgefüllt kann Gitea initialisiert werden. Dieser Vorgang dauert wenige Sekunden und ist abgeschlossen sobald die Startseite angezeigt wird.

Datensicherung

Natürlich darf eigene Datensicherung auf Anwendungsebene nicht fehlen. Gitea selbst bietet eine integrierte Dump- und Wiederherstellungsfunktion.

Diese legt man in der Regel außerhalb des Anwendungs- bzw. Benutzerbereich ab. So dass der Benutzer git keinen Zugriff auf diese Dateien hat.

Neue Verzeichnis anlegen.

mkdir -p /backup/gitea

Datensicherung als täglichen Cron erzeugen.

touch /etc/cron.daily/gitea
chmod 755 /etc/cron.daily/gitea
cat << EOF > /etc/cron.daily/gitea
#!/bin/bash

# skip in favour of systemd timer
#if [ -d /run/systemd/system ]; then
#    exit 0
#fi

# this cronjob persists removals (but not purges)
if [ ! -x /home/git/gitea/gitea ]; then
    exit 0
fi

cd /home/git/
sudo -u git /home/git/gitea/gitea dump --config /home/git/gitea/custom/conf/app.ini

chown -R root:root /home/git/gitea-dump-*.zip
mv /home/git/gitea-dump-*.zip /backup/gitea/

EOF

Das Skript kann natürlich auch manuell ausgeführt werden.

Viel Spaß beim Ausprobieren. 🙂

Abonnieren
Benachrichtige mich bei
0 Comments
Inline Feedbacks
View all comments