Aqui vamos mostrar como instalar um Ghost via Docker em poucos minutos.

PreReq

  • Ubuntu >= 18.04
  • Docker >= 19
    • Ghost
    • Sqlite3

Instalando Docker

Vamos instalar o docker com o script fornecido pelo projeto

curl -fsSL https://get.docker.com -o get-docker.sh

Saída esperada

# Executing docker install script, commit: 442e66405c304fa92af8aadaa1d9b31bf4b0ad94
+ sh -c 'apt-get update -qq >/dev/null'
+ sh -c 'DEBIAN_FRONTEND=noninteractive apt-get install -y -qq apt-transport-https ca-certificates curl >/dev/null'
+ sh -c 'curl -fsSL "https://download.docker.com/linux/ubuntu/gpg" | apt-key add -qq - >/dev/null'
Warning: apt-key output should not be parsed (stdout is not a terminal)
+ sh -c 'echo "deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable" > /etc/apt/sources.list.d/docker.list'
+ sh -c 'apt-get update -qq >/dev/null'
+ '[' -n '' ']'
+ sh -c 'apt-get install -y -qq --no-install-recommends docker-ce >/dev/null'
+ sh -c 'docker version'
Client: Docker Engine - Community
 Version:           19.03.8
 API version:       1.40
 Go version:        go1.12.17
 Git commit:        afacb8b7f0
 Built:             Wed Mar 11 01:25:46 2020
 OS/Arch:           linux/amd64
 Experimental:      false

Server: Docker Engine - Community
 Engine:
  Version:          19.03.8
  API version:      1.40 (minimum version 1.12)
  Go version:       go1.12.17
  Git commit:       afacb8b7f0
  Built:            Wed Mar 11 01:24:19 2020
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.2.13
  GitCommit:        7ad184331fa3e55e52b890ea95e65ba581ae3429
 runc:
  Version:          1.0.0-rc10
  GitCommit:        dc9208a3303feef5b3839f4323d9beb36df0a9dd
 docker-init:
  Version:          0.18.0
  GitCommit:        fec3683
If you would like to use Docker as a non-root user, you should now consider
adding your user to the "docker" group with something like:

  sudo usermod -aG docker your-user

Remember that you will have to log out and back in for this to take effect!

WARNING: Adding a user to the "docker" group will grant the ability to run
         containers which can be used to obtain root privileges on the
         docker host.
         Refer to https://docs.docker.com/engine/security/security/#docker-daemon-attack-surface
         for more information.

Pronto docker instalado, agora vamos ativar no boot

systemctl enable docker

Feito, agora vamos iniciar o serviço do docker

systemctl start docker

Assista o vídeo

Instalando Ghost

Crie um diretório para servir de volume para mysql e ghost.

mkdir -p /srv/sites/guto/ghost/content
mkdir -p /srv/sites/guto/ghost/config

Crie o arquivo config.json em ghost/config

{
  "server": {
    "port": 2368,
    "host": "0.0.0.0"
  },
  "database": {
    "client": "sqlite3",
    "connection": {
      "filename": "/var/lib/ghost/content/data/ghost.db"
    }
  },
  "mail": {
    "transport": "Direct"
  },
  "logging": {
    "transports": [
      "file",
      "stdout"
    ]
  },
  "process": "systemd",
  "paths": {
    "contentPath": "/var/lib/ghost/content"
  }
}

Execute o comando abaixo

docker run --restart always --name guto-ghost -v /srv/sites/guto/ghost/content:/var/lib/ghost/content:z -v /srv/sites/guto/ghost/config/config.json:/var/lib/ghost/config.production.json:z -d -p 80:80 ghost:latest

E pronto, acesse seu ghost pelo navegador e finalize a instalação :)

http://coloque-seu-ip-aqui/

Assista o vídeo

Dicas soltas

Caso queira reiniciar o container

docker restart guto-ghost

Caso queria parar o container

docker kill guto-ghost

Caso queira ver o log do container

docker logs -f guto-ghost

Caso queria entrar no container

docker exec -ti guto-ghost bash

Amarrando as pontas

Instalar qualquer coisa via docker é muito fácil, especialmente quando você quer testar algo ou conhecer alguma tecnologia.

Neste cenário criamos um ambiente ghost composto por 1 container com a aplicação rodando internamente o banco SQLite3. O container persiste os dados em disco, no HOST, utilizando o diretório /srv/sites/guto/ghost.

Observe que eu monto um volume para os dados e outro volume para o arquivo de configuração, assim fica fácil alterar qualquer coisa e reiniciar o container em seguida.

Com a persistência de dados você pode reiniciar o seu containers e não perderá seus dados.

Vale lembrar que o projeto GHOST recomenda o uso do MySQL em produção, SQLite só deve ser utilizado em desenvolvimento ou se você sabe o que está fazendo.

Usar docker em produção requer alguns cuidados além deste, como o uso de um orquestrador mais eficiente que ofereça alta disponibilidade, resiliência, escalabilidade e persistência, além de claro, um sólido plano de backup dos dados além de um procedimento bem claro para Disaster Recovery.


Precisa de ajuda para trabalhar com DOCKER ou migrar suas APPs para Docker?A JAC te ajuda!

A JAC é nosso braço de projetos e consultoria, entre em contato :)