Ayakaleaf Pro поддерживает горизонтальное масштабирование. Мы протестировали и проверили его корректную работу с несколькими репликами.
Начиная с Server CE/Server Pro
5.0.3 переменные окружения были переименованы с SHARELATEX_* на OVERLEAF_*.Если вы используете версию 4.x (или более раннюю), убедитесь, что переменные имеют соответствующий префикс (например, SHARELATEX_SITE_URL вместо OVERLEAF_SITE_URL)Требования

Внешнее централизованное хранилище данных
Хранилище данных в Server Pro можно разделить на четыре хранилища:-
MongoDB
- Большая часть данных сохраняется в MongoDB.
- Мы поддерживаем как локальный экземпляр, так и внешний, например MongoDB Atlas (полностью управляемый сервис MongoDB, работающий в инфраструктуре AWS).
-
Redis
- Redis хранит временные данные, например ожидающие обновления документов до их сброса в MongoDB.
- Redis используется для передачи обновлений документов между различными сервисами и для уведомления редактора об изменениях состояния в конкретном проекте.
- Redis используется для хранения пользовательских сеансов.
- Мы поддерживаем как локальный экземпляр, так и внешний.
-
Файлы проектов и файлы истории
- Нередактируемые файлы проектов хранятся вне MongoDB. Новая система истории проектов (начиная с Server Pro 3.5) также хранит историю вне MongoDB.
- Для небольших одиночных экземпляров мы поддерживаем либо локальную файловую систему (которая может располагаться на локальном SSD, NFS или EBS), либо S3-совместимую систему хранения данных.
-
Для горизонтального масштабирования мы поддерживаем только S3-совместимые системы хранения данных.
-
Временные файлы
- Для оптимальной производительности компиляция LaTeX должна выполняться на быстрых локальных дисках. Результаты компиляции не нужно сохранять или резервировать.
- Буферизация загружаемых новых файлов и создание ZIP-архивов проектов также выигрывают от использования локального диска.
Мы настоятельно рекомендуем использовать локальный диск. Использование любого сетевого диска (например, NFS или EBS) может привести к неожиданным ошибкам компиляции и другим проблемам с производительностью.
Git-bridge
Git-bridge доступен в Server Pro начиная с версии 4.0.1.
- центральный экземпляр MongoDB, доступный со всех экземпляров Server Pro
- центральный экземпляр Redis, доступный со всех экземпляров Server Pro
- центральное S3-совместимое хранилище для файлов проектов и истории
- локальный диск на каждом экземпляре для временных файлов
- локальный диск на экземпляре, где размещён контейнер git-bridge, для данных git-bridge
Требования к балансировщику нагрузки
-
Постоянная маршрутизация (sticky sessions), например с использованием cookie
Это требование обусловлено следующими компонентами:
- Функция редактирования в реальном времени в Server Pro использует WebSockets с резервным переходом на XHR polling. Каждый сеанс редактирования имеет локальное состояние на стороне сервера, и запросы конкретного сеанса редактирования всегда должны направляться на один и тот же экземпляр Server Pro. Функция совместной работы использует Redis Pub/Sub для обмена обновлениями между несколькими экземплярами Server Pro.
- Компиляция LaTeX хранит результаты и кэш компиляции локально для повышения производительности. После отправки запроса на компиляцию одному экземпляру Server Pro последующие запросы на загрузку PDF/журнала должны направляться на тот же экземпляр Server Pro.
- Длительные тайм-ауты запросов для поддержки компиляции больших документов LaTeX
- Поддержка WebSocket для оптимальной производительности
- Размер полезной нагрузки POST 50 МБ
-
Тайм-аут keep-alive должен быть меньше тайм-аута keep-alive в Server Pro
Тайм-аут keep-alive в Server Pro настраивается с помощью переменной окружения
NGINX_KEEPALIVE_TIMEOUT. Значение по умолчанию — 65 с. При значении по умолчанию подойдёт тайм-аут keep-alive 60 с в балансировщике нагрузки. ПриNGINX_KEEPALIVE_TIMEOUT=120балансировщик нагрузки может использовать 115 с. -
IP-адреса клиентов
Задайте в заголовке запроса
X-Forwarded-ForIP-адрес клиента. -
При терминировании SSL
Балансировщик нагрузки должен добавлять заголовок запроса
X-Forwarded-Proto: https.
Пример конфигурации HAProxy
Пример конфигурации HAProxy
Настройка Server Pro
Секреты Экземпляры Server Pro должны использовать общие секреты:WEB_API_PASSWORD(аутентификация web api)STAGING_PASSWORDиV1_HISTORY_PASSWORDс одинаковым значением (аутентификация истории)CRYPTO_RANDOM(для cookie сеанса)OT_JWT_AUTH_KEY(аутентификация истории)
/dev/urandom (256 случайных бит).
OVERLEAF_MONGO_URL (SHARELATEX_MONGO_URL для версий 4.x и более ранних) центральный экземпляр MongoDB.
Redis
Укажите в OVERLEAF_REDIS_HOST (SHARELATEX_REDIS_HOST для версий 4.x и более ранних) и REDIS_HOST центральный экземпляр Redis.
S3-совместимое хранилище для файлов проектов и истории
Подробнее см. документацию по S3-совместимому хранилищу.
Временные файлы
Достаточно стандартного bind-монтирования локального SSD в /var/lib/overleaf (/var/lib/sharelatex для версий 4.x и более ранних). Обязательно укажите в SANDBOXED_COMPILES_HOST_DIR точку монтирования на хосте.
Мы настоятельно рекомендуем использовать локальный диск. Использование любого сетевого диска (например, NFS или EBS) может привести к неожиданным ошибкам компиляции и другим проблемам с производительностью.
- Задайте
OVERLEAF_BEHIND_PROXY=true(SHARELATEX_BEHIND_PROXYдля версий4.xи более ранних), чтобы получать точные IP-адреса клиентов. - Задайте в
TRUSTED_PROXY_IPSIP-адрес балансировщика нагрузки (можно указать несколько CIDR через запятую).
Git-bridge доступен в Server Pro начиная с версии 4.0.1.
-
Задайте
GIT_BRIDGE_ENABLEDзначение'true' -
Задайте
GIT_BRIDGE_HOSTзначение<git-bridge container name>, напримерgit-bridge -
Задайте
GIT_BRIDGE_PORTзначение8000 -
Задайте
V1_HISTORY_URLзначениеhttp://<server-pro sibling container name>:3100/api. Примечание: это необходимо только на соседнем контейнере для контейнера git-bridge. Остальные экземпляры могут использовать URL localhost, который задан по умолчанию.
- Задайте
GIT_BRIDGE_API_BASE_URLзначениеhttp://<server-pro sibling container name>/api/v0, напримерhttp://server-pro-ha-1/api/v0 - Задайте
GIT_BRIDGE_OAUTH2_SERVERзначениеhttp://<server-pro sibling container name>, напримерhttp://server-pro-ha-1 - Задайте
GIT_BRIDGE_POSTBACK_BASE_URLзначениеhttp://<git-bridge container name>:8000, напримерhttp://git-bridge:8000 - Задайте в
GIT_BRIDGE_ROOT_DIRсмонтированный (bind-mount) диск с данными git-bridge, например/data/git-bridge
Пример конфигурации docker-compose.yml
Пример конфигурации docker-compose.yml
Следующая конфигурация демонстрирует самодостаточную установку. Чтобы демонстрация заработала, необходимо предоставить действительный SSL-ключ/сертификат и изменить
OVERLEAF_SITE_URL (SHARELATEX_SITE_URL для версий 4.x и более ранних). Для реальной установки необходимо заменить фиктивные секреты настоящими, как указано в комментариях. Для реальной установки также нужно перенести отдельные контейнеры на выделенные узлы и скорректировать IP-адреса в соответствии с конфигурацией вашей локальной сети.Оборудование
Мы рекомендуем использовать одинаковые аппаратные характеристики для всех экземпляров Server Pro, участвующих в горизонтальном масштабировании. Для экземпляров Server Pro действуют общие рекомендации по аппаратным характеристикам.Обновление Server Pro
В процессе обновления Server Pro автоматически выполняет миграции базы данных. Эти миграции не рассчитаны на параллельный запуск с нескольких экземпляров. Миграции должны завершиться до запуска самого веб-приложения. Вы можете либо проверить журналы на наличие записиFinished migrations, либо дождаться, пока приложение начнёт принимать трафик.
Процедура обновления выглядит так:
- Запланируйте окно обслуживания
- Остановите все экземпляры Server Pro
- Создайте согласованную резервную копию, как описано в документации
- Запустите один экземпляр Server Pro с новой версией
- Убедитесь, что новый экземпляр работает как ожидается
- Запустите остальные экземпляры с новой версией

