O Ayakaleaf Pro suporta escalabilidade horizontal. Testamos e verificamos que ele funciona corretamente com múltiplas réplicas.
A partir do Server CE/Server Pro
5.0.3, as variáveis de ambiente foram renomeadas de SHARELATEX_* para OVERLEAF_*.Se estiver usando uma versão 4.x (ou anterior), certifique-se de que as variáveis tenham o prefixo correspondente (por exemplo, SHARELATEX_SITE_URL em vez de OVERLEAF_SITE_URL)Requisitos

Armazenamento de dados externo e centralizado
O armazenamento de dados no Server Pro pode ser dividido em quatro repositórios de dados:-
MongoDB
- A maior parte dos dados é persistida no MongoDB.
- Suportamos uma instância local ou uma instância externa, como o MongoDB Atlas (um serviço MongoDB totalmente gerenciado que é executado na infraestrutura da AWS).
-
Redis
- O Redis armazena dados temporários, como atualizações pendentes de documentos antes de serem gravadas no MongoDB.
- O Redis é usado para comunicar atualizações de documentos entre diferentes serviços e notificar o editor sobre mudanças de estado num determinado projeto.
- O Redis é usado para armazenar as sessões dos usuários.
- Suportamos uma instância local ou uma instância externa.
-
Arquivos de projeto e arquivos de histórico
- Os arquivos de projeto não editáveis são armazenados fora do MongoDB. O novo sistema de histórico de projetos (Server Pro 3.5 em diante) também armazena o histórico fora do MongoDB.
- Para instâncias únicas pequenas, suportamos um sistema de arquivos local (que pode ser baseado num SSD local, NFS ou EBS) ou um sistema de armazenamento de dados compatível com S3.
-
Para a escalabilidade horizontal, suportamos apenas sistemas de armazenamento de dados compatíveis com S3.
-
Arquivos efêmeros
- As compilações LaTeX precisam ser executadas em discos locais rápidos para um desempenho ideal. O resultado da compilação não precisa ser persistido nem copiado em backup.
- O buffer de novos uploads de arquivos e a criação de arquivos zip de projetos também se beneficiam do uso de um disco local.
Recomendamos fortemente o uso de um disco local. Usar qualquer tipo de disco em rede (como NFS ou EBS) pode resultar em erros de compilação inesperados e outros problemas de desempenho.
Git-bridge
O Git-bridge está disponível no Server Pro a partir da versão 4.0.1.
- uma instância central do MongoDB acessível a partir de todas as instâncias do Server Pro
- uma instância central do Redis acessível a partir de todas as instâncias do Server Pro
- um backend de armazenamento central compatível com S3 para os arquivos de projeto e de histórico
- um disco local em cada instância para os arquivos efêmeros
- um disco local na instância que hospeda o contêiner do git-bridge para os dados do git-bridge
Requisitos do balanceador de carga
-
Roteamento persistente, por exemplo usando um cookie
Este requisito decorre destes componentes:
- A capacidade de edição em tempo real do Server Pro usa WebSockets, com fallback para polling XHR. Cada sessão de edição tem estado local no lado do servidor, e as requisições de uma determinada sessão de edição precisam sempre ser roteadas para a mesma instância do Server Pro. O recurso de colaboração usa o Pub/Sub do Redis para partilhar atualizações entre várias instâncias do Server Pro.
- A compilação LaTeX mantém o resultado e o cache de compilação localmente para melhor desempenho. Ao emitir uma requisição de compilação para uma instância do Server Pro, as requisições seguintes de download do PDF/log precisam ser roteadas para a mesma instância do Server Pro.
- Tempos limite de requisição longos para suportar a compilação de documentos LaTeX grandes
- Suporte a WebSocket para um desempenho ideal
- Tamanho de payload POST de 50MB
-
O tempo limite de keep-alive deve ser inferior ao tempo limite de keep-alive do Server Pro
O tempo limite de keep-alive no Server Pro pode ser configurado usando a variável de ambiente
NGINX_KEEPALIVE_TIMEOUT. O valor padrão é 65s. Com o padrão, funciona um tempo limite de keep-alive de 60s no balanceador de carga. ComNGINX_KEEPALIVE_TIMEOUT=120, o balanceador de carga poderia usar 115s. -
IPs dos clientes
Defina o cabeçalho de requisição
X-Forwarded-Forcom o IP do cliente. -
Ao terminar o SSL
O balanceador de carga precisa adicionar o cabeçalho de requisição
X-Forwarded-Proto: https.
Exemplo de configuração do HAProxy
Exemplo de configuração do HAProxy
Configuração do Server Pro
Segredos As instâncias do Server Pro precisam compartilhar os mesmos segredos:WEB_API_PASSWORD(autenticação da web api)STAGING_PASSWORDeV1_HISTORY_PASSWORDcom o mesmo valor (autenticação do histórico)CRYPTO_RANDOM(para o cookie de sessão)OT_JWT_AUTH_KEY(autenticação do histórico)
/dev/urandom (256 bits aleatórios).
OVERLEAF_MONGO_URL (SHARELATEX_MONGO_URL para as versões 4.x e anteriores) para a instância central do MongoDB.
Redis
Aponte OVERLEAF_REDIS_HOST (SHARELATEX_REDIS_HOST para as versões 4.x e anteriores) e REDIS_HOST para a instância central do Redis.
Armazenamento compatível com S3 para arquivos de projeto e de histórico
Consulte a documentação sobre armazenamento compatível com S3 para mais detalhes.
Arquivos efêmeros
O bind-mount padrão de um SSD local em /var/lib/overleaf (/var/lib/sharelatex para as versões 4.x e anteriores) será suficiente. Certifique-se de apontar SANDBOXED_COMPILES_HOST_DIR para o ponto de montagem no host.
Recomendamos fortemente o uso de um disco local. Usar qualquer tipo de disco em rede (como NFS ou EBS) pode resultar em erros de compilação inesperados e outros problemas de desempenho.
- Defina
OVERLEAF_BEHIND_PROXY=true(SHARELATEX_BEHIND_PROXYpara as versões4.xe anteriores) para obter IPs de cliente corretos. - Defina
TRUSTED_PROXY_IPScom o IP do balanceador de carga (é possível especificar vários CIDRs, separados por vírgula).
O Git-bridge está disponível no Server Pro a partir da versão 4.0.1.
-
Defina
GIT_BRIDGE_ENABLEDcomo'true' -
Defina
GIT_BRIDGE_HOSTcomo<git-bridge container name>, por exemplogit-bridge -
Defina
GIT_BRIDGE_PORTcomo8000 -
Defina
V1_HISTORY_URLcomohttp://<server-pro sibling container name>:3100/api. Observação: isto só é necessário no contêiner irmão do contêiner do git-bridge. As outras instâncias podem usar uma URL localhost, que é o padrão.
- Defina
GIT_BRIDGE_API_BASE_URLcomohttp://<server-pro sibling container name>/api/v0, por exemplohttp://server-pro-ha-1/api/v0 - Defina
GIT_BRIDGE_OAUTH2_SERVERcomohttp://<server-pro sibling container name>, por exemplohttp://server-pro-ha-1 - Defina
GIT_BRIDGE_POSTBACK_BASE_URLcomohttp://<git-bridge container name>:8000, por exemplohttp://git-bridge:8000 - Defina
GIT_BRIDGE_ROOT_DIRcomo o disco de dados do git-bridge montado via bind-mount, por exemplo/data/git-bridge
Exemplo de configuração do docker-compose.yml
Exemplo de configuração do docker-compose.yml
A configuração a seguir mostra uma instalação autônoma. Para que a demonstração funcione, é necessário fornecer uma chave/certificado SSL válido e ajustar o
OVERLEAF_SITE_URL (SHARELATEX_SITE_URL para as versões 4.x e anteriores). Numa instalação real, você deve substituir os segredos fictícios por segredos reais, conforme indicado nos comentários. Numa instalação real, é necessário mover os contêineres individuais para nós dedicados e ajustar os endereços IP à configuração da sua rede local.Hardware
Recomendamos usar as mesmas especificações de hardware para todas as instâncias do Server Pro que participam da escalabilidade horizontal. Aplicam-se as recomendações gerais sobre as especificações de hardware das instâncias do Server Pro.Atualizar o Server Pro
Como parte do processo de atualização, o Server Pro executa automaticamente migrações do banco de dados. Estas migrações não foram concebidas para serem executadas a partir de várias instâncias em paralelo. As migrações precisam terminar antes de a aplicação web propriamente dita ser iniciada. Você pode verificar nos logs a entradaFinished migrations ou aguardar até que a aplicação aceite tráfego.
O procedimento de atualização é o seguinte:
- Agende uma janela de manutenção
- Pare todas as instâncias do Server Pro
- Faça um backup consistente, conforme descrito na documentação
- Inicie uma única instância do Server Pro com a nova versão
- Verifique se a nova instância funciona como esperado
- Inicie as outras instâncias com a nova versão

