Gitea permette di gestire on premise un ambiente molto simile a Github.
Tramite Gitea è possibile effettuare il versioning del codice e gestire alcune attività collaborative come il tracciamento dei bug e la code review.
L’installazione di Gitea verrà effettuata su un container LXC con Debian 12.
ARCHITETTURA
I tre server sono stati installati su container LXC con Debian 12.
PREREQUISITI
Un server MySQL che verrà utilizzato come DB per Gitea ed un server HAProxy su cui verrà configurato l’SSL offloading (opzionale).
PORTE UTILIZZATE
Server Gitea
: TCP/3000 HTTP
Server HAProxy: TCP/443 HTTPS
Server MySQL: TCP/3306 MySQL
FLUSSI DA ABILITARE
Server Gitea -> Server MySQL TCP/3306
Server HAProxy -> Server Gitea TCP/3000
Client -> Server HAProxy TCP/443 HTTPS
PREPARAZIONE DEL SISTEMA OPERATIVO
Aggiornare il sistema operativo con i seguenti comandi:
0 1 2 |
apt update apt upgrade -y apt autoremove -y |
Modificare l’entry relativa al localhost nel file hosts e inserire:
0 |
127.0.0.1 localhost gitea.pizza.local |
INSTALLAZIONE DI GITEA
Scaricare il binario di Gitea con i seguenti comandi:
0 1 |
wget -O /usr/local/bin/gitea https://dl.gitea.com/gitea/1.21.0/gitea-1.21.0-linux-amd64 chmod +x /usr/local/bin/gitea |
Installare git con il comando:
0 |
apt install git -y |
PREPARAZIONE DI GITEA
Aggiungere l’utente di gitea con il comando:
0 |
adduser --system --shell /bin/bash --gecos 'Git Version Control' --group --disabled-password --home /home/git git |
Creare la struttura di directory con i seguenti comandi in sequenza:
0 1 2 3 4 |
mkdir -p /var/lib/gitea/{custom,data,log} chown -R git:git /var/lib/gitea/ chmod -R 750 /var/lib/gitea/ mkdir /etc/gitea chown root:git /etc/gitea |
Per permettere la configurazione di Gitea tramite web UI, abilitare momentaneamente la modifica su /etc/gitea per il gruppo git con il comando:
0 |
chmod 770 /etc/gitea |
Aggiungere il file per l’autocompletion con il comando:
0 |
wget -O /usr/share/bash-completion/completions/gitea https://raw.githubusercontent.com/go-gitea/gitea/main/contrib/autocompletion/bash_autocomplete |
Aggiungere il file gitea.service per gestire Gitea tramite systemd con il comando:
0 |
wget -O /etc/systemd/system/gitea.service https://raw.githubusercontent.com/go-gitea/gitea/release/v1.21/contrib/systemd/gitea.service |
INSTALLAZIONE DEL SERVER REDIS
Installare il Redis server con il comando:
0 |
apt install redis-server -y |
Aggiungere o modificare le seguenti righe nel file /etc/redis/redis.conf:
0 1 |
maxmemory 256mb maxmemory-policy allkeys-lru |
Riavviare redis-server con il comando:
0 |
systemctl restart redis |
Aggiungere le seguenti righe in /etc/systemd/system/gitea.service
CONFIGURARE GITEA PER SALVARE IL PROPRIO PID IN UN FILE
ATTENZIONE:
Questo step non è necessario se non si necessita di leggere il PID del processo di Gitea tramite una lettura sul filesystem.
Aggiungere nel file /etc/systemd/system/gitea.service:
0 |
RuntimeDirectory=gitea |
Specificando la RuntimeDirectory, all’avvio di Gitea, viene creata la directory /var/run/gitea/ con i permessi corretti.
Modificare nel file /etc/systemd/system/gitea.service:
0 |
ExecStart=/usr/local/bin/gitea web --congig /etc/gitea/app.ini --pid /var/run/gitea/gitea.pid |
ABILITARE ED AVVIARE IL SERVIZIO GITEA
Ricaricare il file gitea.service con il comando:
0 |
systemctl daemon-reload |
Abilitare e far partire il servizio di Gitea con i seguenti comandi:
0 1 |
systemctl enable gitea systemctl start gitea |
È probabile che quando si cerca di avviare il servizio, systemctl rimanga in attesa e che dopo qualche decina di secondi, esso vada in errore.
In questo caso, è necessario ignorare l’errore e verificare che il servizio sia in ascolto con ss (o software analoghi)
0 |
ss -lntp | grep gitea |
ATTENZIONE: Se il servizio è in ascolto, è possibile proseguire con la configurazione tramite web UIt. Al termine dell’installazione iniziale, systemd dovrebbe iniziare a funzionare correttamente.
Questo bug è dato dal fatto che il binario di Gitea non notifica correttamente con sd_notify() l’avvio del servizio prima che la fase di installazione sia stata completata.
CONFIGURAZIONE DEL DATABASE MYSQL
È possibile utilizzare un MySQL locale (la cui installazione e configurazione non verrà discussa in questa guida), oppure utilizzare un server dedicato.
Connettersi alla shell del MySQL con il comando:
0 |
mysql -h <IP MySQL> -u root -p |
Creare l’utenza di Gitea con il comando:
0 |
CREATE USER 'gitea'@'%' IDENTIFIED BY '<Password DB Gitea>'; |
oppure con il comando:
0 |
CREATE USER 'gitea'@'<IP/FQDN server Gitea>' IDENTIFIED BY '<Password DB Gitea>'; |
Creare il database di Gitea con il comando:
0 |
CREATE DATABASE giteadb CHARACTER SET 'utf8mb4' COLLATE 'utf8mb4_unicode_ci'; |
Aggiungere le grants all’utenza di Gitea con il comando:
0 |
GRANT ALL PRIVILEGES ON giteadb.* TO 'gitea'@'%'; |
oppure con il comando:
0 |
GRANT ALL PRIVILEGES ON giteadb.* TO 'gitea'@'<IP/FQDN server Gitea>'; |
Quindi fare il flush con il comando:
0 |
FLUSH PRIVILEGES; |
Collegarsi al server di Gitea ed installare il client MariaDB con il comando:
0 |
apt install mariadb-client -y |
Verificare che l’utente gitea possa accedere al DB digitando il seguente comando:
0 |
mysql -h <IP del MySQL server> -u gitea -p giteadb |
CONFIGURARE L’SSL OFFLOADING SU HAPROXY (OPZIONALE)
Collegarsi al server HAProxy ed aggiungere a /etc/haproxy/haproxy.cfg il seguente output:
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
frontend www bind *:80 bind *:443 ssl crt /etc/ssl/private/my_cert.pem http-request redirect scheme https unless { ssl_fc } http-request set-header X-Forwarded-Proto https if { ssl_fc } http-request set-header X-Forwarded-Proto http if !{ ssl_fc } http-request set-header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload;" option http-keep-alive option forwardfor # ACL acl gitea_request hdr(host) -i gitea.pizza.local # Backends use_backend gitea_backend if gitea_request backend gitea_backend mode http option httpchk http-check send meth HEAD uri / timeout check 2500 server gitea01 <IP del server di Gitea>:3000 check |
Verificare la configurazione di HAProxy con il comando:
0 |
haproxy -c -f /etc/haproxy/haproxy.cfg |
Eseguire il Reload di HAProxy con il comando:
0 |
systemctl reload haproxy.service |
CONFIGURAZIONE PRELIMINARE DALLA WEB UI
ATTENZIONE:
È necessario inserire un record DNS o una riga sul file hosts, affiché il client possa risolvere correttamente gitea.pizza.local
Nel caso in cui si abbia configurato l’SSL offloading, sarà necessario che il record punti all’IP di HAProxy, invece nel caso in cui non lo si abbia fatto, il record dovrà puntare all’IP del server di Gitea.
Navigare su https://gitea.pizza.local/ oppure http://gitea.pizza.local:3000/ (se non si è configurato l’SSL offloading)
È possibile specificare l’FQDN al posto dell’IP come host del DB.
Il campo “Server Domain” può essere completato con il dominio (pizza.local) o l’FQDN usato nel base url (gitea.pizza.local).
In questa guida verrà omessa la funzionalità SSH di Gitea, perciò il relativo campo verrà lasciato vuoto
Se si necessitasse di utilizzare git tramite SSH, sarà necessario modificare la porta utilizzata dal servizio di sistema sshd oppure configurare Gitea per utilizzare una porta diversa dalla 22/TCP.
Configurare il base URL ed eventualmente attivare le notifiche quando sono disponibili degli aggiornamenti
Se non si ha configurato l’SSL offloading, utilizzare come base url: http://gitea.pizza.local:3000/
Abilitare o disabilitare le funzionalità di Gitea ed impostare il dominio email come mostrato nell’imamgine sottostante
Creare un’utenza amministrativa come mostrato nell’imamgine sottostante
CONFIGURAZIONE TRAMITE TERMINALE
Aggiungere o modificare in /etc/gitea/app.ini:
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
[server] LOCAL_ROOT_URL = http://<IP/FQDN server di Gitea>:3000 ... [api] ENABLE_SWAGGER = false [cache] ENABLED = true ADAPTER = redis HOST = redis://127.0.0.1:6379/0?pool_size=100&idle_timeout=180s [session] PROVIDER = redis PROVIDER_CONFIG = redis://127.0.0.1:6379/1?pool_size=100&idle_timeout=180s [log] logger.router.MODE = console logger.access.MODE = access-file LEVEL = info ROOT_PATH = /var/lib/gitea/log [log.access-file] MODE = file FILE_NAME = access.log [cron] ENABLED = true RUN_AT_START = true |
Se si ha configurato l’SSL offloading, modificare in /etc/gitea/app.ini:
0 1 2 |
[security] ... REVERSE_PROXY_TRUSTED_PROXIES = <IP server di HAProxy> |
Riavviare Gitea con il comando:
0 |
systemctl restart gitea.service |
CONCLUSIONE DELL’INSTALLAZIONE
Aggiungere un soft link (opzionale)
0 |
ln -s /var/lib/gitea/log/ /var/log/gitea/ |
Rimuovere i permessi di scrittura su /etc/gitea all’utente git
0 1 2 |
chmod 750 /etc/gitea chmod 640 /etc/gitea/app.ini chown -R root:git /etc/gitea |
0 Comments