Der Betrieb eines lokalen Gitea-Servers (GIT) ist eigentlich recht einfach und für den lokalen oder privaten Gebrauch völlig ausreichend. Wenn dieser Teil abgeschlossen ist, kann auf einen vollständigen Gitea-Server im lokalen Netzwerk zugegriffen werden.
NEU: Für ganz ungeduldige habe ich einen Konsole only Abschnitt. Da gibts nur Befehle, keine Erklärungen.
Diese einfachste Ausbaustufe des ersten Teils ist NICHT für den öffentlichen Betrieb geeignet!
Der Zugriff erfolgt (noch) nicht über eine verschlüsselte Verbindung. Eine Transportverschlüsselung erfolgt bewusst nicht lokal, da GIT sehr allergisch auf selbstsignierte oder selbstgemachte Zertifikate reagiert. Das funktioniert zwar notfalls, ist aber umständlich.
Letzte Aktualisierung:
config
Verzeichnis in data
migriert, nur ein externes Verzeichnis nötig. gitea generate secret
als Ersatz für openssl rand
. backup
Verzeichnis ergänzt. Kleinigkeiten angepasstiocage
Generell sollten solche Dienst in einer eigenen Umgebung eingerichtet werden. Das macht nicht nur die Sicherheit, sondern auch die Wartung wesentlich einfacher. Jails können relativ einfach gesichert werden und es sind nur die Pakete installiert, die absolut notwendig sind.
Damit sieht das Setup inkl. aller optionalen Möglichkeiten so aus:
┌───────────────────────────────────┐
│ TrueNAS Optional: │
│ ┌────────────┐ ┌────────────────┐ │
│ │ jails/git │ │ jails_data/git │ │
LAN: 0.0.0.0:3000 ─┼─┼─► gitea ──┼─┼─► data │ │
│ │ │ │ backup │ │
│ └────────────┘ └────────────────┘ │
└───────────────────────────────────┘
Es wird ein eigenes Jail benötigt, sollten auf Nginx/PHP weitere Web Applikationen aufbauen.
Hier nehmen wir web
als Jail Namen.
Dies ist eher für fortgeschrittenen Anwender gedacht, die schon etwas Erfahrung besitzen.
Wie bestimmte Datenverzeichnisse außerhalb des Jails abgelegt werden, wird hier erklärt. Es werden folgende Verzeichnisse benötigt:
└── jails_data
└── GITEA
├── backup # Ablage für Backups (Im Jail: /mnt/backup)
└── data # Ablage für Daten (Im Jail: /var/db/gitea mit id: gitea/211)
Sollten die Daten außerhalb des Jails gespeichert werden, dann müssen die Berechtigungen passen und wird in einem separaten Artikel erklärt. Hier wird der Benutzer- und Gruppenname: gitea
mit der ID: 211
benötigt.
Login per SSH in das Jail: ssh USERNAME@IP
oder ssh USERNAME@HOSTNAME
, um mit su
root Rechte zu erlangen.
Paketquellen sollten angepasst werden, siehe separater Artikel.
Nun die Paketquelle mit pkg update
aktualisieren und dann die benötigten Pakete installieren: pkg install gitea
Dienste aktivieren damit diese beim Start des Jails automatisch mit starten: service gitea enable
Eigentlich erwartet Gitea seine Konfigurationsdatei in der Datei /usr/local/etc/gitea/conf/app.ini
, was aber außerhalb des Gitea Datenverzeichnisses /var/db/gitea/
liegt. Um wirklich alles relevante an einem Ort (und im Backup) zu haben, bedienen wir uns einem Kniff mit symbolischen Links: ln -sf /var/db/gitea/app.ini /usr/local/etc/gitea/conf/app.ini
schafft die Verknüpfung zu /usr/local/etc/gitea/conf/app.ini
.
Im Vergleich zur mitgelieferten Standard-Konfiguration hat diese mitunter ein paar Änderungen:
REPO_INDEXER_ENABLED = true
)DISABLE_GRAVATAR = true
)ENABLED = false
)SHOW_FOOTER_BRANDING = false
)DISABLE_SSH = true
)HTTP_ADDR = 0.0.0.0
)cat > /usr/local/etc/gitea/conf/app.ini << 'EOF'
APP_NAME = Gitea
RUN_USER = git
RUN_MODE = prod
[database]
DB_TYPE = sqlite3
HOST = 127.0.0.1:3306
NAME = gitea
PASSWD =
PATH = /var/db/gitea/gitea.db
USER = root
SSL_MODE = disable
[indexer]
ISSUE_INDEXER_PATH = /var/db/gitea/indexers/issues.bleve
REPO_INDEXER_ENABLED = true
[log]
ROOT_PATH = /var/log/gitea
MODE = file
LEVEL = Info
[mailer]
ENABLED = false
[oauth2]
JWT_SECRET = GITEAJWTSECRET
[picture]
AVATAR_UPLOAD_PATH = /var/db/gitea/data/avatars
DISABLE_GRAVATAR = true
ENABLE_FEDERATED_AVATAR = false
[repository]
ROOT = /var/db/gitea/gitea-repositories
SCRIPT_TYPE = sh
DISABLED_REPO_UNITS = repo.packages,repo.releases
DEFAULT_BRANCH = main
[repository.upload]
TEMP_PATH = /var/db/gitea/data/tmp/uploads
[security]
INSTALL_LOCK = true
INTERNAL_TOKEN = GITEAINTERNALTOKEN
SECRET_KEY = GITEASECRETKEY
[session]
PROVIDER = file
PROVIDER_CONFIG = /var/db/gitea/data/sessions
[server]
DOMAIN = GITEAHOSTNAME
HTTP_ADDR = 0.0.0.0
HTTP_PORT = 3000
ROOT_URL = http://GITEAHOSTNAME:3000/
DISABLE_SSH = false
SSH_DOMAIN = %(DOMAIN)s
SSH_PORT = 22
DISABLE_SSH = true
OFFLINE_MODE = false
APP_DATA_PATH = /var/db/gitea/data
[service]
REGISTER_EMAIL_CONFIRM = false
ENABLE_NOTIFY_MAIL = false
DISABLE_REGISTRATION = false
ENABLE_CAPTCHA = false
REQUIRE_SIGNIN_VIEW = true
[other]
SHOW_FOOTER_BRANDING = false
SHOW_FOOTER_VERSION = false
SHOW_FOOTER_TEMPLATE_LOAD_TIME = false
'EOF'
Nachträglich werden noch gefüllt:
GITEAHOSTNAME
, GITEAINTERNALTOKEN
, GITEAJWTSECRET
und GITEASECRETKEY
sed -i '' 's/GITEAHOSTNAME/'`hostname -f`'/' /usr/local/etc/gitea/conf/app.ini
sed -i '' 's/GITEAINTERNALTOKEN/'`gitea generate secret INTERNAL_TOKEN`'/' /usr/local/etc/gitea/conf/app.ini
sed -i '' 's/GITEAJWTSECRET/'`gitea generate secret JWT_SECRET`'/' /usr/local/etc/gitea/conf/app.ini
sed -i '' 's/GITEASECRETKEY/'`gitea generate secret SECRET_KEY`'/' /usr/local/etc/gitea/conf/app.ini
Zum Schluss noch die Berechtigung der Konfigurationsdatei mit chown git:git /var/db/gitea/app.ini
anpassen
Damit sind wir nun am Ende der Vorbereitungen angelangt und Gitea wird mit service gitea start
gestartet.
Nun erfolgt der erste Aufruf von Gitea, in dem direkt der erste Benutzer registriert wird.
Hierzu mit dem Lieblingsbrowser nun die IP oder Hostname des Gitea Jails aufrufen:
http://IP:3000 oder http://HOSTNAME:3000
Dieser erste Benutzer ist dann automatisch auch der Benutzer mit administrativen Rechten
Der Benutzer darf *NICHT admin
heißen
Nachdem der erste "Admin"-Benutzer erstellt wurde, kann in Betracht gezogen werden, die eigenständige Registrierung zu deaktivieren und dem Admin die Aufgabe zu übertragen, neue Benutzer im System anzulegen. Dazu genügt es in der /var/db/gitea/conf/app.ini
den Eintrag DISABLE_REGISTRATION
von false
auf true
zu setzen und den Gitea Dienst mit service gitea restart
neu zu starten.
pkg install -y gitea
service gitea enable
fetch https://github.com/marzlberger/bsdbox/blob/main/gitea/app.ini -o /usr/local/etc/gitea/conf/app.ini
sed -i '' 's/GITEAHOSTNAME/'`hostname -f`'/' /usr/local/etc/gitea/conf/app.ini
sed -i '' 's/GITEAINTERNALTOKEN/'`gitea generate secret INTERNAL_TOKEN`'/' /usr/local/etc/gitea/conf/app.ini
sed -i '' 's/GITEAJWTSECRET/'`gitea generate secret JWT_SECRET`'/' /usr/local/etc/gitea/conf/app.ini
sed -i '' 's/GITEASECRETKEY/'`gitea generate secret SECRET_KEY`'/' /usr/local/etc/gitea/conf/app.ini
service gitea start
Voilá