So installierst du Gitea unter Ubuntu 22.04

Gitea ist ein kostenloser, quelloffener und selbstgehosteter Git-Dienst. Er ist in der Sprache GO geschrieben und bietet eine einfache Möglichkeit, dein eigenes Versionskontrollsystem im Internet zu hosten. Er ist einfach, leichtgewichtig und kann auch auf Systemen mit geringer Leistung installiert werden. Es ist GitHub und GitLab sehr ähnlich und bietet eine Vielzahl von Funktionen wie einen Editor für Repository-Dateien, Projektverfolgung, Benutzerverwaltung, Benachrichtigungen, ein integriertes Wiki und vieles mehr. Es ist plattformübergreifend und kann auf allen wichtigen Betriebssystemen installiert werden, darunter Linux, macOS, Windows, ARM- und PowerPC-Architekturen.

In diesem Lernprogramm zeigen wir dir, wie du den Gitea Git-Dienst mit Nginx und Let’s Encrypt SSL auf Ubuntu 22.04 installierst.

Voraussetzungen

  • Ein Server, auf dem Ubuntu 22.04 läuft.
  • Ein gültiger Domainname, der auf die IP deines Servers zeigt.
  • Ein Root-Passwort ist auf deinem Server konfiguriert.

Erste Schritte

Aktualisiere zunächst alle Systempakete auf die neueste Version, indem du den folgenden Befehl ausführst:

apt update -y
apt upgrade -y

Als Nächstes installierst du das Git-Paket, indem du den folgenden Befehl ausführst:

apt-get install git -y

Sobald das Git-Paket installiert ist, kannst du mit dem nächsten Schritt fortfahren.

MariaDB installieren und konfigurieren

Gitea verwendet MariaDB als Datenbank-Backend. Daher musst du sie auf deinem Server installieren. Du kannst sie mit folgendem Befehl installieren:

apt install mariadb-server -y

Nach der Installation. Nun musst du MariaDB sichern und ein Root-Passwort festlegen. Du kannst es sichern, indem du das Skript mysql_secure_installation ausführst:

mysql_secure_installation

Dieses Skript setzt das Root-Passwort, entfernt anonyme Benutzer, verbietet den Root-Login aus der Ferne und entfernt die Testdatenbank wie unten gezeigt:

Enter current password for root (enter for none):
Set root password? [Y/n]: Y
Remove anonymous users? [Y/n]: Y
Disallow root login remotely? [Y/n]: Y
Remove test database and access to it? [Y/n]:  Y
Reload privilege tables now? [Y/n]:  Y

Sobald die MariaDB gesichert ist, melde dich mit folgendem Befehl in der MariaDB-Shell an:

mysql -u root -p

Gib dein Root-Passwort ein, wenn du dazu aufgefordert wirst. Dann änderst du die GLOBAL innodeb_file_per_table auf On:

MariaDB [(none)]>SET GLOBAL innodb_file_per_table = ON;

Als Nächstes erstellst du eine Datenbank und einen Benutzer für Gitea mit dem folgenden Befehl:

MariaDB [(none)]>CREATE DATABASE gitea;
MariaDB [(none)]>CREATE USER 'gitea'@'localhost' IDENTIFIED BY 'password';

Erteile der Datenbank giteadb alle Berechtigungen:

MariaDB [(none)]>GRANT ALL ON gitea.* TO 'gitea'@'localhost' IDENTIFIED BY 'password' WITH GRANT OPTION;

Aktualisiere dann den Zeichensatz der Datenbank mit folgendem Befehl:

MariaDB [(none)]>ALTER DATABASE gitea CHARACTER SET = utf8mb4 COLLATE utf8mb4_unicode_ci;

Schließlich löschst du die Berechtigungen und verlässt die MariaDB-Shell mit folgendem Befehl:

MariaDB [(none)]>FLUSH PRIVILEGES;
MariaDB [(none)]>EXIT;

Als nächstes musst du die MariaDB-Standardkonfigurationsdatei bearbeiten und InnoDB-Parameter hinzufügen:

nano /etc/mysql/mariadb.conf.d/50-server.cnf

Füge die folgenden Zeilen in den Abschnitt [mysqld] ein:

innodb_file_format = Barracuda
innodb_large_prefix = 1
innodb_default_row_format = dynamic

Speichere und schließe die Datei. Starte dann den MariaDB-Dienst neu, um die Änderungen zu übernehmen:

systemctl restart mariadb

Jetzt ist deine MariaDB-Datenbank konfiguriert. Du kannst jetzt mit dem nächsten Schritt fortfahren.

Gitea installieren und konfigurieren

Besuche zunächst die Gitea Download-Seite, wähle die neueste Version aus und lade die neueste Gitea-Binärdatei mit dem folgenden Befehl herunter:

wget https://dl.gitea.io/gitea/1.17.1/gitea-1.17.1-linux-amd64

Sobald der Download abgeschlossen ist, kopierst du die heruntergeladene Datei in das Verzeichnis /usr/bin/ und gibst ihr Ausführungsrechte:

cp gitea-1.17.1-linux-amd64 /usr/bin/gitea
chmod 755 /usr/bin/gitea

Als Nächstes erstellst du mit dem folgenden Befehl einen Systembenutzer für Gitea:

adduser --system --shell /bin/bash --group --disabled-password --home /home/git git

Als Nächstes erstellst du eine Verzeichnisstruktur für Gitea mit dem folgenden Befehl:

mkdir -p /etc/gitea /var/lib/gitea/{custom,data,indexers,public,log}
chown git:git /etc/gitea /var/lib/gitea/{custom,data,indexers,public,log}
chmod 750 /var/lib/gitea/{data,indexers,log}
chmod 770 /etc/gitea

Wenn du damit fertig bist, kannst du mit dem nächsten Schritt fortfahren.

Gitea Systemd Service Datei erstellen

Als Nächstes musst du eine systemd-Dienstdatei erstellen, um den Gitea-Dienst mit systemd zu verwalten. Du kannst sie mit dem folgenden Befehl erstellen:

nano /etc/systemd/system/gitea.service

Füge die folgenden Zeilen ein:

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

[Service]
RestartSec=2s
Type=simple
User=git
Group=git
WorkingDirectory=/var/lib/gitea/
ExecStart=/usr/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 und schließe die Datei. Dann lädst du den systemd-Daemon neu und startest den Gitea-Dienst mit dem folgenden Befehl:

systemctl daemon-reload
systemctl start gitea

Du kannst den Status des Gitea-Dienstes mit dem folgenden Befehl überprüfen:

systemctl status gitea

Du solltest die folgende Ausgabe sehen:

? gitea.service - Gitea
     Loaded: loaded (/etc/systemd/system/gitea.service; disabled; vendor preset: enabled)
     Active: active (running) since Sun 2022-08-21 12:19:23 UTC; 8s ago
   Main PID: 24766 (gitea)
      Tasks: 6 (limit: 2242)
     Memory: 121.2M
        CPU: 800ms
     CGroup: /system.slice/gitea.service
             ??24766 /usr/bin/gitea web -c /etc/gitea/app.ini

Aug 21 12:19:23 ubuntu2204 gitea[24766]: 2022/08/21 12:19:23 ...s/install/setting.go:21:PreloadSettings() [I] AppPath: /usr/bin/gitea
Aug 21 12:19:23 ubuntu2204 gitea[24766]: 2022/08/21 12:19:23 ...s/install/setting.go:22:PreloadSettings() [I] AppWorkPath: /var/lib/gitea
Aug 21 12:19:23 ubuntu2204 gitea[24766]: 2022/08/21 12:19:23 ...s/install/setting.go:23:PreloadSettings() [I] Custom path: /var/lib/gitea/cus>
Aug 21 12:19:23 ubuntu2204 gitea[24766]: 2022/08/21 12:19:23 ...s/install/setting.go:24:PreloadSettings() [I] Log path: /var/lib/gitea/log
Aug 21 12:19:23 ubuntu2204 gitea[24766]: 2022/08/21 12:19:23 ...s/install/setting.go:25:PreloadSettings() [I] Configuration file: /etc/gitea/>
Aug 21 12:19:23 ubuntu2204 gitea[24766]: 2022/08/21 12:19:23 ...s/install/setting.go:26:PreloadSettings() [I] Prepare to run install page
Aug 21 12:19:23 ubuntu2204 gitea[24766]: 2022/08/21 12:19:23 ...s/install/setting.go:29:PreloadSettings() [I] SQLite3 is supported
Aug 21 12:19:23 ubuntu2204 gitea[24766]: 2022/08/21 12:19:23 cmd/web.go:217:listen() [I] [630222cb-6] Listen: http://0.0.0.0:3000
Aug 21 12:19:23 ubuntu2204 gitea[24766]: 2022/08/21 12:19:23 cmd/web.go:221:listen() [I] [630222cb-6] AppURL(ROOT_URL): http://localhost:3000/
Aug 21 12:19:23 ubuntu2204 gitea[24766]: 2022/08/21 12:19:23 ...s/graceful/server.go:61:NewServer() [I] [630222cb-6] Starting new Web server:>

Als Nächstes aktivierst du den Gitea-Dienst mit folgendem Befehl, damit er beim Neustart des Systems gestartet wird:

systemctl enable gitea

Jetzt ist Gitea gestartet und lauscht auf Port 3000. Du kannst jetzt mit dem nächsten Schritt fortfahren.

Nginx als Reverse Proxy für Gitea konfigurieren

Standardmäßig lauscht Gitea auf Port 3000. Daher musst du Nginx als Reverse Proxy konfigurieren, um auf Gitea zuzugreifen, ohne den Port anzugeben.

Installiere zunächst den Nginx-Webserver, indem du den folgenden Befehl ausführst:

apt-get install nginx -y

Nach der Installation erstellst du eine neue Nginx-Konfigurationsdatei für den virtuellen Host von Gitea:

nano /etc/nginx/sites-available/gitea

Füge die folgenden Zeilen hinzu:

upstream gitea {
    server 127.0.0.1:3000;
}

server {
    listen 80;
    server_name git.example.com;
    root /var/lib/gitea/public;
    access_log off;
    error_log off;

    location / {
      try_files maintain.html $uri $uri/index.html @node;
    }

    location @node {
      client_max_body_size 0;
      proxy_pass http://localhost:3000;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header Host $http_host;
      proxy_set_header X-Forwarded-Proto $scheme;
      proxy_max_temp_file_size 0;
      proxy_redirect off;
      proxy_read_timeout 120;
    }
}

Speichere und schließe die Datei. Aktiviere dann die Konfigurationsdatei für den virtuellen Nginx-Host mit dem folgenden Befehl:

ln -s /etc/nginx/sites-available/gitea /etc/nginx/sites-enabled/

Starte schließlich den Nginx-Dienst neu und überprüfe den Status des Nginx-Dienstes mit dem folgenden Befehl:

systemctl restart nginx
systemctl status nginx

Du solltest die folgende Ausgabe erhalten:

? nginx.service - A high performance web server and a reverse proxy server
     Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
     Active: active (running) since Sun 2022-08-21 12:21:23 UTC; 5s ago
       Docs: man:nginx(8)
    Process: 24799 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
    Process: 24800 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
   Main PID: 24801 (nginx)
      Tasks: 2 (limit: 2242)
     Memory: 4.5M
        CPU: 44ms
     CGroup: /system.slice/nginx.service
             ??24801 "nginx: master process /usr/sbin/nginx -g daemon on; master_process on;"
             ??24802 "nginx: worker process" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ""

Aug 21 12:21:23 ubuntu2204 systemd[1]: Starting A high performance web server and a reverse proxy server...
Aug 21 12:21:23 ubuntu2204 systemd[1]: Started A high performance web server and a reverse proxy server.

Jetzt ist Nginx so konfiguriert, dass es Gitea bedienen kann. Du kannst jetzt mit dem nächsten Schritt fortfahren.

Gitea mit Let’s Encrypt SSL sichern

Zunächst musst du den Certbot-Client installieren, um Let’s Encrypt SSL in deinem System zu installieren und zu verwalten. Du kannst ihn installieren, indem du den folgenden Befehl ausführst:

apt-get install certbot python3-certbot-nginx -y

Sobald Certbot installiert ist, führe den folgenden Befehl aus, um Let’s Encrypt SSL für die Gitea-Website herunterzuladen und zu installieren.

certbot --nginx -d gitea.linuxbuz.com

Gib deine E-Mail-Adresse an und akzeptiere die Nutzungsbedingungen wie unten gezeigt:

Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator nginx, Installer nginx
Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel): [email protected]

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server at
https://acme-v02.api.letsencrypt.org/directory
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(A)gree/(C)ancel: A

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot? We'd like to send you email about our work
encrypting the web, EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: Y
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for gitea.linuxbuz.com
Waiting for verification...
Cleaning up challenges
Deploying Certificate to VirtualHost /etc/nginx/sites-enabled/gitea

Als Nächstes wählst du aus, ob der HTTP-Verkehr auf HTTPS umgeleitet werden soll oder nicht (siehe unten):

Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2

Gib 2 ein und drücke die Eingabetaste, um das Zertifikat zu installieren (siehe unten):

Redirecting all traffic on port 80 to ssl in /etc/nginx/sites-enabled/gitea

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Congratulations! You have successfully enabled https://gitea.linuxbuz.com

You should test your configuration at:
https://www.ssllabs.com/ssltest/analyze.html?d=gitea.linuxbuz.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/gitea.linuxbuz.com/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/gitea.linuxbuz.com/privkey.pem
   Your cert will expire on 2022-11-21. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot again
   with the "certonly" option. To non-interactively renew *all* of
   your certificates, run "certbot renew"
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

Jetzt ist deine Gitea-Website mit Let’s Encrypt SSL gesichert. Du kannst jetzt mit dem nächsten Schritt fortfahren.

Zugriff auf die Gitea-Weboberfläche

Öffne jetzt deinen Webbrowser und gib die URL https://git.example.com/ ein. Du wirst auf die folgende Seite weitergeleitet:

Gitea Konfiguration

Allgemeine Einstellungen

Optionale Einstellungen

Gib den Namen deiner Gitea-Datenbank, deinen Benutzernamen, dein Passwort, den Repository-Pfad, den Run-As-Benutzernamen, den Listening-Port, die Gitea-Basis-URL, den Log-Pfad, den Gitea-Admin-Benutzernamen und das Passwort ein und klicke auf die Schaltfläche Gitea installieren. Sobald die Installation abgeschlossen ist, solltest du das Gitea Dashboard auf dem folgenden Bildschirm sehen:

Gitea Dashboard

Fazit

Glückwunsch! Du hast Gitea mit Nginx und Let’s Encrypt SSL erfolgreich auf einem Ubuntu 22.04 Server installiert. Jetzt kannst du Gitea in deinem Unternehmen einsetzen und mit der Erstellung deines ersten Repositorys mit Gitea beginnen. Weitere Informationen findest du in der Gitea-Dokumentation.

Das könnte dich auch interessieren …