-
Assegure-se de ter o docker/docker-compose, bem como um gerenciador de pacotes como pnpm, yarn ou npm, instalados em sua máquina.
-
Clone o repositório:
git clone https://github.com/CITi-UFPE/node-boilerplate.git
- Instale as dependências:
pnpm install
# or
yarn install
# or
npm install
- Crie um arquivo .env na raiz do projeto, com as seguintes variáveis de ambiente:
# ###### GENERAL SETTINGS #######
PROJECT_NAME=boilerplate
# ###### SERVER SETTINGS #######
SERVER_PORT=3001
NODE_ENV=development
# ###### DATABASE SETTINGS #######
DATABASE_TYPE=postgres
DATABASE_HOST=${PROJECT_NAME}-db
DATABASE_PORT=5432
DATABASE_USER=postgres
DATABASE_PASSWORD=docker
DATABASE_DB=${PROJECT_NAME}
# ###### TEST DATABASE SETTINGS #######
DATABASE_TEST_HOST=localhost
DATABASE_TEST_PORT=5433
DATABASE_TEST_USER=postgres
DATABASE_TEST_PASSWORD=docker
DATABASE_TEST_DB=boilerplate-test
DATABASE_URL=${DATABASE_TYPE}://${DATABASE_USER}:${DATABASE_PASSWORD}@${DATABASE_HOST}:${DATABASE_PORT}/${DATABASE_DB}
# ###### JWT SETTINGS FOR AUTHENTICATION #######
JWT_ACCESS_SECRET=0551c0ed-6389-46b1-839e-2e28fc191c89 # token for 30sec
JWT_REFRESH_SECRET=92fba49f6912d14733332bb9ebaac1562f51ee685594acf103d71f685f70868b # token for 7 days
# ###### S3 SETTINGS FOR FILE UPLOADS #######
S3_ENDPOINT=XXXXXX.digitaloceanspaces.com
S3_BUCKET=exemplo-bucket
S3_KEY=
S3_SECRET=
- Para rodar o servidor, execute:
docker-compose up
NOTE: existem diversas variações do comando docker-compose. Algumas usam hífen, algumas não. Alguma precisam de sudo, outras não. Verifique o que funciona no seu caso e tome de exemplo para as demais instruções.
- Para rodar as migrations, execute com o servidor rodando em outro terminal:
yarn migration
- Voilá! O servidor está rodando.
- Autenticação com JWT;
- Upload de arquivos para o S3;
- Testes de integração com Jest e Supertest;
- Linting com Eslint, para garantir boas práticas;
- Formatação de código com Prettier;
- Documentação com Swagger em
src/docs
- Faz o deploy da branch
main
no Dokku a cada push; - Requer duas variáveis de ambiente no repositório:
PRIVATE_KEY
eHOST
. - Para configurar o Dokku na Digital Ocean, siga este tutorial.;
- Roda o ESLint, Typescript e o builder em todos os pull requests e em pushes na develop;
- Roda os testes de integração em todos os pull requests e em pushes na develop;
-
Bind for 0.0.0.0:3001 failed: port is already allocated:
Você provavelmente já tem um servidor rodando na porta 3001. Pare a execução do outro servidor e tente novamente.
# Para listar os containers rodando, bem como as portas em uso docker ps # Para parar a execução de um container docker stop ID_DO_CONTAINER
-
Cannot find module XXXXXXXXX:
Isso acontece porque o modo em que o docker-compose.yml está configurado monta um volume anônimo para impedir que a node_modules do seu computador sobrescreva a do container. Em outras palavras, o Docker não é capaz de entender que você adicionou uma dependência nova. Portanto, sempre que dependências novas forem instaladas, é necessário rodar:
# Para parar o container e remover os volumes docker-compose down --volumes # Para subir o container novamente e reinstalar as dependências docker-compose up --build
PS: esse comando não é uma bala de prata, mas bem que poderia ser. Se você empacar com qualquer coisa no Docker, é altamente provável que ele resolva seu problema.
Em caso de erros ao rodar yarn migrations, siga o seguinte modelo mental:
- Verifique se o container está rodando. Se não estiver, rode
docker-compose up
e tente novamente em outro terminal. - Delete a pasta de migrations e tente novamente. Isso é uma medida aparentemente extrema, mas não há nada de errado nela a não ser que o projeto já tenha sido deployado em produção. Nesse caso, siga as instruções um pouco mais avançadas neste link, preferencialmente acompanhado de alguém com um pouco mais de conhecimento em SQL.