Wie man die Gitea Code-Hosting-Plattform mit HTTPS auf CentOS 8 installiert

Gitea ist ein Code, der eine in Go geschriebene Webanwendung hostet. Wie der Name schon sagt, ist sie für die Verwendung mit dem beliebten Quellcode-Kontrollprogramm Git konzipiert, ähnlich wie Gitlab und Github. Dieser Leitfaden erklärt die Installation von Gitea unter CentOS 8 mit einem Nginx HTTPS Reverse-Proxy.

Anforderungen

  • Ein CentOS 8-System, auf dem Sie Root-Rechte haben.
  • Ein registrierter Domain-Name, der auf Ihren Server zeigt.
  • Die Umgebungsvariable $EDITOR sollte auf Ihren bevorzugten Texteditor gesetzt werden.
  • Zugang zu einem SMTP-Server für E-Mail-Benachrichtigungen (optional).

Stellen Sie sicher, dass Ihre (Sub-)Domain mit einem A-Eintrag auf die IPv4-Adresse Ihres Servers zeigt. Optional können Sie einen AAAA-Eintrag erstellen, der auf die IPv6-Adresse Ihres Servers zeigt.

ANMERKUNG: Diese Anleitung geht davon aus, dass SELinux entweder auf deaktiviert oder auf freigiebig eingestellt ist.

Schritt 1: Vorbereitung des Systems

Beginnen Sie mit der Installation aller verfügbaren Updates und einem Neustart:

dnf update -y
reboot

Für diese Einrichtung sind mehrere Softwarekomponenten erforderlich:

  • Git, eine Abhängigkeit von Gitea.
  • PostgreSQL, da Gitea eine Datenbank benötigt.
  • Nginx, das als Reverse-Proxy verwendet wird.
  • Sudo, um Befehle als Benutzer des Postgres-Systems auszuführen.
  • Wget
  • Certbot, ein Dienstprogramm zum Erhalten von Let’s Encrypt SSL-Zertifikaten. Certbot wird separat installiert, da es in den CentOS-Software-Repositories nicht verfügbar ist.

Installieren Sie diese wie folgt:

dnf install -y git postgresql postgresql-server nginx sudo wget

Certbot-auto ist ein Skript, das die Installation von certbot verwaltet. Laden Sie es herunter:

wget https://dl.eff.org/certbot-auto -O /usr/local/bin/certbot-auto

Stellen Sie sicher, dass die richtigen Berechtigungen gesetzt sind:

chmod 0755 /usr/local/bin/certbot-auto

Führen Sie die folgenden Schritte aus, um certbot zu installieren. Sie werden vom Paketmanager aufgefordert, die Installation der Abhängigkeiten zu bestätigen, antworten Sie mit ‚y‘.

certbot-auto --install-only

Als nächstes legen Sie einen Benutzer zum Ausführen von Gitea an:

useradd --system --shell /bin/bash --create-home --home-dir /home/gitea gitea

Erstellen Sie dann die Verzeichnisstruktur für Gitea:

mkdir -p /var/lib/gitea/{data,log} /etc/gitea /run/gitea

Und setzen Sie Eigentümer und Berechtigungen wie folgt:

chown -R gitea:gitea /var/lib/gitea
chown -R gitea:gitea /var/run/gitea
chown -R root:gitea /etc/gitea
chmod -R 750 /var/lib/gitea
chmod 770 /etc/gitea

Die Berechtigungen auf /etc/gitea sind temporär und werden nach dem Ausführen des Web-Installationsprogramms verschärft.

Ermöglichen Sie den Verkehr zu den Ports 80 und 443 dauerhaft:

firewall-cmd --add-port 80/tcp --add-port 443/tcp --permanent
firewall-cmd --reload

Der Zugriff auf Port 3000 ist nur vorübergehend für die Ersteinrichtung erforderlich, da wir gitea so konfigurieren werden, dass stattdessen ein Unix-Socket verwendet wird.

firewall-cmd --add-port 3000/tcp

Schritt 2: Einrichtung der Datenbank

Postgres initialisieren:

postgresql-setup --initdb --unit postgresql

Stellen Sie sicher, dass sie aktiviert ist und läuft:

systemctl enable --now postgresql.service

Melden Sie sich bei Postgres an:

sudo -u postgres psql

Erstellen Sie dann eine Benutzerrolle und eine Datenbank, die von Gitea verwendet werden soll:

postgres=# CREATE ROLE gitea LOGIN ENCRYPTED PASSWORD 'your_password';
postgres=# CREATE DATABASE gitea;
postgres=# GRANT ALL PRIVILEGES ON DATABASE gitea TO gitea;
postgres=# \q

Öffnen Sie die Konfigurationsdatei für die Postgres-Client-Authentifizierung:

$EDITOR /var/lib/pgsql/data/pg_hba.conf

Fügen Sie die folgende Zeile direkt nach # IPv4 local connections ein:

# IPv4 local connections:
host	gitea		gitea		127.0.0.1/32		md5

Speichern Sie die Datei und starten Sie Postgres neu:

systemctl restart postgresql.service

Schritt 3: Gitea installieren

Laden Sie die linux-amd64-Binärversion von Gitea von der Download-Seite von Gitea herunter. Zum Beispiel:

wget https://dl.gitea.io/gitea/master/gitea-master-linux-amd64 -O /usr/local/bin/gitea

Stellen Sie die korrekten Berechtigungen für die heruntergeladene Binärdatei ein:

chmod 755 /usr/local/bin/gitea

Als nächstes erstellen Sie eine systemd unit-Datei:

$EDITOR /etc/systemd/system/gitea.service

Und geben Sie Folgendes ein:

[Unit]
Description=Gitea (Git with a cup of tea)
After=syslog.target
After=network.target
Requires=postgresql.service
[Service]
Type=simple
User=gitea
Group=gitea
WorkingDirectory=/var/lib/gitea/
RuntimeDirectory=gitea
ExecStart=/usr/local/bin/gitea web -c /etc/gitea/app.ini
Restart=always
Environment=USER=gitea HOME=/home/gitea GITEA_WORK_DIR=/var/lib/gitea
[Install]
WantedBy=multi-user.target

Stellen Sie sicher, dass die neue Einheit geladen ist:

systemctl daemon-reload

Dann weisen Sie systemd an, Gitea beim Booten zu starten:

systemctl enable gitea.service

Schritt 4: Konfigurieren von Gitea

Für die Erstkonfiguration verwenden wir das mitgelieferte Web-Installationsprogramm. Starten Sie zunächst Gitea:

systemctl start gitea.service

Navigieren Sie dann zu http://your_domain:3000/install und geben Sie die erforderlichen Parameter wie folgt ein:

  • Datenbank-Typ: PostgreSQL
  • Gastgeber: 127.0.0.1:5432
  • Benutzername: gitea
  • Passwort: Geben Sie das Passwort ein, das Sie bei der Erstellung der Postgres-Rolle gewählt haben.
  • Datenbank-Name: gitea
  • SSL: Deaktivieren
  • Titel der Website: Titel Ihrer Wahl.
  • Repository-Wurzelpfad: /var/lib/gitea/data/repositories
  • Git LFS-Wurzelpfad: /var/lib/gitea/data/lfs
  • Als Benutzername ausführen: gitea
  • SSH-Server-Domäne: Ihre_Domäne
  • SSH-Server-Port: 22
  • Gitea HTTP Beitrag anhören: 3000
  • Gitea Basis-URL: https://your_domain/
  • Log-Pfad: /var/lib/gitea/log

Konfigurieren Sie E-Mail und die übrigen Einstellungen nach Belieben und klicken Sie dann auf „Gitea installieren“. Sie werden auf eine fehlerhafte URL umgeleitet. Dies ist normal, da wir Nginx oder HTTPS noch nicht konfiguriert haben. Aus Leistungsgründen werden wir Gitea jetzt so konfigurieren, dass es auf einem Unix-Socket statt auf dem Standard-TCP-Port lauscht.

Stoppen Sie Gitea, bevor Sie fortfahren:

systemctl stop gitea.service

Ziehen Sie die Berechtigungen auf /etc/gitea wie unten gezeigt an. Dies verhindert, dass jeder, der nicht in der gitea-Gruppe ist, die app.ini liest, die sensible Informationen enthält, einschließlich der Datenbank-Anmeldeinformationen.

chmod 750 /etc/gitea
chown root:gitea /etc/gitea/app.ini
chmod 640 /etc/gitea/app.ini

Öffnen Sie seine Konfigurationsdatei:

$EDITOR /etc/gitea/app.ini

Entfernen Sie die folgende Zeile aus dem Server-Abschnitt:

HTTP_PORT = 3000

Und fügen Sie die folgenden Zeilen in den Server-Abschnitt ein:

HTTP_ADDR        = /run/gitea/gitea.sock
PROTOCOL         = unix
UNIX_SOCKET_PERMISSION = 666

Schritt 5: Umgekehrte Proxy-Einrichtung

Stoppen Sie Nginx, wenn es läuft, damit certbot auf Port 80 lauschen kann:

systemctl stop nginx.service

Verwenden Sie den folgenden Befehl, um ein Zertifikat für Ihre Domain zu erhalten:

certbot-auto certonly --standalone --agree-tos -m [email protected] -d your_domain

Let’s Encrypt überprüft den Domainbesitz vor der Ausstellung des Zertifikats. Ihr Zertifikat, Ihre Kette und Ihr privater Schlüssel werden in /etc/letsencrypt/live/your_domain/ gespeichert.

Jetzt können wir Nginx konfigurieren. Erstellen Sie eine neue Konfigurationsdatei:

$EDITOR /etc/nginx/conf.d/gitea.conf

Und geben Sie die folgenden Serverblöcke ein:

server {
        listen 80;
        listen [::]:80;
        server_name your_domain;
        return 301 https://$server_name$request_uri;
	access_log /var/log/nginx/gitea-proxy_access.log;
	error_log /var/log/nginx/gitea-proxy_error.log;
}
server {
        listen 443 ssl;
        listen [::]:443 ssl;
        server_name your_domain;
        ssl on;
        ssl_certificate /etc/letsencrypt/live/your_domain/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/your_domain/privkey.pem;
        location / {
                proxy_pass http://unix:/var/run/gitea/gitea.sock;
	}
	access_log /var/log/nginx/gitea-proxy_access.log;
	error_log /var/log/nginx/gitea-proxy_error.log;
}

Der erste Server-Block dient lediglich dazu, alle HTTP-Anfragen auf HTTPS umzuleiten. Der zweite Block lauscht auf HTTPS-Verbindungen und leitet sie an den Unix-Socket weiter, auf dem wir Gitea zum Abhören konfiguriert haben.

Sobald Sie die obige Konfiguration gespeichert haben, überprüfen Sie sie auf Syntaxfehler und bearbeiten Sie Ihre Konfiguration gegebenenfalls:

nginx -t

Starten Sie schließlich Nginx und Gitea:

systemctl start nginx.service gitea.service

Ihre Gitea-Instanz sollte nun erfolgreich laufen. Greifen Sie unter https://your_domain darauf zu.

Optionale Schritte

Konfiguration der Protokollierung

Standardmäßig protokolliert Giteas Nachrichten der Schweregradstufe Info und höher. Sie werden dies höchstwahrscheinlich in Warnung oder Fehler ändern wollen. Öffnen Sie dazu /etc/gitea/app.ini und ändern Sie den Parameter LEVEL im Abschnitt [log] in einen der folgenden Parameter: trace, debug, info, warn, error, critical, fatal, none. Um zum Beispiel Meldungen mit dem Schweregrad Warn und höher zu protokollieren, verwenden Sie

[log]
MODE = file
LEVEL = warn
ROOT_PATH = /var/lib/gitea/log

Starten Sie Gitea neu, damit die Änderungen wirksam werden:

systemctl restart gitea.service

Separater SSH-Server

Gitea kann alternativ seinen eigenen SSH-Server verwenden. Um ihn zu aktivieren, fügen Sie die folgende Zeile in den Konfigurationsabschnitt [server] ein:

START_SSH_SERVER = true

Und ändern Sie den SSH-Port auf eine beliebige Zahl über 1024, zum Beispiel:

SSH_PORT = 2222

Starten Sie dann Gitea neu, um die Änderungen zu übernehmen und den Verkehr auf dem gewählten Port zu ermöglichen:

firewall-cmd --add-port 2222/tcp --permanent
firewall-cmd --reload

Das könnte Dich auch interessieren …