ChuhaiCRM

开源的多租户 CRM

客户、商机、报价、交付、财务、审批 —— 给在印尼做企业服务的公司用。Go 后端、PostgreSQL 行级安全、React 前端。

早期但是真的在跑:后端已上线,租户隔离已验证。财务和提成还没做 —— 决定用之前先看「当前状态」。

235条产品目录已在跑
3种语言,全站覆盖
RLS租户隔离已在数据库里验证
AGPL-3.0源码公开,可谈商业授权

现在到底做到哪一步

和 README 同一张表,照实写。没在生产跑起来的,一律不标完成。

Go 后端地基(租户 / 认证 / 权限) 已上线
代码完成,已在生产跑着。
多租户隔离(PostgreSQL RLS) 已上线
已在真实数据库上验证:一个租户碰不到另一个租户的数据,显式写查询也碰不到。
React 前端 进行中
25 个模块页面都在。service 层正按模块从老 PHP 协议迁到 Go API。
业务模块(客户 / 商机 / 交付 / 财务…) 进行中
产品、客户、商机、报价、交付已经能用。财务与提成还没写。

怎么搭的

Go 1.23 + Echo v4
中间件链承担租户注入、鉴权、限流。
PostgreSQL 16 + 行级安全
每请求 SET app.tenant_id。应用以非 owner 角色连库,handler 漏写 WHERE tenant_id 数据库也挡得住。
sqlc + pgx/v5
手写 SQL 生成类型安全 Go。不用 ORM,报表跑的就是你读到的那条查询。
JWT,access 15 分钟 + refresh 7 天可吊销
登录为租户 code + 用户名 + 密码;用户名在租户内唯一。
React 18 + umi + Ant Design
全站三语:English、Bahasa Indonesia、简体中文。

接下来做什么

按这个顺序。前一步没跑通,后一步没有意义。

  1. 把前端 service 层剩下的部分按模块从 PHP action 协议迁完到 Go REST API。
  2. 做交付的文件上传 —— 让任务的资料存在系统里,而不是散在聊天记录里。
  3. 写财务与提成模块 —— 最后两块还没做的业务。

许可证

AGPL-3.0。AGPL 和 GPL 的差别只在一处,但对 CRM 正好要紧:把改过的版本架在网上给别人用,就必须向那些使用者提供你这个版本的源码。自己用、或原样部署不触发任何义务。

AGPL 不合适的话 —— 比如想基于它开发但不公开改动 —— 可以单独谈商业授权,开 issue 即可。