Joplin 服务器是一个 Joplin 笔记应用自托管同步服务器。它支持 Joplin 客户端应用程序在多个设备之间同步笔记、笔记本、标签和附件。除了同步,Joplin 服务器还提供用户管理、Web 界面访问和集成能力。
本文档描述了 Joplin 服务器的架构、组件和操作。有关同步机制本身的信息,请参阅 同步引擎。
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
app.ts): 入口文件,初始化服务器、配置中间件并启动服务来源: packages/server/src/app.ts197-229 packages/server/src/middleware/routeHandler.ts packages/server/src/utils/routeUtils.ts
Joplin 服务器支持两种数据库系统
数据库层支持迁移、模式管理和查询优化。
来源: packages/server/src/db.ts packages/server/src/config.ts47-84
数据库配置在环境变量中定义,并由配置系统处理。服务器支持各种选项
| 配置选项 | 描述 | 环境变量 |
|---|---|---|
| 数据库客户端 | SQLite 或 PostgreSQL | DB_CLIENT |
| 数据库名称 | 数据库名称或 SQLite 文件路径 | SQLITE_DATABASE 或 POSTGRES_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
数据库模式通过位于 /migrations 目录中的迁移来管理。如果启用了 DB_AUTO_MIGRATION,迁移会在启动时自动应用。
来源: packages/server/src/app.ts327-339 packages/server/src/db.ts290-376
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 |
Joplin 服务器公开了几组路由
来源: packages/server/src/routes/routes.ts
API 端点提供对 Joplin 数据同步功能的访问
| 端点 | 目的 |
|---|---|
/api/items | 笔记、文件夹、资源的中心同步端点 |
/api/shares | 管理共享笔记本和资源 |
/api/users | 用户管理 |
/api/sessions | 身份验证 |
/api/ping | 服务器健康检查 |
/api/batch | 批量操作 |
来源: packages/server/src/routes/routes.ts41-51
Web 界面提供用户门户和管理员仪表板
| 路由 | 目的 |
|---|---|
/ (主页) | 用户仪表板 |
/login, /signup | 身份验证页面 |
/items | 管理用户条目 |
/admin/* | 管理功能 |
/share/* | 公开共享内容 |
来源: packages/server/src/routes/routes.ts53-83
来源: packages/server/src/routes/index/login.ts packages/server/src/models/SessionModel.ts packages/server/src/routes/api/sessions.ts
会话通过 cookie 管理并在数据库中存储
ownerHandler 中间件从 cookie 中提取会话 ID 并加载用户来源:packages/server/src/models/SessionModel.ts7 packages/server/src/routes/index/login.ts56-74
Joplin Server 支持 LDAP 身份验证,适用于企业部署
来源:packages/server/src/env.ts129-151 packages/server/src/config.ts116-146
Joplin Server 的 Web 界面同时提供用户功能和管理功能
来源:packages/server/src/views/index/home.mustache packages/server/src/services/MustacheService.ts146-170
Web 界面使用 Mustache 模板来渲染 HTML
views 目录中来源:packages/server/src/services/MustacheService.ts packages/server/src/views/layouts/default.mustache packages/server/public/css/main.css
Joplin Server 通过环境变量进行配置,并提供合理的默认值
来源:packages/server/src/config.ts packages/server/src/env.ts packages/server/src/app.ts98-124
主要配置类别包括
| 类别 | 描述 | 示例变量 |
|---|---|---|
| 通用 | 服务器名称、端口、功能 | APP_NAME、APP_PORT、SIGNUP_ENABLED |
| URL | API 和内容的基 URL | APP_BASE_URL、API_BASE_URL |
| 数据库 | 数据库连接设置 | DB_CLIENT、POSTGRES_DATABASE |
| 存储 | 内容存储配置 | STORAGE_DRIVER |
| 邮件服务 | 电子邮件服务设置 | MAILER_HOST、MAILER_PORT |
| 身份验证 | LDAP、会话设置 | LDAP_1_ENABLED、COOKIES_SECURE |
来源:packages/server/src/env.ts12-151
Joplin Server 可以检测其是否在 Docker 中运行,并相应地调整其配置
来源:packages/server/src/app.ts311-313 packages/server/src/config.ts23-38
生产环境部署
服务器版本通过 package.json 管理,可以使用以下命令发布:
此命令将递增补丁版本并为发布创建 Git 标签。
来源:packages/tools/release-server.ts
Joplin Server 设计用于与各种 Joplin 客户端(桌面、移动、CLI)集成
来源:packages/server/src/views/index/home.mustache11-15
要将 Joplin 客户端连接到 Joplin Server