Gitea te installeren op Ubuntu 22.04

Gitea is een gratis, open-source en zelf gehoste Git dienst. Het is geschreven in de taal GO en biedt een eenvoudigere manier om je eigen versiebeheersysteem op het internet te hosten. Het is eenvoudig, licht en kan geïnstalleerd worden op systemen met weinig vermogen. Het lijkt erg op GitHub en GitLab en biedt een rijke set mogelijkheden zoals een repository bestandseditor, project issue tracking, gebruikersbeheer, notificaties, een ingebouwde wiki, en nog veel meer. Het is cross-platform en kan worden geïnstalleerd op alle grote besturingssystemen, waaronder Linux, macOS, Windows, ARM en PowerPC architecturen.

In deze tutorial laten we zien hoe je de Gitea Git service met Nginx en Let’s Encrypt SSL installeert op Ubuntu 22.04.

Voorwaarden

  • Een server waarop Ubuntu 22.04 draait.
  • Een geldige domeinnaam gekoppeld aan het IP van je server.
  • Een root wachtwoord is geconfigureerd op je server.

Aan de slag

Update en upgrade eerst alle systeempakketten naar de laatste versie door het volgende commando uit te voeren:

apt update -y
apt upgrade -y

Installeer vervolgens het Git pakket door het volgende commando uit te voeren:

apt-get install git -y

Zodra het Git pakket is geïnstalleerd, kun je doorgaan met de volgende stap.

MariaDB installeren en configureren

Gitea gebruikt MariaDB als database backend. Je zult het dus op je server moeten installeren. Je kunt het installeren door het volgende commando uit te voeren:

apt install mariadb-server -y

Na de installatie. Je moet dus de MariaDB beveiligen en een root wachtwoord instellen. Je kunt het beveiligen door het mysql_secure_installation script uit te voeren:

mysql_secure_installation

Dit script stelt het root wachtwoord in, verwijdert anonieme gebruikers, verbiedt root inloggen op afstand en verwijdert de testdatabase zoals hieronder te zien is:

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

Zodra de MariaDB beveiligd is, log je in op de MariaDB-shell met het volgende commando:

mysql -u root -p

Voer je root-wachtwoord in als daarom wordt gevraagd. Verander dan de GLOBAL innodeb_file_per_table in On:

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

Maak vervolgens een database en gebruiker aan voor Gitea met het volgende commando:

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

Ken vervolgens alle privileges toe aan de database giteadb:

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

Werk vervolgens de tekenset van de database bij met het volgende commando:

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

Spoel tenslotte de privileges door en verlaat de MariaDB-shell met het volgende commando:

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

Vervolgens moet je het MariaDB default config bestand bewerken en InnoDB parameters toevoegen:

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

Voeg de volgende regels toe binnen de [mysqld] sectie:

innodb_file_format = Barracuda
innodb_large_prefix = 1
innodb_default_row_format = dynamic

Sla het bestand op en sluit het. Herstart vervolgens de MariaDB service om de wijzigingen toe te passen:

systemctl restart mariadb

Op dit punt is je MariaDB database geconfigureerd. Je kunt nu doorgaan met de volgende stap.

Gitea installeren en configureren

Ga eerst naar de Gitea download pagina, kies de laatste versie en download de nieuwste Gitea binary met het volgende commando:

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

Zodra de download is voltooid, kopieer je het gedownloade bestand naar de map /usr/bin/ en geef je uitvoeringsrechten:

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

Maak vervolgens een systeemgebruiker aan voor Gitea met het volgende commando:

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

Maak vervolgens een mappenstructuur voor Gitea met het volgende commando:

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

Als je klaar bent, kun je doorgaan naar de volgende stap.

Maak Gitea Systemd Service Bestand

Vervolgens moet je een systemd servicebestand maken om de Gitea service met systemd te beheren. Je kunt het aanmaken met het volgende commando:

nano /etc/systemd/system/gitea.service

Voeg de volgende regels toe:

[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

Sla het bestand op en sluit het. Herlaad vervolgens de systemd daemon en start de Gitea service met het volgende commando:

systemctl daemon-reload
systemctl start gitea

Je kunt de status van de Gitea-service controleren met het volgende commando:

systemctl status gitea

Je zou de volgende uitvoer moeten zien:

? 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:>

Schakel vervolgens de Gitea-service in om te starten bij het opnieuw opstarten van het systeem met het volgende commando:

systemctl enable gitea

Op dit punt is Gitea gestart en luistert op poort 3000. Je kunt nu doorgaan met de volgende stap.

Nginx instellen als omgekeerde proxy voor Gitea

Standaard luistert Gitea op poort 3000. Je moet dus Nginx configureren als een reverse proxy om toegang te krijgen tot Gitea zonder de poort op te geven.

Installeer eerst de Nginx webserver door het volgende commando uit te voeren:

apt-get install nginx -y

Maak na de installatie een nieuw Nginx virtueel host configuratiebestand voor Gitea:

nano /etc/nginx/sites-available/gitea

Voeg de volgende regels toe:

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;
    }
}

Sla het bestand op en sluit het. Schakel vervolgens het Nginx virtuele host configuratiebestand in met het volgende commando:

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

Start tot slot de Nginx service opnieuw op en controleer de status van de Nginx service met het volgende commando:

systemctl restart nginx
systemctl status nginx

Je zou de volgende uitvoer moeten krijgen:

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

Op dit punt is Nginx geconfigureerd om Gitea te bedienen. Je kunt nu doorgaan met de volgende stap.

Beveilig Gitea met Let’s Encrypt SSL

Eerst moet je de Certbot client installeren om de Let’s Encrypt SSL op je systeem te installeren en te beheren. Je kunt het installeren door het volgende commando uit te voeren:

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

Zodra de Certbot is geïnstalleerd, voer je het volgende commando uit om de Let’s Encrypt SSL voor de Gitea website te downloaden en te installeren.

certbot --nginx -d gitea.linuxbuz.com

Geef je e-mailadres op en accepteer de servicevoorwaarden zoals hieronder weergegeven:

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

Kies vervolgens of HTTP-verkeer al dan niet moet worden omgeleid naar HTTPS, zoals hieronder getoond:

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

Typ 2 en druk op Enter om het certificaat te installeren zoals hieronder getoond:

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

Nu is je Gitea website beveiligd met Let’s Encrypt SSL. Je kunt nu doorgaan naar de volgende stap.

Toegang tot de Gitea webinterface

Open nu je webbrowser en typ de URL https://git.example.com/. Je wordt doorgestuurd naar de volgende pagina:

Gitea Configuratie

Algemene instellingen

Optionele instellingen

Geef je Gitea databasenaam, gebruikersnaam, wachtwoord, repository pad, run als gebruikersnaam, luisterpoort, Gitea basis URL, Log pad, Gitea admin gebruikersnaam, wachtwoord en klik op de knop Gitea installeren. Als de installatie voltooid is, zou je het Gitea dashboard op het volgende scherm moeten zien:

Gitea dashboard

Conclusie

Gefeliciteerd! Je hebt Gitea met succes geïnstalleerd met Nginx en Let’s Encrypt SSL op Ubuntu 22.04 server. Je kunt nu Gitea inzetten in je organisatie en beginnen met het maken van je eerste repository met Gitea. Ga voor meer informatie naar de Gitea documentatie.