1
resposta

Problema na criação do container da API - Curso Spec Driven Development: desenvolvimento assistido por agentes

Tentei seguir o README da API descrita na aula "Preparando o ambiente" e não encontrei o arquivo .env.
O .env está no .gitignore.

Ao tentar criar o container da API:
$ docker compose up -d
WARN[0000] The "NODE_ENV" variable is not set. Defaulting to a blank string.
WARN[0000] The "DATABASE_URL" variable is not set. Defaulting to a blank string.
WARN[0000] The "REDIS_HOST" variable is not set. Defaulting to a blank string.
WARN[0000] The "REDIS_PORT" variable is not set. Defaulting to a blank string.
WARN[0000] The "JWT_ACCESS_EXPIRATION" variable is not set. Defaulting to a blank string.
WARN[0000] The "PORT" variable is not set. Defaulting to a blank string.
WARN[0000] The "JWT_ACCESS_SECRET" variable is not set. Defaulting to a blank string.
WARN[0000] The "JWT_REFRESH_SECRET" variable is not set. Defaulting to a blank string.
WARN[0000] The "JWT_REFRESH_EXPIRATION" variable is not set. Defaulting to a blank string.
WARN[0000] The "PORT" variable is not set. Defaulting to a blank string.
WARN[0000] The "PORT" variable is not set. Defaulting to a blank string.
no port specified: :

1 resposta

Olá, Mario. Como vai?

Esse comportamento que você enfrentou é um clássico no desenvolvimento de software e acontece exatamente pelo motivo que você identificou: o arquivo .env está listado no .gitignore.

Por boas práticas de segurança, arquivos contendo variáveis de ambiente e dados sensíveis (como senhas, chaves de criptografia e URLs de bancos de dados) nunca são enviados para o repositório do GitHub. É por isso que ele fica oculto no .gitignore.

Para resolver esse problema e subir o seu container com sucesso, você precisa criar manualmente esse arquivo local na sua máquina antes de rodar o Docker. Siga o passo a passo abaixo:

1. Localize o arquivo de exemplo
Geralmente, os projetos disponibilizam um arquivo chamado .env.example ou .env.dist na raiz do projeto. Esse arquivo serve como um molde, contendo apenas os nomes das variáveis sem os valores reais.

2. Duplique e renomeie o arquivo
Você deve copiar o arquivo de exemplo e renomear a cópia para exatamente .env. Se preferir fazer pelo terminal, basta navegar até a pasta raiz do projeto e rodar o comando:

cp .env.example .env

(Caso não exista um arquivo de exemplo, você pode criar um arquivo texto em branco na raiz, batizá-lo de .env e colar as variáveis apontadas pelos avisos do Docker).

3. Preencha os valores das variáveis
Abra o novo arquivo .env no seu editor de código (como o VS Code) e preencha as informações necessárias. Com base nos avisos que o Docker disparou, o seu arquivo precisará de definições estruturadas como estas:

NODE_ENV=development
PORT=3000
DATABASE_URL=postgresql://usuario:senha@localhost:5432/nome_do_banco
REDIS_HOST=redis
REDIS_PORT=6379
JWT_ACCESS_SECRET=sua_chave_secreta_aqui
JWT_ACCESS_EXPIRATION=15m
JWT_REFRESH_SECRET=outra_chave_secreta_aqui
JWT_REFRESH_EXPIRATION=7d

Dica importante: No contexto do curso e do uso do docker-compose, muitas vezes os valores do banco de dados e do Redis já vêm pré-configurados no .env.example para apontar diretamente para os serviços que o próprio Docker vai criar. Confira no arquivo de apoio da atividade se há valores específicos recomendados pelo instrutor para essas chaves.

4. Suba o container novamente
Após salvar o arquivo .env preenchido na raiz do projeto, o Docker Compose conseguirá ler essas informações automaticamente. Rode o comando para criar o container:

docker compose up -d

O erro final no port specified vai desaparecer assim que a variável PORT estiver preenchida corretamente dentro do arquivo .env.

Espero que possa ter lhe ajudado!