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 spiegherà l'installazione di Gitea su CentOS 8 con un proxy inverso HTTPS Nginx.
Requisiti
- Un sistema CentOS 8 su cui disponi dei privilegi di root.
- Un nome di dominio registrato che punta al tuo server.
- La variabile d'ambiente $EDITOR dovrebbe essere impostata sul tuo editor di testo preferito.
- 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, crea un record AAAA che punta all'indirizzo IPv6 del tuo server.
NOTA: Questa guida presuppone che SELinux sia impostato su disabilitato o permissivo.
Fase 1:preparazione del sistema
Inizia installando tutti gli aggiornamenti disponibili e riavviando:
dnf update -y reboot
Per questa configurazione sono necessari diversi componenti software:
- Git, una dipendenza di Gitea.
- PostgreSQL, poiché Gitea richiede un database.
- Nginx, che verrà utilizzato come proxy inverso.
- Sudo, per eseguire comandi come utente del sistema postgres.
- Ricevi
- Certbot, un'utilità per ottenere certificati SSL Let's Encrypt. Certbot verrà installato separatamente poiché non è disponibile nei repository del software CentOS.
Installali come segue:
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
Assicurati che le autorizzazioni corrette siano impostate:
chmod 0755 /usr/local/bin/certbot-auto
Eseguire quanto segue per installare certbot. Ti verrà chiesto dal gestore di pacchetti di confermare l'installazione delle dipendenze, rispondi 'y'.
certbot-auto --install-only
Quindi, crea un utente per eseguire Gitea:
useradd --system --shell /bin/bash --create-home --home-dir /home/gitea gitea
Quindi crea la struttura delle directory per Gitea:
mkdir -p /var/lib/gitea/{data,log} /etc/gitea /run/gitea
E imposta le proprietà e le autorizzazioni come segue:
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
I permessi su /etc/gitea sono temporanei e verranno rafforzati dopo l'esecuzione del programma di installazione web.
Abilita il traffico verso le porte 80 e 443 in modo permanente:
firewall-cmd --add-port 80/tcp --add-port 443/tcp --permanent firewall-cmd --reload
L'accesso alla porta 3000 è richiesto solo temporaneamente per la configurazione iniziale poiché configureremo gitea per utilizzare invece un socket Unix.
firewall-cmd --add-port 3000/tcp
Fase 2:configurazione del database
Inizializza Postgres:
postgresql-setup --initdb --unit postgresql
Assicurati che sia abilitato e funzionante:
systemctl enable --now postgresql.service
Accedi a Postgres:
sudo -u postgres psql
Quindi crea un ruolo utente e un database che verranno utilizzati da Gitea:
postgres=# CREATE ROLE gitea LOGIN ENCRYPTED PASSWORD 'your_password'; postgres=# CREATE DATABASE gitea; postgres=# GRANT ALL PRIVILEGES ON DATABASE gitea TO gitea; postgres=# \q
Apri il file di configurazione dell'autenticazione del client Postgres:
$EDITOR /var/lib/pgsql/data/pg_hba.conf
Aggiungi la riga seguente subito dopo # Connessioni locali IPv4 :
# IPv4 local connections: host gitea gitea 127.0.0.1/32 md5
Salva il file e riavvia Postgres:
systemctl restart postgresql.service
Fase 3:installazione di Gitea
Scarica la versione binaria linux-amd64 di Gitea dalla pagina di download di Gitea. Ad esempio:
wget https://dl.gitea.io/gitea/master/gitea-master-linux-amd64 -O /usr/local/bin/gitea
Imposta le autorizzazioni corrette sul binario scaricato:
chmod 755 /usr/local/bin/gitea
Quindi, crea un file di unità systemd:
$EDITOR /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
Assicurati che la nuova unità sia caricata:
systemctl daemon-reload
Quindi indica a systemd di avviare Gitea all'avvio:
systemctl enable gitea.service
Fase 4:configurazione di Gitea
Per la configurazione iniziale, utilizzeremo il programma di installazione web incluso. Per prima cosa, avvia Gitea:
systemctl start gitea.service
Quindi vai a http://tuo_dominio:3000/install e inserisci i parametri richiesti come segue:
- Tipo di database:PostgreSQL
- Ospite: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:Disattiva
- Titolo del sito:titolo a tua scelta.
- Percorso radice del repository:/var/lib/gitea/data/repositories
- Percorso radice Git LFS:/var/lib/gitea/data/lfs
- Esegui come nome utente:gitea
- Dominio server SSH:tuo_dominio
- Porta server SSH:22
- Post di ascolto HTTP Gitea:3000
- URL di Gitea Base:https://tuo_dominio/
- Percorso registro:/var/lib/gitea/log
Configura l'e-mail e le restanti impostazioni come ritenuto opportuno, quindi fai clic su "Installa Gitea". Verrai reindirizzato a un URL errato. Questo è normale, poiché non abbiamo ancora configurato Nginx o HTTPS. Per motivi di prestazioni, configureremo ora Gitea per l'ascolto su un socket unix anziché sulla porta TCP predefinita.
Ferma Gitea prima di procedere:
systemctl stop gitea.service
Aumenta le autorizzazioni su /etc/gitea come mostrato di seguito. Ciò impedisce a chiunque non faccia parte del gruppo gitea di leggere app.ini , che contiene informazioni riservate, comprese le credenziali del database.
chmod 750 /etc/gitea chown root:gitea /etc/gitea/app.ini chmod 640 /etc/gitea/app.ini
Apri il suo file di configurazione:
$EDITOR /etc/gitea/app.ini
Rimuovere la seguente riga dalla sezione del server:
HTTP_PORT = 3000
E aggiungi le seguenti righe nella sezione server:
HTTP_ADDR = /run/gitea/gitea.sock PROTOCOL = unix UNIX_SOCKET_PERMISSION = 666
Passaggio 5:configurazione del proxy inverso
Arresta Nginx se è in esecuzione, per consentire a certbot di rimanere in ascolto sulla porta 80:
systemctl stop nginx.service
Utilizza il comando seguente per ottenere un certificato per il tuo dominio:
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 tuo certificato, catena e chiave privata verranno archiviati in /etc/letsencrypt/live/your_domain/ .
Ora possiamo configurare Nginx. Crea un nuovo file di configurazione:
$EDITOR /etc/nginx/conf.d/gitea.conf
E inserisci i seguenti blocchi 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 a reindirizzare tutte le richieste HTTP a HTTPS. Il secondo blocco ascolta le connessioni HTTPS e le invia tramite proxy al socket Unix su cui abbiamo configurato Gitea per l'ascolto.
Dopo aver salvato la configurazione di cui sopra, controlla eventuali errori di sintassi e modifica la configurazione se necessario:
nginx -t
Infine, avvia Nginx e Gitea:
systemctl start nginx.service gitea.service
La tua istanza Gitea ora dovrebbe funzionare correttamente. Accedi a https://tuo_dominio
Passaggi facoltativi
Configurazione registrazione
Per impostazione predefinita, Gitea registra i messaggi di livello di gravità Info e superiore. Molto probabilmente vorrai cambiarlo in Avvisa o Errore . Per farlo, apri /etc/gitea/app.ini e cambia il parametro LEVEL nella sezione [log] in uno di:trace, debug, info, warn, error, critical, fatal, nessuno. Ad esempio, per registrare i messaggi di gravità Warn e superiori, utilizzare:
[log] MODE = file LEVEL = warn ROOT_PATH = /var/lib/gitea/log
Riavvia Gitea per rendere effettive le modifiche:
systemctl restart gitea.service
Server SSH separato
Gitea può in alternativa utilizzare il proprio server SSH. Per abilitarlo, aggiungi la seguente riga alla sezione di configurazione [server]:
START_SSH_SERVER = true
E cambia la porta SSH in qualsiasi numero superiore a 1024, ad esempio:
SSH_PORT = 2222
Quindi riavvia Gitea per applicare le modifiche e abilitare il traffico sulla porta scelta:
firewall-cmd --add-port 2222/tcp --permanent firewall-cmd --reload