Wie man Gitea mit Nginx und kostenlosem Let’s Encrypt SSL auf Ubuntu 20.04 installiert

Gitea ist ein Open-Source und selbstgehostetes Versionskontrollsystem, geschrieben in Go. Es ist einfach, leichtgewichtig und kann auf Systemen mit geringer Leistung installiert werden. Es ist ein Fork von Gogs und eine Alternative zu GitHub und GitLab. Es kommt mit einer Vielzahl von Funktionen, wie z.B. Repository File Editor, Projekt Issue Tracking, Benutzerverwaltung, Benachrichtigungen, eingebautes Wiki und vieles mehr. Es kann auf allen modernen Betriebssystemen installiert werden, einschließlich Linux, macOS, Windows, ARM und PowerPC Architekturen.

In diesem Tutorial zeigen wir dir, wie du Gitea Git Service mit Nginx und Let’s Encrypt SSL auf Ubuntu 20.04 installierst.

Voraussetzungen

  • Ein Server, auf dem Ubuntu 20.04 läuft.
  • Ein gültiger Domainname zeigt auf deinen Server.
  • Ein Root-Passwort ist auf deinem Server konfiguriert.

Git installieren

Zuerst musst du das Git Paket auf deinem Server installieren. Du kannst es installieren, 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

Standardmäßig ist MariaDB nicht gesichert. Daher musst du es zuerst sichern. Du kannst es sichern, indem du das mysql_secure_installation Skript ausführst:

mysql_secure_installation

Dieses Skript wird das Root-Passwort setzen, anonyme Benutzer entfernen, den Root-Login aus der Ferne verbieten und die Testdatenbank entfernen, 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, logge dich mit dem folgenden Befehl in die MariaDB-Shell ein:

mysql -u root -p

Gib dein Root-Passwort ein, wenn du dazu aufgefordert wirst. Ändere dann die GLOBAL innodeb_file_per_table auf On:

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

Erstelle als nächstes eine Datenbank und einen Benutzer für Gitea mit dem folgenden Befehl:

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

Als nächstes erteile der Datenbank giteadb alle Privilegien:

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

Aktualisiere als nächstes den Zeichensatz der Datenbank mit dem folgenden Befehl:

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

Zum Schluss lösche die Privilegien und verlasse die MariaDB-Shell mit dem folgenden 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 im Abschnitt [mysqld] hinzu:

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

An diesem Punkt ist deine MariaDB Datenbank konfiguriert. Du kannst nun mit dem nächsten Schritt fortfahren.

Gitea installieren und konfigurieren

Als erstes musst du die neueste Version des Gitea Binary aus dem Git Repository herunterladen. Du kannst es mit dem folgenden Befehl herunterladen:

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

Als nächstes kopierst du die heruntergeladene Datei in das Verzeichnis /usr/bin/ und gibst ihr Ausführungsrechte:

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

Erstelle als nächstes einen Systembenutzer für Gitea mit dem folgenden Befehl:

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

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

Gitea Systemd Service Datei erstellen

Als nächstes musst du eine systemd Servicedatei erstellen, um den Gitea Dienst 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 lade den systemd Daemon neu und starte den Gitea Dienst mit dem folgenden Befehl:

systemctl daemon-reload
systemctl start gitea

Du kannst nun 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 Thu 2020-06-25 08:23:01 UTC; 6s ago
   Main PID: 24046 (gitea)
      Tasks: 9 (limit: 2353)
     Memory: 134.3M
     CGroup: /system.slice/gitea.service
             ??24046 /usr/bin/gitea web -c /etc/gitea/app.ini

Jun 25 08:23:02 ubuntu20 gitea[24046]: 2020/06/25 08:23:02 routers/init.go:127:GlobalInit() [I] Delete all repository archives
Jun 25 08:23:02 ubuntu20 gitea[24046]: 2020/06/25 08:23:02 ...dules/setting/log.go:233:newLogService() [I] Gitea v1.12.1 built with GNU Make 4>
Jun 25 08:23:02 ubuntu20 gitea[24046]: 2020/06/25 08:23:02 ...dules/setting/log.go:279:newLogService() [I] Gitea Log Mode: Console(Console:inf>
Jun 25 08:23:02 ubuntu20 gitea[24046]: 2020/06/25 08:23:02 ...les/setting/cache.go:70:newCacheService() [I] Cache Service Enabled
Jun 25 08:23:02 ubuntu20 gitea[24046]: 2020/06/25 08:23:02 ...les/setting/cache.go:81:newCacheService() [I] Last Commit Cache Service Enabled
Jun 25 08:23:02 ubuntu20 gitea[24046]: 2020/06/25 08:23:02 ...s/setting/session.go:63:newSessionService() [I] Session Service Enabled
Jun 25 08:23:02 ubuntu20 gitea[24046]: 2020/06/25 08:23:02 routers/init.go:165:GlobalInit() [I] SQLite3 Supported
Jun 25 08:23:02 ubuntu20 gitea[24046]: 2020/06/25 08:23:02 routers/init.go:51:checkRunMode() [I] Run Mode: Development
Jun 25 08:23:03 ubuntu20 gitea[24046]: 2020/06/25 08:23:03 cmd/web.go:161:runWeb() [I] Listen: http://0.0.0.0:3000
Jun 25 08:23:03 ubuntu20 gitea[24046]: 2020/06/25 08:23:03 ...s/graceful/server.go:55:NewServer() [I] Starting new server: tcp:0.0.0.0:3000 on>
lines 1-19/19 (END)

Als Nächstes aktiviere den Gitea-Dienst, um ihn beim Neustart des Systems zu starten, mit dem folgenden Befehl:

systemctl enable gitea

An diesem Punkt ist Gitea gestartet und lauscht auf Port 3000. Du kannst nun mit dem nächsten Schritt fortfahren.

Nginx 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.

Als erstes installierst du den Nginx Webserver, indem du den folgenden Befehl ausführst:

apt-get install nginx -y

Sobald er installiert ist, erstelle eine neue Nginx Virtual Host Konfigurationsdatei für 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 gitea.linuxbuz.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. Dann aktiviere die Nginx Virtual Host Konfigurationsdatei mit dem folgenden Befehl:

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

Zum Schluss starte den Nginx-Dienst mit dem folgenden Befehl neu:

systemctl restart nginx

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

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 Thu 2020-06-25 08:26:00 UTC; 1min 24s ago
       Docs: man:nginx(8)
    Process: 24866 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
    Process: 24877 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
   Main PID: 24879 (nginx)
      Tasks: 3 (limit: 2353)
     Memory: 3.6M
     CGroup: /system.slice/nginx.service
             ??24879 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
             ??24880 nginx: worker process
             ??24881 nginx: worker process

Jun 25 08:25:59 ubuntu20 systemd[1]: Starting A high performance web server and a reverse proxy server...
Jun 25 08:26:00 ubuntu20 systemd[1]: Started A high performance web server and a reverse proxy server.

An diesem Punkt ist Nginx konfiguriert, um Gitea zu bedienen. Du kannst nun mit dem nächsten Schritt fortfahren.

Gitea mit Let’s Encrypt SSL sichern

Zuerst 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): hitjethva@gmail.com

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
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, wie unten gezeigt:

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 2020-09-23. 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 Webseite mit Let’s Encrypt SSL gesichert. Du kannst nun mit dem nächsten Schritt fortfahren.

Zugang zum Gitea Web Interface

Öffne nun deinen Webbrowser und gib die URL https://gitea.linuxbuz.com/install ein. Du wirst auf die folgende Seite weitergeleitet:

Datenbank Einstellungen

Allgemeine Einstellungen

URL und Port

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 im folgenden Bildschirm sehen:

Gitea Dashboard

Fazit

Herzlichen Glückwunsch! Du hast Gitea mit Nginx und Let’s Encrypt SSL erfolgreich auf einem Ubuntu 20.04 Server installiert. Du kannst nun Gitea erkunden und dein erstes Repository mit Gitea erstellen. Für weitere Informationen besuche die Gitea Dokumentation.

Das könnte dich auch interessieren …