Skip to main content
A sincronização com Dropbox usa três partes de cada pod do Ayakaleaf Pro, e as três só iniciam com DROPBOX_ENABLED: "true":
  • web (o módulo dropbox): a vinculação, a caixa de diálogo do Dropbox do projeto e o webhook que o Dropbox chama.
  • third-party-datastore: um serviço próprio dentro do pod que processa a fila de alterações a serem enviadas ao Dropbox ou buscadas nele.
  • document-updater: com o Dropbox ativado, ele grava as alterações do editor no MongoDB em segundo plano, alguns minutos depois de todos terem saído de um projeto; somente então elas vão para o Dropbox.
Crie o aplicativo do Dropbox e leia como a sincronização funciona em Sincronização com Dropbox; esta página a coloca no Kubernetes.

Configuração

1

ConfigMap

30-config.yaml (additions)
GIT_BRIDGE_ENABLED: "true" e o StatefulSet do git-bridge da Integração com Git precisam estar configurados: sem eles, as configurações da conta ocultam a seção de sincronização de projetos.
2

Secret

DROPBOX_TOKEN_CIPHER_PASSWORD criptografa os tokens do Dropbox dos usuários no MongoDB. Todas as réplicas precisam usar o mesmo valor, e alterá-lo depois faz com que todos os usuários tenham de vincular o Dropbox novamente.
3

Crie os índices do banco de dados

Execute os comandos de índice de Criar os índices do banco de dados uma vez, no primário do replica set:
4

Aplique e reinicie

O third-party-datastore.log existe somente quando DROPBOX_ENABLED é "true".
5

Abra o webhook para a internet

O Dropbox precisa alcançar ${OVERLEAF_SITE_URL}/dropbox/webhook a partir da internet. Se o seu ingress ou balanceador de carga permite apenas alguns caminhos ou redes a partir do exterior, permita este; é o único caminho que o Dropbox chama. Verifique-o de fora do cluster:
Em seguida, adicione o webhook no App Console do Dropbox, conforme descrito na página do Toolkit.

Várias réplicas

Nada extra além da DROPBOX_TOKEN_CIPHER_PASSWORD compartilhada:
  • O webhook pode chegar a qualquer réplica. Ele apenas coloca a alteração na fila no Redis.
  • Cada réplica executa o third-party-datastore, e cada uma processa a fila compartilhada. A fila de um usuário é obtida com um lock no Redis, então apenas uma réplica por vez envia ou busca as alterações de um determinado usuário.
  • O document-updater de cada réplica grava projetos ociosos em segundo plano. Cada projeto é retirado de uma lista compartilhada no Redis, então é gravado uma única vez.

Testado no Kubernetes

Contra um mock da API do Dropbox, no Kubernetes 1.37 com três réplicas atrás do HAProxy, nossos testes de ponta a ponta para a sincronização com Dropbox passam (59 casos): vinculação e desvinculação; envio de projetos, edições, arquivos binários, renomeações, movimentações e exclusões para o Dropbox, incluindo uma edição no editor que chega pela gravação em segundo plano após o projeto ser fechado, sem compilar nem usar “sync now”; aplicação de alterações feitas no Dropbox por meio do webhook (desafio de verificação e verificação de assinatura), novos projetos a partir de novas pastas, pastas de projeto excluídas; projetos com o mesmo nome; a caixa de diálogo do Dropbox do editor e o “sync now” com seu limite de taxa; novas tentativas, limites de taxa e timeouts do Dropbox; contas desvinculadas quando o Dropbox está cheio, recusa o token ou está suspenso; contas do Overleaf suspensas; e a resposta do webhook quando o third-party-datastore está fora do ar.
Última modificação em 2 de novembro de 2026