Hospedar o Ghost em um VPS gerenciado é publicar seus artigos, reunir seus membros e enviar suas newsletters a partir de uma máquina própria, que nossas equipes mantêm atualizada e supervisionam dia e noite. O Ghost é um software livre sob a licença MIT. Este guia segue a documentação oficial dele: Ghost-CLI ou Docker Compose, MySQL, HTTPS, os e-mails, os backups e as atualizações.
Por Simon Vasconcelos Lee
Publicado em 9 de novembro de 2026Leitura: 13 minutos
content e atualize com ghost update ou docker compose pull: o projeto publica atualizações toda semana.O Ghost é uma plataforma de publicação profissional e livre, escrita para Node.js. Ela reúne em um só lugar o que uma publicação independente costuma montar a partir de várias ferramentas.
Segundo a documentação, o produto tem as mesmas funções na auto-hospedagem. O que o cerca fica por sua conta: o envio das newsletters, a análise de audiência web, um CDN e os backups completos do site.
O Ghost é publicado sob a licença MIT. Ela autoriza usar, copiar, modificar, mesclar, publicar, distribuir, sublicenciar e vender o software, com uma condição: manter o aviso de copyright e o texto da licença em toda cópia. Você pode, portanto, rodar o Ghost em uma empresa, adaptá-lo e publicar com ele para seus clientes, sem licença a comprar.
A licença cobre o código. O nome e o logotipo pertencem à Ghost Foundation e dependem da política de marca dela: leia-a se você constrói uma oferta em torno do software. Ghost é uma marca registrada da Ghost Foundation.
This publication is independent of and not affiliated with, authorized, sponsored, or approved by Ghost Foundation. Em português: esta publicação é independente da Ghost Foundation e não é afiliada a ela, nem autorizada, patrocinada ou aprovada por ela.
O projeto documenta dois caminhos para a produção. O Ghost-CLI é a instalação que ele recomenda oficialmente, e o Docker Compose é uma “preview”, que ele diz ser novíssima. Ele também indica avançar rumo a essa ferramenta Docker, e não fazer o Ghost-CLI evoluir, e fornece um assistente para passar de um ao outro.
| Ponto | Ghost-CLI | Docker Compose (preview) |
|---|---|---|
| Sistema | Ubuntu 22.04, 24.04 ou 26.04 | Um servidor Linux com Docker 20.10.13 ou mais recente |
| Memória | Pelo menos 1 GB | O projeto cita como exemplo um servidor de 2 GB e 1 processador |
| Servidor web e HTTPS | Nginx e um certificado Let’s Encrypt, instalados pelo Ghost-CLI | Caddy, em um contêiner, que cuida do TLS |
| Banco de dados | MySQL 8.0 ou 8.4 instalado no servidor | MySQL em um contêiner |
| Análise de audiência web | Não compatível | Disponível, com uma conta Tinybird |
| Rede social (ActivityPub) | O serviço hospedado pelo projeto, gratuito dentro dos limites de uso | O mesmo serviço por padrão, ou um serviço próprio, auto-hospedado |
Aponte o domínio para o servidor antes da instalação: o certificado é instalado durante a implantação. Em um VPS Simafri, os visitantes chegam pelas portas 80 e 443, sob o nome de domínio do servidor, com registros A e AAAA. O endereço do site é escrito por inteiro, com o protocolo, como https://example.com: um endereço IP provoca erros.
Além da memória indicada acima, o projeto não informa números de disco nem de carga: o tamanho depende de seu tráfego, de suas imagens e de suas mídias. Em um VPS gerenciado, descreva sua publicação e recomendamos o tamanho adequado.
O Ghost-CLI é usado com um usuário que não seja root e cujo nome não seja ghost, pois esse nome entra em conflito com a ferramenta. Crie-o a partir da conta root, trocando user pelo nome escolhido:
adduser <user>
usermod -aG sudo <user>
su - <user>
Atualize o sistema e instale o Nginx (1.9.5 no mínimo para SSL) e o MySQL. A linha ufw abre HTTP e HTTPS se esse firewall estiver ativo:
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install nginx
sudo ufw allow 'Nginx Full'
sudo apt-get install mysql-server
Nas versões recentes do Ubuntu, a conta root do MySQL se autentica por socket, o que o Ghost não suporta. Dê a ela uma senha:
sudo mysql
ALTER USER 'root'@'localhost' IDENTIFIED WITH 'caching_sha2_password' BY '<your-new-root-password>';
FLUSH PRIVILEGES;
exit
O Ghost exige o Node.js 22: as versões 20, 21, 23 e seguintes não são suportadas. O projeto pede para instalá-lo para todo o sistema, desta forma:
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
O Ghost é instalado em uma pasta própria, com um proprietário e direitos precisos. Troque sitename pelo nome que preferir:
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
O comando faz então suas perguntas, e o projeto recomenda responder sim a cada etapa proposta:
https://.localhost para o host, root e a senha definida acima, depois o nome do banco, que o Ghost-CLI cria.O site passa então a responder, e https://example.com/ghost convida você a criar a conta do proprietário. Se a instalação for interrompida, ghost setup retoma a configuração; se falhar, ghost uninstall limpa melhor do que excluir a pasta. ghost doctor verifica o sistema a qualquer momento.
O projeto apresenta esse método como uma “preview”: para ele, é novíssimo. É ele que permite auto-hospedar a análise de audiência web e o ActivityPub.
Em um servidor com o Docker instalado, baixe a ferramenta oficial em /opt/ghost e copie os dois arquivos de exemplo dela:
git clone https://github.com/TryGhost/ghost-docker.git /opt/ghost && cd /opt/ghost
cp .env.example .env
cp caddy/Caddyfile.example caddy/Caddyfile
No arquivo .env, preencha estes valores:
DOMAIN: o domínio do site, por exemplo example.com.ADMIN_DOMAIN: um domínio separado para a administração, se você quiser.DATABASE_ROOT_PASSWORD e DATABASE_PASSWORD: duas senhas geradas com openssl rand -hex 32. Elas são definidas de uma vez por todas: com o banco já inicializado, mudá-las quebra a conexão.No caddy/Caddyfile, descomente o bloco que corresponde a seu caso: redirecionamento de www para o domínio sem prefixo, ou o inverso, ou domínio de administração separado. Inicie então o Ghost e conclua a configuração em /ghost:
docker compose pull
docker compose up -d
HTTP_PORT e HTTPS_PORT se o Ghost passar atrás de outro proxy reverso. O MySQL permanece na rede interna dos contêineres.data/ghost e o banco em data/mysql, dois locais ajustáveis no .env.-f compose.yml -f compose.ipv6.yml a seus comandos docker compose up.A análise de audiência exige uma conta Tinybird, serviço externo. A partir de /opt/ghost, conecte-se, implante a configuração dela e obtenha os tokens para colar no .env, seção “Tinybird configuration”:
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
O ActivityPub funciona de imediato com o serviço hospedado pelo projeto, gratuito dentro de limites de uso que a documentação dele publica. Para auto-hospedar um serviço próprio, descomente ACTIVITYPUB_TARGET=activitypub:8080. Ative então no .env o perfil ou os perfis desejados e reinicie os contêineres:
COMPOSE_PROFILES=analytics,activitypub
docker compose pull
docker compose up -d
Para o ActivityPub, o projeto pede para recriar também o Ghost e o Caddy, com docker compose up -d --force-recreate ghost caddy.
Depois da clonagem e da configuração, bash scripts/migrate.sh copia a pasta content, importa o banco no contêiner MySQL e inicia o Caddy no lugar do Nginx. Ele propõe parar o Nginx, o que deixa o site fora do ar: responda não se outros sites rodam no servidor. Ele não exclui nenhum dado. bash recovery_instructions.sh restabelece o site original se você interromper a migração.
A administração do Ghost deve passar por HTTPS, e o projeto recomenda HTTPS para todo o site: sem ele, logins e senhas circulam em texto puro. Com o Docker Compose, o Caddy cuida disso. Com o Ghost-CLI, a instalação define o certificado, e um comando faz isso depois:
ghost setup ssl
Para mudar o endereço de um site instalado com o Ghost-CLI, ghost config url https://example.com atualiza a configuração, e ghost restart a aplica.
O projeto também aconselha um domínio de administração separado, que reduz a superfície de ataque. O caminho continua sendo /ghost/. No Ghost-CLI, ele é declarado no config.production.json:
"admin": {
"url": "https://admin.example.com"
}
No Docker Compose, preencha ADMIN_DOMAIN, descomente o bloco dele no Caddyfile e execute docker compose up -d --force-recreate ghost caddy. Esse domínio também precisa dos registros A e AAAA dele.
O MySQL 8 é o único banco que o projeto suporta em produção. O Ghost-CLI é instalado com o MySQL 8.0 ou 8.4, e o arquivo Compose fornece uma imagem MySQL 8.0.
ghost config database.client, na pasta do site, indica o banco em uso.O Ghost distingue dois envios, que não passam pelo mesmo caminho. É o ponto mais importante a configurar depois da instalação.
| Envio | Exemplos | O que o sustenta |
|---|---|---|
| Transacional | Convites da equipe, senhas esquecidas, cadastros e links de login dos membros, código de login a partir de um novo dispositivo | A configuração mail do Ghost, em SMTP |
| Newsletters | Os artigos enviados a seus membros | A API do Mailgun, cujas chaves são informadas nas configurações “Email newsletter” |
A documentação classifica essa configuração como obrigatória em produção. O Ghost também envia um código por e-mail quando detecta um login a partir de um novo dispositivo: configure esse relay antes de convidar sua equipe.
Em um VPS Simafri, o envio passa por um relay SMTP autenticado, na porta 587: o endereço de uma conta de e-mail que você já tem, ou o Simafri Suite.
"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"
}
}
}
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>"
docker compose up -d --force-recreate ghost
secure e requireTLS: o Ghost envia pelo Nodemailer, cuja documentação pede secure em false na porta 587, com a conexão passando depois para STARTTLS. requireTLS recusa o envio se essa passagem falhar. O arquivo de exemplo do repositório indica a porta 465 e secure=true: troque essas duas linhas.from traz um endereço real e lido, o que melhora a entregabilidade segundo o projeto, e os registros SPF, DKIM e DMARC do domínio de envio completam a configuração.O relay SMTP não cobre as newsletters. Segundo a documentação, o envio em massa não é feito por SMTP e o Mailgun é, até hoje, o único serviço de envio em massa que o Ghost suporta. Você cria sua conta Mailgun e informa as chaves de API dela nas configurações do Ghost.
Se você não envia seus artigos por e-mail, não precisa de nenhuma conta Mailgun: essas configurações são ignoradas. Se preferir outra ferramenta de newsletter, o projeto propõe sincronizar seus membros com ela, por exemplo com o Zapier ou com os guias de integração dele.
O Ghost oferece três níveis de cópia, e eles não contêm a mesma coisa. Para reconstruir um site idêntico, o projeto pede para fazer backup diretamente do banco e da pasta content.
| Método | O que ele contém | Para qual uso |
|---|---|---|
ghost backup (Ghost-CLI) | Um zip: conteúdos em JSON, membros em CSV, temas, imagens, arquivos e mídias, rotas e redirecionamentos | A precaução antes de uma atualização |
| Exportação pela administração | Um zip: conteúdos e configurações, membros, estatísticas dos artigos, temas, rotas e redirecionamentos, à escolha. Nem comentários, nem histórico de atividade dos membros, nem mídias | A mudança do conteúdo para outro site |
Banco e pasta content | A totalidade dos dados | A recuperação após um desastre, ou uma cópia exata |
A exportação fica em “Settings”, “Advanced”, “Import/Export”, aba “Export”, botão “All data”. Para a cópia completa, com o Ghost-CLI, a conta MySQL e o nome do banco a reproduzir estão no config.production.json:
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/
Com o Docker Compose, a ferramenta oficial guarda o conteúdo em data/ghost. O dump segue a forma dada pela imagem MySQL, e a senha root já está no contêiner. Guarde também uma cópia do .env e do Caddyfile.
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
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
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
Copie esses arquivos para fora do servidor, com rsync ou scp, e faça um teste de restauração em uma máquina de teste. Se você recomeçar a partir de uma exportação com membros pagantes, conecte a mesma conta Stripe antes de importar seus membros.
O projeto publica atualizações toda semana e lembra que um servidor web público deve se manter atualizado. Leia as notas de versão e execute o comando do método escolhido.
ghost check-update
ghost backup
ghost update
ghost update --rollback volta à versão anterior se uma atualização der errado.content continua no lugar durante as atualizações.ghost update [version] --force com sua versão atual, pois as dependências binárias dele são compiladas para uma versão precisa do Node.js.cd /opt/ghost
git pull
docker compose pull
docker compose up -d
docker image prune
A última linha, opcional, remove as imagens antigas. Deixe GHOST_VERSION comentado no .env: fixar uma versão bloqueia esses comandos de atualização.
A documentação dá várias configurações para um servidor em produção:
mysql_secure_installation depois de uma instalação bem-sucedida do Ghost-CLI.Para a carga, o projeto coloca um CDN e uma camada de cache na frente do Ghost. Ele esclarece que o clustering e o sharding não são suportados: uma única instância serve o site, e o cache absorve o tráfego.
A auto-hospedagem exige cuidar do servidor além da aplicação. Em um VPS gerenciado, nossas equipes assumem o servidor e acompanham sua instância de forma proativa; o Ghost continua sendo seu software, com as configurações e os dados dele.
| Assunto | Nossas equipes | Você |
|---|---|---|
| O servidor | Atualizações do sistema e de segurança, com intervenções no servidor incluídas | O momento que convém a sua atividade |
| A supervisão | Servidor acompanhado 24 horas por dia, 7 dias por semana, com intervenção sem esperar sua ligação | Seus conteúdos, seus membros e suas assinaturas |
| Ghost | Acompanhamento proativo: erros, lentidões e espaço em disco identificados, correção recomendada | A instalação, as atualizações, as configurações, o relay SMTP e a conta Mailgun dele, que você aplica, por conta própria ou com seu assistente de IA |
| Os backups | Toda noite, criptografados e guardados fora da máquina; restauração incluída | O pedido de restauração, quando você precisar |
| A migração | Seu servidor atual migrado, grátis | O momento da virada |
Se você preferir que nossas equipes intervenham na própria aplicação, esse serviço é cobrado por hora ou por valor fechado, com o orçamento informado antes da intervenção.
Com um VPS gerenciado Simafri, nossas equipes mantêm atualizado o servidor de sua instância Ghost, monitoram-no dia e noite e intervêm sem esperar sua ligação; elas também acompanham sua instância de forma proativa e recomendam as correções úteis, que você aplica por conta própria ou com seu assistente de IA. Os backups são criptografados todas as noites e guardados fora da máquina, a restauração está incluída, e a migração de seu servidor atual é grátis.
Sim. O Ghost está sob a licença MIT: você pode usá-lo em uma empresa e adaptá-lo, mantendo o aviso de licença. Restam os serviços ao redor dele: o servidor, o relay de e-mails, o Mailgun se você envia newsletters, o Tinybird se quiser a análise de audiência dele.
O projeto recomenda Ubuntu 22.04, 24.04 ou 26.04, Nginx, Node.js 22, MySQL 8.0 ou 8.4, systemd, pelo menos 1 GB de memória, um domínio e um usuário que não seja root. Para o Docker Compose, ele cita como exemplo um servidor de 2 GB e 1 processador.
O Ghost-CLI é a instalação que o projeto recomenda para a produção. O Docker Compose é uma preview, a única que permite a análise de audiência web e o ActivityPub auto-hospedado, e o projeto diz avançar rumo a essa ferramenta. Um assistente permite passar do Ghost-CLI para o Docker Compose.
Em produção, o MySQL 8 é o único banco suportado. O projeto recomenda uma reinstalação no MySQL 8 a partir do SQLite e uma migração para o MySQL 8 a partir do MariaDB. A documentação dele não prevê o PostgreSQL.
Não. O SMTP serve aos e-mails transacionais: convites, senhas, links de login dos membros. As newsletters exigem a API do Mailgun, único serviço de envio em massa suportado. Sem envio de artigos por e-mail, nenhuma conta Mailgun é necessária.
Para uma recuperação completa, faça backup do banco MySQL com mysqldump e da pasta content com tar. O comando ghost backup gera um zip antes de uma atualização. A exportação da administração deixa de lado os comentários, o histórico de atividade dos membros e as mídias.
Com o Ghost-CLI, execute ghost backup e depois ghost update na pasta do site, e ghost update --rollback em caso de problema. Com o Docker Compose, execute git pull, docker compose pull e docker compose up -d em /opt/ghost.
Um VPS gerenciado cobre o servidor: sistema, segurança, supervisão e backups. Nossas equipes também acompanham sua instância de forma proativa e recomendam as correções úteis, que você aplica. Uma intervenção na aplicação é cobrada por hora ou por valor fechado.
Simafri
Vamos falar de seu site
Conte para a gente sobre seu projeto em poucas palavras: responderemos rapidamente.
Obrigado! O seu pedido foi enviado. Responderemos em breve.
Prefere o e-mail? Escreva para a gente em support@simafri.com.