本文档涵盖了 Joplin 生态系统的服务器端组件。Joplin 服务器为 Joplin 客户端提供同步服务、用户管理和订阅处理。它充当 Joplin Cloud 的骨干,也可以自行托管。本文档重点介绍了服务器架构、数据库连接、路由系统、用户管理和其他核心服务器功能。
有关连接到服务器的客户端应用程序的信息,请参阅 客户端应用程序。
来源: packages/server/src/app.ts1-383 packages/server/src/config.ts1-224
Joplin 服务器基于 Node.js,使用 Koa Web 框架构建。主要组件包括:
来源: packages/server/src/app.ts99-376 packages/server/src/middleware/routeHandler.ts1-98 packages/server/src/routes/routes.ts1-83
服务器的初始化始于 app.ts 文件,其中执行了以下操作:
配置系统支持多种设置,包括:
来源: packages/server/src/app.ts99-376 packages/server/src/config.ts34-221 packages/server/src/env.ts12-286
服务器支持两种数据库系统:SQLite(默认)和 PostgreSQL。数据库层提供:
数据库配置由环境变量决定,开发和生产环境有不同的设置。该系统支持数据库复制,采用主/从设置以实现高可用性。
来源: packages/server/src/db.ts34-512 packages/server/src/app.ts302-366 packages/server/src/config.ts47-84
路由系统负责处理 HTTP 请求并将其定向到相应的处理程序。它支持三种类型的路由:
| 路由类型 | 目的 | 基础 URL |
|---|---|---|
| Web | 面向用户的 HTML 界面 | config().baseUrl |
| API | 面向客户端应用程序的 JSON 端点 | config().apiBaseUrl |
| UserContent | 内容托管(附件等) | config().userContentBaseUrl |
关键路由文件包括:
routes/api/:API 端点(JSON 响应)routes/index/:Web UI 路由(HTML 响应)routes/admin/:管理员界面路由路由器解析 URL 以提取参数,并将其与相应的处理程序匹配,支持嵌套路由和参数化路径。
来源: packages/server/src/middleware/routeHandler.ts1-98 packages/server/src/utils/routeUtils.ts20-326 packages/server/src/routes/routes.ts1-83
The UserModel 处理与用户相关的操作:
用户账户有不同的类型,每种类型都有特定的能力:
| 账户类型 | 共享 | 文件大小限制 | 总存储空间 |
|---|---|---|---|
| 默认 | 是 | 无限制 | 无限制 |
| 基础 | 仅接收 | 10 MB | 1 GB |
| 专业版 | 完全共享 | 200 MB | 10 GB |
身份验证过程使用会话 cookie 进行 Web 访问,并使用 API 令牌进行客户端应用程序访问。密码安全包括哈希处理和密码强度验证。
来源: packages/server/src/models/UserModel.ts118-709 packages/server/src/routes/index/users.ts1-273 packages/server/src/routes/index/login.ts1-123
会话用于在请求之间进行用户身份验证。会话流程如下:
会话模型实现了会话创建、验证和过期。可以通过注销或管理员操作终止会话。
来源: packages/server/src/models/SessionModel.ts1-107 packages/server/src/routes/index/login.ts1-123 packages/server/src/middleware/ownerHandler.ts
Joplin Server 集成了 Stripe 用于订阅管理。这使得:
关键订阅组件
Beta 用户在需要订阅之前会获得一个试用期,并在 Beta 试用期临近结束时收到自动通知。
来源: packages/server/src/routes/index/stripe.ts1-597 packages/server/src/models/SubscriptionModel.ts1-226 packages/server/src/utils/stripe.ts1-201
服务器使用 Mustache 模板渲染 HTML 视图。模板系统由 MustacheService 管理
主要视图系统功能
视图系统会自动处理导航、通知和账户信息等常用元素。
来源: packages/server/src/services/MustacheService.ts1-309 packages/server/src/middleware/routeHandler.ts17-90 packages/server/src/views/layouts/default.mustache1-53
Joplin 服务器的核心功能之一是管理跨设备同步的变更。变更系统
ChangeModel 管理这些操作,通过计数器跟踪变更,以确保客户端之间的正确排序和一致状态。
来源: packages/server/src/models/ChangeModel.ts1-1140 packages/server/src/routes/index/changes.ts
服务器包含一个全面的测试框架来验证功能
主要测试组件
测试基础结构支持单元测试和集成测试,可以对服务器功能进行全面验证。
来源: packages/server/src/utils/testing/testUtils.ts30-676 packages/server/src/routes/index/users.test.ts1-319 packages/server/src/models/UserModel.test.ts1-255
Joplin 服务器提供了一个强大的平台,用于同步、用户管理和内容共享。其模块化架构允许灵活部署,同时在不同环境中保持一致的功能。理解这些服务器组件对于维护、扩展或部署 Joplin 同步服务器至关重要。