Como hospedar o Ghost por conta própria em 2026: MySQL, newsletters e backups de conteúdo
Um guia prático para hospedar o Ghost por conta própria, abrangendo Docker, portas, dados persistentes, TLS, segurança, backups e as falhas que impedem o uso em produção. Passo a passo.
Uma implantação do Ghost com falha nem sempre apresenta uma queda. Ela pode exibir uma página de login enquanto a configuração url está definida como HTTP ou o volume de conteúdo foi substituído. Em vez disso, comece com uma verificação completa de ponta a ponta: conclua a configuração do proprietário, publique um post com uma imagem, inscreva um membro e envie uma newsletter de teste pelo email configurado.
Essa verificação corresponde à finalidade catalogada do Ghost: uma plataforma de publicação com memberships e newsletters. Ela também revela mais cedo dependências ausentes, suposições incorretas sobre o proxy e dados efêmeros do que uma verificação de uptime.
Delimite os limites de execução do Ghost
Defina três limites ao redor do Ghost: entrada na porta 2368, estado persistente e requisitos de suporte. O container pode ser substituído, mas os outros dois precisam de responsáveis explícitos. O contrato de rede do Ghost é MySQL 8, SMTP e armazenamento de objetos opcional para sites com muitos arquivos de mídia. Mantenha endpoints privados no DNS interno, permita apenas as chamadas de saída necessárias e forneça ao Ghost uma credencial de serviço com escopo limitado.
O diagrama está completo quando um cliente limpo consegue concluir a configuração do proprietário, publicar um post com uma imagem, inscrever um membro e enviar uma newsletter de teste pelo email configurado. Colete dados de tempo e recursos para consultas do MySQL, armazenamento de imagens, renderização do tema, quantidade de membros e limites do provedor de bulk mail. Se a transação falhar, o primeiro limite que não se comportar conforme documentado indicará se a investigação deve se concentrar no roteamento, na capacidade local ou em um serviço de suporte.
Comprove que o Ghost sobrevive à substituição
Uma imagem de container pode ser baixada novamente; o banco de dados MySQL, os temas, as imagens e os arquivos de conteúdo não podem. Monte /var/lib/ghost/content antes do bootstrap, grave dados de exemplo inofensivos e substitua o container para comprovar que esse caminho é realmente persistente. Inspecione o mount efetivo em vez de confiar no nome de um arquivo do Compose e verifique se o usuário de runtime pode gravar no local esperado pelo Ghost.
Defina a retenção e um destino externo ao host e, em seguida, ensaie a recuperação sem tocar na produção. O teste só será aprovado quando os posts, membros, newsletters, temas e imagens forem restaurados e um membro de teste conseguir abrir a publicação restaurada. Para estados baseados em banco de dados, combine snapshots de armazenamento com exports consistentes com a aplicação, conforme descrito em recuperação point-in-time versus snapshots.
Credenciais, funções e superfícies expostas
O risco de segurança específico da aplicação é usar SQLite em uma topologia de produção não suportada ou expor credenciais de email. A resposta operacional é proteger o Ghost Admin, manter as credenciais de email e do banco de dados no servidor e definir a URL HTTPS final antes da publicação. Conclua o bootstrap por uma rota restrita e remova imediatamente o acesso temporário depois disso.
url é uma configuração, não um segredo; mantenha seu valor explícito enquanto protege as credenciais separadas usadas pelo Ghost. Conceda ao processo do Ghost apenas os mounts e as rotas de dependência documentados; evite o acesso à raiz do host e ao socket do Docker. Registre falhas de autenticação e erros de configuração, mas oculte tokens, connection strings e conteúdo dos usuários.
Comprove a implantação do Ghost de ponta a ponta
O registro de release do Ghost precisa de fatos, não de um “parece bom”. Armazene o digest da imagem selecionada, o checksum da configuração, o hostname público e um resultado com timestamp para: concluir a configuração do proprietário, publicar um post com uma imagem, inscrever um membro e enviar uma newsletter de teste pelo email configurado. Use dados de exemplo que não sejam de produção para que a verificação possa ser executada após cada implantação.
Comprove separadamente dois eventos do ciclo de vida. A substituição de um container deve preservar a operação normal; uma recuperação limpa deve mostrar que os posts, membros, newsletters, temas e imagens retornam e que um membro de teste consegue abrir a publicação restaurada. Enquanto as verificações são executadas, meça as consultas do MySQL, o armazenamento de imagens, a renderização do tema, a quantidade de membros e os limites do provedor de bulk mail e mantenha o resultado como o envelope esperado para esta versão.
Teste também uma condição negada ou inválida: negue temporariamente à identidade de teste o acesso ao MySQL 8, SMTP e armazenamento de objetos opcional para sites com muitos arquivos de mídia. O Ghost deve falhar de maneira diagnosticável e não deve sobrescrever um estado saudável. Restaure a condição válida, execute novamente o exemplo e anexe os logs relevantes com os dados sensíveis ocultados. Esses artefatos fornecem evidências concretas para uma futura decisão de rollback.
Uma baseline Docker para o Ghost
Mantenha a invocação inicial do Ghost reproduzível o suficiente para ser revisada em um pull request.
docker run -d \
--name ghost \
--restart unless-stopped \
-p 127.0.0.1:2368:2368 \
-v ghost-data:/var/lib/ghost/content \
-e url=https://app.example.com \
-e database__client=mysql \
-e database__connection__host=mysql.internal \
-e database__connection__user=ghost \
-e database__connection__password=replace-with-a-strong-database-password \
-e database__connection__database=ghost \
ghost:latest
Não dependa de latest depois que existirem dados reais. Registre o digest funcional, o usuário do container e a propriedade do mount. Acompanhe o log da aplicação durante um teste completo — concluir a configuração do proprietário, publicar um post com uma imagem, inscrever um membro e enviar uma newsletter de teste pelo email configurado — e anote quaisquer migrations antes de colocar a rota atrás do tráfego de produção.
TLS é fácil; as URLs geradas, não
Defina url como o domínio HTTPS final antes da publicação. Envie o hostname escolhido para a porta 2368 do container, encaminhe o host original e o scheme HTTPS e evite publicar uma segunda origem direta.
Teste o Ghost a partir de um cliente externo limpo. Separe uma falha de entrada do limite conhecido da aplicação — a configuração url está definida como HTTP ou o volume de conteúdo foi substituído. Um erro de certificado, DNS ou 502 pertence ao roteamento; uma requisição que chega ao Ghost e falha depois pertence ao estado da aplicação, à capacidade ou a um requisito de suporte. O guia de TLS para domínios personalizados aborda o primeiro grupo.
Verificações de capacidade e upgrade
Os testes de capacidade devem exercitar consultas do MySQL, armazenamento de imagens, renderização do tema, quantidade de membros e limites do provedor de bulk mail, não uma requisição repetida a /. Execute o cenário “concluir a configuração do proprietário, publicar um post com uma imagem, inscrever um membro e enviar uma newsletter de teste pelo email configurado” com concorrência realista e registre latência, taxa de erros e crescimento do armazenamento.
O planejamento do upgrade deve considerar este risco: as migrations do Ghost, as expectativas do runtime do Node e os temas personalizados devem ser testados em um site clonado. Teste a nova release com dados de entrada representativos, depois repita a transação de aceitação e compare o resultado. Se a configuração url estiver definida como HTTP ou o volume de conteúdo tiver sido substituído, registre a transação com falha e inspecione o primeiro limite envolvido, em vez de presumir que a entrada é responsável.
Transfira o trabalho repetível de infraestrutura para o Dockup
Roteamento, certificados, substituição de serviços e armazenamento anexado são alvos razoáveis de automação. O Dockup cuida disso para o Ghost e pode provisionar o banco de dados gerenciado relacionado ou conectar-se a serviços no servidor do próprio cliente.
O que ele não deve inventar é a política de confiança do Ghost. Após a implantação, defina url como o domínio HTTPS final antes da publicação, aplique este limite — proteja o Ghost Admin, mantenha as credenciais de email e do banco de dados no servidor e defina a URL HTTPS final antes da publicação — e verifique o resultado deste cenário: concluir a configuração do proprietário, publicar um post com uma imagem, inscrever um membro e enviar uma newsletter de teste pelo email configurado. O resultado é uma infraestrutura de um clique com um teste de aceitação específico da aplicação.
Perguntas frequentes
O que o Ghost precisa para uma implantação em produção?
Encaminhe o container do Ghost na porta 2368 por uma única origem HTTPS. O requisito de rede de suporte é MySQL 8, SMTP e armazenamento de objetos opcional para sites com muitos arquivos de mídia. Não considere o Ghost pronto até conseguir concluir a configuração do proprietário, publicar um post com uma imagem, inscrever um membro e enviar uma newsletter de teste pelo email configurado.
Quais dados do Ghost devem fazer parte de um backup?
Persista /var/lib/ghost/content e inclua o banco de dados MySQL, os temas, as imagens e os arquivos de conteúdo no mesmo manifesto de recuperação. Uma restauração limpa do Ghost só será aprovada quando os posts, membros, newsletters, temas e imagens retornarem e um membro de teste conseguir abrir a publicação restaurada.
O Ghost exige HTTPS atrás de um reverse proxy?
Use HTTPS para a origem pública do Ghost e mantenha a porta 2368 na rota interna. Aplique corretamente a configuração do Ghost: defina url como o domínio HTTPS final antes da publicação. No Ghost, o HTTPS protege as credenciais ou o conteúdo dos usuários durante o trânsito e mantém consistente o comportamento do cliente sensível à origem.
Como testar um upgrade do Ghost?
Restaure o estado atual do Ghost em uma implantação isolada, aplique a versão candidata e repita sua transação de aceitação. Dê atenção especial a isso, pois as migrations do Ghost, as expectativas do runtime do Node e os temas personalizados devem ser testados em um site clonado. Mantenha a imagem anterior do Ghost até compreender os limites da migração de dados e do rollback.
