Rodando várias aplicações com o Tilt - Uma ferramenta para orquestração de infraestrutura
Fala pessoal, tudo bom? O post de hoje tem como objetivo apresentar uma das ferramentas mais interessantes que eu conheci nos últimos meses.
Sobre
Muitas aplicações hoje em dia são feitas de diversos serviços, seja frontend, backend, banco de dados, e principalmente as aplicações que utilizam a arquitetura de micro-serviços. E o trabalho de rodar todas as aplicações e configurar todo o ambiente se torna muito massante e complicado. Para solucionar essa dor, surge o Tilt. O Tilt tem como objetivo orquestrar toda a infraestrutura da aplicação, assim como o kubernetes (eles até usam como slogan no site "Kubernetes for prod, Tilt for dev". Ele se baseia nos arquivos k8s e em contâiners docker também, então é praticamente um ambiente de produção simulado na sua máquina. E o melhor de tudo, você roda tudo com apenas um comando.
Utilização
O Tilt se baseia em um arquivo de configuração: o Tiltfile. Ele é escrito em starlark, uma linguagem semelhante a python. Nele você configura qual serviço rodar e como rodar cada um, além de ter suporte para escrita de funções customizadas.
Aplicação exemplo
A aplicação se trata de um backend (node), um frontend (react), e serviços como RabbitMQ, MongoDB e Redis.
- Aliás, apesar de simples no quesito regra de negócio, é uma das aplicações mais completas que já fiz até hoje no quesito tecnologia, acho que daria um bom post também. O link do repositório é https://github.com/KozielGPC/person-crud
Configuração
Criei um arquivo chamado Tiltfile na raíz do projeto, e nele escrevi a seguinte configuração:
docker_build(
'person-crud-backend',
context='./backend',
live_update=[
sync('./backend', '/app'),
]
)
docker_build(
'person-crud-frontend',
context='./frontend',
live_update=[
sync('./frontend', '/app'),
]
)
k8s_yaml(
[
'infra/dev/backend-secret.yml',
'infra/dev/frontend-secret.yml',
'infra/dev/backend-deployment.yml',
'infra/dev/services.yml',
'infra/dev/frontend-deployment.yml'
]
)
k8s_resource(
'backend-deployment',
port_forwards=['3001:3001'],
labels=["application"]
)
k8s_resource(
'frontend-deployment',
port_forwards=['3000:3000'],
labels=["application"]
)
Basicamente o que essa configuração diz é para o tilt buildar as imagens docker do meu backend e frontend, aplicar os manifestos do kubernetes e então rodar todos os serviços.
Rodando
Para rodar é muito simples, basta utilizar o comando tilt up na pasta onde está o Tiltfile e então ele começará seus trabalhos, disponibilizando inclusive um painel web para melhor visualização, com logs, labels, botões interativos:
E prontinho, agora todos os serviços estão rodando e pronto para serem acessados.
Para quem ficou mais interessado, pode dar uma olhada no repositório clicando aqui