Executar o projeto do curso de Deployment localmente
Use esta página para rodar o projeto Dream Catcher extraído no seu computador. A versão que você tem usa ou o banco SQLite incluído ou um banco PostgreSQL separado. Identifique essa versão primeiro e depois siga o setup local correspondente.
O que você precisa primeiro
Instale uma versão LTS suportada do Node.js. Node 24 é recomendado e inclui npm. Prepare uma chave e um nome de modelo para o provedor importado pelo seu projeto.
A versão PostgreSQL também precisa de um banco PostgreSQL acessível e sua string de conexão, a URL postgresql:// que nomeia seu usuário, senha, host e banco. Um banco PostgreSQL hospedado funciona se você não rodar um localmente. A versão SQLite inclui seu arquivo de banco e não precisa de um serviço de banco separado.
Se sua versão usa PostgreSQL, crie esse banco primeiro e mantenha sua string de conexão à mão. O app não consegue iniciar sem ela.
Identifique a versão que você extraiu
Se o projeto extraído inclui dreams.db, use as instruções SQLite. Não precisa de um serviço de banco separado. Se seu servidor espera DATABASE_URL, use as instruções PostgreSQL e prepare um banco PostgreSQL acessível.
As dependências em package.json confirmam: pg aparece na versão PostgreSQL e o driver SQLite nativo sqlite3 aparece na anterior. O import em config/database.js mostra qual módulo de banco o servidor realmente usa.
Abra um terminal na pasta que contém package.json:
$ cd path-to-your-downloaded-projectO README incluído está desatualizado
O README nos downloads descreve uma aplicação Claude e SQLite mesmo depois que o código migrou para OpenAI ou Gemini e PostgreSQL. Use o package.json baixado, imports e arquivos de servidor como referência.
dreams.db ou um servidor que espere DATABASE_URL. Isso te diz se deve seguir as instruções SQLite ou PostgreSQL, então verifique antes de configurar qualquer coisa. Carregue um arquivo .env local
O servidor baixado lê process.env, mas seu comando de início não carrega um arquivo .env local. Abra package.json e mude:
"start": "node server.js"para:
"start": "node --env-file=.env server.js"Isso usa o suporte built-in do Node para arquivo de ambiente sem adicionar outra dependência. Node para com um erro se o arquivo nomeado por --env-file está faltando, e variáveis já definidas no seu shell têm precedência sobre os valores do arquivo. O projeto Intro to AI Engineering precisa da mesma mudança --env-file para seu backend.
Certifique-se de que .gitignore contém ambas as linhas:
.env
node_modules/Verifique a ortografia de ambas as linhas no arquivo baixado antes de fazer commit. O manual Git cobre por que essas entradas importam em ignorando arquivos e boas práticas.
--env-file=.env ao script de início para que Node leia seu arquivo de configurações. Depois verifique que .gitignore lista .env e node_modules/, para que suas chaves e pacotes instalados fiquem fora do Git.
Execute a versão SQLite
O snapshot Push to GitHub importa a implementação OpenAI por padrão. Crie .env ao lado de package.json:
OPENAI_API_KEY=your-api-key-here
OPENAI_MODEL=your-model-id
PORT=3001DATABASE_PATH é opcional. Sem ela, o servidor usa dreams.db na pasta do projeto. Se você definir um caminho customizado, certifique-se de que seu diretório existe e é gravável.
Instale as dependências travadas e inicie o servidor. npm ci instala exatamente as versões no arquivo lock, e o pacote SQLite nativo precisa de uma instalação limpa porque é compilado para seu sistema operacional e versão do Node:
$ npm ci
$ npm start
> [email protected] start
> node --env-file=.env server.js
Server running on http://localhost:3001Abra http://localhost:3001/ ou a porta que você colocou em .env. Pare o servidor com Ctrl+C.
O projeto também contém uma implementação Gemini, mas a rota importa o arquivo OpenAI por padrão. Se você seguir o código de alternância de provedor do curso, use GEMINI_API_KEY e opcionalmente GEMINI_MODEL em vez disso.
.env, execute npm ci e npm start, depois abra a porta 3001 no seu navegador. O arquivo de banco já vem com o projeto, então não há nada mais para configurar.
Execute a versão PostgreSQL
O projeto posterior substitui SQLite com PostgreSQL. Crie um banco primeiro, depois adicione sua string de conexão a .env junto com a configuração de IA:
DATABASE_URL=postgresql://user:password@host:5432/database
OPENAI_API_KEY=your-api-key-here
OPENAI_MODEL=your-model-id
PORT=3001Depois execute:
$ npm ci
$ npm startO projeto final inicializa suas tabelas antes de escutar, então Server running on http://localhost:3001 aparece apenas uma vez que o banco responde. Se o banco está inacessível ou rejeita suas configurações TLS, a inicialização para com Failed to initialize database: seguido pelo erro. O texto do erro aponta para a causa: ENOTFOUND significa o hostname não resolveu, password authentication failed significa as credenciais, e uma mensagem SSL ou TLS significa as configurações de criptografia. O código do curso solicita uma conexão SSL, que serve bem para um banco hospedado; se seu PostgreSQL local não tem TLS, as configurações de conexão precisam corresponder.
O endpoint /health verifica a conexão após inicialização:
http://localhost:3001/healthUm servidor saudável responde com JSON que inclui "status": "ok" e "db": "connected". Se o banco cair depois, a mesma URL retorna "db": "disconnected" com a mensagem de erro do banco.
Remova a rota temporária de desligamento
A lição Terminating Processes & Signals inclui um endpoint /shutdown apenas para testar encerramento gracioso. Siga as instruções da lição para deletar essa rota antes de compartilhar ou fazer deploy da aplicação. Deixar uma URL pública que termina seu servidor não é seguro.
.env, inicie o app, depois visite /health e procure por "db": "connected". Remova a rota temporária de desligamento antes de compartilhar o app com alguém.
Solução de problemas
OPENAI_API_KEY environment variable is missing or empty: Confirme que o script de início contém --env-file=.env, que .env está ao lado de package.json, e que o nome da variável combina com o arquivo de provedor importado.
A página abre mas criar um sonho retorna um erro de IA: Verifique a chave de provedor e modelo juntos. Nenhuma requisição de IA ao vivo é necessária para verificar que a página e a API de sonho existente funcionam.
SQLite relata um erro de módulo nativo: Reinstale de uma extração limpa com a versão LTS do Node suportada, usando npm ci. Não copie node_modules de outro sistema operacional.
Inicialização do PostgreSQL falha: Leia o erro após Failed to initialize database:, depois verifique a DATABASE_URL completa, acesso à rede do banco, credenciais e requisitos de TLS. O código final do curso solicita uma conexão SSL.
O banco está vazio após mudar versões: Dados SQLite em dreams.db não aparecem automaticamente em PostgreSQL. Execute os passos de migração do curso ou seed o novo banco separadamente.
Dados SQLite não se movem para PostgreSQL sozinhos, então uma lista de sonhos vazia após mudar é esperada até você migrar ou fazer seed.

