Skip to main content
Синхронизация с Dropbox использует три части каждого пода Ayakaleaf Pro, и все три запускаются только при DROPBOX_ENABLED: "true":
  • web (модуль dropbox): привязка, диалог Dropbox в проекте и вебхук, который вызывает Dropbox.
  • third-party-datastore: отдельный сервис внутри пода, который обрабатывает очередь изменений для отправки в Dropbox или получения из него.
  • document-updater: при включённом Dropbox он записывает изменения из редактора в MongoDB в фоновом режиме, через несколько минут после того, как все покинули проект; только после этого они попадают в Dropbox.
Как создать приложение Dropbox и как работает синхронизация, описано в разделе Синхронизация с Dropbox; на этой странице показано, как перенести это в Kubernetes.

Настройка

1

ConfigMap

30-config.yaml (additions)
Должны быть настроены GIT_BRIDGE_ENABLED: "true" и StatefulSet git-bridge из раздела Интеграция с Git: без них в настройках учётной записи скрыт раздел синхронизации проектов.
2

Secret

DROPBOX_TOKEN_CIPHER_PASSWORD шифрует токены Dropbox пользователей в MongoDB. Все реплики должны использовать одно и то же значение, а его последующее изменение вынудит всех пользователей заново привязать Dropbox.
3

Создайте индексы базы данных

Один раз выполните команды создания индексов из раздела Создание индексов базы данных на первичном узле набора реплик:
4

Примените изменения и перезапустите

third-party-datastore.log существует, только если DROPBOX_ENABLED равен "true".
5

Откройте вебхук для интернета

Dropbox должен иметь доступ к ${OVERLEAF_SITE_URL}/dropbox/webhook из интернета. Если ваш ingress или балансировщик нагрузки разрешает извне только некоторые пути или сети, разрешите этот путь; это единственный путь, который вызывает Dropbox. Проверьте его снаружи кластера:
Затем добавьте вебхук в Dropbox App Console, как описано на странице Toolkit.

Несколько реплик

Ничего дополнительного, кроме общего DROPBOX_TOKEN_CIPHER_PASSWORD, не требуется:
  • Вебхук может прийти на любую реплику. Он лишь ставит изменение в очередь в Redis.
  • Каждая реплика запускает third-party-datastore, и каждая работает с общей очередью. Очередь пользователя захватывается с блокировкой в Redis, поэтому изменения конкретного пользователя в каждый момент времени отправляет или получает только одна реплика.
  • document-updater каждой реплики записывает неактивные проекты в фоновом режиме. Каждый проект берётся из общего списка в Redis, поэтому записывается один раз.

Проверено на Kubernetes

С имитацией API Dropbox, на Kubernetes 1.37 с тремя репликами за HAProxy, наши сквозные тесты синхронизации с Dropbox проходят (59 сценариев): привязка и отвязка; отправка в Dropbox проектов, правок, бинарных файлов, переименований, перемещений и удалений, включая правку из редактора, которая поступает через фоновую запись после закрытия проекта, без компиляции и без «sync now»; применение изменений, сделанных в Dropbox, через вебхук (проверочный challenge и проверка подписи), новые проекты из новых папок, удалённые папки проектов; проекты с одинаковыми именами; диалог Dropbox в редакторе и «sync now» с ограничением частоты; повторные попытки, ограничения частоты и тайм-ауты Dropbox; учётные записи, отвязанные, когда Dropbox переполнен, отклоняет токен или заблокирован; заблокированные учётные записи Overleaf; а также ответ вебхука, когда third-party-datastore не работает.
Последнее изменение 2 ноября 2026 г.