Ghost+Mysql via Docker-Compose
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!