菜单

Joplin 服务器

相关源文件

Joplin 服务器是一个 Joplin 笔记应用自托管同步服务器。它支持 Joplin 客户端应用程序在多个设备之间同步笔记、笔记本、标签和附件。除了同步,Joplin 服务器还提供用户管理、Web 界面访问和集成能力。

本文档描述了 Joplin 服务器的架构、组件和操作。有关同步机制本身的信息,请参阅 同步引擎

1. 架构概述

Joplin 服务器使用 Node.js 和 Koa.js Web 框架构建。它为客户端提供 REST API 端点以同步数据,并提供 Web 界面进行用户管理。

来源: packages/server/src/app.ts packages/server/src/routes/routes.ts packages/server/src/utils/types.ts packages/server/package.json

1.1 核心组件

  • 主应用程序 (app.ts): 入口文件,初始化服务器、配置中间件并启动服务
  • 中间件层: 处理请求、身份验证、错误处理和响应格式化
  • 路由器: 管理 API 和 Web 界面的路由
  • 模型: 用于数据库交互的数据访问层
  • 服务: 提供邮件、存储和模板等功能

1.2 请求流程

来源: packages/server/src/app.ts197-229 packages/server/src/middleware/routeHandler.ts packages/server/src/utils/routeUtils.ts

2. 数据库架构

Joplin 服务器支持两种数据库系统

  1. SQLite: 小规模安装和开发时的默认选项
  2. PostgreSQL: 推荐用于生产环境和多用户部署

数据库层支持迁移、模式管理和查询优化。

来源: packages/server/src/db.ts packages/server/src/config.ts47-84

2.1 数据库配置

数据库配置在环境变量中定义,并由配置系统处理。服务器支持各种选项

配置选项描述环境变量
数据库客户端SQLite 或 PostgreSQLDB_CLIENT
数据库名称数据库名称或 SQLite 文件路径SQLITE_DATABASEPOSTGRES_DATABASE
连接详情主机、端口、用户名、密码POSTGRES_HOST, POSTGRES_PORT 等。
连接字符串直接连接字符串POSTGRES_CONNECTION_STRING
慢查询日志记录慢速数据库查询DB_SLOW_QUERY_LOG_ENABLED
自动迁移自动运行迁移DB_AUTO_MIGRATION
复制读写分离DB_USE_SLAVE

来源: packages/server/src/env.ts58-82 packages/server/src/db.ts74-103

2.2 迁移

数据库模式通过位于 /migrations 目录中的迁移来管理。如果启用了 DB_AUTO_MIGRATION,迁移会在启动时自动应用。

来源: packages/server/src/app.ts327-339 packages/server/src/db.ts290-376

3. 存储系统

Joplin 服务器支持多种存储后端来存储用户内容(笔记、附件等)

来源: packages/server/src/utils/types.ts packages/server/src/config.ts195-196

存储驱动程序通过环境变量配置

存储驱动程序配置环境变量
数据库默认,将内容存储在数据库中STORAGE_DRIVER=Type=Database
文件系统存储在本地文件系统STORAGE_DRIVER=Type=Filesystem;Path=/path/to/storage
S3存储在 AWS S3 中STORAGE_DRIVER=Type=S3;Region=us-west-1;...
内存内存存储(测试用)STORAGE_DRIVER=Type=Memory

4. API 和路由

Joplin 服务器公开了几组路由

来源: packages/server/src/routes/routes.ts

4.1 API 端点

API 端点提供对 Joplin 数据同步功能的访问

端点目的
/api/items笔记、文件夹、资源的中心同步端点
/api/shares管理共享笔记本和资源
/api/users用户管理
/api/sessions身份验证
/api/ping服务器健康检查
/api/batch批量操作

来源: packages/server/src/routes/routes.ts41-51

4.2 Web 界面路由

Web 界面提供用户门户和管理员仪表板

路由目的
/ (主页)用户仪表板
/login, /signup身份验证页面
/items管理用户条目
/admin/*管理功能
/share/*公开共享内容

来源: packages/server/src/routes/routes.ts53-83

5. 身份验证和用户管理

来源: packages/server/src/routes/index/login.ts packages/server/src/models/SessionModel.ts packages/server/src/routes/api/sessions.ts

5.1 会话管理

会话通过 cookie 管理并在数据库中存储

  • 会话的默认生存时间 (TTL) 为 12 小时
  • 会话 cookie 存储在用户的浏览器中
  • ownerHandler 中间件从 cookie 中提取会话 ID 并加载用户
  • 可以通过登出终止会话

来源:packages/server/src/models/SessionModel.ts7 packages/server/src/routes/index/login.ts56-74

5.2 LDAP 集成

Joplin Server 支持 LDAP 身份验证,适用于企业部署

  • 可配置多个 LDAP 服务器
  • 从 LDAP 属性自动创建用户
  • 邮箱和全名属性映射

来源:packages/server/src/env.ts129-151 packages/server/src/config.ts116-146

6. Web 界面

Joplin Server 的 Web 界面同时提供用户功能和管理功能

来源:packages/server/src/views/index/home.mustache packages/server/src/services/MustacheService.ts146-170

6.1 渲染系统

Web 界面使用 Mustache 模板来渲染 HTML

  • 模板位于 views 目录中
  • 布局提供通用结构(页眉、页脚、导航)
  • 视图对象由控制器创建并传递给模板引擎
  • CSS 主要基于 Bulma 框架

来源:packages/server/src/services/MustacheService.ts packages/server/src/views/layouts/default.mustache packages/server/public/css/main.css

7. 配置系统

Joplin Server 通过环境变量进行配置,并提供合理的默认值

来源:packages/server/src/config.ts packages/server/src/env.ts packages/server/src/app.ts98-124

7.1 环境变量

主要配置类别包括

类别描述示例变量
通用服务器名称、端口、功能APP_NAMEAPP_PORTSIGNUP_ENABLED
URLAPI 和内容的基 URLAPP_BASE_URLAPI_BASE_URL
数据库数据库连接设置DB_CLIENTPOSTGRES_DATABASE
存储内容存储配置STORAGE_DRIVER
邮件服务电子邮件服务设置MAILER_HOSTMAILER_PORT
身份验证LDAP、会话设置LDAP_1_ENABLEDCOOKIES_SECURE

来源:packages/server/src/env.ts12-151

8. 部署

8.1 Docker 部署

Joplin Server 可以检测其是否在 Docker 中运行,并相应地调整其配置

来源:packages/server/src/app.ts311-313 packages/server/src/config.ts23-38

8.2 生产注意事项

生产环境部署

  • 推荐在多用户设置中使用 PostgreSQL 而不是 SQLite
  • 对于大型安装,推荐使用外部存储(S3 或文件系统)
  • 应启用 HTTPS(通常通过反向代理)
  • 需要进行电子邮件配置以实现用户注册和通知

8.3 发布

服务器版本通过 package.json 管理,可以使用以下命令发布:

此命令将递增补丁版本并为发布创建 Git 标签。

来源:packages/tools/release-server.ts

9. 与 Joplin 客户端集成

Joplin Server 设计用于与各种 Joplin 客户端(桌面、移动、CLI)集成

来源:packages/server/src/views/index/home.mustache11-15

要将 Joplin 客户端连接到 Joplin Server

  1. 在任何 Joplin 应用程序中打开“配置”屏幕
  2. 转到“同步”部分
  3. 选择“Joplin Server”作为同步目标
  4. 输入服务器 URL、用户名和密码
  5. 开始同步