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.