在本地运行 Deployment 课程项目
使用本页在你的计算机上运行提取的 Dream Catcher 项目。你拥有的版本使用的是包含的 SQLite 数据库或单独的 PostgreSQL 数据库。先确认是哪个版本,然后按照对应的本地设置说明进行操作。
开始前需要准备什么
安装受支持的 Node.js LTS 版本。推荐使用 Node 24,它已包含 npm。为项目导入的提供商准备一个密钥和模型名称。
PostgreSQL 版本还需要一个可访问的 PostgreSQL 数据库及其连接字符串,即 postgresql:// URL,其中包含用户名、密码、主机和数据库。如果你不在本地运行 PostgreSQL,托管服务的免费层也能用。SQLite 版本已包含数据库文件,不需要单独的数据库服务。
确认你提取的版本
如果提取的项目包含 dreams.db,使用 SQLite 说明。它不需要单独的数据库服务。如果其服务器期望 DATABASE_URL,使用 PostgreSQL 说明并准备一个可访问的 PostgreSQL 数据库。
在包含 package.json 的文件夹中打开终端:
$ cd path-to-your-downloaded-project捆绑的 README 已过时
下载中的 README 描述的是 Claude 和 SQLite 应用,即使代码已迁移到 OpenAI 或 Gemini 和 PostgreSQL。以下载的 package.json、导入和服务器文件为准。
package.json 中的依赖可以确认版本:PostgreSQL 版本包含 pg,较早版本包含原生 SQLite 驱动,服务器文件的导入显示哪个数据库模块是活跃的。
dreams.db 或查看服务器是否需要 DATABASE_URL;这会告诉你是按 SQLite 还是 PostgreSQL 说明操作。现在花十秒钟检查可以省去后面按错误说明操作的时间。 加载本地 .env 文件
下载的服务器读取 process.env,但其启动命令不会加载本地 .env 文件。打开 package.json 并修改:
"start": "node server.js"改为:
"start": "node --env-file=.env server.js"这使用了 Node 的内置环境文件支持,不需要添加额外的依赖。如果 --env-file 指定的文件缺失,Node 会出错停止,而且 shell 中已设置的变量优先于文件中的值。Intro to AI Engineering 项目的后端需要相同的 --env-file 修改。
确保 .gitignore 包含这两行:
.env
node_modules/某个课程快照包含拼写错误 mode_modules;在提交项目前改正为 node_modules/。Git 手册在忽略文件和良好习惯中说明了为什么这些条目很重要。
--env-file=.env 使 Node 读取你的设置文件,并将 .env 和 node_modules/ 保持在 Git 之外。我第一次泄露密钥的教训比任何课程都来得快。 运行 SQLite 版本
Push to GitHub 快照默认导入 OpenAI 实现。在 package.json 旁创建 .env:
OPENAI_API_KEY=your-api-key-here
OPENAI_MODEL=your-model-id
PORT=3001DATABASE_PATH 是可选的。不设置它时,服务器使用项目文件夹中的 dreams.db。如果你设置自定义路径,确保其目录存在且可写。
安装锁定的依赖并启动服务器。npm ci 安装的是 lockfile 中的确切版本,原生 SQLite 包需要这样做,因为它是针对你的操作系统和 Node 版本编译的:
$ npm ci
$ npm start打开 http://localhost:3001/,或者你在 .env 中设置的端口。用 Ctrl+C 停止服务器。
项目还包含 Gemini 实现,但路由默认导入 OpenAI 文件。如果你跟随课程的提供商切换代码,改用 GEMINI_API_KEY 和可选的 GEMINI_MODEL。
.env,运行 npm ci 和 npm start,然后在浏览器中打开 3001 端口。数据库文件已随项目提供,你无需在这里额外设置任何东西。 运行 PostgreSQL 版本
后期项目将 SQLite 替换为 PostgreSQL。先创建一个数据库,然后将其连接字符串连同 AI 配置一起添加到 .env:
DATABASE_URL=postgresql://user:password@host:5432/database
OPENAI_API_KEY=your-api-key-here
OPENAI_MODEL=your-model-id
PORT=3001然后运行:
$ npm ci
$ npm start最终项目在监听前初始化其表。如果数据库无法访问或拒绝其 TLS 设置,启动会停止并报告数据库错误。错误文本指向原因:ENOTFOUND 表示主机名未解析,password authentication failed 表示凭证问题,SSL 或 TLS 消息表示加密设置问题。课程代码要求 SSL 连接,所以不使用 TLS 的本地 PostgreSQL 需要在连接字符串中调整该要求。/health 端点在启动后检查连接:
http://localhost:3001/health删除临时关闭路由
Terminating Processes & Signals 课程包含的 /shutdown 端点仅用于测试优雅终止。按照课程说明删除该路由,然后再分享或部署应用。留下一个会终止服务器的公开 URL 是不安全的。
.env 中,启动应用,然后访问 /health 来确认连接。在与任何人分享应用前删除临时关闭路由;我自己也忘过这一步,这不是一个你想在共享应用中留下的东西。 故障排除
OPENAI_API_KEY environment variable is missing or empty: 确认启动脚本包含 --env-file=.env,.env 在 package.json 旁,且变量名与导入的提供商文件匹配。
页面打开但创建梦返回 AI 错误: 检查提供商密钥和模型。无需实时 AI 请求即可验证页面和现有梦 API 是否工作。
SQLite 报告原生模块错误: 使用推荐的 Node LTS 从干净提取重新安装,使用 npm ci。不要从另一个操作系统复制 node_modules。
PostgreSQL 启动失败: 检查完整的 DATABASE_URL、数据库网络访问、凭证和 TLS 要求。最终课程代码要求 SSL 连接。
切换版本后数据库为空: SQLite 中的 dreams.db 数据不会自动出现在 PostgreSQL 中。运行课程的迁移步骤或单独为新数据库填充数据。

