Aqui vamos mostrar como instalar um Ghost via Docker, usando banco MySQL em poucos minutos.

PreReq

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

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.

Instalando docker compose

Faça download do binário

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

Ajuste a permissão para execução

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

Pronto docker e docker-compose instalados, agora vamos ativar o docker no boot

systemctl enable docker

Feito, agora vamos iniciar o serviço do docker

systemctl start docker

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
mkdir -p /srv/sites/guto/ghost/mysql

Crie o arquivo config.json em ghost/config

{
  "url": "https://mindnotes.sh",
  "server": {
    "port": 2368,
    "host": "0.0.0.0"
  },
  "database": {
    "client": "mysql",
    "connection": {
      "host": "db",
      "port": 3306,
      "user": "root",
      "password": "sua senha",
      "database": "ghost",
      "ssl": false
     }
    },
    "mail": {
    "from": "ghost@mindnotes.sh",
      "transport": "SMTP",
      "options": {
        "service": "sendinblue",
        "host": "smtp-relay.sendinblue.com",
        "port": 587,
        "secureConnection": false,
        "auth": {
          "user": "seu_user",
          "pass": "sua_senha"
        }
      }
    },
    "paths": {
      "contentPath": "/var/lib/ghost/content"
    }
  }

Vamos agora criar do docker-compose.yml

cd /srv/sites/guto/ghost/
vim docker-compose.yml

Insira o conteúdo abaixo

version: '3'
services:

  ghost:
    image: ghost:latest
    container_name: mindnotes_ghost_app
    restart: always
    depends_on:
      - db
    environment:
      url: https://mindnotes.sh
      database__client: mysql
      database__connection__host: db
      database__connection__user: root
      database__connection__password: sua_senha
      database__connection__database: ghost
    volumes:
      - /srv/sites/guto/ghost/site/content:/var/lib/ghost/content
      - /srv/sites/guto/ghost/site/config/config.json:/var/lib/ghost/config.production.json
    ports:
      - 80:2368

  db:
    image: mysql:5.7
    container_name: mindnotes_ghost_mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: sua_senha
    volumes:
      -  /srv/sites/guto/ghost/site/mysql:/var/lib/mysql

Execute o docker-compose

docker-compose up -d

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

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

Dicas soltas

Caso queira reiniciar os containers

docker-compose restart

Caso queria matar os containers

docker-compose kill

Caso queira ver o log de um dos containers

docker-compose logs -f mindnotes_ghost_app

Caso queria entrar em um dos containers

docker exec -ti mindnotes_ghost_app sh

Amarrando as pontas

Instalar qualquer coisa via docker-compose é 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, e outro container rodando o banco MySQL. Ambos containers persistem os dados em disco, no HOST, utilizando o diretório /srv/sites/guto/ghost.

Observe que eu monto um volume para os dados, outro para o banco e outro 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.

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.

Bye!


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 :)

https://jac.bsb.br
contato@jac.bsb.br