个人项目中 Monorepo, pnpm workspace, Turborepo, prisma 和 Docker 如何协作?

pnpm workspace + Turborepo 负责定义管理共享包和编排脚本调度任务;Prisma 负责数据层;Docker 负责在本地提供 PostgreSQL 数据库;生产环境还是【源码构建 + PM2 + Nginx】部署,不是 Docker 容器化部署。

五者职责一览

本地开发协作流程

启动本地数据库 Docker

bash 复制代码
cd apps/server
docker compose up -d // 根据当前目录下的 docker-compose.yml,创建并启动其中定义的所有服务,并在后台运行。

apps/server/docker-compose.yml 只定义了一个服务:

yaml 复制代码
 services:
   postgres:
     image: postgres:15-alpine
     container_name: wristellar-postgres
     environment:
       POSTGRES_USER: ${POSTGRES_USER:-wristellar}
       POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-wristellar}
       POSTGRES_DB: ${POSTGRES_DB:-wristellar}
     ports:
       - "5432:5432"
     volumes:
       - postgres_data:/var/lib/postgresql/data
     healthcheck:
       test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-wristellar} -d
${POSTGRES_DB:-wristellar}"]

本地开发时,Docker 的唯一作用就是提供这个 PostgreSQL 实例(这个示例是干嘛的)apps/server/.env 中的 DATABASE_URL 指向它:

env 复制代码
DATABASE_URL=postgresql://wristellar:wristellar@localhost:5432/wristellar?schema=public

安装依赖

pnpm 会:

  • 根据 pnpm-workspace.yaml 配置将指定目录纳入 workspace
  • 把 @wristellar/types 通过 workspace:* 链接到不同应用的 node_modules 中
  • 再安装所有共享/独立依赖

开发运行

bash 复制代码
 pnpm dev           # turbo run dev
 # 或
 pnpm dev:server    # turbo run dev --filter=server

Turborepo 会:

  • dev 命令设置了 persistent: true,Turborepo 会保持进程运行,若启动多个包, server 和 web 会并行运行
  • @wristellar/types 的 dev 设置了 tsc --watch,修改类型定义会实时重新编译

数据库模型迭代

开发中修改表结构时,在 app/server 下执行:

bash 复制代码
 # 根据 schema.prisma 生成新的迁移 SQL 文件到 prisma/migrations/
 pnpm db:migrate     # prisma migrate dev
 # 生成 @prisma/client 的运行时代码和 TypeScript 类型
 pnpm db:generate    # prisma generate
 # 打开可视化数据库管理界面
 pnpm db:studio      # prisma studio

生产部署协作流程

生产环境使用以下流程:

js 复制代码
git pull → pnpm install → pnpm build → prisma migrate deploy → pm2 restart

具体由 scripts/update-server.sh 和 GitHub Actions 的 .github/workflows/deploy.yml 共同完成。

GitHub Actions 自动部署

yaml 复制代码
     jobs:
       lint:
         - pnpm install
         - pnpm lint

       typecheck:
         - pnpm install
         - pnpm typecheck

       build-and-deploy:
         needs: [lint, typecheck]
         - pnpm install
         - NODE_OPTIONS="--max-old-space-size=8192" pnpm build
         - 通过 SSH 在服务器上执行 scripts/update-server.sh
         - 健康检查
         - 失败则回滚

服务器端更新脚本

两种部署优缺点

相关推荐
程序员cxuan9 小时前
Gemini 4 Argon 正式发布!
人工智能·后端·程序员
高晶11 小时前
ARM 嵌入式 Linux 开发:从体系结构到 LED 点亮实战
设计模式·程序员
Hilaku11 小时前
ERP选型时不问MCP,等于默认三年后再付一次集成费!
前端·javascript·程序员
小贺儿开发12 小时前
DeepSeek + Codex + MCP:Unity 游戏开发实测
科技·游戏·unity·ai·程序员·编程·deepseek
阿里嘎多学长1 天前
2026-10-12 GitHub 热点项目精选
开发语言·程序员·github·代码托管
这个DBA有点耶1 天前
研发规模/投入最大的国产数据库厂商是谁?拆解五个衡量维度
数据库·程序员·产品
挖掘狂人1 天前
哈希算法:一根看不见的 "指纹",如何撑起整个互联网
算法·程序员·掘金技术征文
hoLzwEge1 天前
AI签到「一劳永逸」
人工智能·程序员·ai编程
SimonKing1 天前
数据不出本机!本地全文检索+知识图谱,可以试试这个开源项目:KnowSeek
后端·程序员
Hilaku1 天前
一个前端工程师除了写代码,还能靠什么赚钱?
前端·javascript·程序员