Gitea ist eine Code-Hosting-Webanwendung, die in Go geschrieben und von Gogs gegabelt wurde. Wie der Name schon sagt, ist es für die Verwendung mit dem beliebten Quellcodeverwaltungsprogramm Git konzipiert, ähnlich wie Gitlab und Github. Diese Anleitung erklärt, wie man Gitea auf Debian 10 hinter einem HTTPS-Reverse-Proxy (Nginx) installiert.
Anforderungen
- Ein Debian 10-System, auf dem Sie Root-Rechte haben.
- Ein registrierter Domänenname, der auf Ihren Server verweist.
- Die Umgebungsvariable $EDITOR sollte gesetzt werden.
- Zugriff auf einen 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 verweist. Erstellen Sie optional einen AAAA-Eintrag, der auf die IPv6-Adresse Ihres Servers verweist.
Schritt 1:Vorbereiten des Systems
Aktualisieren Sie zunächst Ihren Paketindex und installieren Sie alle verfügbaren Updates:
apt update apt upgrade -y reboot
Für diese Einrichtung sind mehrere Softwarepakete erforderlich:
- Git, eine Abhängigkeit von Gitea.
- PostgreSQL, da Gitea eine Datenbank benötigt.
- Nginx, das als Reverse-Proxy verwendet wird.
- Certbot, ein Dienstprogramm zum Abrufen von SSL-Zertifikaten von Let's Encrypt.
- Sudo, um Befehle als Postgres-Systembenutzer auszuführen.
Installieren Sie sie wie folgt:
apt install -y git nginx certbot postgresql sudo
Erstellen Sie als Nächstes einen Benutzer zum Ausführen von Gitea:
adduser --system --disabled-password --group --shell /bin/bash --home /home/gitea gitea
Erstellen Sie dann die Verzeichnisstruktur für Gitea:
mkdir -p /var/lib/gitea/{data,log} /etc/gitea /run/gitea
Und legen Sie Eigentumsrechte und Berechtigungen wie folgt fest:
chown -R gitea:gitea /var/lib/gitea chown -R gitea:gitea /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-Installers verschärft.
Schritt 2:Datenbankeinrichtung
Stellen Sie sicher, dass Postgres aktiviert ist und ausgeführt wird:
systemctl enable --now [email protected]
Erstellen Sie dann eine Benutzerrolle und eine Datenbank, die von Gitea verwendet werden sollen:
sudo -u postgres psql postgres=# CREATE ROLE gitea LOGIN ENCRYPTED PASSWORD 'your_password'; postgres=# CREATE DATABASE gitea; postgres=# GRANT ALL PRIVILEGES ON DATABASE gitea TO gitea; postgres=# exit;
Schritt 3:Gitea installieren
Laden Sie die neueste linux-amd64-Binärdatei 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 chmod 755 /usr/local/bin/gitea
Erstellen Sie als Nächstes eine systemd-Unit-Datei für Gitea:
$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
Weisen Sie dann systemd an, Gitea beim Systemstart zu starten:
systemctl enable gitea.service
Schritt 4:Gitea konfigurieren
Für die Erstkonfiguration verwenden wir das mitgelieferte Webinstallationsskript. Starten Sie zuerst Gitea:
systemctl start gitea.service
Navigieren Sie dann zu http://your_domain:3000/install und füllen Sie die erforderlichen Parameter wie folgt aus:
- Datenbanktyp:PostgreSQL
- Host:127.0.0.1:5432
- Benutzername:gitea
- Passwort:Geben Sie das Passwort ein, das Sie bei der Erstellung der Postgres-Rolle gewählt haben.
- Datenbankname:gitea
- SSL:Deaktivieren
- Seitentitel:Titel Ihrer Wahl.
- Repository-Stammpfad:/var/lib/gitea/data/repositories
- Git-LFS-Stammpfad:/var/lib/gitea/data/lfs
- Als Benutzername ausführen:gitea
- SSH-Serverdomäne:your_domain
- SSH-Serverport:22
- Gitea HTTP Listen Post:3000
- Gitea-Basis-URL:https://your_domain/
- Protokollpfad:/var/lib/gitea/log
Konfigurieren Sie E-Mail und die restlichen Einstellungen nach Bedarf und klicken Sie dann auf "Gitea installieren". Sie werden zu einer fehlerhaften URL weitergeleitet. 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.
Beenden Sie Gitea, bevor Sie fortfahren:
systemctl stop gitea.service
Verschärfen Sie die Berechtigungen für /etc/gitea wie unten gezeigt. Dadurch wird verhindert, dass Personen, die nicht zur Gitea-Gruppe gehören, app.ini lesen, die vertrauliche Informationen enthält, einschließlich Datenbankanmeldeinformationen.
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
Remove the following line from the [server] section:
HTTP_PORT = 3000
And add the following lines to the [server] section:
HTTP_ADDR = /run/gitea/gitea.sock PROTOCOL = unix UNIX_SOCKET_PERMISSION = 666
Schritt 5:Reverse-Proxy einrichten
Stop Nginx if it is running, as certbot will need to bind to port 80:
systemctl stop nginx.service
Verwenden Sie den folgenden Befehl, um ein Zertifikat für Ihre Domäne zu erhalten:
certbot certonly --standalone --agree-tos -m [email protected] -d your_domain
Let's Encrypt überprüft den Domänenbesitz, bevor das Zertifikat ausgestellt wird. Ihr Zertifikat, Ihre Kette und Ihr privater Schlüssel werden in /etc/letsencrypt/live/your_domain/.
gespeichertWir können jetzt Nginx konfigurieren. Erstellen Sie eine neue Konfigurationsdatei:
$EDITOR /etc/nginx/sites-available/gitea
Und geben Sie die folgende Konfiguration 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 Serverblock dient lediglich dazu, alle HTTP-Anfragen auf HTTPS umzuleiten. Der zweite Block wartet auf HTTPS-Verbindungen und leitet sie an den Unix-Socket weiter, auf dem wir Gitea zum Abhören konfiguriert haben.
Nachdem Sie die obige Konfiguration gespeichert haben, führen Sie Folgendes aus, um sie zu aktivieren:
ln -s /etc/nginx/sites-available/gitea /etc/nginx/sites-enabled
Suchen Sie mit nach Syntaxfehlern und bearbeiten Sie Ihre Konfiguration entsprechend:
nginx -t
Starten Sie schließlich Nginx und Gitea:
systemctl start nginx.service gitea.service
Ihre Gitea-Instanz sollte jetzt erfolgreich ausgeführt werden. Wenn Sie mit dem anfänglichen Web-Installationsprogramm kein Administratorkonto erstellt haben, erhält der erste Benutzer, der sich anmeldet, die Administratorrolle.
Optionale Schritte
Protokollierungskonfiguration
Standardmäßig protokolliert Gitea Nachrichten mit dem Schweregrad Info und höher. Sie werden dies höchstwahrscheinlich in Warn oder Fehler ändern wollen. Öffnen Sie dazu /etc/gitea/app.ini und ändern Sie den Parameter LEVEL im Abschnitt [log] in einen der folgenden Werte:trace, debug, info, warn, error, critical, fatal, none. Um beispielsweise 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 einen eigenen SSH-Server verwenden. Fügen Sie zum Aktivieren die folgende Zeile zum Konfigurationsabschnitt [server] hinzu:
START_SSH_SERVER = true
Und ändern Sie den SSH-Port auf eine beliebige Zahl über 1000, zum Beispiel:
SSH_PORT = 2222
Starten Sie dann Gitea neu, um die Änderungen zu übernehmen.