Read this article in English.
Link do GitHub: acesse aqui
Criei este projeto como um laboratório prático de DevOps. Nele, GitLab e Traefik são executados no Docker Swarm, o Vagrant fornece a máquina virtual local e o Ansible cuida do provisionamento e do deployment.
A proposta não foi entregar uma plataforma pronta para produção. O objetivo foi criar uma base realista e extensível para entender, na prática, como essas tecnologias trabalham juntas.
Se algo não funcionar na primeira tentativa, tudo bem. Investigar, ajustar e evoluir o ambiente faz parte do aprendizado. O repositório é um ponto de partida, não uma solução final.
Objetivo do projeto
O projeto ajuda a explorar os seguintes pontos:
- Entender a arquitetura do GitLab quando executado em containers
- Aprender como o Traefik funciona como reverse proxy e ingress controller
- Praticar conceitos do Docker Swarm, como services e redes overlay
- Automatizar o provisionamento da infraestrutura com Ansible
- Utilizar Vagrant para criar ambientes locais isolados e reproduzíveis
Os componentes foram integrados de uma forma próxima à encontrada em ambientes reais, mas ainda simples o bastante para estudo e experimentação.
Visão geral da arquitetura
A arquitetura reúne componentes comuns em ambientes reais:
- GitLab executado como aplicação containerizada
- PostgreSQL para armazenamento persistente
- Redis para cache e filas internas
- Traefik como reverse proxy e ponto de entrada
- Docker Swarm como orquestrador de containers
- Ansible para provisionamento e deployment
- Vagrant para gerenciar a máquina virtual local
Cada serviço fica isolado, conectado por redes overlay e implantado por automação. Isso reduz intervenções manuais e configuration drift.
GitLab
O GitLab é uma plataforma open source para gerenciamento de código-fonte e pipelines de CI/CD. Neste projeto, ele é executado com a imagem de container sameersbn/gitlab.
A imagem abstrai boa parte da complexidade da instalação e permite configurar o serviço por variáveis de ambiente. Para customizações avançadas, vale consultar sua documentação, que expõe outras opções.
A stack do GitLab utiliza:
- PostgreSQL para armazenamento persistente
- Redis para cache e filas internas de jobs
Essa separação de responsabilidades torna o ambiente mais fácil de entender, manter e evoluir.
Traefik como reverse proxy
O Traefik atua como reverse proxy e ingress controller, responsável pela exposição dos serviços, roteamento e gerenciamento do HTTPS.
Neste ambiente, o Traefik se integra diretamente ao Docker Swarm e descobre os serviços pelas labels dos containers. Assim, mudanças nos serviços não exigem configuração manual de cada rota.
A configuração estática fica centralizada, enquanto as regras de roteamento são definidas em cada serviço. Quando algo foge do esperado, o primeiro passo da investigação é validar essas labels.
Como próximos passos, o ambiente pode receber:
- Middlewares de segurança
- Redirecionamento obrigatório para HTTPS
- Headers HTTP de segurança
- Autenticação básica ou outros controles de acesso
Docker Swarm
O Docker Swarm é o orquestrador de containers do laboratório. Ele oferece distribuição de serviços, redes overlay e gerenciamento declarativo de forma nativa.
Os playbooks do Ansible inicializam o cluster Swarm e criam as redes overlay necessárias. Dessa forma, o preparo do cluster também faz parte da automação.
Ansible: provisionamento e deployment
O Ansible é responsável por provisionar o ambiente e implantar todos os serviços.
Entre suas responsabilidades estão:
- Instalar o Docker dentro da máquina virtual
- Inicializar o Docker Swarm
- Criar as redes overlay
- Implantar as stacks do GitLab, Traefik, PostgreSQL e Redis
O uso do Ansible aplica os princípios de Infrastructure as Code e mantém o processo reproduzível e consistente. Quando surge algum problema, inventory, variáveis e conectividade costumam ser os primeiros pontos que verifico.
Vagrant: um ambiente local e isolado
O Vagrant cria uma máquina virtual local e mantém o laboratório isolado do sistema operacional do host.
Essa abordagem permite:
- Experimentar com segurança
- Destruir e recriar o ambiente rapidamente
- Repetir testes de forma consistente
O Vagrant se integra diretamente ao Ansible, permitindo criar e provisionar todo o ambiente automaticamente.
Fluxo de uso recomendado
Um fluxo comum para utilizar o projeto é:
- Ajustar as variáveis do projeto para o seu ambiente
- Executar o deployment automatizado
- Validar os serviços no Docker Swarm
- Testar roteamento, acesso e integrações
- Evoluir a configuração de forma incremental
Se o ambiente ficar inconsistente, destruí-lo e recriá-lo faz parte do exercício. A repetição ajuda a entender o papel de cada etapa.
Possíveis evoluções
O projeto foi pensado para continuar evoluindo. Algumas possibilidades são:
- Adicionar monitoramento e métricas
- Automatizar backups do GitLab
- Criar pipelines de alertas
- Evoluir a configuração de segurança do Traefik
- Expandir o laboratório para clusters Swarm com múltiplos nodes
Errar, investigar e aplicar os ajustes encontrados faz parte do aprendizado em DevOps.
Referências
- GitLab: https://docs.gitlab.com/
- Traefik: https://traefik.io/
- Docker: https://docs.docker.com/
- Docker Swarm: https://docs.docker.com/engine/swarm/
- Ansible: https://docs.ansible.com/
- Vagrant: https://www.vagrantup.com/docs
- PostgreSQL: https://www.postgresql.org/docs/
- Redis: https://redis.io/documentation
💡 Quem sou eu?
Sou Gabriel Carmo, CNCF Kubestronaut, com certificações CKA, CKAD, CKS, KCNA e KCSA, além de Red Hat Certified OpenShift Administrator.
Atuo em DevOps Engineering, construindo e evoluindo plataformas Kubernetes multi-cloud. Meu trabalho tem como foco reduzir a carga cognitiva das equipes de engenharia por meio de platform engineering, automação, GitOps e experiências self-service.
No dia a dia, conecto infraestrutura como código, cloud networking, governança, segurança, observabilidade e práticas de SRE para criar plataformas mais padronizadas, resilientes e fáceis de operar.