Docker Guide · 9 min read · Feb 04, 2026

Guia Docker: Implantando o Blog Ghost com MySQL e Traefik com Docker

Ghost é uma poderosa plataforma de publicação e blog de código aberto baseada em nodejs. É bem projetada e fácil de usar. A plataforma Ghost é escrita em JavaScript e usa node.js como ambiente de execução. A primeira versão do Ghost foi lançada em 2013 sob a licença MIT.

Traefik é um moderno proxy reverso HTTP e balanceador de carga para microsserviços. O Traefik torna a implantação de todos os microsserviços fácil, integrado com componentes de infraestrutura existentes, como Docker, Swarm Mode, Kubernetes, Amazon ECS, Rancher, Etcd, Consul, etc.

Neste tutorial, mostraremos passo a passo como instalar e configurar o Ghost como um contêiner Docker. Instalaremos e configuraremos o Ghost na versão mais recente do Docker CE, usaremos o MySQL como banco de dados e usaremos o Traefik como um Proxy Reverso.

Pré-requisitos

  • Ubuntu 18.04 LTS
  • Privilégios de root

O que faremos

  1. Instalar Docker CE no Ubuntu 18.04 LTS
  2. Configurar Docker para Usuário Não-root
  3. Instalar Docker Compose
  4. Configurar a Pilha do Ghost - Criar uma Rede Personalizada
    • Criar um Diretório de Projeto
    • Criar e Configurar o Contêiner MySQL
    • Criar e Configurar o Proxy Reverso Traefik
    • Criar e Configurar o Contêiner Ghost
  5. Implantar o Ghost com MySQL e Traefik
  6. Testes

Passo 1 - Instalar Docker CE no Ubuntu 18.04 LTS

O primeiro passo que faremos neste tutorial é instalar a versão mais recente do docker-ce do sistema. A versão do docker-ce pode ser instalada a partir do repositório oficial do docker.

Adicione a chave do docker e o repositório docker-ce.

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -  
sudo add-apt-repository \  
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \  
   $(lsb_release -cs) \  
   stable"

O comando atualizará automaticamente todos os repositórios no sistema.

Agora instale o docker usando o comando apt abaixo.

sudo apt install docker-ce -y

Após a instalação ser concluída, inicie o serviço docker e habilite-o para iniciar toda vez que o sistema for iniciado.

systemctl start docker  
systemctl enable docker

A versão mais recente do docker-ce foi instalada no sistema Ubuntu 18.04.

Instalando Docker CE

Passo 2 - Configurar Docker para Usuário Não-root

Neste guia, todos os microsserviços do contêiner serão executados sob o usuário normal/não-root. Portanto, precisamos configurar o usuário para que ele possa executar o contêiner Docker e executar o comando sudo para privilégios de root.

Crie um novo usuário chamado ‘hakase’ e crie a senha.

useradd -m -s /bin/bash hakase  
passwd hakase

Agora atribua o usuário ‘hakase’ aos grupos ‘sudo’ e ‘docker’.

usermod -a -G root hakase  
usermod -a -G docker hakase

E reinicie o serviço docker.

systemctl restart docker

O ‘hakase’ agora pode executar o contêiner docker e executar o comando sudo para privilégios de root.

Configurar Docker para Usuário Não-root

Faça login como usuário ‘hakase’ e execute o contêiner hello-world do docker.

su - hakase  
docker run -it hello-world

E a seguir está o resultado.

Teste docker como usuário não-root

Passo 3 - Instalar Docker Compose

Neste tutorial, instalaremos o docker compose 1.21 a partir de um arquivo binário no repositório do Github.

Baixe o binário do docker-compose para o diretório ‘/usr/local/bin’.

sudo curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose

E torne o arquivo ‘docker-compose’ executável alterando a permissão do arquivo.

sudo chmod +x /usr/local/bin/docker-compose

O docker compose foi instalado - verifique usando o comando abaixo.

docker-compose version  
docker version

Instalar Docker Compose

Docker-compose 1.21 com Docker-ce 1.18 foi instalado.

Passo 4 - Configurar a Pilha do Ghost

Neste passo, configuraremos o docker e criaremos um novo arquivo docker-compose para a instalação do ghost.

Criamos uma nova rede personalizada do docker e criamos um novo arquivo yml do docker-compose que contém três serviços principais, incluindo o banco de dados MySQL, o proxy reverso Traefik e o blog Ghost em si.

Criar uma Rede Personalizada

Mostre a rede docker disponível usando o comando de rede docker abaixo.

docker network ls

Crie uma nova rede personalizada do docker para o proxy reverso traefik chamada ‘traefiknet’.

docker network create traefiknet

Agora verifique novamente a rede disponível no sistema docker.

docker network ls

Criar uma Rede Personalizada

A rede personalizada para Treafik chamada ‘traefiknet’ foi criada.

Criar um Diretório de Projeto

Após criar a rede personalizada do docker, criaremos um novo diretório de projeto chamado ‘ghost’ e criaremos um novo arquivo docker-compose.yml.

Faça login no usuário ‘hakase’.

su - hakase

Crie um novo diretório ‘ghost’ e mude o diretório de trabalho para ele.

mkdir ghost/  
cd ghost/

E crie um novo arquivo docker-compose.

touch docker-compose.yml

Criar e Configurar o Serviço MySQL

O MySQL é o primeiro serviço que queremos criar, e queremos criar o contêiner MySQL com as configurações abaixo.

  • Usaremos a imagem docker do MySQL 5.7.
  • Montar o diretório de dados do MySQL no diretório do host local do docker.
  • Executar o serviço MySQL na rede interna local.
  • Configurar usuário e senha do MySQL. - Senha root do MySQL: mypassword
  • Banco de dados para o ghost chamado ‘ghostdb’ com usuário ‘ghost’ e senha ‘ghostdbpass’
  • O contêiner MySQL será nomeado como ‘mysql’.

Dentro do diretório ‘ghost’, crie um novo diretório chamado ‘data’ e edite o arquivo ‘docker-compose.yml’.

mkdir -p data/  
vim docker-compose.yml

Cole a configuração abaixo.

version: '3.3'

services:

  mysql:
    image: mysql:5.7
    restart: always
    volumes:
      - ./data:/var/lib/mysql
    labels:
      - "traefik.enable=false"
    networks:
      - internal
    environment:
      MYSQL_ROOT_PASSWORD: mypassword
      MYSQL_USER: ghost
      MYSQL_PASSWORD: ghostdbpass
      MYSQL_DATABASE: ghostdb
    container_name: mysql

Salve e saia.

Criar e Configurar o Proxy Reverso Traefik

Após criar o serviço MySQL, criaremos e configuraremos o contêiner do proxy reverso traefik.

Antes de editar o script ‘docker-compose.yml’, precisamos criar uma nova configuração do traefik chamada ‘traefik.toml’.

vim traefik.toml

Cole a configuração da regra do traefik abaixo.

#Configuração Global do Traefik
debug = false
checkNewVersion = true
logLevel = "ERROR"

#Defina o EntryPoint para HTTP e HTTPS
defaultEntryPoints = ["https","http"]

#Defina a porta HTTP 80 e
#Porta HTTPS 443 EntryPoint
#Habilitar redirecionamento automático de HTTP para HTTPS
[entryPoints]
[entryPoints.http]
address = ":80"
[entryPoints.http.redirect]
entryPoint = "https"
[entryPoints.https]
address = ":443"
[entryPoints.https.tls]

#Habilitar o Painel do Traefik na porta 8080
#com método de autenticação básica
#hakase e senha
[entryPoints.dash]
address=":8080"
[entryPoints.dash.auth]
[entryPoints.dash.auth.basic]
    users = [
        "hakase:$apr1$hEgpZUN2$OYG3KwpzI3T1FqIg9LIbi.",
    ]

[api]
entrypoint="dash"
dashboard = true

#Habilitar reenvio de solicitação se houver erro de rede
[retry]

#Definir Configuração de Backend do Docker
[docker]
endpoint = "unix:///var/run/docker.sock"
domain = "hakase-labs.io"
watch = true
exposedbydefault = false

#Registro do Letsencrypt
#Defina o desafio HTTP ACME do Letsencrypt
[acme]
email = "[email protected]"
storage = "acme.json"
entryPoint = "https"
OnHostRule = true
  [acme.httpChallenge]
  entryPoint = "http"

Salve e saia.

Agora precisamos criar um novo arquivo para a configuração SSL Letsencrypt ‘acme.json’. Ele é usado para armazenar todos os logs gerados pelo letsencrypt.

Crie o arquivo ‘acme.json’ em branco e altere a permissão para 600.

touch acme.json  
chmod 600 acme.json

Em seguida, editaremos o script ‘docker-compose.yml’ e adicionaremos a configuração do serviço traefik.

  • Usaremos a imagem docker mais recente do traefik.
  • O contêiner será nomeado como ‘traefik’
  • Ele usará a rede personalizada ‘traefiknet’ e exporá as portas HTTP e HTTPS.
  • Montar o arquivo sock do docker e a configuração do traefik ‘traefik.toml’ e ‘acme.json’
  • Definimos a URL do painel do traefik e o backend através dos rótulos do docker.

Edite o ‘docker-compose.yml’.

vim docker-compose.yml

Cole a configuração do serviço traefik abaixo.

  traefik:
    image: traefik:latest
    command: --docker
    ports:
      - 80:80
      - 443:443
    labels:
      - "traefik.enable=true"
      - "traefik.backend=dashboard"
      - "traefik.frontend.rule=Host:traef.hakase-labs.io"
      - "traefik.port=8080"
    networks:
      - traefiknet
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - ./traefik.toml:/traefik.toml
      - ./acme.json:/acme.json
    container_name: traefik
    restart: always

Salve e saia.

Criar e Configurar o Serviço Ghost

Após configurar o proxy reverso traefik, criaremos a configuração do serviço principal do ghost.

Detalhes da configuração que queremos criar.

  • Usaremos o ghost v1 e a pequena versão alpine do docker.
  • Montaremos o diretório de conteúdo do ghost no diretório local chamado ‘blog’.
  • O serviço ghost será executado na porta padrão com o nome de domínio ‘gho.hakase-labs.io’, a configuração através dos rótulos do docker.
  • O serviço ghost usará duas redes do docker, internal e traefiknet.
  • Estamos configurando os detalhes do banco de dados MySQL a partir da configuração do contêiner mysql.
  • E o ghost será iniciado quando o contêiner traefik e MySQL estiverem em execução.

Crie um novo diretório chamado ‘blog’ e edite o arquivo ‘docker-compose.yml’.

mkdir -p blog/  
vim docker-compose.yml

Cole a configuração abaixo.

  ghost:
    image: ghost:1-alpine
    restart: always
    ports:
      - 2368
    volumes:
      - ./blog:/var/lib/ghost/content
    labels:
      - "traefik.enabled=true"
      - "traefik.backend=ghost"
      - "traefik.frontend.rule=Host:gho.hakase-labs.io"
      - "traefik.docker.network=traefiknet"
      - "traefik.port=2368"
    networks:
      - internal
      - traefiknet
    environment:
      database__client: mysql
      database__connection__host: mysql
      database__connection__user: ghost
      database__connection__password: ghostdbpass
      database__connection__database: ghostdb
    container_name: ghost
    depends_on:
      - mysql
      - traefik  

networks:
  traefiknet:
    external: true
  internal:
    external: false

Salve e saia.

Criar e Configurar o Serviço Ghost

E agora temos todos os diretórios e configurações conforme mostrado abaixo.

tree

arquivos de configuração

Passo 5 - Implantar o Ghost com MySQL e Traefik

Para construir e executar todos os nossos serviços da pilha ghost, podemos usar o comando abaixo.

docker-compose up -d

Implantar Ghost com MySQL e Traefik

Quando estiver completo, verifique todos os serviços em execução.

docker-compose ps

E o seguinte é o resultado.

Se você tiver um erro, verifique o log do contêiner usando os comandos abaixo.

docker-compose logs mysql  
docker-compose logs traefik  
docker-compose logs ghost

verifique o log do contêiner

A pilha ghost com MySQL e o proxy reverso Traefik está em execução.

Passo 6 - Testes

Abra o painel do Traefik com sua URL, a minha é http://traef.hakase-labs.io/

Faça login com o usuário e a senha no arquivo ‘traefik.toml’.

E a seguir está o painel do Traefik.

Painel do Traefik

Para a instalação do Ghost, digite a URL do ghost na barra de endereços, a minha é http://gho.hakase-labs.io/

E você verá a página inicial do ghost.

Blog Ghost rodando no Docker

Agora visite a página de administração para configurar e criar um novo usuário administrador. Minha URL é: http://gho.hakase-labs.io/admin/

Clique no botão verde para criar um novo usuário administrador.

Instalador do Ghost

Digite os detalhes do usuário, senha, e-mail e clique novamente no botão verde.

Criar login de administrador

Para convidar um novo membro ou usuário, clique no link ‘Farei isso mais tarde..’.

Convidar usuários

Agora você verá o Painel do Ghost.

Painel do Ghost

E após criar a postagem de exemplo, o seguinte é o resultado.

Blog Ghost rodando no contêiner Docker

A instalação do blog Ghost com banco de dados MySQL e Proxy Reverso Traefik no ambiente Docker foi concluída com sucesso.

Referências

Share: X/Twitter LinkedIn

Receba novas postagens na sua caixa de entrada

Sem spam. Cancele a assinatura a qualquer momento.