Introduzione

Gitea è un'applicazione web di hosting di codice scritta in Go. Come suggerisce il nome, è progettato per essere utilizzato con il popolare programma di controllo del codice sorgente Git, in modo simile a Gitlab e Github. Questa guida illustrerà l'installazione di Gitea su CentOS 8 con un proxy inverso HTTPS Nginx.

Prerequisiti

  • Un sistema CentOS 8 su cui hai i privilegi di root.
  • Un nome di dominio registrato che punta al tuo server.
  • Accesso a un server SMTP per le notifiche e-mail (opzionale).

Assicurati che il tuo (sotto) dominio punti all'indirizzo IPv4 del tuo server con un record A. Facoltativamente, creare un record AAAA che punta all'indirizzo IPv6 del server.

NOTA: questa guida presuppone che SELinux sia impostato su disabilitato o permissivo.

Preparazione del sistema

Inizia installando tutti gli aggiornamenti disponibili e riavvia:

sudo dnf update -y
sudo reboot

Per questa configurazione, sono richiesti diversi componenti software:

  • Git, una dipendenza di Gitea.
  • PostgreSQL, poiché Gitea richiede un database.
  • Nginx, che verrà utilizzato come proxy inverso.
  • Sudo, per eseguire i comandi come utente del sistema Postgres.
  • Wget
  • Certbot, un'utilità per ottenere Let's Encrypt certificati SSL. Certbot verrà installato separatamente in quanto non è disponibile nei repository software CentOS.

Eseguire questi comandi per procedere con l'installazione dei software richiesti:

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

Certbot-auto è uno script che gestisce l'installazione di certbot. Scaricalo:

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

Assicurarsi che siano impostate le autorizzazioni corrette:

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

Eseguire quanto segue per installare certbot. Il gestore pacchetti ti chiederà di confermare l'installazione delle dipendenze, rispondi y.

sudo /usr/local/bin/certbot-auto --install-only

Quindi, crea un utente per eseguire Gitea:

sudo useradd --system --shell /bin/bash --create-home --home-dir /home/gitea gitea

Quindi creare la struttura di directory per Gitea:

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

E imposta proprietà e autorizzazioni come segue:

sudo chown -R gitea:gitea /var/lib/gitea
sudo chown -R gitea:gitea /var/run/gitea
sudo chown -R root:gitea /etc/gitea
sudo chmod -R 750 /var/lib/gitea
sudo chmod 770 /etc/gitea

Le autorizzazioni su /etc/gitea sono temporanee e verranno rafforzate dopo aver eseguito il programma di installazione web.

Abilita permanentemente il traffico verso le porte 80 e 443:

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

L'accesso alla porta 3000 è richiesto solo temporaneamente per la configurazione iniziale poiché configureremo gitea per usare un socket Unix.

sudo firewall-cmd --add-port 3000/tcp

Installare il database

Inizializza Postgres:

sudo postgresql-setup --initdb --unit postgresql

Assicurati che sia abilitato e in esecuzione:

sudo systemctl enable --now postgresql.service

Accedi a Postgres:

sudo -u postgres psql

Quindi creare un ruolo utente e un database che verranno utilizzati da Gitea:

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

Apri il file di configurazione dell'autenticazione client Postgres:

sudo vi /var/lib/pgsql/data/pg_hba.conf

Aggiungi la seguente riga subito dopo le connessioni locali #IPv4:

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

Salva il file e riavvia Postgres:

sudo systemctl restart postgresql.service

Installare Gitea

Scarica la versione binaria linux-amd64 di Gitea dalla pagina di download di Gitea. Per esempio:

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

Impostare le autorizzazioni corrette sul file binario scaricato:

sudo chmod 755 /usr/local/bin/gitea

Quindi, creare un file di unità systemd:

sudo vi /etc/systemd/system/gitea.service

E inserisci quanto segue:

[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

Assicurarsi che la nuova unità sia caricata:

sudo systemctl daemon-reload

Quindi indicare a systemd di avviare Gitea all'avvio:

sudo systemctl enable gitea.service

Configurare Gitea

Per la configurazione iniziale, utilizzeremo il programma di installazione Web incluso. Innanzitutto, avvia Gitea:

sudo systemctl start gitea.service

Quindi vai a http://your_domain:3000/install e compila i parametri richiesti come segue:

  • Tipo di database: PostgreSQL
  • Host: 127.0.0.1:5432
  • Nome utente: gitea
  • Password: inserisci la password che hai scelto durante la creazione del ruolo Postgres.
  • Nome database: gitea
  • SSL: disabilita
  • Titolo del sito: titolo a scelta.
  • Percorso root repository: /var/lib/gitea/data/repositories
  • Percorso root  Git LFS: /var/lib/gitea/data/lfs
  • Esegui come nome utente: gitea
  • Dominio server SSH: tuo_dominio
  • Porta server SSH: 22
  • Gitea HTTP Listen Post: 3000
  • URL di base di Gitea: https://your_domain/
  • Percorso log: /var/lib/gitea/log

Configura la posta elettronica e le impostazioni rimanenti come ritenute appropriate, quindi fai clic su "Installa Gitea". Verrai reindirizzato a un URL difettoso. Questo è normale, poiché non abbiamo ancora configurato Nginx o HTTPS. Per motivi di prestazioni, ora configureremo Gitea per l'ascolto su un socket unix anziché sulla porta TCP predefinita.

Fermare Gitea prima di procedere:

sudo systemctl stop gitea.service

Stringere i permessi su /etc/gitea come mostrato di seguito. Questo impedisce a chiunque non sia nel gruppo gitea di leggere app.ini, che contiene informazioni riservate, comprese le credenziali del database.

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

Apri il suo file di configurazione:

sudo vi /etc/gitea/app.ini

Rimuovere la seguente riga dalla sezione server :

HTTP_PORT = 3000

E aggiungi le seguenti righe nella sezione server :

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

Configurare il reverse proxy

Arresta Nginx se è in esecuzione, per consentire a certbot di accedere alla porta 80:

sudo systemctl stop nginx.service

Utilizzare il comando seguente per ottenere un certificato per il dominio:

sudo /usr/local/bin/certbot-auto certonly --standalone --agree-tos -m [email protected] -d your_domain

Let's Encrypt verificherà la proprietà del dominio prima di emettere il certificato. Il certificato, la catena e la chiave privata verranno archiviati in /etc/letsencrypt/live/your_domain/.

Ora possiamo configurare Nginx. Crea un nuovo file di configurazione:

sudo vi /etc/nginx/conf.d/gitea.conf

E inserisci i seguenti blocchi di server:

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

Il primo blocco server serve semplicemente per reindirizzare tutte le richieste HTTP su HTTPS. Il secondo blocco ascolta le connessioni HTTPS e le inoltra al socket Unix su cui abbiamo configurato Gitea per l'ascolto.

Dopo aver salvato la configurazione sopra, verifica la presenza di eventuali errori di sintassi e modifica la configurazione se necessario:

sudo nginx -t

Infine, avvia Nginx e Gitea:

sudo systemctl start nginx.service gitea.service

La tua istanza di Gitea ora dovrebbe funzionare correttamente. Accedi ad https://your_domain.

Passaggi opzionali

Per impostazione predefinita, Gitea registra i messaggi di livello di gravità Informazioni e superiori. Molto probabilmente vorrai cambiarlo in Warn o Error. Per fare ciò, apri /etc/gitea/app.ini e modifica il parametro LEVEL nella sezione [log] in uno di: trace, debug, info, warn, error, critical, fatal, none. Ad esempio, per registrare i messaggi di gravità Warn e versioni successive, utilizzare:

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

Riavvia Gitea per rendere effettive le modifiche:

sudo systemctl restart gitea.service

Server SSH separato

Gitea può in alternativa usare il proprio server SSH. Per abilitarlo, aggiungere la seguente riga alla sezione di configurazione [server]:

START_SSH_SERVER = true

E cambia la porta SSH con qualsiasi numero superiore a 1024, ad esempio:

SSH_PORT = 2222

Quindi riavviare Gitea per applicare le modifiche e abilitare il traffico sulla porta scelta:

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

Conclusione

In questo tutorial abbiamo visto come installare Gitea Code Hosting Platform con HTTPS su CentOS 8.