1000 FAQ, 500 tutorial e video esplicativi. Qui ci sono delle soluzioni!
Installare Ghost su un hosting Infomaniak
Questa guida ti accompagna nell'installazione su Infomaniak di Ghost, una piattaforma ideale per i blog (scrittura regolare, formato editoriale) e i siti di pubblicazione incentrati sul contenuto, come Substack o Medium.
Basato su Node.js e che utilizza Markdown per la stesura, Ghost si distingue per la sua leggerezza, mentre WordPress, pur essendo più flessibile e universale, rimane più pesante.
Per ulteriori assistenze contatta un partner o lancia gratuitamente una richiesta di offerta — scopri anche il ruolo dell'hosting provider.
Prerequisiti
- Avere installato un sito vuoto di tipo Node.js su un hosting web Infomaniak.
- Creare un accesso SSH.
- Creare un database.
- Possedere un indirizzo email valido e funzionante (in particolare le funzionalità di recupero password).
- Arresta la tua applicazione Node.JS prima di eseguire i passaggi successivi!
Installazione di Ghost
Per fare questo:
- Connetterti al server tramite SSH (hai bisogno di aiuto?).
Clona ed esegui lo script di installazione (esegui questi comandi uno alla volta):
git clone https://github.com/Infomaniak/hosting-tools.git cd hosting-tools/h3-ghost bash ./install.sh
Lo script ora:
- Ti farà alcune domande (come l'URL del tuo sito, le informazioni del database, ecc.)…
- Scaricherà e configurerà automaticamente Ghost…
- Impiegherà alcuni minuti — sii paziente!
Rispondi alle domande con attenzione utilizzando i dettagli del database che hai annotato in precedenza. Non chiudere il terminale finché non ha finito!
Configura il tuo hosting (tramite il pannello Infomaniak)
Una volta terminato lo script, vai nel tuo Pannello di controllo Infomaniak:
- Clicca qui per accedere alla gestione del tuo prodotto sul Manager Infomaniak (hai bisogno di aiuto?).
- Clicca direttamente sul nome attribuito al prodotto interessato.
- Clicca su Gestisci sotto Impostazioni avanzate:
- Clicca sulla scheda Node.js per accedere alle impostazioni.
Nel campo di esecuzione del comando, inserisci:
/srv/customer/node_modules/ghost-cli/bin/ghost run
- Verifica che il numero di porta sia
3000
. - Casella di comando di build : disattivala.
- Clicca sul pulsante Salva in fondo alla pagina:
- Nella pagina principale, clicca sul pulsante Start (o Restart se già in esecuzione).
- Osserva i log che mostrano la creazione del database e l'avvio dell'applicazione:
Fatto! Accedi al tuo blog Ghost
Successivamente, vai all'URL del tuo sito per iniziare:
- Apri il tuo browser e vai a
https://iltuosito.com/ghost
(sostituisciiltuosito.com
con il tuo dominio attuale). - La prima volta:
- Crea un account amministratore (il tuo identificativo per il blog)…
- Poi, potrai iniziare a scrivere articoli!
Configurazione degli utenti / email
Per creare il primo utente, aggiungi /ghost
all'URL del tuo sito (ad esempio https://ghost.domain.xyz/ghost
) e segui la guida.
È possibile configurare anche l'indirizzo di supporto del portale dei membri: quando nuovi membri desiderano iscriversi, il portale invia la conferma del doppio opt-in da un indirizzo specifico. Per impostazione predefinita, si tratta dell'indirizzo “noreply” del tuo dominio. Per aggiornarlo, vai su “Impostazioni”, “Iscrizione”, “Impostazioni del portale”, “Personalizza” e “Pagina dell'account”:
Risolvere un'incompatibilità tecnica tra Ghost e MariaDB
Esiste un problema di compatibilità tra Ghost e il database MariaDB. Ne consegue questo tipo di errore:
[2025-01-01 12:54:28] ERROR "GET /ghost/api/admin/posts/6834625e35802b06f1496305/?formats=mobiledoc%2Clexical&include=tags%2Cauthors%2Cauthors.roles%2Cemail%2Ctiers%2Cnewsletter%2Ccount.conversions%2Ccount.clicks%2Csentiment%2Ccount.positive_feedback%2Ccount.negative_feedback" 400 27ms
Could not understand request.
Error ID:
8f2b0d90-3a30-11f0-a25f-fd9c83e1cf02
Error Code:
ER_BAD_FIELD_ERROR
----------------------------------------
Error: select `posts`.*, (with `k` as (select `member_id` from `members_subscription_created_events` where posts.id = members_subscription_created_events.attribution_id union select `member_id` from `members_created_events` where posts.id = members_created_events.attribution_id) select count(*) from `k`) as `count__conversions`, `posts`.*, (select count(distinct `members_click_events`.`member_id`) from `members_click_events` inner join `redirects` on `members_click_events`.`redirect_id` = `redirects`.`id` where posts.id = redirects.post_id) as `count__clicks`, `posts`.*, (select COALESCE(ROUND(AVG(score) * 100), 0) from `members_feedback` where posts.id = members_feedback.post_id) as `count__sentiment`, `posts`.*, (select count(*) from `members_feedback` where posts.id = members_feedback.post_id AND members_feedback.score = 0) as `count__negative_feedback`, `posts`.*, (select sum(`score`) from `members_feedback` where posts.id = members_feedback.post_id) as `count__positive_feedback` from `posts` where (`posts`.`type` = 'post' and `posts`.`status` in ('draft', 'published', 'scheduled', 'sent')) and `posts`.`id` = '2834125e33802b06e1433305' limit 1 - Unknown column 'posts.id' in 'where clause'
at Child.<anonymous> (/srv/customer/sites/ghost.domain.xyz/versions/5.120.2/core/server/models/base/plugins/crud.js:194:31)
at Packet.asError (/srv/customer/sites//versions/5.120.2/node_modules/mysql2/lib/packets/packet.js:740:17)
at Query.execute (/srv/customer/sites//versions/5.120.2/node_modules/mysql2/lib/commands/command.js:29:26)
at Connection.handlePacket (/srv/customer/sites//versions/5.120.2/node_modules/mysql2/lib/base/connection.js:475:34)
at PacketParser.onPacket (/srv/customer/sites//versions/5.120.2/node_modules/mysql2/lib/base/connection.js:93:12)
at PacketParser.executeStart (/srv/customer/sites//versions/5.120.2/node_modules/mysql2/lib/packet_parser.js:75:16)
at Socket.<anonymous> (/srv/customer/sites//versions/5.120.2/node_modules/mysql2/lib/base/connection.js:100:25)
at Socket.emit (node:events:518:28)
at addChunk (node:internal/streams/readable:561:12)
at readableAddChunkPushByteMode (node:internal/streams/readable:512:3)
at Readable.push (node:internal/streams/readable:392:5)
at TCP.onStreamRead (node:internal/stream_base_commons:189:23)
Alcune richieste SQL generate da Ghost, che utilizzano espressioni di tabella comuni (CTE) annidate in sotto-queries scalari, provocano errori HTTP 400
quando vengono eseguite su MariaDB. Queste richieste sono valide in MySQL 8, che supporta i CTE nelle sotto-queries scalari, ma non in MariaDB fino alla versione 10.6.
Una correzione esiste per adattare il comportamento di Ghost e evitare questi errori (prendi visione della guida ufficiale).
Per utilizzare questa patch, inserisci questo comando:
cd current
curl -L https://gist.githubusercontent.com/reneluria/8cbbfbc001e542c77d6d5887fbafe5d3/raw/65e0ce31753b4687d0eb67fc030734a35d3ffbad/ghost-post.patch | patch -p0