22
33基于 Yjs 和 WebSocket 的实时协同编辑后端服务,支持多用户实时协作编辑,使用 MongoDB 进行文档持久化。
44
5- ## 快速开始
5+ 提供以下两种集成方式
66
7- ### 环境变量配置
7+ ## Docker Compose 一键启动(推荐)
88
9- ### Docker 容器化部署(推荐)
10-
11- 1 . 拉取 Docker 镜像,使用 Docker Compose 一键启动:
12-
13- ``` bash
14- docker pull yinlin124/collaborative-editor-backend:latest
15- ```
16-
17- 2 . 创建 ` docker-compose.yml ` 文件,内容如下:
9+ 创建 ` docker-compose.yml ` 文件,内容如下:
1810
1911``` yaml
2012services :
@@ -26,7 +18,7 @@ services:
2618 - ' 27017:27017'
2719 environment :
2820 MONGO_INITDB_ROOT_USERNAME : admin
29- MONGO_INITDB_ROOT_PASSWORD : admin!123
21+ MONGO_INITDB_ROOT_PASSWORD : admin
3022 volumes :
3123 - mongodb_data:/data/db
3224
@@ -36,110 +28,81 @@ services:
3628 restart : always
3729 ports :
3830 - ' ${PORT:-1234}:${PORT:-1234}'
39- env_file :
40- - .env
31+ environment :
32+ HOST : ${HOST:-0.0.0.0} # 设置后端监听的网络接口
33+ PORT : ${PORT:-1234} # 默认 1234 端口,可以使用环境变量修改
34+ MONGODB_URL : ${MONGODB_URL:-mongodb://admin:admin@mongodb:27017/?authSource=admin}
35+ MONGODB_DB : ${MONGODB_DB:-tinyeditor} # 数据库名称
36+ MONGODB_COLLECTION : ${MONGODB_COLLECTION:-documents} # 集合名称
4137 depends_on :
4238 - mongodb
4339
4440volumes :
4541 mongodb_data :
4642` ` `
4743
48- 3. 在项目根目录下新建 ` .env` 文件:
44+ 执行 ` docker compose up` 启动容器,连接地址为 `wss://你的域名or服务器ip:1234`
4945
50- ` ` ` env
51- HOST=0.0.0.0
52- PORT=1234
53- MONGODB_URL=mongodb://admin:admin!123@mongodb:27017/?authSource=admin
54- MONGODB_DB=tinyeditor
55- MONGODB_COLLECTION=documents
56- GC=true
57- ` ` `
46+ > 如果你没有开启 https 则需要将 wss 替换 ws
5847
59- 可参照下方表格进行配置 `.env` 文件
60- | 变量名 | 必需 | 默认值 | 说明 |
61- | -------------------- | ---- | ------ | -------------------------------------------------------------- |
62- | `HOST` | ✅ | - | 服务器监听地址 |
63- | `PORT` | ✅ | - | WebSocket 服务端口 |
64- | `MONGODB_URL` | ✅ | - | MongoDB 连接字符串 |
65- | `MONGODB_DB` | ✅ | - | MongoDB 数据库名称 |
66- | `MONGODB_COLLECTION` | ✅ | - | MongoDB 集合名称 |
67- | `GC` | ❌ | `true` | 是否启用 Yjs 垃圾回收 |
48+ # # 通过 NPM 包集成
6849
69- 4. 在项目根目录下运行 `docker-compose` 启动容器:
50+ 参考 [tiny-editor-collaborative-editor-backend-demo](https://github.com/vaebe/tiny-editor-collaborative-editor-backend-demo) 进行集成
7051
71- ` ` ` bash
72- docker compose up
73- ` ` `
52+ # # 开发指南
53+
54+ # ## mongodb
7455
75- # ## 本地部署
56+ 项目依赖 Mongo 数据库来持久化数据。如果您已有可用的 Mongo 数据库,可以跳过此节。
7657
77- 启动 mongodb
58+ 通过 docker 启动 Mongo 数据库
7859
7960` ` ` bash
8061docker run -d \
8162 --name mongodb \
8263 -p 27017:27017 \
8364 -e MONGO_INITDB_ROOT_USERNAME=admin \
84- -e MONGO_INITDB_ROOT_PASSWORD=" admin!123" \
65+ -e MONGO_INITDB_ROOT_PASSWORD=admin \
8566 -v mongodb_data:/data/db \
8667 mongo:latest
8768` ` `
8869
89- 修改 `.env MongoDB URL`
70+ ** 修改 `.env`文件 `MONGODB_URL` 为正确的连接地址**,通过上述 docker 命令启动的服务修改为如下内容即可
9071
9172` ` ` bash
92- MONGODB_URL=mongodb://admin:admin!123 @localhost:27017/?authSource=admin
73+ MONGODB_URL=mongodb://admin:admin@localhost:27017/?authSource=admin
9374` ` `
9475
95- 启动本地服务器
76+ # ## scripts 命令解析
9677
97- ` ` ` bash
98- npm install -g pm2
99- npm install
100- npm start
101- ` ` `
78+ - 本地开发执行 `pnpm dev` 启动项目
79+ - 执行 `pnpm build` 打包项目
80+ - 执行 `pnpm pub` 发布 npm 包(需要先确认版本号)
81+ - 执行 `docker build -t collaborative-editing-backend:latest .` 打包 docker 镜像
10282
103- # # 前端配置
104-
105- (非完整前端配置主要参考 provider 部分)
106-
107- ` ` ` javascript
108- import TinyEditor from '@opentiny/fluent-editor'
109-
110- const editor = new TinyEditor('#editor', {
111- theme: 'snow',
112- modules: {
113- collaboration: {
114- provider: {
115- type: 'websocket',
116- options: {
117- serverUrl: 'ws://localhost:1234',
118- roomName: 'my-document',
119- },
120- },
121- },
122- },
123- })
124- ` ` `
83+ # ## 构建 docker 镜像
12584
126- # # 开发指南
85+ 构建 `linux/amd64,linux/arm64` 并推送 docker hub
86+
87+ ` ` ` bash
88+ docker buildx build --platform linux/amd64,linux/arm64 -t 你的dockerhub名字/collaborative-editor-backend:latest . --push
89+ ` ` `
12790
12891# ## MongoDB 持久化拓展
12992
130- 当前项目在 [`src/persistence/mongo.ts`](./src/persistence/mongo.ts) 类实现 MongoDB 持久化,基于 [`y-mongodb-provider`](https://github.com/MaxNoetzold/y-mongodb-provider) 库。
93+ 项目在 [`src/persistence/mongo.ts`](./src/persistence/mongo.ts) 类基于 [`y-mongodb-provider`](https://github.com/MaxNoetzold/y-mongodb-provider) 库 实现 MongoDB 持久化 。
13194
132- 需要拓展当前持久化能力时, 可参考 API 文档:[y-mongodb-provider API](https://github.com/MaxNoetzold/y-mongodb-provider?tab=readme-ov-file#api)
95+ 可参考 API 文档:[y-mongodb-provider API](https://github.com/MaxNoetzold/y-mongodb-provider?tab=readme-ov-file#api) 进行拓展。
13396
13497# ## 自定义持久化接口
13598
13699要支持其他数据库(如 PostgreSQL、Redis 等),需要实现 `Persistence` 接口
137100
138- | 方法名 | 参数 | 返回值 | 说明 |
139- | ------------ | --------------------------------- | --------------- | -------------------------------------------- |
140- | `bindState` | `docName : string`<br> `doc: Y.Doc` | `Promise<void>` | 文档初始化时调用,加载历史状态并设置实时同步 |
141- | `writeState` | `docName : string`<br> `doc: Y.Doc` | `Promise<void>` | 手动保存文档状态(可选使用) |
142- | `close` | - | `Promise<void>` | 服务器关闭时调用,清理资源 |
101+ | 方法名 | 参数 | 返回值 | 说明 |
102+ | ------------ | ------------------------------- | --------------- | -------------------------------------------- |
103+ | `bindState` | `docName : string`, `doc: Y.Doc` | `Promise<void>` | 文档初始化时调用,加载历史状态并设置实时同步 |
104+ | `writeState` | `docName : string`, `doc: Y.Doc` | `Promise<void>` | 手动保存文档状态(可选使用) |
105+ | `close` | - | `Promise<void>` | 服务器关闭时调用,清理资源 |
143106
144107# ## 更多社区持久化支持
145108
0 commit comments