Skip to main content
Синхронізація з Dropbox використовує три частини кожного пода Ayakaleaf Pro, і всі три запускаються лише з DROPBOX_ENABLED: "true":
  • web (модуль dropbox): прив’язка, діалог Dropbox проєкту та webhook, який викликає 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

Відкрийте webhook для інтернету

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

Кілька реплік

Нічого додаткового, окрім спільного DROPBOX_TOKEN_CIPHER_PASSWORD:
  • Webhook може надійти на будь-яку репліку. Він лише ставить зміну в чергу в Redis.
  • Кожна репліка запускає third-party-datastore, і кожна працює зі спільною чергою. Черга користувача захоплюється з блокуванням у Redis, тож зміни певного користувача одночасно надсилає або отримує лише одна репліка.
  • document-updater кожної репліки у фоновому режимі записує неактивні проєкти. Кожен проєкт береться зі спільного списку в Redis, тож записується один раз.

Перевірено в Kubernetes

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