Wie man den Gitea Code Hosting Service auf Fedora 34 installiert

Gitea ist eine Open-Source-Code-Hosting-Lösung, die auf der Git-Plattform basiert. Sie ist in der Sprache Go geschrieben. Es beinhaltet einen Repository File Editor, Issue Tracking, Pull Requests, User Management, Benachrichtigungen, ein eingebautes Wiki, LFS Support, Git Hooks und vieles mehr.

Es ist eine leichtgewichtige Anwendung. Daher kann es auch auf Systemen mit geringer Leistung installiert werden. Wenndu nach einer selbst gehosteten Git Plattform mit geringerem Speicherplatz suchst, solltest du dir Gitea ansehen.

Dieser Artikel beschreibt, wie du Gitea auf Fedora 34 installierst und konfigurierst und wie du dein erstes Git Repository einrichtest. Gitea kann aus dem Quellcode, binär, als Docker-Paket oder als Paket installiert werden. Für unser Tutorial werden wir es von Binary installieren.

Voraussetzungen

  • Ein Server auf dem Fedora 34 läuft.
  • Ein nicht-root sudo Benutzer.
  • SELinux Deaktiviert.
  • Stelle sicher, dass alles auf dem neuesten Stand ist.
    $ sudo dnf update
    

Schritt 1 – Firewall konfigurieren

Der erste Schritt ist die Konfiguration der Firewall. Fedora Server kommt mit der FirewalldFirewall.

Prüfe, ob die Firewall läuft.

$ sudo firewall-cmd --state

Du solltest die folgende Ausgabe erhalten.

running

Überprüfe die aktuell erlaubten Dienste/Ports.

$ sudo firewall-cmd --permanent --list-services

Es sollte die folgende Ausgabe angezeigt werden.

dhcpv6-client mdns ssh

Erlaube HTTP und HTTPS Ports.

$ sudo firewall-cmd --permanent --add-service=http
$ sudo firewall-cmd --permanent --add-service=https

Überprüfe erneut den Status der Firewall.

$ sudo firewall-cmd --permanent --list-services

Du solltest eine ähnliche Ausgabe sehen.

dhcpv6-client http https mdns ssh

Lade die Firewall neu.

$ sudo systemctl reload firewalld

Schritt 2 – Git installieren

Der erste Schritt ist die Installation von Git.

$ sudo dnf install git

Überprüfe die Installation, indem du die Git Version überprüfst.

$ git --version
git version 2.31.1

Git konfigurieren

Git kann mit dem git config Befehl konfiguriert werden. Lege deinen Namen und deine Emailadresse für die Arbeit mit Git fest.

$ git config --global user.name "Your Name"
$ git config --global user.email "[email protected]"

Du kannst die Konfiguration mit dem folgenden Befehl überprüfen.

$ git config --list
user.name=Your Name
[email protected]

Schritt 3 – PostgreSQL installieren und konfigurieren

Gitea unterstützt SQLite, MySQL/Mariadb, MSSQL und PostgreSQL. Für unser Tutorial werden wir PostgreSQL verwenden.

Installiere und initialisiere PostgreSQL.

$ sudo dnf module enable postgresql:13
$ sudo dnf install postgresql-server postgresql-contrib
$ sudo postgresql-setup --initdb --unit postgresql
$ sudo systemctl enable --now postgresql

PostgreSQL verwendet standardmäßig das md5-Verschlüsselungsschema für die Passwortauthentifizierung, was nicht sicher ist. Du musst auf das SCRAM-SHA-256 Schema wechseln. Und wenn du dich mit einer entfernten PostgreSQL Datenbank verbinden willst, musst du sie so konfigurieren, dass sie auf deine IP-Adresse hört. Beides kann durch Bearbeiten der /var/lib/pgsql/data/postgresql.conf Datei geändert werden. Öffne sie zum Editieren.

$ sudo nano /var/lib/pgsql/data/postgresql.conf

Bearbeite die folgenden Variablen auf die folgende Weise.

listen_addresses = 'localhost, 201.0.110.0'
password_encryption = scram-sha-256

Speichere die Datei, indem du Strg + X drückst und Y eingibst, wenn du dazu aufgefordert wirst.

Starte PostgreSQL neu.

$ sudo systemctl restart postgresql

Melde dich in der PostgreSQL-Shell an.

$ sudo -u postgres psql

Erstelle einen neuen SQL-Benutzer und eine Datenbank für Gitea. Wähle ein starkes Passwort für deinen Datenbankbenutzer.

postgres-# CREATE ROLE gitea WITH LOGIN PASSWORD 'yourpassword';
postgres-# CREATE DATABASE giteadb WITH OWNER gitea TEMPLATE template0 ENCODING UTF8 LC_COLLATE 'en_US.UTF-8' LC_CTYPE 'en_US.UTF-8';

Ersetze den Benutzernamen, den Datenbanknamen und das Passwort wie gewünscht.

Beende die Shell, indem du \q eingibst.

Erlaube dem Datenbankbenutzer den Zugriff auf die oben erstellte Datenbank, indem du die folgende Authentifizierungsregel zu /var/lib/pgsql/data/pg_hba.conf hinzufügst.

Wenn die Datenbank lokal ist, dann füge diese Zeile hinzu.

local    giteadb    gitea    scram-sha-256

Für eine entfernte Datenbank, verwende stattdessen den folgenden Code.

host    giteadb    gitea    192.0.2.10/32    scram-sha-256

Du musst auch die folgenden Zeilen bearbeiten, indem du ident durch scram-sha-256 ersetzst.

# IPv4 local connections:
host    all             all             127.0.0.1/32            ident
# IPv6 local connections:
host    all             all             ::1/128                 ident

Sie sollten wie die folgenden aussehen.

# IPv4 local connections:
host    all             all             127.0.0.1/32            scram-sha-256
# IPv6 local connections:
host    all             all             ::1/128                 scram-sha-256

Speichere die Datei, indem du Strg + X drückst und Y eingibst, wenn du dazu aufgefordert wirst.

Starte PostgreSQL neu.

$ sudo systemctl restart postgresql

Du musst auch die folgende Regel in der Firewall hinzufügen, wenn du Remote-Verbindungen ermöglichen willst.

$ sudo firewall-cmd --permanent--add-service=postgresql
$ sudo firewall-cmd --reload

Schritt 4 – Erstelle einen Git-Benutzer

Erstelle einen neuen Systembenutzer, um die Gitea Anwendung auszuführen.

$ sudo useradd \
   --system \
   --shell /bin/bash \
   --comment 'Git Version Control' \
   --create-home \
   --home /home/git \
   git

Dieser Befehl erstellt einen neuen Benutzer und eine Gruppe mit dem Namen git und setzt das Homeverzeichnis auf /home/git.

Schritt 5 – Installiere Gitea

Öffne die Gitea Downloads Seite und überprüfe die Versionsnummer der neuesten verfügbaren Binärdatei. Zum Zeitpunkt der Erstellung dieses Tutorials ist die neueste Version 1.14.3. Wenn es eine neuere Version gibt, ändere sie in der VERSION Variable im untenstehenden Befehl.

Benutze das wget Utility, um das neueste Gitea Binary zu laden.

$ GITEAVERSION=1.14.3
$ wget -O gitea https://dl.gitea.io/gitea/${GITEAVERSION}/gitea-${GITEAVERSION}-linux-amd64

Verschiebe das heruntergeladene Binary in das /usr/local/bin Verzeichnis.

$ sudo mv gitea /usr/local/bin

Mache das Binary ausführbar.

$ sudo chmod +x /usr/local/bin/gitea

Führe die folgenden Befehle aus, um Verzeichnisse zu erstellen und die erforderlichen Berechtigungen zu setzen, damit Gitea richtig funktioniert.

$ sudo mkdir -p /var/lib/gitea/{custom,data,log}
$ sudo chown -R git:git /var/lib/gitea/
$ sudo chmod -R 750 /var/lib/gitea/
$ sudo mkdir /etc/gitea
$ sudo chown root:git /etc/gitea
$ sudo chmod 770 /etc/gitea

Die Berechtigung für das Verzeichnis /etc/gitea wird auf 770 gesetzt, damit der Installationsassistent die Konfigurationsdatei erstellen kann. Sobald die Installation abgeschlossen ist, werden wir eine restriktivere Berechtigung setzen.

Erstelle eine Systemd Service Datei

Wir werden Gitea als systemd Dienst laufen lassen. Dafür erstellen wir eine neue systemd Eintragsdatei für Gitea.

$ sudo nano /etc/systemd/system/gitea.service

Füge den folgenden Code darin ein.

[Unit]
Description=Gitea
After=syslog.target
After=network.target
After=postgresql.service

[Service]
RestartSec=2s
Type=simple
User=git
Group=git
WorkingDirectory=/var/lib/gitea/
ExecStart=/usr/local/bin/gitea web -c /etc/gitea/app.ini
Restart=always
Environment=USER=git HOME=/home/git GITEA_WORK_DIR=/var/lib/gitea

[Install]
WantedBy=multi-user.target

Speichere die Datei, indem du Strg + X drückst und Y eingibst, wenn du dazu aufgefordert wirst.

Als Referenz kannst du einen Blick auf die systemd Beispieldatei werfen , die im Gitea Repository verfügbar ist.

Starte den systemd Daemon neu, um die Datei zu aktivieren, die wir gerade erstellt haben.

$ sudo systemctl daemon-reload

Aktiviere und starte den Gitea Dienst.

$ sudo systemctl enable --now gitea

Überprüfe, dass Gitea läuft.

$ sudo systemctl status gitea
  gitea.service - Gitea
     Loaded: loaded (/etc/systemd/system/gitea.service; enabled; vendor preset: disabled)
     Active: active (running) since Tue 2021-07-04 20:33:38 EDT; 1 day 8h ago
   Main PID: 46404 (gitea)
      Tasks: 7 (limit: 2328)
     Memory: 115.5M
        CPU: 9min 12.061s
     CGroup: /system.slice/gitea.service
             ---46404 /usr/local/bin/gitea web -c /etc/gitea/app.ini
...

Schritt 6 – Gitea konfigurieren

Gitea lauscht standardmäßig auf Port 3000. Du kannst entweder einen anderen Port verwenden oder bei dem Standardport bleiben. Daher müssen wir auch den Port 3000 öffnen.

$ sudo firewall-cmd --permanent --add-port=3000/tcp
$ sudo firewall-cmd --reload

Öffne deinen Browser und gib https://YOURIPADDRESS:3000 ein und du wirst mit dem Gitea Installer begrüßt. Verwende die folgenden Werte zur Konfiguration.

Datenbank Einstellungen

Gitea Installer - Datenbank Einstellungen

  • Datenbanktyp: Wähle PostgreSQL aus dem Dropdown
  • Host: 127.0.0.1:5432
  • Benutzername: gitea
  • Passwort: yourpassword
  • Datenbank Name: gitea

Allgemeine Einstellungen

Gitea Installer - Allgemeine Einstellungen

  • Site Titel: Gib den Namen deiner Organisation ein
  • Repository Root Path: Belasse den Standardpfad
  • Git LFS Root Path: Belasse den Standardpfad
  • Ausführen als Benutzername: git
  • SSH Server Domain: Gib deine IP-Adresse ein
  • HTTP Listen Port: 3000 (Du kannst den Port hier ändern, aber du musst dann über die Firewall darauf zugreifen).
  • Gitea Base URL: http://YOURIPADDRESS:3000
  • Log Pfad: Belasse den Standard

Du kannst die E-Mail- und Server-Einstellungen an dieser Stelle konfigurieren oder sie später ändern. Du solltest jedoch die Einstellungen des Administratorkontos ausfüllen.

Gitea Installer - Optionale Einstellungen

Um die Installation zu starten, klicke auf die Schaltfläche Gitea* installieren. Sobald die Installation abgeschlossen ist, wirst du automatisch eingeloggt und zum Account-Dashboard weitergeleitet.

Gitea Konto Dashboard

Die Installation wird die Gitea Konfigurationsdatei erstellen. Ändere die Berechtigung auf schreibgeschützt.

$ sudo chmod 750 /etc/gitea
$ sudo chmod 640 /etc/gitea/app.ini

Das war’s. Gitea ist nun auf deinem Server installiert.

Schritt 7 – Installiere SSL mit Let’s Encrypt

Um ein SSL-Zertifikat mit Let’s Encrypt zu installieren, müssen wir das Certbot-Tool mit Hilfe des Snapd-Paketinstallers, der in Ubuntu 20.04 enthalten ist, herunterladen.

Führe die folgenden Befehle aus, um Certbot zu installieren.

$ sudo dnf install certbot

Generiere das SSL-Zertifikat.

$ sudo certbot certonly --standalone --preferred-challenges http -d example.com

Der obige Befehl wird ein Zertifikat in das /etc/letsencrypt/live/example.com Verzeichnis auf deinem Server herunterladen.

Erstelle ein Challenge-Webroot-Verzeichnis für die automatische Erneuerung von Let’s Encrypt.

$ sudo mkdir -p /var/lib/letsencrypt

Erstelle einen Cron Job, um das SSL zu erneuern. Er wird jeden Tag laufen, um das Zertifikat zu überprüfen und bei Bedarf zu erneuern. Erstelle dazu zunächst die Datei /etc/cron.daily/certbot-renew und öffne sie zum Bearbeiten.

$ sudo nano /etc/cron.daily/certbot-renew

Füge den folgenden Code ein.

#!/bin/sh
certbot renew --cert-name example.com --webroot -w /var/lib/letsencrypt/ --post-hook "systemctl reload nginx"

Speichere die Datei, indem du Strg + X drückst und Y eingibst, wenn du dazu aufgefordert wirst.

Ändere die Berechtigungen der Aufgabendatei, um sie ausführbar zu machen.

$ sudo chmod +x /etc/cron.daily/certbot-renew

Schritt 8 – Nginx installieren und konfigurieren

Der nächste Schritt ist die Installation des Nginx Servers.

$ sudo dnf install nginx

Erstelle die Nginx Konfigurationsdatei für Gitea.

$ sudo nano /etc/nginx/conf.d/gitea.conf

Füge den folgenden Code darin ein.

server {
        listen 80;
    
        location ~ /\.well-known/acme-challenge {
                root /var/lib/letsencrypt/;
        }
    
        server_name yourdomain.com;
        return 301 https://$server_name$request_uri;
}
server {
        listen 443 ssl http2;
        server_name your_domain;
    
        client_max_body_size 50m;
    
        ssl_session_timeout 1d;
        ssl_session_cache shared:MozSSL:10m;  # about 40000 sessions
        ssl_session_tickets off;
        ssl_protocols TLSv1.2 TLSv1.3;
        ssl_ciphers "ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20- POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4";
        ssl_prefer_server_ciphers off;
        ssl_ecdh_curve X25519:prime256v1:secp384r1:secp521r1;
        ssl_stapling on;
        ssl_stapling_verify on;

        ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;
        ssl_trusted_certificate /etc/letsencrypt/live/yourdomain.com/chain.pem;
    
        proxy_read_timeout 720s;
        proxy_connect_timeout 720s;
        proxy_send_timeout 720s;
        
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Real-IP $remote_addr;
    
        location / {
                proxy_redirect off;
                proxy_pass http://127.0.0.1:3000;
     	}
        access_log /var/log/nginx/gitea.access.log;
        error_log /var/log/nginx/gitea.error.log;
}

Speichere die Datei, indem du Strg + X drückst und Y eingibst, wenn du dazu aufgefordert wirst.

Überprüfe, ob die Konfigurationsdatei richtig funktioniert.

$ sudo nginx -t

Starte den Nginx Server neu.

$ sudo systemctl restart nginx

Ändere als nächstes die Gitea Domain und die Root URL. Öffne dazu die Konfigurationsdatei /etc/gitea/app.ini.

$ sudo nano /etc/gitea/app.ini

Ändere die folgenden Werte.

[server]
SSH_DOMAIN       = git.example.com
DOMAIN           = git.example.com
ROOT_URL         = https://git.example.com/

Speichere die Datei, indem du Strg + X drückst und Y eingibst, wenn du dazu aufgefordert wirst.

Starte den Gitea Dienst neu.

$ sudo systemctl restart gitea

Schritt 9 – E-Mail-Benachrichtigungen einrichten

Wenn du E-Mail-Benachrichtigungen erhalten möchtest, kannst du diese entweder über Sendmail oder über einen E-Mail-Transaktionsdienst eines Drittanbieters wie Amazon SES, Postmark, Mailgun oder Sendgrid aktivieren.

Um die Benachrichtigungen zu aktivieren, öffne die Konfigurationsdatei /etc/gitea/app.ini.

$ sudo nano /etc/gitea/app.ini

Bearbeite den folgenden Abschnitt in der Datei und füge den folgenden Code hinzu.

[mailer]
ENABLED = true
FROM           = [email protected]
MAILER_TYPE    = smtp
HOST           = mail.mydomain.com:587
IS_TLS_ENABLED = true
USER           = [email protected]
PASSWD         = `password`

Speichere die Datei, indem du Strg + X drückst und Y eingibst, wenn du dazu aufgefordert wirst.

Starte den Gitea Dienst neu.

$ sudo systemctl restart gitea

Schritt 10 – Gitea aktualisieren

Das Upgraden von Gitea beinhaltet das Herunterladen und Ersetzen des Gitea Binary.

Stoppe zuerst den Gitea Dienst.

$ sudo systemctl stop gitea

Lade die Gitea Binärdatei herunter und installiere sie.

$ GITEAVERSION=LATESTVERSION
$ wget -O gitea https://dl.gitea.io/gitea/${GITEAVERSION}/gitea-${GITEAVERSION}-linux-amd64
$ sudo mv gitea /usr/local/bin
$ sudo chmod +x /usr/local/bin/gitea

Starte den Gitea Dienst neu.

$ sudo systemctl start gitea

Schritt 11 – Wie man SSH benutzt

Um SSH zu nutzen, müssen wir unseren eigenen SSH Schlüssel zu Gitea hinzufügen. Wenn du keinen hast, kannst du einen mit dem folgenden Befehl auf deinem lokalen System erstellen.

$ ssh-keygen -N "yourpassphrase" -t ed25519 -C "gitea_key"

Dies wird einen Schlüssel namens id_ed25519 im ~/.ssh Verzeichnis erstellen. Um diesen Schlüssel hinzuzufügen, kopiere den Inhalt der Datei ~/.ssh/id_ed25519.pub in deine Zwischenablage. Füge diesen Schlüssel dann auf deiner Gitea Einstellungsseite unter dem Reiter SSH/GPG Keys hinzu. Klicke auf die Schaltfläche Schlüssel hinzufügen und gib dem Schlüssel einen Namen und füge ihn in das Feld ein.

Gitea SSH Schlüssel hinzufügen

Wenn du eine Liste der erlaubten Benutzer in der sshd-Konfigurationsdatei hast, musst du git zu dieser hinzufügen.

Öffne die SSHD Konfigurationsdatei.

$ sudo nano /etc/ssh/sshd_config

Suche nach einer Zeile, die wie die folgende aussehen sollte.

AllowUsers myuser myotheruser git

Speichere die Datei, indem du Strg + X drückst und Y eingibst, wenn du dazu aufgefordert wirst.

Starte den SSHD Dienst neu.

$ sudo systemctl restart ssh

Du musst die Passphrase für den Schlüssel, den wir erstellt haben, zu ssh-agent tool auf deinem lokalen System hinzufügen, damit du nicht wiederholt danach gefragt wirst. Führe die folgenden Befehle aus, um dies zu tun.

$ eval $(ssh-agent)
Agent pid 46436
$ ssh-add ~/.ssh/id_ed25519

Du kannst dein Repository klonen, um die SSH-Verbindung zu testen.

$ git clone ssh://[email protected]/username/repo.git
Cloning into 'repo'...
The authenticity of host 'example.com (201.110.80.160)' can't be established.
ECDSA key fingerprint is SHA256:Kx9l19zpGhHfbb2wHtmWeC7/WWv8e5/T3Tcws2qwVEw.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'example.com,201.110.80.160' (ECDSA) to the list of known hosts.
remote: Enumerating objects: 5, done.
remote: Counting objects: 100% (5/5), done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 5 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (5/5), 4.77 KiB | 977.00 KiB/s, done.

Fazit

Dies schließt das Tutorial über die Installation und Konfiguration des Gitea Code Hosting Service auf Fedora 34 ab. Wenn du noch Fragen hast, poste sie in den Kommentaren unten.

Das könnte dich auch interessieren …