Ospitare Ghost® su un VPS gestito: la vostra pubblicazione, sul vostro server

Ospitare Ghost su un VPS gestito significa pubblicare i vostri articoli, riunire i vostri membri e inviare le vostre newsletter da una macchina tutta vostra, che i nostri team tengono aggiornata e supervisionano giorno e notte. Ghost è un software libero con licenza MIT. Questa guida segue la sua documentazione ufficiale: Ghost-CLI o Docker Compose, MySQL, HTTPS, le e-mail, i backup e gli aggiornamenti.

Simon Vasconcelos Lee Di Pubblicato il 9 novembre 2026Lettura: 13 minuti

Tutte le guide

In breve

  1. La licenza MIT di Ghost consente di usarlo liberamente in azienda, conservandone la nota di licenza. Il nome e il logo dipendono a parte dalla politica sul marchio di Ghost Foundation.
  2. Il progetto raccomanda Ghost-CLI su Ubuntu, con Nginx, Node.js 22, MySQL 8 e almeno 1 GB di memoria. Il suo metodo Docker Compose, in «preview», aggiunge l'analytics web e ActivityPub in self-hosting.
  3. MySQL 8 è l'unico database supportato in produzione.
  4. Prevedete due circuiti di e-mail: un relay SMTP per le e-mail transazionali, indispensabile, e Mailgun per le newsletter, unico servizio di invio massivo supportato.
  5. Salvate il database e la cartella content, poi aggiornate con ghost update o docker compose pull: il progetto pubblica aggiornamenti ogni settimana.

Che cosa fa Ghost

Ghost è una piattaforma di pubblicazione professionale e libera, scritta per Node.js. Riunisce in un unico posto ciò che una pubblicazione indipendente assembla spesso a partire da più strumenti.

Secondo la documentazione, il prodotto ha le stesse funzioni in self-hosting. Ciò che lo circonda spetta a voi: l'invio delle newsletter, l'analytics web, una CDN e i backup completi del sito.

La licenza MIT e il marchio

Ghost è pubblicato con licenza MIT. Autorizza a usare, copiare, modificare, unire, pubblicare, distribuire, concedere in sublicenza e vendere il software, a una condizione: conservare la nota di copyright e il testo della licenza in ogni copia. Potete quindi far girare Ghost in azienda, adattarlo e pubblicarvi per i vostri clienti, senza alcuna licenza da acquistare.

La licenza copre il codice. Il nome e il logo appartengono a Ghost Foundation e dipendono dalla sua politica sul marchio: leggetela se costruite un'offerta attorno al software. Ghost è un marchio registrato di Ghost Foundation.

This publication is independent of and not affiliated with, authorized, sponsored, or approved by Ghost Foundation. In italiano: questa pubblicazione è indipendente da Ghost Foundation e non è affiliata, autorizzata, sponsorizzata né approvata da essa.

Ghost-CLI o Docker Compose: due metodi ufficiali

Il progetto documenta due strade per la produzione. Ghost-CLI è l'installazione che raccomanda ufficialmente, e Docker Compose è una «preview», che definisce del tutto nuova. Indica anche di avanzare verso questo strumentario Docker anziché far evolvere Ghost-CLI, e fornisce una procedura guidata per passare dall'uno all'altro.

PuntoGhost-CLIDocker Compose (preview)
SistemaUbuntu 22.04, 24.04 o 26.04Un server Linux con Docker 20.10.13 o più recente
MemoriaAlmeno 1 GBIl progetto cita come esempio un server da 2 GB e 1 processore
Server web e HTTPSNginx e un certificato Let's Encrypt, installati da Ghost-CLICaddy, in un container, che gestisce TLS
DatabaseMySQL 8.0 o 8.4 installato sul serverMySQL in un container
Analytics webNon compatibileDisponibile, con un account Tinybird
Rete sociale (ActivityPub)Il servizio ospitato dal progetto, gratuito entro i suoi limiti d'usoLo stesso servizio per impostazione predefinita, oppure il vostro, in self-hosting

Prima di iniziare: il dominio e il server

Fate puntare il dominio al server prima dell'installazione: il certificato viene installato durante la configurazione. Su un VPS Simafri, i visitatori arrivano sulle porte 80 e 443, con il nome di dominio del server, tramite record A e AAAA. L'indirizzo del sito si scrive per intero, con il suo protocollo, come https://example.com: un indirizzo IP provoca errori.

Oltre alla memoria indicata qui sopra, il progetto non indica né il disco né il carico: la taglia dipende dal vostro traffico, dalle vostre immagini e dai vostri media. Su un VPS gestito, descrivetici la vostra pubblicazione e vi raccomandiamo la taglia adatta.

Installare Ghost con Ghost-CLI su Ubuntu

Ghost-CLI si usa con un utente che non sia root e il cui nome non sia ghost, perché questo nome entra in conflitto con lo strumento. Createlo dall'account root, sostituendo user con il nome scelto:

Terminale, come root
adduser <user>
usermod -aG sudo <user>
su - <user>

Nginx e MySQL

Aggiornate il sistema, installate Nginx (1.9.5 come minimo per SSL) e MySQL. La riga ufw apre HTTP e HTTPS se questo firewall è attivo:

Terminale
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install nginx
sudo ufw allow 'Nginx Full'
sudo apt-get install mysql-server

Sulle versioni recenti di Ubuntu, l'account root di MySQL si autentica tramite socket, cosa che Ghost non supporta. Assegnategli una password:

Terminale, poi console MySQL
sudo mysql
ALTER USER 'root'@'localhost' IDENTIFIED WITH 'caching_sha2_password' BY '<your-new-root-password>';
FLUSH PRIVILEGES;
exit

Node.js e Ghost-CLI

Ghost richiede Node.js 22: le versioni 20, 21, 23 e successive non sono supportate. Il progetto chiede di installarlo per tutto il sistema, in questo modo:

Terminale
sudo apt-get update
sudo apt-get install -y ca-certificates curl gnupg
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
NODE_MAJOR=22
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_MAJOR.x nodistro main" | sudo tee /etc/apt/sources.list.d/nodesource.list
sudo apt-get update
sudo apt-get install nodejs -y
sudo npm install ghost-cli@latest -g

Avviare l'installazione

Ghost si installa nella propria cartella, con un proprietario e permessi precisi. Sostituite sitename con il nome che preferite:

Terminale
sudo mkdir -p /var/www/sitename
sudo chown <user>:<user> /var/www/sitename
sudo chmod 775 /var/www/sitename
cd /var/www/sitename
ghost install

Il comando pone allora le sue domande, e il progetto raccomanda di rispondere sì a ogni passaggio proposto:

Il sito risponde allora, e https://example.com/ghost vi invita a creare l'account del proprietario. Se l'installazione viene interrotta, ghost setup riprende la configurazione; se fallisce, ghost uninstall pulisce meglio dell'eliminazione della cartella. ghost doctor verifica il sistema in qualsiasi momento.

Installare Ghost con Docker Compose (preview)

Il progetto presenta questo metodo come una «preview»: ai suoi occhi è del tutto nuovo. È l'unico che consente di ospitare in proprio l'analytics web e ActivityPub.

Su un server in cui Docker è installato, scaricate lo strumentario ufficiale in /opt/ghost e copiate i suoi due file di esempio:

Terminale
git clone https://github.com/TryGhost/ghost-docker.git /opt/ghost && cd /opt/ghost
cp .env.example .env
cp caddy/Caddyfile.example caddy/Caddyfile

Nel file .env, compilate questi valori:

In caddy/Caddyfile, decommentate il blocco che corrisponde al vostro caso: reindirizzamento da www al dominio senza prefisso, o l'inverso, oppure dominio di amministrazione separato. Avviate poi Ghost e completate la configurazione su /ghost:

Terminale
docker compose pull
docker compose up -d

L'analytics web e ActivityPub

L'analytics richiede un account Tinybird, servizio esterno. Da /opt/ghost, accedete, distribuite la sua configurazione e recuperate i token da incollare nel .env, sezione «Tinybird configuration»:

Terminale
docker compose run --rm tinybird-login
docker compose run --rm tinybird-sync
docker compose run --rm tinybird-deploy
docker compose run --rm tinybird-login get-tokens

ActivityPub funziona subito con il servizio ospitato dal progetto, gratuito entro limiti d'uso che la sua documentazione pubblica. Per ospitare il vostro, decommentate ACTIVITYPUB_TARGET=activitypub:8080. Attivate poi nel .env il profilo o i profili desiderati, poi riavviate i container:

.env
COMPOSE_PROFILES=analytics,activitypub
Terminale
docker compose pull
docker compose up -d

Per ActivityPub, il progetto chiede di ricreare anche Ghost e Caddy, con docker compose up -d --force-recreate ghost caddy.

Passare da Ghost-CLI a Docker Compose

Dopo la clonazione e la configurazione, bash scripts/migrate.sh copia la cartella content, importa il database nel container MySQL e avvia Caddy al posto di Nginx. Propone di fermare Nginx, il che mette il sito offline: rispondete no se sul server girano altri siti. Non elimina alcun dato. bash recovery_instructions.sh ripristina il sito d'origine se interrompete la migrazione.

HTTPS e dominio di amministrazione

L'amministrazione di Ghost deve passare da HTTPS, e il progetto raccomanda HTTPS per tutto il sito: senza di esso, identificativi e password circolano in chiaro. Con Docker Compose, se ne occupa Caddy. Con Ghost-CLI, l'installazione installa il certificato, e un comando lo fa anche in un secondo momento:

Terminale, nella cartella del sito
ghost setup ssl

Per cambiare l'indirizzo di un sito installato con Ghost-CLI, ghost config url https://example.com aggiorna la configurazione, e ghost restart la applica.

Il progetto consiglia anche un dominio di amministrazione separato, che riduce la superficie d'attacco. Il percorso resta /ghost/. Lato Ghost-CLI, si dichiara in config.production.json:

config.production.json
"admin": {
  "url": "https://admin.example.com"
}

Lato Docker Compose, compilate ADMIN_DOMAIN, decommentate il suo blocco nel Caddyfile e lanciate docker compose up -d --force-recreate ghost caddy. Anche questo dominio ha bisogno dei suoi record A e AAAA.

MySQL 8, il database di produzione

MySQL 8 è l'unico database che il progetto supporta in produzione. Ghost-CLI si installa con MySQL 8.0 o 8.4, e il file Compose fornisce un'immagine MySQL 8.0.

Le e-mail e le newsletter

Ghost distingue due invii, che non passano dallo stesso percorso. È il punto più importante da impostare dopo l'installazione.

InvioEsempiChe cosa lo sostiene
TransazionaleInviti del team, password dimenticate, iscrizioni e link di accesso dei membri, codice di accesso da un nuovo dispositivoLa configurazione mail di Ghost, in SMTP
NewsletterGli articoli inviati ai vostri membriL'API di Mailgun, le cui chiavi si inseriscono nelle impostazioni «Email newsletter»

Il relay SMTP, per le e-mail transazionali

La documentazione classifica questa configurazione come obbligatoria in produzione. Ghost invia anche un codice per e-mail quando rileva un accesso da un nuovo dispositivo: impostate questo relay prima di invitare il vostro team.

Su un VPS Simafri, l'invio passa da un relay SMTP autenticato, sulla porta 587: l'indirizzo di un account di posta che avete già, oppure Simafri Suite.

config.production.json (Ghost-CLI), poi ghost restart
"mail": {
  "transport": "SMTP",
  "from": "'Acme Support' <support@example.com>",
  "options": {
    "host": "smtp.example.com",
    "port": 587,
    "secure": false,
    "requireTLS": true,
    "auth": {
      "user": "support@example.com",
      "pass": "1234567890"
    }
  }
}
.env (Docker Compose), sezione SMTP Email
mail__transport=SMTP
mail__options__host=smtp.example.com
mail__options__port=587
mail__options__secure=false
mail__options__requireTLS=true
mail__options__auth__user=support@example.com
mail__options__auth__pass=1234567890
mail__from="'Acme Support' <support@example.com>"
Terminale, dopo una modifica del file .env
docker compose up -d --force-recreate ghost

Mailgun, per le newsletter

Il relay SMTP non copre le newsletter. Secondo la documentazione, l'invio massivo non si fa in SMTP e Mailgun è, a oggi, l'unico servizio di invio massivo che Ghost supporta. Create il vostro account Mailgun e inserite le sue chiavi API nelle impostazioni di Ghost.

Se non inviate i vostri articoli per e-mail, non vi serve alcun account Mailgun: queste impostazioni si ignorano. Se preferite un altro strumento di newsletter, il progetto propone di sincronizzare i vostri membri verso di esso, per esempio con Zapier o con le sue guide di integrazione.

Salvare e ripristinare Ghost

Ghost offre tre livelli di copia, e non contengono la stessa cosa. Per ricostruire un sito identico, il progetto chiede di salvare direttamente il database e la cartella content.

MetodoChe cosa contienePer quale uso
ghost backup (Ghost-CLI)Uno zip: contenuti in JSON, membri in CSV, temi, immagini, file e media, route e reindirizzamentiLa precauzione prima di un aggiornamento
Esportazione dall'amministrazioneUno zip: contenuti e impostazioni, membri, statistiche degli articoli, temi, route e reindirizzamenti, a scelta. Né commenti, né cronologia di attività dei membri, né mediaLo spostamento dei contenuti verso un altro sito
Database e cartella contentLa totalità dei datiIl ripristino dopo un disastro, o una copia esatta

L'esportazione si trova in «Settings», «Advanced», «Import/Export», scheda «Export», pulsante «All data». Per la copia completa, con Ghost-CLI, l'account MySQL e il nome del database da riportare sono in config.production.json:

Terminale, Ghost-CLI
mkdir -p ~/ghost-backups
mysqldump -u ghost_user -p ghost_production > ~/ghost-backups/ghost_backup.sql
cd /var/www/sitename
tar czf ~/ghost-backups/ghost_content_backup.tar.gz content/

Con Docker Compose, lo strumentario ufficiale conserva i contenuti in data/ghost. Il dump riprende la forma data dall'immagine MySQL, e la password root è già nel container. Conservate anche una copia di .env e del Caddyfile.

Terminale, Docker Compose
cd /opt/ghost
mkdir -p ~/ghost-backups
docker compose exec -T db sh -c 'exec mysqldump -uroot -p"$MYSQL_ROOT_PASSWORD" ghost' > ~/ghost-backups/ghost_backup.sql
tar czf ~/ghost-backups/ghost_content_backup.tar.gz data/ghost

Ripristinare

Terminale, Ghost-CLI
cd /var/www/sitename
ghost stop
mysql -u ghost_user -p ghost_production < ~/ghost-backups/ghost_backup.sql
tar xzf ~/ghost-backups/ghost_content_backup.tar.gz
sudo chown -R ghost:ghost content
ghost restart
Terminale, Docker Compose
cd /opt/ghost
docker compose stop ghost
docker compose exec -T db sh -c 'exec mysql -uroot -p"$MYSQL_ROOT_PASSWORD" ghost' < ~/ghost-backups/ghost_backup.sql
tar xzf ~/ghost-backups/ghost_content_backup.tar.gz
docker compose start ghost

Copiate questi file fuori dal server, con rsync o scp, e fate una prova di ripristino su una macchina di test. Se ripartite da un'esportazione con membri a pagamento, collegate lo stesso account Stripe prima di importare i vostri membri.

Aggiornare Ghost

Il progetto pubblica aggiornamenti ogni settimana e ricorda che un server web pubblico deve restare aggiornato. Leggete le note di rilascio, poi lanciate il comando del vostro metodo.

Con Ghost-CLI

Terminale, nella cartella del sito
ghost check-update
ghost backup
ghost update

Con Docker Compose

Terminale
cd /opt/ghost
git pull
docker compose pull
docker compose up -d
docker image prune

L'ultima riga, facoltativa, elimina le vecchie immagini. Lasciate GHOST_VERSION commentato nel .env: fissare una versione blocca questi comandi di aggiornamento.

Rafforzare e far crescere la vostra istanza

La documentazione indica diverse impostazioni per un server in produzione:

Per il carico, il progetto colloca una CDN e uno strato di cache davanti a Ghost. Precisa che il clustering e lo sharding non sono supportati: una sola istanza serve il sito, e la cache assorbe il traffico.

Chi fa che cosa su un VPS gestito

Il self-hosting richiede di occuparsi del server oltre che dell'applicazione. Su un VPS gestito, i nostri team prendono in carico il server e seguono la vostra istanza in modo proattivo; Ghost resta il vostro software, con le sue impostazioni e i suoi dati.

ArgomentoI nostri teamVoi
Il serverAggiornamenti del sistema e della sicurezza, interventi sul server compresiIl momento più adatto alla vostra attività
La supervisioneServer seguito 24 ore su 24, 7 giorni su 7, con intervento senza attendere la vostra chiamataI vostri contenuti, i vostri membri e i vostri abbonamenti
GhostMonitoraggio proattivo: errori, rallentamenti e spazio su disco individuati, correzione raccomandataLa sua installazione, i suoi aggiornamenti, le sue impostazioni, il suo relay SMTP e il suo account Mailgun, che applicate voi o il vostro assistente IA
I backupOgni notte, cifrati e conservati fuori dalla macchina; ripristino compresoLa richiesta di ripristino, quando ne avete bisogno
La migrazioneIl vostro server attuale migrato, in omaggioIl momento del passaggio

Se preferite che i nostri team intervengano nell'applicazione stessa, questa prestazione si fattura a ore o a forfait, con un preventivo comunicato prima dell'intervento.

Un server gestito per il vostro sito su Ghost

Con un VPS gestito Simafri, i nostri team tengono aggiornato il server della vostra istanza Ghost, lo sorvegliano giorno e notte e intervengono senza attendere la vostra chiamata; seguono anche la vostra istanza in modo proattivo e vi raccomandano le correzioni utili, che applicate voi o il vostro assistente IA. I backup sono cifrati ogni notte e conservati fuori dalla macchina, il loro ripristino è compreso e la migrazione del vostro server attuale è in omaggio.

Scoprire i VPS gestiti

Domande frequenti

Ghost è gratuito in self-hosting?

Sì. Ghost ha licenza MIT: potete usarlo in azienda e adattarlo, conservandone la nota di licenza. Restano i servizi che lo circondano: il server, il relay di e-mail, Mailgun se inviate newsletter, Tinybird se volete la sua analytics.

Quale configurazione serve per ospitare Ghost?

Il progetto raccomanda Ubuntu 22.04, 24.04 o 26.04, Nginx, Node.js 22, MySQL 8.0 o 8.4, systemd, almeno 1 GB di memoria, un dominio e un utente che non sia root. Per Docker Compose, cita come esempio un server da 2 GB e 1 processore.

Conviene installare Ghost con Ghost-CLI o con Docker?

Ghost-CLI è l'installazione che il progetto raccomanda per la produzione. Docker Compose è una preview, l'unica a consentire l'analytics web e ActivityPub in self-hosting, e il progetto dice di avanzare verso questo strumentario. Una procedura guidata permette di passare da Ghost-CLI a Docker Compose.

Ghost funziona con SQLite, MariaDB o PostgreSQL?

In produzione, MySQL 8 è l'unico database supportato. Il progetto raccomanda una reinstallazione su MySQL 8 da SQLite, e una migrazione a MySQL 8 da MariaDB. La sua documentazione non prevede PostgreSQL.

Si possono inviare le newsletter di Ghost in SMTP?

No. L'SMTP serve alle e-mail transazionali: inviti, password, link di accesso dei membri. Le newsletter richiedono l'API di Mailgun, unico servizio di invio massivo supportato. Senza invio di articoli per e-mail, non serve alcun account Mailgun.

Come fare il backup di un sito Ghost in self-hosting?

Per un ripristino completo, salvate il database MySQL con mysqldump e la cartella content con tar. Il comando ghost backup produce uno zip prima di un aggiornamento. L'esportazione dell'amministrazione lascia da parte i commenti, la cronologia di attività dei membri e i media.

Come aggiornare Ghost?

Con Ghost-CLI, lanciate ghost backup poi ghost update nella cartella del sito, e ghost update --rollback in caso di problemi. Con Docker Compose, lanciate git pull, docker compose pull e docker compose up -d in /opt/ghost.

Un VPS gestito copre Ghost?

Un VPS gestito copre il server: sistema, sicurezza, supervisione e backup. I nostri team seguono anche la vostra istanza in modo proattivo e vi raccomandano le correzioni utili, che applicate voi. Un intervento nell'applicazione si fattura a ore o a forfait.

Contattaci