Instalando Ghost com Docker
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.