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.