Hoje demonstraremos como provisionar o GLPI no Docker, utilizaremos também o docker swarm e o traefik para trabalhar como proxy reverso, tanto o docker swarm quanto o traefik são opcionais mas o adotamos para trabalhar como cluster e proxy reverso em nosso ambiente.
Iniciando o Swarm
docker swarm init
Inicializando o rede
docker network create -d overlay net
Criand o serviço Traefik - Proxy Reverso
docker service create --name traefik \
--constraint 'node.role==manager' \
--publish 80:80 \
--publish 8080:8080 \
--mount type=bind,source=/var/run/docker.sock,target=/var/run/docker.sock \
--network net \
traefik:camembert \
--docker \
--docker.swarmmode \
--docker.domain=alfabe.ch \
--docker.watch \
--logLevel=DEBUG \
--web
Criando o serviço MariaDB - Banco de Dados
Estamos usando a imagem oficial do MariaDB para esse projeto, mas no mundo docker não há um consenso sobre a segurança do uso de banco de dados executando via container, seu uso é muitas vezes indicado para local onde não há uma carga de trabalho excessiva.
docker service create \
--name dataserver \
--replicas 1 \
--restart-condition any \
--network net \
--mount type=volume,source=maria-vol,destination=/var/lib/mysql \
--hostname dataserver \
--env MYSQL_ROOT_PASSWORD=12345 \
--env MYSQL_DATABASE=glpi \
--env MYSQL_PASSWORD=12345 \
--env MYSQL_USER=glpi \
-p 3306:3306 \
mariadb
Criando o serviço GLPI - Helpdesk
Estamos utilizando a imagem ferreirarocha/glpi:9.3, mas recomendamos o uso de suas próprias imagens em ambiente de produção.
docker service create \
--name helpdesk \
--replicas 1 \
--restart-condition any \
--network net \
--label 'traefik.port=80' \
--label traefik.frontend.rule="Host:suporte.alfabe.ch;" \
--mount type=volume,src=glpi,dst=/var/www/html/glpi \
--hostname helpdesk \
ferreirarocha/glpi:9.3
Criando uma imagem
Caso queira buildar a images com suas próprias modificações baixe e altere o dockerfile acima
docker build \
--build-arg LAST_RELEASE=9.3.0 \
--build-arg GLPI_VERSION=9.3 \
-t=ferreirarocha/glpi:9.3 .
Criando o serviço para o Portainer
docker volume create portainer_data
docker service create \
--name portainer \
--restart-condition any \
--replicas=1 \
--constraint 'node.role == manager' \
--mount type=bind,src=//var/run/docker.sock,dst=/var/run/docker.sock \
--mount type=volume,src=portainer_data,dst=/data \
--label traefik.port=9000 \
--label traefik.frontend.rule="Host:portainer.alfabe.ch;" \
--network net \
portainer/portainer \
-H unix:///var/run/docker.sock
Configurando o DNS
Nesse momento você deve apontar o domínio do seu serviço para o servidor que está executando o Docker com Traefik, essa tarefa é bem simples, seja em um Windows Server, Bind , Zero-Shell ou qualqer outro servidor de DNS que você possua em sua rede, nesse laboratório faremos a ateração diretamente no arquivo de hosts do sistema
Abra-o e insira o novo dominio
nano /etc/hosts
Ficará algo como na figura abaixo
127.0.0.1 localhost
192.168.1.111 suporte.alfabe.ch
192.168.1.111 monitor.alfabe.ch
A próxima etapa e tão esperada é acessar o serviço via web, e consumir o serviço, nesse caso
Conclua o processo de instalação do GLPI
Na etapa denominada Criando o serviço MariaDB - Banco de Dados, criamos o serviço dataserver que executa o mariadb, setamos senhas padrões para o usuário root do banco de dados e também para o usuário GLPI, assim como o hostname do container que é dataserver, user esse dados para configurar a conexão com o GLPI.
Perceba que nessa etapa inserimos os dados conforme criamos o serviço dataserver;
As Demais telas são intuitivas, não necessitando de muita informação, ao final do processo de instalação, execute o comando abaixo para remover o arquivo de instalação.
docker exec -it $(docker ps -qf name=helpdesk) rm /var/www/html/glpi/install/install.php
Portainer
A qualquer momento você poderá acessar os containers GLPI, MariaDB, Volumes persistentes e outros recursos fornecidos pelo docker, vale lembrar que durante o post instalamos o Portainer que faz justamente isso, porém seu gerenciamento é via web, em nosso ambiente podemos acessá-lo da seguinte forma.
https://monitor.alfabe.ch/#/init/admin
Na primeira vez que acessar crie uma senha de 8 dígitos ,e logue novamente.
Como exemplo acessamos o container GLPI via console do portainer.
Traefik
Caso não tenha percebido Portainer, GLPI poussem portas de acesso diferentes porém o traefik nosso proxy reverso redireciona o tráfego de acordo com a url cadastrada no serviço.
A interface administrativa do traefik é a porta 8080, sendo possível acessá-lo de url host que ele faça a gerência, veja o exemplo abaixo.
suporte.alfabech:8080
Há vantagens ?
Talvez tanta etapa apenas para subir o GLPI não lhe agrade, porém uma vez feito esse processo esse ambiente se comportará com um serviço, ou seja sempre que nosso host docker inicializar os containers do banco de dados, mariadb, traefik e portainers inicialiazão automaticamente.
- Flexibilidade em testar novas versões, e muitiplas distribuções
- Agilidade no fluxo de ambientes em Teste , Homologação e de Produção.
- Recuperação mais rápida em caso de paradas.
- Mutiplos serviços web disponíveis na mesma porta de acesso, tornando o ambiente transparente para usuário.
- Economia de recursos em um host docker com apenas 2 Gigas de RAM e algum espaço em disco, você pode provisionar vários containers executanto vários serviços com dependencias conflintantes sem a necessidade de criar um isolamento via virtual machine ou máquina física.
- Maior disponibilidade do sistema: O Docker provê um ambiente em cluster o que siginifica que há alguma redundância e em conseguinencia continuidade no serviço em caso de falha isolada.
- Compartilhamento:
- Facilidade de gerenciamento:
- Aplicação como pacote completo:
- Padronização e replicação:
- Acesso à comunidade:
Sugiro a leitura desse post onde são apontadas algumas vantagens
https://www.inventti.com.br/container-docker-e-suas-vantagens/
Acabou ?
Para finalizar nesse ambiente, fizemos o provisionameto do GLPI em apenas um host docker no próximo post demonstraremos como utiliza-lo em cluster através do docker swarm.
Fico por aqui e até o próximo 😃
Fontes
https://www.mundodocker.com.br/docker-swarm-pratica/
https://docs.docker.com/engine/swarm/
https://mariadb.com/kb/en/library/installing-and-using-mariadb-via-docker/