- Server Go: o servidor original do CineLSD, escrito em Go e baseado em caetanobca/IMDB-API.
- Server Node.js: versão alternativa do servidor do CineLSD, escrito em Node.js.
- Transformer: o transformador usado para normalizar os dados da API do IMDb, escrito em TypeScript.
- Gerais
- Servidor
- Go
- Node.js
- Transformer
Nota: se você não precisa fazer a geração local dos dados normalizados, é possível baixar o arquivo pré-gerado no passo 1. Após isso, nenhuma configuração a mais precisa ser feita no transformer e você pode seguir para os passos de configuração do servidor.
-
Baixe os dados normalizados a serem usados pelo transformer.
- Dados normalizados
- O arquivo
dump.rdb
deve ser baixado na pastatransformer/data/normalized
.
- O arquivo
- Dados normalizados
-
Baixe os dados brutos a serem usados pelo transformer.
- Dados brutos (não normalizados)
- O arquivo
dump.rdb
deve ser baixado na pastatransformer/data/raw
.
- O arquivo
- Dados brutos (não normalizados)
-
Entre no projeto do transformer e instale as dependências.
cd transformer pnpm install
Agora, será possível executar o transformer usando os seguintes comandos:
-
Mude o caminho do volume do serviço
cinelsd-redis
, emdocker-compose.yaml
para usar os dados brutos.volumes: - ./transformer/data/raw:/data
-
Da raiz deste repositório, inicie o serviço do Redis, se já não estiver rodando.
docker/compose.sh dev up cinelsd-redis -d --wait
-
Crie a pasta
./transformer/local
, para onde os dados normalizados serão exportados. -
Após o serviço do Redis ter inicializado, execute o comando de exportação em outro terminal, de dentro da pasta
transformer
:pnpm run normalize
Após a execução desse comando, os dados normalizados terão sido exportados para
local/actors.txt
,local/movies.txt
elocal/movie-main-actors.txt
, com uma entidade por linha.
-
Mude o caminho do volume do serviço
cinelsd-redis
, emdocker-compose.yaml
para usar os dados normalizados.volumes: - ./transformer/data/normalized:/data
-
Da raiz deste repositório, inicie o serviço do Redis, se já não estiver rodando.
docker/compose.sh dev up cinelsd-redis -d --wait
-
Após o serviço do Redis ter inicializado, execute o comando de importação em outro terminal, de dentro da pasta
transformer
:pnpm run import
Após a execução desse comando, os dados normalizados terão sido importados de
local/actors.txt
,local/movies.txt
elocal/movie-main-actors.txt
para a instância do Redis em execução.
-
Mude o caminho do volume do serviço
cinelsd-redis
, emdocker-compose.yaml
para usar os dados normalizados.volumes: - ./transformer/data/normalized:/data
-
Da raiz deste repositório, inicie o serviço do Redis, se já não estiver rodando.
docker/compose.sh dev up cinelsd-redis -d --wait
-
Após o serviço do Redis ter inicializado, execute o comando de verificação em outro terminal, de dentro da pasta
transformer
:pnpm run references:check
Após a execução desse comando, referências de atores a filmes não existentes terão sido removidas, assim como atores que ficaram sem filmes associados após a remoção das referências inválidas.
-
Mude o caminho do volume do serviço
cinelsd-redis
, emdocker-compose.yaml
para usar os dados normalizados.volumes: - ./transformer/data/normalized:/data
-
Da raiz deste repositório, inicie o serviço do Redis, se já não estiver rodando.
docker/compose.sh dev up cinelsd-redis -d --wait
-
Após o serviço do Redis ter inicializado, execute o comando de exportação em outro terminal, de dentro da pasta
transformer
:pnpm run actors:export-ids
Após a execução desse comando, todos os IDs dos atores atualmente cadastrados serão exportados para um arquivo
actors.txt
na pasta em que o comando foi executado.
Os servidores em Go e Node.js são implementações diferentes com o mesmo funcionamento. Portanto, é necessário escolher apenas um deles para executar.
Para saber mais sobre os endpoints disponíveis, o arquivo api-insomnia.json contém exemplos de todas as requisições e pode ser importado no Insomnia.
Tendo os dados normalizados disponíveis em transformer/data/normalized/dump.rdb
, é possível fazer a configuração do servidor Go.
-
Entre no projeto do servidor e instale as dependências.
cd server/go go mod download
-
Mude o caminho do volume do serviço
cinelsd-redis
para usar os dados normalizados emdocker-compose.yaml
.volumes: - ./transformer/data/normalized:/data
-
Da raiz deste repositório, inicie o serviço do Redis, se já não estiver rodando.
docker/compose.sh dev up cinelsd-redis -d --wait
-
Após o serviço do Redis ter inicializado, inicie o servidor em outro terminal, de dentro da pasta
server/go
:go run ./src
Após a execução desse comando, o servidor deve estar rodando em
localhost:8001
.
Tendo os dados normalizados disponíveis em transformer/data/normalized/dump.rdb
, é possível fazer a configuração do servidor Node.js.
-
Entre no projeto do servidor e instale as dependências.
cd server/node pnpm install
-
Mude o caminho do volume do serviço
cinelsd-redis
para usar os dados normalizados emdocker-compose.yaml
.volumes: - ./transformer/data/normalized:/data
-
Da raiz deste repositório, inicie o serviço do Redis, se já não estiver rodando.
docker/compose.sh dev up cinelsd-redis -d --wait
-
Após o serviço do Redis ter inicializado, inicie o servidor em outro terminal, de dentro da pasta
server/node
:pnpm run dev
Após a execução desse comando, o servidor deve estar rodando em
localhost:8002
.
O deploy dos servidores é feito usando Docker e Docker Compose.
- Declare um arquivo
.env.production.local
dentro de docker, caso não exista. Este arquivo deve conter as variáveis listadas em .env.example.
-
Faça a build da imagem do servidor:
docker/compose.sh prod build cinelsd-server-go
-
Siga o passo 1 da configuração do transformer para baixar os dados normalizados.
-
Inicie o servidor:
docker/compose.sh prod up cinelsd-server-go -d --wait
Esse comando também irá inicializar o serviço de Redis automaticamente.
Após isso, o servidor Go deve estar pronto para uso e rodando na porta 8001
.
-
Faça a build da imagem do servidor:
docker/compose.sh prod build cinelsd-server-node
-
Siga o passo 1 da configuração do transformer para baixar os dados normalizados.
-
Inicie o servidor:
docker/compose.sh prod up cinelsd-server-node -d --wait
Esse comando também irá inicializar o serviço de Redis automaticamente.
Após isso, o servidor Node.js deve estar pronto para uso e rodando na porta 8002
.
Para monitoramento, são usados o Prometheus e o Grafana.
-
Inicie o Prometheus e o Grafana:
docker/compose.sh prod up cinelsd-prometheus cinelsd-grafana -d --wait
-
Após iniciar, verifique se foi possível conectar o stats exporter ao Docker:
docker/compose.sh prod logs cinelsd-prometheus-stats-exporter
Se não haver logs de erro, o stats exporter está funcionando corretamente.
Caso tenha erros de permissão ao montar o
/var/run/docker.sock
, volte ao passo 1 e tente executar o comando comsudo
.
Após isso, o Prometheus estará disponível na porta 9000
e a interface do Grafana, na porta 9001
.