het Gitea Code Hosting Platform met HTTPS installeren op CentOS 8

Gitea is een webapplicatie voor het hosten van code, geschreven in Go. Zoals de naam al doet vermoeden, is het ontworpen om met het populaire bronbeheer programma Git gebruikt te worden, vergelijkbaar met Gitlab en Github. Deze gids zal de installatie van Gitea op CentOS 8 met een Nginx HTTPS reverse proxy uitleggen.

Vereisten

  • Een CentOS 8 systeem waarop je root rechten hebt.
  • Een geregistreerde domeinnaam die naar je server wijst.
  • De omgevingsvariabele $EDITOR moet ingesteld zijn op de tekstverwerker van je voorkeur.
  • 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 optioneel een AAAA record aan dat naar het IPv6 adres van je server wijst.

OPMERKING: Deze gids gaat ervan uit dat SELinux is ingesteld op ofwel disabled ofwel permissive.

Stap 1: Het systeem voorbereiden

Begin met het installeren van alle beschikbare updates en herstart het systeem:

dnf update -y
reboot

Voor deze opstelling zijn verschillende software componenten nodig:

  • Git, een afhankelijkheid van Gitea.
  • PostgreSQL, want Gitea heeft een databank nodig.
  • Nginx, dat als omgekeerde proxy gebruikt zal worden.
  • Sudo, om commando’s uit te voeren als de postgres systeemgebruiker.
  • Wget
  • Certbot, een hulpprogramma voor het verkrijgen van Let’s Encrypt SSL certificaten. Certbot wordt apart geĆÆnstalleerd omdat het niet in de CentOS software repositories aanwezig is.

Installeer ze als volgt:

dnf install -y git postgresql postgresql-server nginx sudo wget

Certbot-auto is een script dat de installatie van certbot beheert. Download het:

wget https://dl.eff.org/certbot-auto -O /usr/local/bin/certbot-auto

Zorg dat de juiste permissies zijn ingesteld:

chmod 0755 /usr/local/bin/certbot-auto

Voer het volgende uit om certbot te installeren. De pakketbeheerder vraagt je om de installatie van afhankelijkheden te bevestigen, antwoord ‘y’.

certbot-auto --install-only

Maak vervolgens een gebruiker aan om Gitea te draaien:

useradd --system --shell /bin/bash --create-home --home-dir /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 /var/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 zullen worden aangescherpt na het uitvoeren van de web installer.

Schakel verkeer naar poorten 80 en 443 permanent in:

firewall-cmd --add-port 80/tcp --add-port 443/tcp --permanent
firewall-cmd --reload

Toegang tot poort 3000 is alleen tijdelijk nodig voor de eerste instelling, omdat we gitea zullen instellen om in plaats daarvan een Unix socket te gebruiken.

firewall-cmd --add-port 3000/tcp

Stap 2: Database Instelling

Initialiseer Postgres:

postgresql-setup --initdb --unit postgresql

Zorg dat het ingeschakeld is en draait:

systemctl enable --now postgresql.service

Log in op Postgres:

sudo -u postgres psql

Maak dan een gebruikersrol en een databank aan die door Gitea gebruikt moeten worden:

postgres=# CREATE ROLE gitea LOGIN ENCRYPTED PASSWORD 'your_password';
postgres=# CREATE DATABASE gitea;
postgres=# GRANT ALL PRIVILEGES ON DATABASE gitea TO gitea;
postgres=# \q

Open het Postgres client authentication configuratiebestand:

$EDITOR /var/lib/pgsql/data/pg_hba.conf

Voeg de volgende regel toe direct na # IPv4 local connections :

# IPv4 local connections:
host	gitea		gitea		127.0.0.1/32		md5

Sla het bestand op en herstart Postgres:

systemctl restart postgresql.service

Stap 3: Gitea installeren

Download de linux-amd64 binaire versie van Gitea van Gitea’s download pagina. Bijvoorbeeld:

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

Stel de juiste permissies in op de gedownloade binary:

chmod 755 /usr/local/bin/gitea

Maak vervolgens een systemd unit bestand aan:

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

systemctl enable gitea.service

Stap 4: Gitea configureren

Voor de eerste configuratie gebruiken we het bijgeleverde web-installatieprogramma. 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 database 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

Verwijder de volgende regel uit de server sectie:

HTTP_PORT = 3000

En voeg de volgende regels toe in de server sectie:

HTTP_ADDR        = /run/gitea/gitea.sock
PROTOCOL         = unix
UNIX_SOCKET_PERMISSION = 666

Stap 5: Reverse Proxy Setup

Stop Nginx als die draait, om certbot toe te staan te luisteren op poort 80:

systemctl stop nginx.service

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

certbot-auto 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/conf.d/gitea.conf

En voer de volgende serverblokken 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 ingesteld hebben om te luisteren.

Als je de bovenstaande configuratie hebt opgeslagen, controleer dan op syntaxis fouten en pas je configuratie aan als dat nodig is:

nginx -t

Start tenslotte Nginx en Gitea:

systemctl start nginx.service gitea.service

Je Gitea instantie zou nu met succes moeten draaien. Je kunt er toegang toe krijgen via https://your_domain

Optionele stappen

Configuratie van logboekregistratie

Standaard logt Gitea’s berichten met ernstniveau Info en hoger. Je zult dat hoogstwaarschijnlijk 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 1024, bijvoorbeeld:

SSH_PORT = 2222

Herstart dan Gitea om de veranderingen toe te passen en verkeer naar de gekozen poort in te schakelen:

firewall-cmd --add-port 2222/tcp --permanent
firewall-cmd --reload