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.