跳转至

技术栈

生态系统的所有平台都运行在同一套技术栈上。这并非偶然:开发者从一个仓库转到 另一个仓库时无需重新学习,安全修复也能以同一种形态推广到所有系统。

Gerege Nexus 的不同之处

Gerege Nexus 跑在同一套技术栈上(Go · chi · pgx · 不用 ORM · Next.js App Router),但有三点不同:它是模块化单体(模块编译进 同一个二进制,并通过应用商店按租户分发)、使用 goose 做迁移,且只依赖 PostgreSQL,不用 Redis。版本:Go 1.25 · Next.js 15。

后端

组件 选型
语言 Go 1.26
HTTP 标准库 net/http + go-chi/chi 路由
数据库 PostgreSQLjackc/pgx(pgxpool),手写 SQL
缓存 / 会话 Redis
架构 Clean Architecture — handler → usecase → repository → domain

为什么不用 ORM?

数据层基于 pgx 采用手写 SQL。原因有二:可以直接使用深植于 PostgreSQL 自身的能力——行级安全(RLS)、CTE、LISTEN/NOTIFY、JSONB——而不必透过 ORM 的抽象;同时也不必去猜测最终会生成什么样的查询。

Clean Architecture 的硬性规则:不得反向引用。 业务内核(domainusecase永远不会 import Web 框架。正是这一点保证了替换 HTTP 层时业务逻辑不受影响。

前端

组件 选型
框架 Next.js 15/16,App Router
模式 BFF(Backend-for-Frontend)
数据层 TanStack Query

这里的 BFF 是什么意思:浏览器从不直接访问后端,只与同域下的 Next.js 路由通信,再由这些路由在服务端侧代理到后端。

结果是:令牌永远不会进入客户端 JavaScript——改用 cookie 会话,XSS 也就不再是 窃取令牌的途径。在此之上还有双重 CSRF 防护:自定义请求头加 origin 校验。

移动端与桌面端

平台 技术
iOS Swift、SPM SDK(GeregeSmartID)+ 各品牌应用
Android Kotlin / Jetpack Compose SDK
macOS SwiftUI RP 客户端 + USB token 套件
Windows MSIX(已签名)
Web RP TypeScript SDK

AI 流水线

基于 Gemini 构建,采用无 SDK 的 REST 客户端 + function calling:

  • 文本与语音对话;
  • STT(语音 → 文本)与 TTS(文本 → 语音);
  • 实时翻译;
  • 基于 pgvector 的知识库——从代码与文档中建立索引;
  • 以用户所用语言作答;无需登录的聊天挂件。

分层 system prompt:代码中硬编码的基础护栏(guardrail),加上管理员通过 数据库配置的适用范围与指令。这样助手就只会停留在既定边界之内。 search_knowledge 工具让回答立足于知识库中的真实数据,避免凭空编造。

密码学

签名代码是从 Java/Spring 原系统移植而来,因此必须在协议层面保持完全兼容。 这一点由冻结的 golden vectors 锁定:

  • SEC1 压缩格式的 EC 点序列化;
  • Java BigInteger.toByteArray() 的语义(符号字节的行为)。

Go 服务端、iOS SDK、Android SDK 三者必须产出逐字节一致的结果。

切勿删除 golden vector

golden.json 文件无法重新生成。它们是与原系统兼容性的唯一证明。修改 密码学相关代码时,必须用这些测试进行校验。

基础设施

组件 选型
容器 Docker Compose
CI/CD GitHub Actions(含自托管的 Windows/macOS runner)
Edge nginx —— TLS 终止、限流、反向代理
证书 Let's Encrypt(certbot、webroot)
文档 MkDocs Material + mkdocs-static-i18n,多语言

详情请见部署CI/CD页面。

可观测性

  • OpenTelemetry —— 分布式链路追踪;
  • Prometheus —— 指标(/metrics);
  • Zap —— 结构化日志;
  • 审计日志 —— 哈希链式、仅追加;仅管理员可读,并可校验完整性。

生产环境须关闭

/metrics/swagger 在生产环境中由 bearer token 保护。它们会暴露 内部结构,敞开放置会带来信息泄露风险。

测试

  • 单元测试 —— 位于业务逻辑层;
  • testcontainers 集成测试 —— 对接真实的 PostgreSQL/Redis;
  • golden vector 测试 —— 验证密码学兼容性。