SSD Nodes Learn 🎉 VPS da $5.50/mese
Guide Matt ConnorDi Matt Connor · Aggiornato 2026-08-05

Discourse, Flarum, NodeBB o phpBB: confronto su VPS

Confronta Discourse, Flarum, NodeBB e phpBB su VPS: RAM reale, database richiesto, gestione dello spam e percorso di migrazione senza sorprese.

Quale software per forum self-hosted conviene eseguire?

Oggi le opzioni realmente disponibili per eseguire un forum self-hosted su un VPS (virtual private server) sono quattro: Discourse, Flarum, NodeBB e phpBB. Discourse è la scelta predefinita corretta se puoi assegnargli 4 GB di RAM e hai almeno due persone disponibili per la moderazione. Con 1 GB e un solo moderatore, usa invece Flarum o phpBB. Un forum poco attivo che riesci a mantenere ordinato è preferibile a un forum migliore che non riesci a gestire.

L'installazione è la parte più semplice. Tutte queste soluzioni possono essere eseguite in un pomeriggio. Ciò che determina se il forum esisterà ancora tra un anno sono la coda delle segnalazioni e il percorso della posta elettronica. Leggi quindi le sezioni sulla moderazione e sulla posta elettronica prima degli elenchi delle funzionalità.

Che cosa serve davvero a un forum per funzionare?

Un forum è composto da quattro elementi, non da uno solo: un processo applicativo, un database che deve sopravvivere al processo, una directory per gli avatar e gli allegati caricati e un percorso funzionante per l'invio delle email. L'applicazione può essere sostituita. Il database no, perché contiene ogni post, ogni account e ogni messaggio privato. Per questo, nelle sezioni seguenti, il database scelto da ciascun progetto è la voce più importante. Determina il formato dell'esportazione quando vorrai abbandonare il progetto.

Il secondo costo è umano. La registrazione pubblica insieme alla pubblicazione pubblica comporta iscrizioni automatiche da parte dei bot, di solito entro la prima settimana dalla comparsa del dominio in un crawler. Tutti e quattro gli elementi possono essere protetti. Solo uno include questo flusso di lavoro nel core.

Discourse: l'impostazione predefinita e il suo costo reale

Discourse è basato su Ruby on Rails, usa PostgreSQL per i dati, Redis per la cache e le code dei job e Sidekiq per eseguire le attività in background. L'installazione supportata include tutti questi componenti in un unico container Docker, creato a partire da un file di configurazione in /var/discourse/containers/app.yml. Non è necessario installare manualmente i singoli componenti.

wget -qO- https://raw.githubusercontent.com/discourse/discourse_docker/main/install-discourse | sudo bash

Questo script installa git e Docker se non sono già presenti, clona discourse_docker in /var/discourse e avvia la procedura guidata interattiva discourse-setup. La procedura richiede il nome host, l'indirizzo email dell'amministratore e i dettagli SMTP (simple mail transfer protocol), scrive app.yml e crea il container. Le porte 80 e 443 devono essere libere, perché il container esegue il proprio nginx e richiede per conto tuo un certificato Let's Encrypt.

Il requisito minimo pubblicato è 1 GB di RAM con swap, oltre a 10 GB di spazio su disco. Il riferimento alla swap va interpretato alla lettera. Quando la procedura guidata stabilisce che il sistema ne ha bisogno, lo script di configurazione crea un file di swap da 2 GB con fallocate -l 2G /swapfile. La swap è necessaria. Il picco di memoria non si verifica mentre il sito è in esecuzione, ma durante ./launcher rebuild app, che ricompila gli asset JavaScript e CSS all'interno del container a ogni aggiornamento. Su un sistema con 1 GB di RAM e senza swap, questa fase viene terminata prima della conclusione, la ricompilazione termina senza un errore utile a schermo e dmesg | tail mostra una riga Out of memory: Killed process. Per eseguire Discourse in modo affidabile, prevedi 2 GB di RAM; quando il forum è utilizzato intensivamente, prevedine 4 GB.

Gli aggiornamenti possono essere avviati da /admin/upgrade nel browser oppure dalla shell:

cd /var/discourse
./launcher rebuild app

rebuild elimina il container in esecuzione, ne prepara uno nuovo a partire da app.yml e lo avvia. Il sito resta quindi non disponibile per i diversi minuti necessari all'operazione. In un'installazione con un unico container non è possibile evitare questa interruzione. La suddivisione in due container, usando gli esempi data.yml e web_only.yml, mantiene PostgreSQL in esecuzione mentre il container web viene ricreato. Questa configurazione diventa utile quando hai utenti che rilevano l'interruzione.

È nella moderazione che Discourse giustifica il consumo di RAM. I nuovi account iniziano al livello di affidabilità 0, con limiti rigidi sul numero di link che possono pubblicare e sulla frequenza di pubblicazione. Salgono poi di livello quando leggono e partecipano. Le segnalazioni vengono inserite in una coda di revisione che registra chi ha gestito ogni elemento. Le integrazioni con Akismet e StopForumSpam sono plugin ufficiali. Negli altri tre casi devi assemblare una soluzione usando componenti aggiuntivi.

La migrazione verso Discourse è il suo punto di forza. La directory script/import_scripts/ nell'albero dei sorgenti contiene più di sessanta importer, tra cui phpbb3.rb, vbulletin.rb, xenforo.rb, vanilla.rb, mybb.rb, flarum_import.rb, una directory nodebb e un importer mbox per gli archivi delle mailing list. Sono script Ruby che esegui all'interno del container su una copia del database precedente. Sono lenti, ma vengono mantenuti.

La migrazione da Discourse è invece il suo punto debole. ./launcher enter app seguito da discourse backup crea un .tar.gz che contiene un dump PostgreSQL e la directory degli upload. Un'altra installazione di Discourse può ripristinarlo. Nessun altro software può leggerlo, quindi per abbandonare Discourse devi scrivere autonomamente query SQL su quel dump. Verifica di poter accettare questo vincolo prima di importare 50,000 post.

Flarum: il forum PHP leggero

Flarum è una normale applicazione PHP: php-fpm dietro nginx o Apache, un database MySQL o MariaDB e file su disco. I requisiti documentati prevedono PHP 7.3 o versione successiva con le estensioni curl, dom, fileinfo, gd, json, mbstring, openssl, pdo_mysql, tokenizer e zip, oltre a MySQL 5.6+ (oppure 8.0.23+) o MariaDB 10.0.5+. Ubuntu 24.04 include PHP 8.3, quindi supera questo requisito minimo.

Presta attenzione a pdo_mysql nell'elenco. Flarum non supporta PostgreSQL e non supporta SQLite. Se ti serviva un database in un singolo file, quello è phpBB più avanti.

sudo apt update
sudo apt install -y nginx mariadb-server composer php-fpm php-mysql php-curl php-gd php-mbstring php-xml php-zip
sudo install -d -m 755 /srv/flarum
cd /srv/flarum
sudo COMPOSER_ALLOW_SUPERUSER=1 composer create-project flarum/flarum:^1.8.0 .
sudo chown -R www-data:www-data /srv/flarum

Configura il web server per usare /srv/flarum/public, non /srv/flarum. Il codice dell'applicazione, il file di configurazione e la password del database si trovano tutti una directory sopra public. Una document root troppo alta espone quindi le tue credenziali a chiunque le richieda. Con Apache servono anche mod_rewrite e AllowOverride All, affinché venga applicato il .htaccess incluso nel pacchetto. Con nginx includi il .nginx.conf incluso nel pacchetto all'interno del server block. Poi apri il dominio nel browser: il programma di installazione integrato di Flarum richiederà i dati del database e dell'account amministratore.

Versioni aggiornate ad agosto 2026: la release stabile corrente è la 1.8.17, pubblicata a giugno 2026, mentre la 2.0 è arrivata alla release candidate 5. Non avviare una nuova community con la release candidate. Quando arriverà la 2.0, sarà necessario aggiornare le estensioni prima che possano essere caricate. È questo l'aggiornamento che può costarti un intero fine settimana.

L'ingombro è ridotto. Servono alcuni worker php-fpm, MariaDB richiede alcune centinaia di MB e ci sono i file statici. Una community agli inizi può funzionare su 1 GB.

La moderazione è il limite più evidente. Il core offre le segnalazioni e i permessi per gruppo. Le code di approvazione e il blocco dello spam sono forniti dalle estensioni, soprattutto dalla raccolta FriendsOfFlarum, installata con composer require e attivata nel pannello di amministrazione. Oggi questa soluzione funziona. Tuttavia, ti affidi a un ecosistema di volontari più ristretto rispetto a quello di phpBB o Discourse. Un'estensione non mantenuta può bloccare il prossimo aggiornamento del core, perché composer rifiuta di risolverla con la nuova versione.

Esportare i dati è semplice: mysqldump il database e copia la directory degli asset. Importare i dati è più complesso. Discourse include flarum_import.rb per la conversione da Flarum a Discourse, un'indicazione della direzione abituale del trasferimento. L'importazione da phpBB a Flarum viene gestita da estensioni della community, non da strumenti ufficiali. Testane quindi una su una copia prima di affidarle l'unica copia dei dati.

NodeBB: pubblicazione in tempo reale e il costo operativo associato

NodeBB è basato su Node.js. Invia i nuovi post ai browser aperti tramite websocket, quindi una discussione attiva si aggiorna senza ricaricare la pagina. Questo è il motivo per sceglierlo. Il README richiede Node.js 22 o versioni successive e MongoDB 5+ oppure Redis 7.2+; nel codice sorgente è incluso anche un driver PostgreSQL come terza opzione.

Usare Redis come database principale è l'insidia di quella frase. Redis mantiene il dataset in memoria, quindi il requisito di RAM cresce insieme al forum invece di rimanere stabile. MongoDB o PostgreSQL conservano i dati su disco e memorizzano nella cache quelli più utilizzati. Scegli Redis solo se puoi spiegare il motivo.

Ubuntu 24.04 include Node.js 18, che è inferiore alla versione minima richiesta, quindi installa prima un runtime aggiornato.

curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash -
sudo apt install -y nodejs git build-essential
sudo adduser --system --group --home /srv/nodebb nodebb
sudo -u nodebb git clone -b v4.x https://github.com/NodeBB/NodeBB.git /srv/nodebb
cd /srv/nodebb
sudo -u nodebb ./nodebb setup

./nodebb setup è interattivo. Chiede quale database usare e come raggiungerlo, quindi crea l'account amministratore e seleziona una porta, che per impostazione predefinita è 4567. NodeBB non si avvia con npm start. Lo script ./nodebb è l'interfaccia e ./nodebb log è il punto in cui viene scritto l'output.

./nodebb start esegue il processo come daemon, comportamento errato su una macchina che viene riavviata. Esegui invece il loader in primo piano tramite systemd.

[Unit]
Description=NodeBB
After=network.target

[Service]
Type=simple
User=nodebb
WorkingDirectory=/srv/nodebb
ExecStart=/usr/bin/env node loader.js --no-daemon
Restart=on-failure

[Install]
WantedBy=multi-user.target

--no-daemon è la parte che spesso viene trascurata. Senza di essa il loader esegue un fork e il processo padre termina, quindi systemctl status nodebb segnala l'unità come arrestata mentre curl localhost:4567 continua a rispondere; systemctl stop nodebb non arresta quindi alcun processo. Se il forum è dietro un reverse proxy, gli header di upgrade dei websocket devono essere inoltrati. Se nel blocco nginx mancano proxy_set_header Upgrade $http_upgrade; e proxy_set_header Connection "upgrade";, il forum viene caricato, la console del browser si riempie di richieste socket.io non riuscite e i nuovi post smettono di comparire finché il lettore non aggiorna la pagina.

La moderazione si colloca tra Flarum e Discourse. Nel pannello di amministrazione è presente una coda per le segnalazioni, con privilegi per categoria e un sistema di reputazione. La protezione antispam è fornita da plugin della community come nodebb-plugin-spam-be-gone, che integra Akismet e StopForumSpam.

I backup sono manuali e nessuno ne parla finché non servono. La CLI ./nodebb non dispone di un comando per i backup. Devi esportare autonomamente il database con mongodump o pg_dump e copiare insieme anche la directory public/uploads e config.json. config.json contiene le credenziali del database e l'URL del sito, quindi un ripristino senza questo file equivale a una nuova installazione. Non esiste nemmeno un importer ufficiale. nodebb-plugin-import è un progetto della community che non è stato aggiornato al passo con le versioni correnti, mentre Discourse include un importer per NodeBB; quindi il percorso di uscita che funziona sicuramente porta a Discourse.

phpBB: quello piccolo e senza fronzoli che funziona ancora

phpBB è datato, e proprio questo è il suo punto di forza. La serie 3.3 funziona con PHP dalla versione 7.2.0 fino alla 8.3 inclusa e supporta MySQL 4.1.3+, MariaDB 5.1+, PostgreSQL 8.3+, SQLite 3.6.15+, MS SQL Server e Oracle. Richiede il supporto a json, mbstring e XML, oltre alla funzione getimagesize() abilitata.

SQLite è il motivo per cui phpBB rientra in questo elenco. Con SQLite, il forum è costituito da una directory di file PHP e da un solo file di database. Non serve un server di database, non c'è nulla da ottimizzare e non ci sono componenti aggiuntivi da includere nei backup. Su un VPS da 1 GB che esegue già un altro servizio, la differenza è concreta. Usa SQLite per una community piccola e passa a MySQL quando aumentano i post simultanei, perché SQLite serializza le scritture e i post iniziano ad accodarsi.

Non servono né Composer né container. Installa un web server con PHP, estrai l'archivio ed esegui l'installazione dal browser. La configurazione completa dello stack è descritta in uno stack LAMP standard su Ubuntu 24.04.

sudo apt update
sudo apt install -y apache2 php libapache2-mod-php php-mysql php-mbstring php-xml php-gd unzip

Scarica la release 3.3 corrente da phpbb.com, estraila nella directory pubblicata dal tuo vhost, quindi rendi scrivibili dall'utente del web server i percorsi in cui l'installer deve scrivere.

sudo chown -R www-data:www-data /srv/phpbb
sudo chmod 660 /srv/phpbb/config.php
sudo chmod -R 770 /srv/phpbb/store /srv/phpbb/cache /srv/phpbb/files /srv/phpbb/images/avatars/upload

Le istruzioni ufficiali indicano i permessi 666 e 777. Questi valori sono pensati per l'hosting condiviso, dove non controlli l'utente con cui viene eseguito PHP. Sul tuo VPS controlli questo aspetto, quindi assegna la proprietà a www-data e impedisci l'accesso a tutti gli altri. C'è un dettaglio di Apache che causa problemi: la configurazione di Ubuntu concede l'accesso solo sotto la document root predefinita, quindi un vhost che punta a /srv/phpbb richiede anche un blocco <Directory> corrispondente con Require all granted, altrimenti ogni richiesta restituisce 403 Forbidden prima ancora di raggiungere phpBB. Completa l'installazione nel browser all'indirizzo /install/index.php, quindi reimposta config.php a 640 ed elimina la directory install/. phpBB continuerà a segnalare la presenza di quella directory finché non verrà rimossa.

Lo spam è il problema noto di phpBB, ma può essere risolto. Il modulo di registrazione si trova in un URL prevedibile (ucp.php?mode=register), quindi i bot lo individuano entro pochi giorni dalla scansione del dominio. La soluzione efficace si trova nel pannello di amministrazione, nella sezione Spambot countermeasures: imposta il metodo antispam su Question and Answer e scrivi una domanda a cui possa rispondere solo una persona della tua community. I CAPTCHA basati su immagini (completely automated public Turing tests) vengono risolti a basso costo dai servizi che applicano una tariffa per migliaio. Una domanda relativa al tuo argomento specifico non lo è.

phpBB è anche la piattaforma di origine con il supporto migliore per una migrazione. phpbb3.rb di Discourse è l'importer più utilizzato dell'intero articolo e sui forum di supporto di phpBB sono disponibili risposte risalenti a vent'anni fa. Per uscire da phpBB puoi usare mysqldump oppure copiare il file SQLite. Gli elementi che non vengono trasferiti sono gli stili e le estensioni.

Perché le email di registrazione al forum non arrivano mai?

La registrazione su tutte e quattro queste piattaforme richiede un'email di conferma. Se l'email non arriva, l'account non viene mai attivato e nei log compare una registrazione interrotta. La recapito delle email in uscita determina se il forum funziona, quindi va considerata parte dell'installazione.

  • La porta in uscita 25 è bloccata per impostazione predefinita dalla maggior parte dei provider VPS, quindi un Postfix locale che tenta di consegnare direttamente le email non raggiunge alcuna destinazione. Il log della posta mostra connect to gmail-smtp-in.l.google.com[...]:25: Connection timed out.
  • Un indirizzo IP appena assegnato non ha reputazione di invio, quindi anche una consegna riuscita finisce nella cartella dello spam. Per un link di conferma, il risultato è lo stesso di un'email mai arrivata.
  • Senza record SPF (sender policy framework) e DKIM (domainkeys identified mail) pubblicati nel DNS, i grandi provider rifiutano direttamente il messaggio. Il rifiuto di Google è 550 5.7.26 Unauthenticated email from example.com is not accepted due to domain's DMARC policy. Il DMARC (domain-based message authentication, reporting and conformance) è ormai richiesto a chiunque invii email su larga scala.

La soluzione pratica è usare un relay. Configura le impostazioni SMTP del forum verso un provider di posta transazionale sulla porta 587, pubblica i record SPF, DKIM e DMARC forniti dal provider e invia da un sottodominio come mail.example.com, in modo che la reputazione del forum resti separata da quella della posta personale. È possibile gestire autonomamente il server di posta e un server di posta completamente self-hosted su un VPS spiega come farlo, ma il lancio di un forum non è il momento adatto per imparare a gestire la recapito delle email.

Esegui un test prima di annunciare il forum. In Discourse, dall'interno del container:

cd /var/discourse
./launcher enter app
rake emails:test[you@example.com]

Questo comando verifica la connessione SMTP e invia un messaggio. In caso di credenziali errate indica il problema, in genere come Net::SMTPAuthenticationError. phpBB offre un test equivalente nel pannello di amministrazione, alla voce Client communication. Per Flarum e NodeBB, registra un account temporaneo usando una casella reale presso un grande provider e leggi gli header originali dell'email ricevuta. Nel header Authentication-Results, il risultato che cerchi è spf=pass e dkim=pass.

Una precisazione su Discourse. Ad agosto 2026 la procedura guidata di configurazione consente di saltare SMTP e usare Discourse ID, che autentica gli utenti con un account esterno invece di inviare un link tramite email. In questo modo puoi avviare il forum senza un relay. Non saranno però disponibili le email di notifica né il recupero delle password, quindi configura comunque SMTP prima che la community cresca.

Come si pubblica il forum tramite TLS?

Flarum e phpBB sono normali virtual host, quindi è sufficiente usare certbot sul web server già in esecuzione. NodeBB e Discourse sono diversi: sono applicazioni in ascolto su porte locali e richiedono un componente frontend che termini TLS (transport layer security) e instradi le richieste in base al nome host. Se il forum condivide il server con altri servizi, configura un unico reverse proxy davanti a tutti, come descritto in Traefik davanti a più applicazioni Docker Compose.

Per impostazione predefinita, Discourse usa direttamente le porte 80 e 443, con il proprio nginx e il proprio template Let's Encrypt. Per collocarlo dietro un proxy esistente, modifica app.yml, rimuovi la riga templates/web.letsencrypt.ssl.template.yml, cambia le porte esposte in modo che il container sia in ascolto soltanto su un indirizzo locale, quindi esegui ./launcher rebuild app. Questa modifica successiva richiede una rebuild e alcuni minuti di downtime. Decidi quindi l'architettura prima dell'installazione, non dopo.

Quale piattaforma si adatta alle dimensioni della tua community?

La regola decisionale riguarda le persone, non le funzionalità.

  • Meno di qualche centinaio di membri, un moderatore, 1 GB di RAM: phpBB su SQLite oppure Flarum, se vuoi un'interfaccia moderna e puoi usare MariaDB. In entrambi i casi si tratta di una singola applicazione PHP da mantenere aggiornata.
  • Community in crescita, due o più moderatori, 4 GB di RAM: Discourse. I livelli di fiducia e la coda di revisione giustificano l'uso di risorse non appena la moderazione non può più essere gestita da una sola persona.
  • Vuoi soprattutto conversazioni in tempo reale, più che discussioni persistenti: NodeBB oppure accetta che si tratta di chat e usa Rocket.Chat su Docker Compose. Un forum in cui dopo una settimana non vale la pena leggere nulla avrebbe dovuto essere un server di chat.
  • Ti serve documentazione, non discussione: nessuna di queste soluzioni. BookStack, Wiki.js o Outline risponde meglio a questa esigenza, e un forum pieno di domande ripetute indica solitamente l'assenza di una wiki.
  • Non hai ancora stabilito cosa debba essere eseguito sul server: la panoramica più ampia delle soluzioni self-hosted per il 2026 è un punto di partenza migliore, mentre la guida alle alternative self-hosted a Notion tratta la sovrapposizione tra forum e workspace condivisi.

Qualunque soluzione tu scelga, il forum è affidabile solo quanto l'ultimo backup ripristinato. Esegui il dump del database secondo una pianificazione, copia la directory degli upload nello stesso job e ripristina una volta il risultato in un'altra posizione per verificare che il dump sia utilizzabile. Backup restic pianificati su un VPS tratta questo aspetto; è l'unico componente di questa configurazione che non offre una seconda possibilità.

FAQ

Quali sono i requisiti minimi del server per un forum self-hosted?

phpBB con SQLite funziona con 1 GB di RAM insieme ad altri servizi, perché non richiede un database server. Flarum richiede 1 GB oltre a MariaDB. NodeBB funziona bene con 2 GB e MongoDB. Discourse indica 1 GB con swap e 10 GB di disco come requisiti minimi, ma 2 GB sono il limite realistico e 4 GB sono più adatti a un forum trafficato, perché ./launcher rebuild app ricompila gli asset in memoria a ogni aggiornamento e proprio in quel momento un server di piccole dimensioni può essere terminato dal kernel per esaurimento della memoria.

Posso migrare il mio forum phpBB a Discourse?

Sì, ed è il percorso di migrazione meglio supportato tra quelli disponibili. Discourse include script/import_scripts/phpbb3.rb, che va eseguito all'interno del container su una copia del database phpBB, mai sul database in produzione. Vengono trasferiti utenti, categorie, discussioni, post e allegati. Stili ed estensioni non vengono trasferiti e gli URL delle vecchie discussioni cambiano, quindi configura i redirect dai percorsi phpBB prima di modificare il DNS. Le bacheche di grandi dimensioni richiedono ore: esegui prima una prova su un server temporaneo e misura la durata dell'importazione.

Perché i nuovi utenti non ricevono mai l'email di attivazione?

La maggior parte dei provider VPS blocca la porta in uscita 25, quindi un server di posta locale non riesce a consegnare i messaggi e il log mostra Connection timed out per il mail exchanger del destinatario. Quando la consegna funziona, un nuovo IP privo di record SPF o DKIM viene rifiutato o filtrato e Google risponde con 550 5.7.26 Unauthenticated email ... is not accepted due to domain's DMARC policy. Invia la posta tramite un relay sulla porta 587 e pubblica i record SPF, DKIM e DMARC forniti dal relay. Conferma quindi il funzionamento con una registrazione di prova e leggi l'header Authentication-Results del messaggio ricevuto.

Quale software per forum self-hosted richiede meno lavoro di moderazione?

Discourse, perché il flusso di moderazione è integrato nel core invece di essere aggiunto tramite componenti separati. I nuovi account sono soggetti a rate limiting finché non hanno letto un numero sufficiente di contenuti, le segnalazioni vengono raccolte in una coda che registra chi le ha gestite e il plugin Akismet è ufficiale. phpBB si avvicina a questo livello dopo l'attivazione del metodo antispam Question and Answer, che blocca autonomamente la maggior parte delle registrazioni dei bot. Flarum e NodeBB si affidano a estensioni della community per le stesse funzioni. Nulla di tutto questo cambia il fattore determinante: il carico di moderazione cresce in base al numero di persone che pubblicano contenuti, non in base al software utilizzato.