Aqui estão as minhas anotações pessoais de raciocínio para resolver esse desafio.
Primeiramente notei que o docker-compose continha a rede backend
declarada no final do arquivo e que os containers declarados utilizavam a mesma, percebi que alguns containers usavam a rede frontend
mas ela não havia sido declarada como a anterior, portanto declarei ela.
Notei um typo no docker-compose, dessa vez tem a ver com o banco de dados em memória Redis. A imagem docker está correta entretando o nome do serviço está como reids
. Lendo o arquivo main.go é possível indentificar que ele tenta conectar com o host redis
, logo esse deve ser o nome do service no arquivo docker-compose.
Ao ler os arquivos main.py e main.go, pude perceber que o reader
deve escutar na porta 8080 e o writer
deve escutar na porta 8081, o que não acontece no docker-compose, já que as portas estão trocadas, para corrigir foi necessário inverter as portas.
Este Dockerfile não continha os comandos para baixar as dependências usadas pelo main.go, para solucionar foi preciso inicializar o go mod com RUN ["go","mod","init"]
e adicionar as dependências com RUN ["go","get","github.com/go-redis/redis"]
e ["go","get","github.com/rs/cors""]
.
Ao rodar o docker-compose com docker-compose down; docker-compose up --build
notei que a aplicação reader
retornava o seguinte erro: ./main.go:27:26: too many arguments in call to client.cmdable.Get
, para arrumar isso foi preciso apenas remover o primeiro argumento já que segundo o erro, esperamos apenas um argumento e não dois.
Outra coisa que acontece ao rodar o docker-compose é que o serviço web (frontend) reporta estar escutando na porta 3000 mas a porta declarada é a 5000. Solucionar esse problema é bem simples, será preciso mudar a propriedade ports
do serviço web
de 5000:5000
para 3000:3000
.
Rodando o docker-compose é possível perceber que o serviço writer
não sobe, para corrigir isso foi necessaŕio adicionar o comando para baixar as dependências (redis) e alterar o comando para rodar a aplicação em si.
Acabei criando no docker-compose uma rede chamada cache
que diz respeito ao serviço do Redis e conectei os serviços a ela, isso fez com que o teste realizado ao visitar localhost:3000/#writer
e tentar cadastrar um valor para ler em http://localhost:3000/#reader
fosse um sucesso. Antes disso a aplicação em python não conseguia identificar o host redis
e portanto o teste falhava, não é mais o caso.
Cheguei ao final desse challenge e todas as aplicações estão funcionando devidamente
- Corrigir docker-compose.yaml e Dockerfiles
- Criar as redes necessárias
- Corrigir bugs no código
- Fazer tudo funcionar