Rodando o projeto do curso de Deploy localmente
Use esta página para executar o projeto Dream Catcher extraído no seu computador e obter uma interpretação de sonho com sua própria chave OpenAI. Sua cópia mantém os sonhos em um de dois bancos de dados: um arquivo SQLite que vem dentro da pasta, ou um banco de dados PostgreSQL que você conecta. A maioria da configuração é igual para ambos; a versão PostgreSQL precisa de mais algumas linhas, marcadas abaixo.
O que você precisa primeiro
Instale uma versão LTS suportada do Node.js. Node 24 é recomendado e inclui npm.
Verifique se ambos os comandos funcionam. Seus números de versão podem ser diferentes:
$ node --version
v24.18.0
$ npm --version
11.18.0Você também precisa de uma chave de API da OpenAI, porque o servidor pede à OpenAI uma interpretação para cada sonho. A chave fica no servidor, em um arquivo no seu computador, e nunca chega ao navegador.
Depois descubra qual versão você tem. Abra um terminal na pasta Dream Catcher extraída, aquela que contém package.json e server.js, e liste seus arquivos:
$ cd caminho-para-sua-pasta-dream-catcher
$ ls
README.md package.json
config public
dreams.db routes
hint.md server.js
package-lock.json utilsSe a lista inclui dreams.db, você tem a versão SQLite: o banco de dados é esse arquivo, e não há nada mais para configurar. Se não há dreams.db, você tem a versão PostgreSQL, e também precisa de um banco de dados PostgreSQL e sua string de conexão, uma URL que começa com postgresql:// ou postgres://. Um banco de dados hospedado é a escolha mais simples, como aquele que você configurou no Render para o deploy do curso. Os bancos de dados gratuitos do Render expiram 30 dias após serem criados, então se o seu já se foi, crie um novo.
Ignore o README.md na pasta. Ele descreve uma versão antiga do app, com um provedor de IA diferente e porta diferente.
node --version e npm --version imprimem uma versão, e tenha uma chave de API OpenAI pronta. Depois execute ls na pasta do projeto. Se você vê dreams.db, não precisa de mais nada; se não, você também precisa de uma URL de banco de dados PostgreSQL.
Instale os pacotes
No mesmo terminal, instale as versões exatas que o projeto lista em seu lockfile:
$ npm cinpm termina dizendo quantos pacotes foram adicionados. Também imprime avisos sobre pacotes descontinuados, vulnerabilidades e allow-scripts. Nenhum deles impede o projeto; deixe como estão.
npm ci na pasta que contém package.json, e espere pela linha que diz quantos pacotes foram adicionados. Os avisos depois dela são esperados. Se npm diz que não consegue encontrar package.json, você está na pasta errada.
Faça npm start ler seu arquivo .env
O servidor lê suas configurações de process.env, mas o comando start do projeto não carrega um arquivo .env, então o servidor iniciaria sem sua chave e pararia imediatamente. Abra package.json e altere:
"start": "node server.js"para:
"start": "node --env-file=.env server.js"Node agora lê .env em si, uma vez, antes de o código do servidor executar. Se o arquivo estiver faltando, Node para com node: .env: not found.
Depois abra .gitignore. Deve listar .env, então Git nunca salva sua chave, e node_modules. Na versão SQLite, a segunda linha está com a grafia errada mode_modules; corrija para que leia:
node_modules
.envMantenha as linhas logs e *.log que já estão lá. O manual Git explica por que essas entradas importam em ignorando arquivos e boas práticas.
package.json, adicione --env-file=.env ao script start. Depois verifique que .gitignore lista node_modules e .env, com a grafia exata. Adicione seu .env e inicie
Crie um arquivo chamado .env ao lado de package.json. A versão SQLite precisa apenas da linha chave; a versão PostgreSQL também precisa da linha DATABASE_URL:
# Apenas versão PostgreSQL
DATABASE_URL=postgresql://usuario:senha@host:5432/database
OPENAI_API_KEY=sua-chave-openai-aquiPara PostgreSQL, substitua a URL de exemplo inteira pela que seu host fornece para conectar de fora de sua própria rede (no Render, a URL externa no menu Connect do banco de dados). O servidor usa gpt-4o-mini e porta 3001 a menos que você adicione linhas OPENAI_MODEL ou PORT para escolher outros.
Inicie o servidor:
$ npm start
Server running on http://localhost:3001A versão PostgreSQL primeiro imprime Database initialized: ela se conecta ao banco de dados e cria sua tabela antes de começar a escutar, então Server running aparece apenas uma vez que o banco de dados respondeu. Se o terminal imprime Failed to initialize database: em vez disso, o servidor parou; a resolução de problemas abaixo combina com o erro depois dele. Na versão PostgreSQL, você também pode abrir http://localhost:3001/health; uma conexão funcionando responde com JSON que inclui "status":"ok" e "db":"connected".
Abra http://localhost:3001. A página mostra Add a New Dream e, sob Your Dream Journal, "No dreams yet", porque ambos os bancos de dados começam vazios. Descreva um sonho e clique Get Interpretation. O botão lê Interpreting... enquanto OpenAI escreve, e depois seu sonho aparece no diário com sua interpretação.
Se a interpretação falhar, a página mostra um erro: "Network error. Please check your connection and try again." na versão SQLite, que mostra essa mensagem para toda falha, ou "AI service temporarily unavailable." na versão PostgreSQL. De qualquer forma, olhe para o terminal, não sua conexão. O motivo segue OpenAI API error:, acima de um bloco longo de detalhes; a resolução de problemas abaixo combina com cada um.
Pare o servidor com Ctrl+C. Node lê .env apenas quando o servidor inicia, então reinicie após qualquer alteração em .env. A versão PostgreSQL ainda tem a rota de teste /shutdown da lição, que para o servidor quando aberta; delete antes de fazer deploy.
.env. Execute npm start, aguarde Server running, e abra http://localhost:3001. Adicione um sonho e clique Get Interpretation. Se a página mostra um erro, leia o terminal: o motivo está impresso lá.
Resolução de problemas
OpenAIError: The OPENAI_API_KEY environment variable is missing or empty quando você inicia: O servidor parou antes de poder escutar; a mensagem vem logo após algumas linhas apontando para openai/index.mjs. Verifique que o script start contém --env-file=.env, que .env está ao lado de package.json, e que o nome é exatamente OPENAI_API_KEY.
node: .env: not found: O script start está correto, mas não há .env na pasta de onde você iniciou. Crie ao lado de package.json.
401 Incorrect API key provided: A chave chegou à OpenAI, mas OpenAI não a aceitou. Copie novamente de sua conta OpenAI, salve .env, e reinicie o servidor.
429 You exceeded your current quota: A chave funciona, mas a conta não tem crédito para gastar. Adicione crédito em Billing em sua conta OpenAI, depois tente novamente.
The model ... does not exist: OpenAI planeja desligar gpt-4o-mini em 14 de janeiro de 2027. Depois disso, adicione uma linha OPENAI_MODEL a .env com o substituto que a página de descontinuações da OpenAI nomeia, e reinicie.
Error: Could not locate the bindings file (versão SQLite): O driver SQLite para seu computador está faltando. Delete node_modules e execute npm ci novamente nesta pasta. Não copie node_modules de outro computador.
Failed to initialize database: com ENOTFOUND: O nome do host em DATABASE_URL não existe em sua rede. Verifique que você substituiu a URL de exemplo inteira, e que você copiou a URL externa, não uma interna que funciona apenas dentro da rede do seu host.
Failed to initialize database: com ECONNREFUSED: Nada respondeu naquele endereço. Se o erro nomeia a porta 5432 no seu próprio computador (::1 ou 127.0.0.1), DATABASE_URL está faltando em .env ou aponta para um PostgreSQL que não está executando.
Failed to initialize database: com password authentication failed: O nome de usuário ou senha em DATABASE_URL está errado. Copie a URL novamente de seu host de banco de dados.
Failed to initialize database: com The server does not support SSL connections: Você está usando um servidor PostgreSQL sem criptografia, geralmente um no seu próprio computador. Para uso local apenas, adicione ?sslmode=disable ao final de DATABASE_URL, ou use um banco de dados hospedado em vez disso.
Error e combine suas palavras com um título em negrito acima. Depois corrija .env ou o arquivo nomeado, e execute npm start novamente. 
