Skip to main content
La sincronizzazione con Dropbox usa tre componenti di ogni pod di Ayakaleaf Pro, e tutti e tre si avviano solo con DROPBOX_ENABLED: "true":
  • web (il modulo dropbox): il collegamento, la finestra di dialogo Dropbox del progetto e il webhook chiamato da Dropbox.
  • third-party-datastore: un servizio autonomo all’interno del pod che elabora la coda delle modifiche da inviare a Dropbox o da recuperare da esso.
  • document-updater: con Dropbox attivo, scrive in background le modifiche dell’editor in MongoDB, qualche minuto dopo che tutti hanno lasciato un progetto; solo allora vengono inviate a Dropbox.
Crea l’app Dropbox e leggi come funziona la sincronizzazione in Sincronizzazione con Dropbox; questa pagina spiega come inserirla in Kubernetes.

Configurazione

1

ConfigMap

30-config.yaml (additions)
GIT_BRIDGE_ENABLED: "true" e lo StatefulSet di git-bridge di Integrazione Git devono essere presenti: senza di essi le impostazioni dell’account nascondono la sezione di sincronizzazione dei progetti.
2

Secret

DROPBOX_TOKEN_CIPHER_PASSWORD cifra i token Dropbox degli utenti in MongoDB. Ogni replica deve usare lo stesso valore, e modificarlo in seguito costringe ogni utente a ricollegare Dropbox.
3

Crea gli indici del database

Esegui una sola volta i comandi per gli indici di Creare gli indici del database, sul primario del replica set:
4

Applica e riavvia

third-party-datastore.log esiste solo quando DROPBOX_ENABLED è "true".
5

Apri il webhook verso Internet

Dropbox deve raggiungere ${OVERLEAF_SITE_URL}/dropbox/webhook da Internet. Se il tuo ingress o load balancer consente dall’esterno solo alcuni percorsi o reti, consenti questo; è l’unico percorso chiamato da Dropbox. Verificalo dall’esterno del cluster:
Quindi aggiungi il webhook nella Dropbox App Console come descritto nella pagina del Toolkit.

Più repliche

Non serve altro oltre alla DROPBOX_TOKEN_CIPHER_PASSWORD condivisa:
  • Il webhook può raggiungere qualsiasi replica. Si limita a mettere in coda la modifica in Redis.
  • Ogni replica esegue third-party-datastore, e ciascuna lavora sulla coda condivisa. La coda di un utente viene acquisita con un lock in Redis, quindi una sola replica alla volta invia o recupera le modifiche di un determinato utente.
  • Il document-updater di ogni replica scrive in background i progetti inattivi. Ogni progetto viene prelevato da un elenco condiviso in Redis, quindi viene scritto una sola volta.

Testato su Kubernetes

Contro un mock dell’API di Dropbox, su Kubernetes 1.37 con tre repliche dietro HAProxy, i nostri test end-to-end per la sincronizzazione con Dropbox vengono superati (59 casi): collegamento e scollegamento; invio a Dropbox di progetti, modifiche, file binari, rinominazioni, spostamenti ed eliminazioni, inclusa una modifica dell’editor che arriva tramite la scrittura in background dopo la chiusura del progetto, senza compilare né usare “sync now”; applicazione delle modifiche fatte in Dropbox tramite il webhook (challenge di verifica e controllo della firma), nuovi progetti da nuove cartelle, cartelle di progetto eliminate; progetti con lo stesso nome; la finestra di dialogo Dropbox dell’editor e “sync now” con il relativo limite di frequenza; tentativi ripetuti, limiti di frequenza e timeout di Dropbox; account scollegati quando Dropbox è pieno, rifiuta il token o è sospeso; account Overleaf sospesi; e la risposta del webhook quando third-party-datastore non è attivo.
Ultima modifica il 2 novembre 2026