deploy目录是运行配方不是另一套应用

**monorepo 三层分工:`apps/` 是程序本身做什么,`packages/` 是程序复用哪些能力,`deploy/` 是程序怎么运行到服务器上。`deploy/` 不放业务逻辑,它是现有 app 的「安装和启动说明」。**

一、判断某个文件该放哪

内容归属
某个可独立启动的服务/命令apps/
被多个 app 复用的适配器、schema、类型packages/
Dockerfile、compose、.env.*.example、部署 READMEdeploy/

推论:通用 provider adapter 放 packages/,workflow 编排放 apps/ —— 前者被复用,后者是可执行逻辑。

二、一个易混点:配置放在 deploy,但读取方是 app

deploy/<service>/.env.* 只是把配置注入容器/进程;运行时实际读取配置的仍然是 apps/ 里的代码。调用链是:

deploy/<svc>/compose.yml
→ 启动 apps/<svc> 的命令
→ apps/<svc> 执行
→ packages/* 调外部服务 / 读写数据库

所以「环境变量该放哪」要问两个问题:谁读取它(决定文件属于哪个服务的配置契约),谁部署它(决定文件放在哪个 deploy 目录)。

三、配置按边界分,不按习惯分

沿用 web 的根目录 .env.local 习惯到独立的 worker 服务上是错的:worker 属于后台进程,不是 web。每个可独立部署的单元应有自己的配置契约(并配 .example + gitignore),既避免把某类专用 key 暴露给 web 进程,也让预览/生产沿用同一份契约。

相关