Alojar Ghost num VPS gerido é publicar os seus artigos, reunir os seus membros e enviar as suas newsletters a partir de uma máquina sua, que as nossas equipas mantêm atualizada e supervisionam dia e noite. O Ghost é um software livre sob licença MIT. Este guia segue a sua documentação oficial: Ghost-CLI ou Docker Compose, MySQL, HTTPS, os e-mails, as cópias de segurança e as atualizações.
Por Simon Vasconcelos Lee
Publicado a 9 de novembro de 2026Leitura: 13 minutos
content e atualize com ghost update ou docker compose pull: o projeto publica atualizações todas as semanas.O Ghost é uma plataforma de publicação profissional e livre, escrita para Node.js. Reúne no mesmo lugar o que uma publicação independente costuma montar a partir de várias ferramentas.
Segundo a documentação, o produto tem as mesmas funcionalidades em autoalojamento. O que o rodeia fica por sua conta: o envio das newsletters, a análise web, uma CDN e as cópias de segurança completas do site.
O Ghost é publicado sob a licença MIT. Autoriza a utilizar, copiar, modificar, fundir, publicar, distribuir, sublicenciar e vender o software, com uma condição: manter a menção de direitos de autor e o texto da licença em qualquer cópia. Pode, portanto, fazer correr o Ghost numa empresa, adaptá-lo e publicar nele para os seus clientes, sem licença para comprar.
A licença cobre o código. O nome e o logótipo pertencem à Ghost Foundation e dependem da sua política de marcas: leia-a se construir uma oferta em torno do software. Ghost é uma marca registada 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, autorizada, patrocinada nem aprovada por ela.
O projeto documenta dois caminhos para a produção. O Ghost-CLI é a instalação que recomenda oficialmente, e o Docker Compose é uma «preview», que diz ser muito recente. Indica também avançar para essas ferramentas Docker em vez de fazer evoluir o Ghost-CLI, 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 o 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, num contentor, que trata do TLS |
| Base de dados | MySQL 8.0 ou 8.4 instalado no servidor | MySQL num contentor |
| Análise web | Não compatível | Disponível, com uma conta Tinybird |
| Rede social (ActivityPub) | O serviço alojado pelo projeto, gratuito dentro dos seus limites de utilização | O mesmo serviço por predefinição, ou o seu, autoalojado |
Faça o domínio apontar para o servidor antes da instalação: o certificado instala-se durante a configuração. Num VPS Simafri, os visitantes chegam pelas portas 80 e 443, sob o nome de domínio do servidor, com registos A e AAAA. O endereço do site escreve-se por inteiro, com o seu protocolo, como https://example.com: um endereço IP provoca erros.
Para lá da memória indicada acima, o projeto não quantifica nem o disco nem a carga: o tamanho depende do seu tráfego, das suas imagens e dos seus multimédia. Num VPS gerido, descreva-nos a sua publicação e recomendamos-lhe o tamanho adequado.
O Ghost-CLI utiliza-se com um utilizador que não seja root e cujo nome não seja ghost, porque esse nome entra em conflito com a ferramenta. Crie-o a partir da conta root, substituindo user pelo nome escolhido:
adduser <user>
usermod -aG sudo <user>
su - <user>
Atualize o sistema, instale o Nginx (1.9.5 no mínimo para SSL) e o MySQL. A linha ufw abre o HTTP e o HTTPS se esta firewall estiver ativa:
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 autentica-se por socket, o que o Ghost não suporta. Dê-lhe uma palavra-passe:
sudo mysql
ALTER USER 'root'@'localhost' IDENTIFIED WITH 'caching_sha2_password' BY '<your-new-root-password>';
FLUSH PRIVILEGES;
exit
O Ghost pede o Node.js 22: as versões 20, 21, 23 e seguintes não são suportadas. O projeto pede para o instalar 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 instala-se na sua própria pasta, com um proprietário e direitos precisos. Substitua sitename pelo nome da sua escolha:
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 as suas perguntas, e o projeto recomenda responder sim a cada passo proposto:
https://.localhost para o anfitrião, root e a palavra-passe definida acima, depois o nome da base de dados, que o Ghost-CLI cria.O site responde então, e https://example.com/ghost convida-o 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 a eliminação da pasta. ghost doctor verifica o sistema a qualquer momento.
O projeto apresenta este método como uma «preview»: é muito recente para ele. É ele que permite autoalojar a análise web e o ActivityPub.
Num servidor com o Docker instalado, obtenha as ferramentas oficiais em /opt/ghost e copie os seus dois ficheiros de exemplo:
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 ficheiro .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 assim o desejar.DATABASE_ROOT_PASSWORD e DATABASE_PASSWORD: duas palavras-passe geradas com openssl rand -hex 32. Fixam-se de uma vez por todas: depois de a base de dados inicializada, mudá-las quebra a ligação.Em caddy/Caddyfile, descomente o bloco que corresponde ao seu caso: redirecionamento de www para o domínio sem prefixo, ou o contrário, ou domínio de administração separado. Lance depois o Ghost e termine a configuração em /ghost:
docker compose pull
docker compose up -d
HTTP_PORT e HTTPS_PORT se o Ghost passar para trás de outro proxy inverso. O MySQL fica na rede interna dos contentores.data/ghost e a base de dados em data/mysql, duas localizações ajustáveis no .env.-f compose.yml -f compose.ipv6.yml aos seus comandos docker compose up.A análise exige uma conta Tinybird, serviço externo. A partir de /opt/ghost, inicie sessão, implemente a sua configuração e obtenha os tokens a colar no .env, secçã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 logo com o serviço alojado pelo projeto, gratuito dentro de limites de utilização que a sua documentação publica. Para autoalojar o seu, descomente ACTIVITYPUB_TARGET=activitypub:8080. Ative depois no .env o ou os perfis pretendidos e reinicie os contentores:
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 a base de dados para o contentor MySQL e arranca o Caddy no lugar do Nginx. Propõe parar o Nginx, o que coloca o site fora de linha: responda não se houver outros sites a correr no servidor. Não elimina nenhum dado. bash recovery_instructions.sh restabelece o site de origem se interromper a migração.
A administração do Ghost deve passar por HTTPS, e o projeto recomenda o HTTPS para todo o site: sem ele, credenciais e palavras-passe circulam em claro. Com o Docker Compose, o Caddy trata disso. Com o Ghost-CLI, a instalação instala o certificado, e um comando fá-lo 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 aplica-a.
O projeto aconselha também um domínio de administração separado, que reduz a superfície de ataque. O caminho continua a ser /ghost/. Do lado do Ghost-CLI, declara-se em config.production.json:
"admin": {
"url": "https://admin.example.com"
}
Do lado do Docker Compose, preencha ADMIN_DOMAIN, descomente o seu bloco no Caddyfile e execute docker compose up -d --force-recreate ghost caddy. Este domínio precisa também dos seus registos A e AAAA.
O MySQL 8 é a única base de dados que o projeto suporta em produção. O Ghost-CLI instala-se com o MySQL 8.0 ou 8.4, e o ficheiro Compose fornece uma imagem MySQL 8.0.
ghost config database.client, na pasta do site, indica a base de dados utilizada.O Ghost distingue dois envios, que não passam pelo mesmo caminho. É o ponto mais importante a acertar depois da instalação.
| Envio | Exemplos | O que o suporta |
|---|---|---|
| Transacional | Convites da equipa, palavras-passe esquecidas, inscrições e ligações de início de sessão dos membros, código de início de sessão a partir de um novo dispositivo | A configuração mail do Ghost, em SMTP |
| Newsletters | Os artigos enviados aos seus membros | A API do Mailgun, cujas chaves se introduzem nas definições «Email newsletter» |
A documentação classifica esta configuração como requerida em produção. O Ghost envia também um código por e-mail quando deteta um início de sessão a partir de um novo dispositivo: configure esta retransmissão antes de convidar a sua equipa.
Num VPS Simafri, o envio passa por uma retransmissão SMTP autenticada, na porta 587: o endereço de uma conta de correio que já tenha, 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 a false na porta 587, passando a ligação depois a STARTTLS. requireTLS recusa o envio se essa passagem falhar. O ficheiro de exemplo do repositório indica a porta 465 e secure=true: substitua estas duas linhas.from contém um endereço real e lido, o que melhora a entregabilidade segundo o projeto, e os registos SPF, DKIM e DMARC do domínio de envio completam a configuração.A retransmissão SMTP não cobre as newsletters. Segundo a documentação, o envio em massa não se faz em SMTP e o Mailgun é, atualmente, o único serviço de envio em massa que o Ghost suporta. Crie a sua conta Mailgun e introduza as respetivas chaves de API nas definições do Ghost.
Se não enviar os seus artigos por e-mail, não precisa de nenhuma conta Mailgun: estas definições ignoram-se. Se preferir outra ferramenta de newsletter, o projeto propõe sincronizar os seus membros com ela, por exemplo com o Zapier ou com os seus guias de integração.
O Ghost propõe três níveis de cópia, e não contêm a mesma coisa. Para reconstruir um site de forma idêntica, o projeto pede para copiar diretamente a base de dados e a pasta content.
| Método | O que contém | Para que uso |
|---|---|---|
ghost backup (Ghost-CLI) | Um zip: conteúdos em JSON, membros em CSV, temas, imagens, ficheiros e multimédia, rotas e redirecionamentos | A precaução antes de uma atualização |
| Exportação a partir da administração | Um zip: conteúdos e definições, membros, estatísticas dos artigos, temas, rotas e redirecionamentos, à escolha. Nem comentários, nem histórico de atividade dos membros, nem multimédia | A transferência do conteúdo para outro site |
Base de dados e pasta content | A totalidade dos dados | A recuperação após um desastre, ou uma cópia exata |
A exportação encontra-se em «Settings», «Advanced», «Import/Export», separador «Export», botão «All data». Para a cópia completa, com o Ghost-CLI, a conta MySQL e o nome da base de dados a indicar estão em 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, as ferramentas oficiais guardam o conteúdo em data/ghost. O dump retoma a forma dada pela imagem MySQL, e a palavra-passe root já está no contentor. 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 estes ficheiros para fora do servidor, com rsync ou scp, e faça um teste de restauro numa máquina de ensaio. Se recomeçar a partir de uma exportação com membros pagos, ligue a mesma conta Stripe antes de importar os seus membros.
O projeto publica atualizações todas as semanas e lembra que um servidor web público deve manter-se atualizado. Leia as notas de versão e execute depois o comando do seu método.
ghost check-update
ghost backup
ghost update
ghost update --rollback volta à versão anterior se uma atualização correr mal.content mantém-se no lugar durante as atualizações.ghost update [version] --force com a sua versão atual, porque as suas dependências binárias 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, facultativa, retira as imagens antigas. Deixe GHOST_VERSION em comentário no .env: fixar uma versão bloqueia estes comandos de atualização.
A documentação dá várias definições para um servidor em produção:
mysql_secure_installation depois de uma instalação Ghost-CLI bem-sucedida.Para a carga, o projeto coloca uma CDN e uma camada de cache à frente do Ghost. Esclarece que o clustering e o sharding não são suportados: uma única instância serve o site, e a cache absorve o tráfego.
O autoalojamento exige cuidar do servidor para além da aplicação. Num VPS gerido, as nossas equipas assumem o servidor e acompanham a sua instância de forma proativa; o Ghost continua a ser o seu software, com as suas definições e os seus dados.
| Assunto | As nossas equipas | Você |
|---|---|---|
| O servidor | Atualizações do sistema e de segurança, intervenções no servidor incluídas | O momento que convém à sua atividade |
| A supervisão | Servidor acompanhado 24 horas por dia, 7 dias por semana, com intervenção sem esperar pela sua chamada | Os seus conteúdos, os seus membros e as suas subscrições |
| Ghost | Acompanhamento proativo: erros, lentidão e espaço em disco identificados, correção recomendada | A sua instalação, as suas atualizações, as suas definições, a sua retransmissão SMTP e a sua conta Mailgun, que aplica diretamente ou com o seu assistente de IA |
| As cópias de segurança | Todas as noites, cifradas e guardadas fora da máquina; restauro incluído | O pedido de restauro, quando precisar |
| A migração | O seu servidor atual migrado, oferecido | O momento da mudança |
Se preferir que as nossas equipas intervenham na própria aplicação, este serviço é faturado à hora ou por pacote, com um orçamento comunicado antes da intervenção.
Com um VPS gerido da Simafri, as nossas equipas mantêm atualizado o servidor da sua instância Ghost, vigiam-no dia e noite e intervêm sem esperar pela sua chamada; acompanham também a sua instância de forma proativa e recomendam-lhe as correções úteis, que aplica diretamente ou com o seu assistente de IA. As cópias de segurança são cifradas todas as noites e guardadas fora da máquina, o seu restauro está incluído, e a migração do seu servidor atual é oferecida.
Sim. O Ghost está sob licença MIT: pode utilizá-lo numa empresa e adaptá-lo, mantendo a menção da licença. Restam os serviços à sua volta: o servidor, a retransmissão de e-mails, o Mailgun se enviar newsletters, o Tinybird se quiser a sua análise.
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 utilizador que não seja root. Para o Docker Compose, 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 a permitir a análise web e o ActivityPub autoalojado, e o projeto diz avançar para essas ferramentas. Um assistente permite passar do Ghost-CLI ao Docker Compose.
Em produção, o MySQL 8 é a única base de dados suportada. 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 sua documentação não prevê o PostgreSQL.
Não. O SMTP serve para os e-mails transacionais: convites, palavras-passe, ligações de início de sessão dos membros. As newsletters exigem a API do Mailgun, o ú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, copie a base de dados MySQL com mysqldump e a pasta content com tar. O comando ghost backup produz um zip antes de uma atualização. A exportação da administração deixa de fora os comentários, o histórico de atividade dos membros e os multimédia.
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 gerido cobre o servidor: sistema, segurança, supervisão e cópias de segurança. As nossas equipas acompanham também a sua instância de forma proativa e recomendam-lhe as correções úteis, que aplica. Uma intervenção na aplicação é faturada à hora ou por pacote.
Simafri
Vamos falar do seu projeto
Diga-nos em poucas palavras o que precisa: respondemos-lhe rapidamente.
Obrigado! O seu pedido foi enviado. Responderemos em breve.
Prefere o email? Escreva-nos para support@simafri.com.