Installazione e Configurazione Base di Forgejo su Ubuntu Server 26.04

da | Ago 24, 2026 | 0 commenti

 

Ogni tanto capita di guardare la propria organizzazione su GitHub e chiedersi quanto di quel codice sia davvero nostro. Non in senso legale ma in senso operativo: dove vive, chi ne detiene le chiavi, cosa succede il giorno in cui cambiano i termini di servizio o il piano gratuito diventa meno gratuito.

Per un homelab è una curiosità. Per chi gestisce script, playbook e configurazioni di infrastrutture altrui, è una domanda che prima o poi presenta il conto.

Forgejo è la risposta più elegante che ho trovato a questa domanda.

È un forge Git self-hosted: repository, pull request, issue, wiki, registry pacchetti e una CI compatibile con la sintassi di GitHub Actions, il tutto in un singolo binario scritto in Go che gira sereno in mezzo giga di RAM.

Non è un GitLab in miniatura, ed è esattamente questo il punto: fa quello che serve davvero, senza portarsi dietro Redis, Sidekiq, Gitaly e otto giga di requisiti minimi.

Nasce nel 2022 come fork di Gitea, quando marchio e domini di quest’ultimo sono passati a una società for-profit. Oggi vive sotto Codeberg e.V., un’associazione non-profit tedesca, con licenza GPL e una governance pubblica.

È la stessa piattaforma che regge Codeberg.org con oltre centomila utenti e non è esattamente un progetto sperimentale.

In questa guida lo installiamo su Ubuntu Server 26.04 LTS partendo da zero: database PostgreSQL, utente di servizio dedicato, deploy da binario con verifica GPG, unit systemd irrobustita, reverse proxy Nginx con certificato Let’s Encrypt e configurazione iniziale.

Alla fine avrai un’istanza raggiungibile in HTTPS, pronta per accogliere il primo git push.

Mettiamoci al lavoro.

 

PREREQUISITI

  • Ubuntu 26.04 LTS (server), accesso sudo
  • 2 vCPU / 2 GB RAM / 20 GB disco come minimo ragionevole (Forgejo da solo gira anche con meno, ma le Actions e i repo crescono)
  • Un record DNS A/AAAA che punta al server, ad esempio git.miodominio.tld
  • Porte 80 e 443 raggiungibili (o solo interne, se pubblichi tramite un altro proxy)

 

AGGIORNAMENTO DEL SISTEMA

Aggiornare il sistema e installare le dipendenze con i comandi:

Verificare la versione di Git (Forgejo 16 richiede Git ≥ 2.34) con il comando:

Dovremmo visualizzare un output simile al seguente:

 

INSTALLAZIONE DATABASE POSTGRESQL

SQLite funziona ed è comodo per test, ma per un’istanza destinata a durare consiglio PostgreSQL.

Creare utente e database con i comandi:

Quindi eseguire i comandi SQL:

NOTA BENE: TEMPLATE template0 con collation C.UTF-8 evita problemi di ordinamento e di ricostruzione indici dopo un upgrade di PostgreSQL. Annota la password: ti servirà nel wizard.

Eseguire un Test di connessione con il comando:

Quindi inserire la password dell’utente creato poco fa

Se è tutto OK dovremmo visualizzare un output simile al seguente:

 

 

CREAZIONE UTENTE DU SISTEMA E STRUTTURA DELLE DIRECTORY

Forgejo non va mai eseguito come root. Creare un utente di servizio git con il comando:

Configurare le directory di dati con i seguenti comandi:

NOTA BENE: /etc/forgejo resta scrivibile finché il wizard web non ha generato app.ini

 

DOWNLOAD E VERIFICA DEL FILE BINARIO

Impostare le variabili (adatta versione e architettura linux-amd64 o linux-arm64):

 

Scaricare il binario quindi firma e checksum:

Verificare lo SHA256 con il comando:

Dovremmo visualizzare un output simile al seguente:

Verificare la firma GPG (chiave di release Forgejo) con il comando:

Dovremmo visualizzare un output simile al seguente:

NOTA BENE: L’avviso sulla chiave “not certified with a trusted signature” è normale: significa solo che non hai firmato tu quella chiave.

Procedere con l’installazione con il comando:

fare il check con il comando:

Dovremmo visualizzare un output simile al seguente:

 

CONFIGURAZIONE DEL SYSTEMD

Eseguire il comando:

Quindi fare un reload e abilitare Forgejo con i comandi:

Se è tutto OK dovremmo visualizzare il seguente output:

Controllare i log in caso di problemi con il comando:

A questo punto Forgejo è in ascolto su http://127.0.0.1:3000 (di default sull’interfaccia 0.0.0.0, che restringeremo dopo il wizard).

INSTALLAZIONE E CONFIGURAZIONE DEL REVERSE PROXY

Installare Nginx con il comando:

Configurazione del vhost:

Quindi eseguire i comandi:

 

CONFIGURAZIONE DEL CERTIFICATO LET’S ENCRYPT

Eseguire i comandi:

Certbot aggiunge il blocco listen 443 ssl, il redirect da HTTP e imposta il rinnovo automatico via systemd timer.

Configurare il firewall con i comandi:

ATTENZIONE: In homelab: se usi una CA interna (es. Windows CA con certificato wildcard) o un proxy centralizzato come Nginx Proxy Manager / Caddy, salta Certbot e limita l’esposizione della 3000 alla sola rete di gestione.

 

CONFIGURAZIONE INIZIALE VIA WEB

Aprire da un qualsiasi https://git.miodominio.tld/. Comparirà il wizard di installazione.

Di seguito tutti i valori da inserire:

Database

  • Tipo: PostgreSQL
  • Host: 127.0.0.1:5432
  • Utente: forgejo
  • Password: quella impostata in precedenza
  • Nome database: forgejo
  • SSL: Disable (connessione locale)

 

Impostazioni generali

  • Site Title: il nome della tua istanza
  • Repository Root Path: /var/lib/forgejo/data/forgejo-repositories
  • LFS Root Path: /var/lib/forgejo/data/lfs
  • Run As Username: git
  • SSH Server Domain: git.miodominio.tld
  • SSH Port: 22
  • Forgejo HTTP Listen Port: 3000
  • Forgejo Base URL: https://git.miodominio.tld/
  • Log Path: /var/lib/forgejo/log

 

Impostazioni opzionali

  • Email Settings: server SMTP, se vuoi notifiche e reset password funzionanti
  • Server and Third-Party Service Settings: spunta **Disable Self-Registration** e **Require Sign-In to View Pages** se l’istanza è privata
  • Administrator Account Settings: **crea qui l’account amministratore**. Se non lo fai, il primo utente registrato diventa admin — non è quello che vuoi su un’istanza esposta.

Al termine cliccare Installare Forgejo

A questo punto Il file /etc/forgejo/app.ini viene generato e il servizio si riavvia.

Se è andato tutto a buon fine dovremmo visualizzare la Dashboard di ForgeJo

 

HARDENING POST INSTALLAZIONE

Rendere la configurazione in sola lettura per il servizio con i comandi:

Far ascoltare Forgejo solo su localhost, dato che davanti c’è Nginx. Modificare il file di configurazione /etc/forgejo/app.ini:

Di seguito alcune direttive utili da aggiungere o verificare:

Riavviare Forgejo con il comando:

 

 

VERIFICA FUNZIONALE

Creare un repository di test dalla UI, poi da una macchina client:

Se l’SSH non funziona controllare che la chiave sia stata scritta in /home/git/.ssh/authorized_keys e che i permessi siano 700 sulla directory e 600 sul file.

 

BACKUP DI FORGEJO

Forgejo include un comando di dump che raccoglie database, repository, allegati e configurazione:

Creare prima la directory (sudo -u git mkdir -p /var/lib/forgejo/backup) e schedulare il comando con un timer systemd o un cron, poi replicare l’archivio fuori dall’host.

 

AGGIORNAMENTO DI FORGEJO

L’upgrade consiste nel sostituire il binario:

Scaricare e verificare la nuova versione quindi:

Avviare Fogejo:

Prima di ogni upgrade di major version: eseguire il dump e leggi la sezione breaking changes delle release notes. Le migrazioni del database vengono applicate automaticamente al primo avvio e non sono reversibili.

 

PROBLEMI FREQUENTI

502 Bad Gateway: servizio non attivo o HTTP_ADDR errato systemctl status forgejo – Verificare che la porta 3000 sia in ascolto con ss -ltnp

Push oltre pochi MB rifiutato: limite di Nginx – Aumentare client_max_body_size

Clone SSH chiede la password: chiave non registrata o permessi errati su /home/git/.ssh – Correggere i permessi e controllare authorized_keys

Link generati in http://localhost:3000: ROOT_URL non corretto – Correggere [server] ROOT_URL e riavviare

Errori di collation dopo upgrade PostgreSQL: database creato senza template0 – REINDEX DATABASE forgejo;

Actions non partono: nessun Runner registrato – installare Forgejo Runner e registralo dalla UI (dalla 15.0 la registrazione è guidata via web)

 

PRO E CONTRO

Di seguito i PRO:

Governance e licenza. È il differenziale vero. Forgejo nasce nell’ottobre 2022 quando domini e marchio Gitea passarono a una società for-profit senza il consenso della community; il progetto vive oggi sotto l’ombrello di Codeberg e.V., un’associazione non-profit tedesca.
Dalla versione 9 è rilasciato sotto licenza copyleft GPL, quindi nessun rischio di edizioni “enterprise” chiuse o di funzionalità tenute dietro un paywall.

Leggerezza. Binario statico singolo in Go, gira tranquillamente in ~512 MB di RAM — abissale la differenza con GitLab CE, che vuole 4 GB minimi (8 per stare comodi) più Postgres, Redis, Gitaly e i worker Sidekiq.
Su un LXC o una VM piccola del tuo homelab è un altro pianeta.

Feature set completo per il 90% dei casi. Repo, pull request, issue, wiki, LFS, registry pacchetti (Docker, npm, PyPI, Cargo, Debian, Go) e CI compatibile con la sintassi GitHub Actions, tutto incluso.

Autoconsistenza del progetto. Forgejo è sviluppato usando Forgejo stesso, testato e rilasciato con Forgejo Actions; Gitea è sviluppato su GitHub e rilasciato con GitHub Actions.
Codeberg fa da banco di prova su scala reale per ogni release prima che arrivi agli altri self-hoster.

Migrazione facile in entrata. L’importer da GitHub/GitLab funziona bene e copre issue, PR, label e milestone, non solo il codice.

Di seguito i CONTRO:

Ecosistema di terze parti più povero. Un decennio di tutorial, provider Terraform, script di backup e guide di integrazione parla di Gitea: quando cerchi soluzioni finisci spesso su documentazione Gitea da adattare. In genere funziona, ma è attrito.

Nessun vendor a cui rivolgersi. Non esiste un contratto di supporto commerciale. Per un’azienda che vuole un’alternativa leggera a GitHub con un fornitore da chiamare, Gitea è la risposta più difendibile in sede di procurement e nel tuo contesto MSP questo pesa soprattutto verso clienti che chiedono un SLA sul software.

CI meno matura di GitLab. Forgejo Actions copre bene i casi standard, ma non ha l’equivalente di pipeline multi-stage complesse, DAG, environment con approvazioni, security scanning integrato o container registry con policy di retention avanzate.

Federazione ancora acerba. ActivityPub/ForgeFed è la bandiera del progetto ma va trattato come un opt-in sperimentale: non contarci per casi d’uso produttivi.

Porta a senso unico verso Gitea. Dopo l’hard fork del 2024 non sono più intercambiabili come drop-in; passare dall’uno all’altro oggi è un progetto di migrazione, non un cambio di configurazione. La direzione Forgejo → Gitea in particolare è chiusa.

Manutenzione a tuo carico. Upgrade, backup, TLS, monitoraggio: tutto tuo. È il prezzo del self-hosting rispetto a GitHub/GitLab.com, e va messo a budget in ore, non solo in euro di VPS.

Articoli Recenti

Veeam Backup

Monitoring

Friends

  • My English Lab  English School
  • ChrSystem   Servizi ICT
  • Since 01  Kreative Graphics

Database

Networking

Autori

  • Raffaele Chiatto  Amministratore
  • Marco Valle  Autore
  • Angelo Lauria  Autore
  • Edoardo Prot  Autore
  • Davide D’Urso  Autore
Raffaele Chiatto

Raffaele Chiatto

Sono Raffaele Chiatto, un appassionato di informatica a 360 gradi. Tutto è iniziato nel 1996, quando ho scoperto il mondo dell'informatica grazie a Windows 95, e da quel momento non ho più smesso di esplorare e imparare. Ogni giorno mi dedico con curiosità e passione a scoprire le nuove frontiere di questo settore in continua evoluzione.
Categorie: ForgeJo | Ubuntu

Related Post

0 commenti

Invia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Virtualizzazione

Linux

Microsoft

Apple

Backup

Database

Security

Automazione