het Gitea Code Hosting Platform met HTTPS installeren op Debian 10

Gitea is een webapplicatie voor het hosten van code, geschreven in Go en gevorkt van Gogs. Zoals de naam al doet vermoeden is het ontworpen om gebruikt te worden met het populaire bronbeheer programma Git, vergelijkbaar met Gitlab en Github. Deze gids zal uitleggen hoe je Gitea op Debian 10 achter een HTTPS reverse proxy (Nginx) kunt installeren.

Vereisten

  • Een Debian 10 systeem waarop je root rechten hebt.
  • Een geregistreerde domeinnaam die naar je server wijst.
  • De omgevingsvariabele $EDITOR moet ingesteld zijn.
  • Toegang tot een SMTP server voor e-mail meldingen (optioneel).

Zorg ervoor dat je (sub)domein met een A record naar het IPv4 adres van je server wijst. Maak eventueel een AAAA record aan dat naar het IPv6 adres van je server wijst.

Stap 1: Voorbereiden van het systeem

Begin met het bijwerken van je pakket index en installeer alle beschikbare updates:

apt update
apt upgrade -y
reboot

Voor deze opstelling zijn verschillende softwarepakketten nodig:

  • Git, een afhankelijkheid van Gitea.
  • PostgreSQL, want Gitea heeft een databank nodig.
  • Nginx, dat als omgekeerde proxy gebruikt zal worden.
  • Certbot, een hulpprogramma voor het verkrijgen van Let’s Encrypt SSL certificaten.
  • Sudo, om commando’s uit te voeren als de postgres systeemgebruiker.

Installeer ze als volgt:

apt install -y git nginx certbot postgresql sudo

Maak vervolgens een gebruiker om Gitea te draaien:

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

Maak dan de mappenstructuur voor Gitea:

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

En stel eigendomsrechten en permissies als volgt in:

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

De permissies op /etc/gitea zijn tijdelijk en worden aangescherpt na het uitvoeren van de web installer.

Stap 2: Database opzetten

Zorg ervoor dat Postgres ingeschakeld is en draait:

systemctl enable --now [email protected]

Maak dan een gebruikersrol en een databank aan om door Gitea gebruikt te worden:

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;

Stap 3: Gitea installeren

Download de nieuwstelinux-amd64 binary van Gitea’s download pagina. Bijvoorbeeld:

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

Maak vervolgens een systemd unit bestand voor Gitea:

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

En voer het volgende in:

[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

Zorg ervoor dat de nieuwe unit geladen is:

systemctl daemon-reload

Geef dan systemd opdracht om Gitea te starten bij het opstarten van het systeem:

systemctl enable gitea.service

Stap 4: Gitea configureren

Voor de eerste configuratie gebruiken we het bijgeleverde web installatiescript. Start eerst Gitea:

systemctl start gitea.service

Navigeer dan naar http://your_domain:3000/install en vul de vereiste parameters als volgt in:

  • Databasetype: PostgreSQL
  • Host: 127.0.0.1:5432
  • Gebruikersnaam: gitea
  • Wachtwoord: Vul het wachtwoord in dat je koos bij het aanmaken van de Postgres rol.
  • Databasenaam: gitea
  • SSL: Uitschakelen
  • Titel van de site: Titel naar keuze.
  • Repository Root Path: /var/lib/gitea/data/repositories
  • Git LFS Wortelpad: /var/lib/gitea/data/lfs
  • Uitvoeren als gebruikersnaam: gitea
  • SSH-server domein: jouw_domein
  • SSH Server Poort: 22
  • Gitea HTTP Luister Post: 3000
  • Gitea Basis URL: https://your_domain/
  • Log Pad: /var/lib/gitea/log

Configureer e-mail en de overige instellingen zoals het je goeddunkt, en klik dan op “Install Gitea”. Je wordt nu omgeleid naar een foutieve URL. Dit is normaal, want we hebben Nginx of HTTPS nog niet ingesteld. Om prestatieredenen zullen we Gitea nu instellen om te luisteren op een unix socket in plaats van de standaard TCP poort.

Stop Gitea voor je verder gaat:

systemctl stop gitea.service

Verscherp de permissies op /etc/gitea zoals hieronder getoond. Dit voorkomt dat iemand die niet in de gitea groep zit app.ini kan lezen, dat gevoelige informatie bevat, waaronder databank credentials.

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

Open het configuratiebestand ervan:

$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

Stap 5: Instellen van de omgekeerde proxy

Stop Nginx if it is running, as certbot will need to bind to port 80:
systemctl stop nginx.service

Gebruik het volgende commando om een certificaat voor je domein te verkrijgen:

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

Let’s Encrypt zal het eigendom van het domein verifiëren alvorens het certificaat uit te geven. Je certificaat, keten, en private sleutel worden opgeslagen in /etc/letsencrypt/live/your_domain/.

We kunnen nu Nginx configureren. Maak een nieuw configuratiebestand:

$EDITOR /etc/nginx/sites-available/gitea

En voer de volgende configuratie in:

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

Het eerste serverblok dient eenvoudig om alle HTTP verzoeken om te leiden naar HTTPS. Het tweede blok luistert naar HTTPS verbindingen en proxies ze naar de unix socket waarop we Gitea instelden om te luisteren.

Als je de bovenstaande configuratie hebt opgeslagen, voer je het volgende uit om het in te schakelen:

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

Controleer op eventuele syntaxfouten met en pas je configuratie dienovereenkomstig aan:

nginx -t

Start tenslotte Nginx en Gitea:

systemctl start nginx.service gitea.service

Je Gitea instantie zou nu met succes moeten draaien. Als je geen beheerdersaccount hebt aangemaakt met de initiële webinstaller, krijgt de eerste gebruiker die zich aanmeldt de beheerdersrol.

Optionele stappen

Configuratie van logboekregistratie

Standaard logt Gitea berichten met ernstgraad Info en hoger. Je zult dat waarschijnlijk willen veranderen in Warn of Error. Open daartoe /etc/gitea/app.ini en verander de LEVEL parameter in de [log] sectie in een van de volgende: trace, debug, info, warn, error, critical, fatal, none. Om bijvoorbeeld berichten van ernst Warn en hoger te loggen, gebruik je:

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

Herstart Gitea om de veranderingen te laten inwerken:

systemctl restart gitea.service

Afzonderlijke SSH server

Gitea kan als alternatief zijn eigen SSH server gebruiken. Om dit in te schakelen voeg je de volgende regel toe aan de [server] configuratiesectie:

START_SSH_SERVER = true

En verander de SSH poort in een willekeurig getal boven 1000, bijvoorbeeld:

SSH_PORT = 2222

Herstart dan Gitea om de veranderingen toe te passen.