twenty开源CRM完整实用指南:自托管部署、数据模型定制与应用扩展
【免费下载链接】twentyThe open alternative to Salesforce, designed for AI.项目地址: https://gitcode.com/GitHub_Trending/tw/twenty
本文写给准备自建客户管理系统的开发和运维同学:10 分钟内部署一套自托管的 twenty 开源 CRM,并按"跑通 → 适配业务 → 接入自动化与扩展应用"三步,把对象、字段、工作流改成贴合你业务的形态。
🚀 阶段一 · 快速上手:两条路径跑通 twenty
结论先行:生产环境装 Docker 即可,开发场景才需要拉源码。
一键自托管部署:一个脚本拉起全套服务
官方 1-click 脚本会先检查 Docker、docker compose v2 和 curl,然后拉取 compose 文件与.env模板,一次性启动 server、worker、PostgreSQL、Redis 共 4 个服务。
git clone https://gitcode.com/GitHub_Trending/tw/twenty bash twenty/packages/twenty-docker/scripts/1-click.sh第一行克隆仓库,第二行执行部署脚本。想锁定版本时加前缀即可,例如VERSION=v0.32.4 bash ...指定 0.32.4。compose 定义在 packages/twenty-docker/,需要自定义镜像或网络时直接改这里。
本地开发环境:yarn 安装后一条命令起前端
twenty 是 Nx 管理的多包 monorepo,前端、后端、共享 UI 都在同一仓库里。装完依赖后,用 Nx 单独起前端即可:
yarn install npx nx serve twenty-front前端业务模块集中在 packages/twenty-front/src/modules/,后端引擎在 packages/twenty-server/src/engine/。只改服务端时跑npx nx worker twenty-server即可,不必全量启动。
📐 阶段二 · 适配业务:数据模型与视图怎么改
twenty 的核心思路是把 CRM 当代码做:对象、字段、视图都能用 TypeScript 声明,随 Git 走版本管理。
自定义对象与字段:一个文件声明一个业务对象
场景:销售团队需要一个"Deal"对象,含金额和关单日期。用 twenty-sdk 的defineObject,在单个文件里写清对象单复数名和字段类型(文本、货币、日期时间等),发布后对象即刻出现在工作区。
字段类型全集和命名约定参考 官方文档 的 apps 章节,视图配置则落在前端 views 模块,支持表格、看板、日历切换。
权限与角色:按对象和字段收放访问
系统预置管理员、标准用户、只读等角色模板,你在设置页按对象级和字段级两档粒度调整。字段级权限适合"普通成员可见客户名、不可见回款金额"这类场景,无需改一行代码。
⚡ 阶段三 · 自动化与扩展:Webhook 和自研应用
当内置能力不够时,twenty 给你两条路:事件外推,或发布自己的 App。
Webhook 与 API:把 twenty 接进现有系统
以"新建公司记录即触发外部通知"为例:在设置里开启 Advanced,创建一个 webhook,填上接收端 URL,过滤条件选 Companies 的 Created 事件,worker 就会把每次写入 POST 出去。
配合 GraphQL/REST API,你可以用脚本批量读写记录,把 twenty 当数据中台用。
应用开发:从脚手架到发布 4 条命令
npx create-twenty-app my-app脚手架来自 create-twenty-app 包,生成标准目录和示例代码;开发完执行npx twenty app:publish --private发布到工作区。仓库里的 twenty-apps 目录 有 call-recorder、Slack、Linear 等开源示例可直接抄。下面这种带模板视图的 App 就是文档生成器的实际效果:
🛠 运维与排障:高频问题清单
- 装完无法登录:在 server 容器里跑
npx nx database:reset --configuration=no-seed后重建容器(会清库,仅限全新环境) - 改密码后认证失败:
PG_DATABASE_PASSWORD会固化在数据库卷里,改.env需连同卷一起重建 - 邮件收不到:多半是 worker 没跑,补一条
npx nx worker twenty-server - 工作流报 Logic function 被禁用:生产环境默认关闭,将
LOGIC_FUNCTION_TYPE设为 LOCAL 或 LAMBDA - AI 对话需刷新才见回复:反向代理缺流式配置,关掉
proxy_buffering和 gzip - 存量数据迁移:前端内置电子表格批量导入模块,CSV 清洗后直接导入
- 完整排查手册见 troubleshooting 文档
社区与贡献
遇到问题先翻仓库 issue,再进 Twenty 官方 Discord 社区提问。翻译可在 Crowdin 上认领语言包,代码贡献直接提 PR,遵循仓库根目录的贡献指南即可。
【免费下载链接】twentyThe open alternative to Salesforce, designed for AI.项目地址: https://gitcode.com/GitHub_Trending/tw/twenty
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考