Gitea in einem Freenas Jail

Ich war auf der Suche nach einer “gitartigen” Versionierung für meine internen Projekte im Intranet. Da ich einen Freenas Server betreibe lag es nahe dies in einem Freebsd Jail zu fahren. Mein erster Versuch war das verfügbar Gitlab Plugin. Das lies sich auch einfach per Knopfdruck installieren. Zwei Punkte störten mich allerdings. Die verfügbare Version des Plugins ist nicht aktuell und die Ressourcenauslastung ist recht hoch.

Als Alternative habe ich recht viel gutes über Gitea gehört. Auch hier gibt es ein Plugin aber ich wollte es mit einer eigenen Installation versuchen um auch direkt einen NGINX Reverse Proxy mit Letsencrypt davorzuschalten.

Das Basis Jail habe ich über die Weboberfläche von Freenas eingerichtet. Danach habe ich alle Befehle über eine SSH Login auf dem Freenas Server durchgeführt. Zum Wechseln in das Jail reicht ein:

iocage console gitea

Die Installation geschieht in 3 Phasen

  • Letsencrypt
  • NGINX
  • Gitea

Letsencrypt

Die Konfiguration von Letsencrypt geschieht im wesentlichen wir hier beschrieben. Nur der Installationsaufruf ist etwas anders.

pkg install py37-certbot-dns-rfc2136

Auch die Konfiguration geschieht wie in meiner anderen Beschreibung für Debian

mkdir letsencrypt
cd letsencrypt/
vi rfc2136.ini

Dann muss noch geprüft und angepasst werden das dieser Rechner auch die Abfragen auf dem DNS Server machen darf. Und dann kann es losgehen:

certbot certonly --dns-rfc2136 --dns-rfc2136-credentials /root/letsencrypt/rfc2136.ini --dns-rfc2136-propagation-seconds 30 -d git.yourdomain.net
...
...
- Congratulations! Your certificate and chain have been saved at:
   /usr/local/etc/letsencrypt/live/git.yourdomain.net/fullchain.pem
   Your key file has been saved at:

NGINX

Die Schritte sind angelehnt an diese Beschreibung

pkg install nginx 
service nginx start
Performing sanity check on nginx configuration:
nginx: the configuration file /usr/local/etc/nginx/nginx.conf syntax is ok
nginx: configuration file /usr/local/etc/nginx/nginx.conf test is successful
Starting nginx.

Die NGINX Konfiguration habe ich dann so eingerichtet

vi /usr/local/etc/nginx/nginx.conf
 # HTTPS server
    #
    server {
        listen       443 ssl;
        server_name  localhost;
        ssl_certificate     "/usr/local/etc/letsencrypt/live/git.yourdoamin.net/cert.pem";
        ssl_certificate_key "/usr/local/etc/letsencrypt/live/git.yourdoamin.net/privkey.pem";
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_dhparam /usr/local/etc/nginx/dhparam.pem;
        ssl_session_cache shared:SSL:1m;
        ssl_session_timeout 10m;
        ssl_ciphers HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers  on;
        location / {
          proxy_pass http://127.0.0.1:3000;
        }
    }

Wir brauchen noch einen neuen DH Key. Dann kurz testen ob die Konfiguration ok ist und NGINX neu starten.

openssl dhparam -out /usr/local/etc/nginx/dhparam.pem 2048
sysrc nginx_enable=YES
nginx -t
nginx: the configuration file /usr/local/etc/nginx/nginx.conf syntax is ok
nginx: configuration file /usr/local/etc/nginx/nginx.conf test is successful
root@git:~ # service nginx restart
Performing sanity check on nginx configuration:
nginx: the configuration file /usr/local/etc/nginx/nginx.conf syntax is ok
nginx: configuration file /usr/local/etc/nginx/nginx.conf test is successful
Stopping nginx.
Waiting for PIDS: 10789.
Performing sanity check on nginx configuration:
nginx: the configuration file /usr/local/etc/nginx/nginx.conf syntax is ok
nginx: configuration file /usr/local/etc/nginx/nginx.conf test is successful
Starting nginx.

Wir sollten dann auf Port 80 die Standard NGINX Seite sehen und auf Port 443 mit https eine Fehlermeldung bekommen da der Dienst ja noch nicht läuft. Das kommt jetzt.

Gitea

Meine Schritte sind an ccammack.com angelehnt.

pkg install gitea

Die Konfigurationsschritte werden als recht minimal angegeben. Auch ich habe die Selbstanmeldung ausgeschaltet und die “Secrets” neu erstellt. Etwas kniffeliger waren die Einstellungen für SSH. Hier habe ich keinen Dienst im Jail eingerichtet sondern den Gitea internen SSH Server auf einem nicht Standardport.

cd /usr/local/etc/gitea/conf/
cp app.ini app.ini.bak
sed -i .tmp 's/^DISABLE_REGISTRATION.*=.*$/DISABLE_REGISTRATION = true/g' ./app.ini
sed -i .tmp 's/^JWT_SECRET.*=.*$/JWT_SECRET = '`gitea generate secret JWT_SECRET`'/g' ./app.ini
sed -i .tmp 's/^INTERNAL_TOKEN.*=.*$/INTERNAL_TOKEN = '`gitea generate secret INTERNAL_TOKEN`'/g' ./app.ini
sed -i .tmp 's/^SECRET_KEY.*=.*$/SECRET_KEY = '`gitea generate secret SECRET_KEY`'/g' ./app.ini

vi app.ini
[server]
DOMAIN = gitea.yourdomain.net
HTTP_ADDR    = 127.0.0.1
HTTP_PORT    = 3000
ROOT_URL = https://gitea.yourdomain.net
DISABLE_SSH  = false
SSH_DOMAIN   = gitea.yourdomain.net
SSH_PORT = 2005  # one port that i use for ssh
START_SSH_SERVER = true
OFFLINE_MODE = false
APP_DATA_PATH = /var/db/gitea/data

Dann noch enablen und starten

sysrc gitea_enable=YES
gitea_enable:  -> YES

service gitea start

service gitea status
gitea is running as pid 98940.

und einen neuen Benutzer einrichten

su git

gitea admin create-user --username hbauer --password 1234 --email hagen.bauer@caserio.de --admin -c /usr/local/etc/gitea/conf/app.ini
...
...
New user 'hbauer' has been successfully created!

Und dann konnte ich mich mit mit https://gitea.yourdomain.net anmelden. Als erstes habe ich einen SSH Key für mich eingerichtet und einen schnellen Test mit einem neuen Projekt durchgeführt. Sieht erst mal vielversprechend aus.

Gitea in Freenas Jail