DROPBOX_ENABLED: "true" 时才会启动:
- web(
dropbox模块):关联账户、项目的 Dropbox 对话框,以及 Dropbox 调用的 Webhook。 - third-party-datastore:Pod 中的一个独立服务,负责处理要发送到 Dropbox 或从 Dropbox 获取的变更队列。
- document-updater:开启 Dropbox 后,在所有人离开项目几分钟后,它会在后台将编辑器中的变更写入 MongoDB;只有在此之后,这些变更才会发送到 Dropbox。
配置
1
ConfigMap
30-config.yaml (additions)
GIT_BRIDGE_ENABLED: "true" 以及 Git 集成中的 git-bridge StatefulSet:否则账户设置会隐藏项目同步部分。2
Secret
DROPBOX_TOKEN_CIPHER_PASSWORD 用于加密 MongoDB 中用户的 Dropbox 令牌。每个副本都必须使用相同的值,之后若更改该值,所有用户都需要重新关联 Dropbox。3
创建数据库索引
在副本集的主节点上运行一次创建数据库索引中的索引命令:
4
应用并重启
DROPBOX_ENABLED 为 "true" 时,third-party-datastore.log 才会存在。5
向互联网开放 Webhook
Dropbox 必须能够从互联网访问 然后按照 Toolkit 页面中的说明,在 Dropbox App Console 中添加该 Webhook。
${OVERLEAF_SITE_URL}/dropbox/webhook。如果你的 Ingress 或负载均衡器只允许外部访问部分路径或网络,请放行此路径;这是 Dropbox 调用的唯一路径。请从集群外部进行检查:多个副本
除共享的DROPBOX_TOKEN_CIPHER_PASSWORD 外无需其他操作:
- Webhook 可能到达任意副本。它只会将变更放入 Redis 中的队列。
- 每个副本都运行 third-party-datastore,并且都处理共享的队列。用户的队列通过 Redis 中的锁获取,因此同一时间只有一个副本发送或获取某个用户的变更。
- 每个副本的 document-updater 都会在后台写入空闲项目。每个项目都从 Redis 中的共享列表中取出,因此只会被写入一次。

