diego-aquino / cinelsd-backend

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

CineLSD Backend

Projetos

  • 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.

Dependências

Como executar

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.

  1. Baixe os dados normalizados a serem usados pelo transformer.

    • Dados normalizados
      • O arquivo dump.rdb deve ser baixado na pasta transformer/data/normalized.
  2. Baixe os dados brutos a serem usados pelo transformer.

  3. 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:

Normalizar dados

  1. Mude o caminho do volume do serviço cinelsd-redis, em docker-compose.yaml para usar os dados brutos.

    volumes:
      - ./transformer/data/raw:/data
  2. 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
  3. Crie a pasta ./transformer/local, para onde os dados normalizados serão exportados.

  4. 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 e local/movie-main-actors.txt, com uma entidade por linha.

Importar dados normalizados

  1. Mude o caminho do volume do serviço cinelsd-redis, em docker-compose.yaml para usar os dados normalizados.

    volumes:
      - ./transformer/data/normalized:/data
  2. 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
  3. 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 e local/movie-main-actors.txt para a instância do Redis em execução.

Verificar referências a filmes

  1. Mude o caminho do volume do serviço cinelsd-redis, em docker-compose.yaml para usar os dados normalizados.

    volumes:
      - ./transformer/data/normalized:/data
  2. 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
  3. 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.

Exportar IDs dos atores

  1. Mude o caminho do volume do serviço cinelsd-redis, em docker-compose.yaml para usar os dados normalizados.

    volumes:
      - ./transformer/data/normalized:/data
  2. 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
  3. 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.

Servidores

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.

Servidor Go

Tendo os dados normalizados disponíveis em transformer/data/normalized/dump.rdb, é possível fazer a configuração do servidor Go.

  1. Entre no projeto do servidor e instale as dependências.

    cd server/go
    go mod download
  2. Mude o caminho do volume do serviço cinelsd-redis para usar os dados normalizados em docker-compose.yaml.

    volumes:
      - ./transformer/data/normalized:/data
  3. 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
  4. 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.

Servidor Node.js

Tendo os dados normalizados disponíveis em transformer/data/normalized/dump.rdb, é possível fazer a configuração do servidor Node.js.

  1. Entre no projeto do servidor e instale as dependências.

    cd server/node
    pnpm install
  2. Mude o caminho do volume do serviço cinelsd-redis para usar os dados normalizados em docker-compose.yaml.

    volumes:
      - ./transformer/data/normalized:/data
  3. 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
  4. 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.

Deploy

Servidores

O deploy dos servidores é feito usando Docker e Docker Compose.

  1. Declare um arquivo .env.production.local dentro de docker, caso não exista. Este arquivo deve conter as variáveis listadas em .env.example.

Servidor Go

  1. Faça a build da imagem do servidor:

    docker/compose.sh prod build cinelsd-server-go
  2. Siga o passo 1 da configuração do transformer para baixar os dados normalizados.

  3. 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.

Servidor Node.js

  1. Faça a build da imagem do servidor:

    docker/compose.sh prod build cinelsd-server-node
  2. Siga o passo 1 da configuração do transformer para baixar os dados normalizados.

  3. 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.

Monitoramento

Para monitoramento, são usados o Prometheus e o Grafana.

  1. Inicie o Prometheus e o Grafana:

    docker/compose.sh prod up cinelsd-prometheus cinelsd-grafana -d --wait
  2. 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 com sudo.

Após isso, o Prometheus estará disponível na porta 9000 e a interface do Grafana, na porta 9001.

About


Languages

Language:TypeScript 82.7%Language:Go 9.5%Language:Dockerfile 4.6%Language:Shell 3.2%