Перейти к содержанию

ONLYOFFICE Docs

Первая Форма поддерживает онлайн-совместную работу с документами (текстами, таблицами, презентациями). В качестве редактора используется ONLYOFFICE Docs.

Режимы распространения ONLYOFFICE:

  • Коммерческая версия;

  • CommunityEdition под GNUAGPLv3.

Архитектура решения

Роль компонентов:

Первая Форма:

  • Реализует REST-API в соответствии со спецификацией ONLYOFFICE API;

  • Принимает HTTP-запросы от ONLYOFFICE Docs для операций.

ONLYOFFICE Docs:

  • Отправляет запросы к API "Первой Формы";

  • Отображает интерфейс редактора на фронтенде.

Безопасность

Используются JWT-токены:

  • Генерируются на стороне хоста ("Первая Форма");

  • Передаются только валидным сессиям;

  • Проверка подписи осуществляется на уровне Docs (симметричный секретный ключ).

Системные требования

Минимальные рекомендации в зависимости от числа одновременно активных пользователей:

Размер инсталляции vCPU RAM Storage
<100 пользователей 2 4GB 40GB
>100 пользователей ≥4 4–8GB ≥160GB

Поддерживаемые ОС:

Любой современный Linux x64 - Debian, Ubuntu, CentOS, RHEL и т.п.

Ограничения использования ONLYOFFICE Document Server Community Edition

ONLYOFFICE CE не поддерживает кластеризацию. Отказоустойчивость и масштабирование должны обеспечиваться средствами оркестратора или путём запуска нескольких независимых реплик. При втором варианте, если несколько пользователей одновременно редактируют один и тот же документ, возможна рассинхронизация.

ONLYOFFICE CE имеет ограничение на число одновременных сессий редактирования — максимум 20 вкладок с открытым редактором. При превышении этой границы все последующие подключения к редактору будут открываться только в режиме просмотра.

Для сценариев, где требуется кластеризация, отказоустойчивость с высокой нагрузкой или значительно большее число одновременных редактирующих пользователей/сессий, необходимо рассмотреть коммерческий вариант лицензирования — Enterprise-версию. Или рассмотреть использование отечественного продукта — Р7‑Офис, который является вариантом импортозамещения офисного пакета.

Docker-развертывание

Для удобства развертывания, масштабирования и обновлений рекомендуется поднять ONLYOFFICE через Docker. Вы можете скачать образ из репозитория Docker HUB или из репозитория Первая Форма:

  • Официальный образ: onlyoffice/documentserver ;

  • Образ от Первой Формы: docker.1forma.ru/onlyoffice/documentserver .

Образы включают в себя:

  • ONLYOFFICE Docs;

  • Nginx;

  • Вспомогательные сервисы (в составе образа или как зависимые контейнеры):

oRedis — кэширование, сессии;

oRabbitMQ — очереди задач (например, фоновые конвертации);

oPostgreSQL — база данных.

Запуск в Docker Compose

Для удобного, воспроизводимого и расширяемого развёртывания ONLYOFFICE Docs используем Docker Compose с внешним .env -файлом.

Вы можете скачать готовые файлы конфигурации Docker Compose из репозитория Первая Форма. Архив содержит преднастроенные конфигурации для различных сценариев развертывания ONLYOFFICE.

Cоздайте каталог, где будут храниться все файлы конфигурации и данные:

mkdir -p /opt/onlyoffice

cd /opt/onlyoffice

Создайте файл docker-compose.yml.

Пример docker-compose.yml (содержание может отличаться в зависимости от требуемой конфигурации).

services:

documentserver:

image: docker-public.1forma.ru/onlyoffice/documentserver:latest

container_name: documentserver

ports:

- '80:80

- '443:443'

volumes:

- ./documentserver/logs:/var/log/onlyoffice:Z

- ./documentserver/data:/var/www/onlyoffice/Data:Z

- ./documentserver/lib:/var/lib/onlyoffice:Z

- ./documentserver/db:/var/lib/postgresql:Z

environment:

- ALLOW_META_IP_ADDRESS

- ALLOW_PRIVATE_IP_ADDRESS

- AMQP_URI

- DB_HOST

- DB_NAME

- DB_PORT

- DB_PWD

- DB_TYPE

- DB_USER

- JWT_ENABLED

- JWT_HEADER

- JWT_IN_BODY

- JWT_SECRET

- LETS_ENCRYPT_DOMAIN

- LETS_ENCRYPT_MAIL

- ONLYOFFICE_HTTPS_HSTS_ENABLED

- ONLYOFFICE_HTTPS_HSTS_MAXAGE

- REDIS_SERVER_HOST

- REDIS_SERVER_PASS

- REDIS_SERVER_PORT

- SSL_CERTIFICATE_PATH

- SSL_DHPARAM_PATH

- SSL_KEY_PATH

- SSL_VERIFY_CLIENT

- TZ

- USE_UNAUTHORIZED_STORAGE

- WOPI_ENABLED

healthcheck:

test: ["CMD-SHELL", "curl -f http://localhost/healthcheck || exit 1"]

interval: 30s

timeout: 10s

retries: 3

start_period: 60s

stdin_open: true

restart: unless-stopped

networks:

onlyoffice:

networks:

onlyoffice:

Пояснения к параметрам:

, image: используется образ docker-public.1forma.ru/onlyoffice/documentserver:latest

, healthcheck: проверяется доступность /healthcheck , возвращающей HTTP 200

Рядом создайте .env:

# JWT Settings

JWT_ENABLED=true

JWT_SECRET=JWT_SECRET

JWT_HEADER=Authorization

JWT_IN_BODY=true

# WOPI Settings

WOPI_ENABLED=true

ALLOW_META_IP_ADDRESS=true

ALLOW_PRIVATE_IP_ADDRESS=true

USE_UNAUTHORIZED_STORAGE=true

# Timezone

TZ=Europe/Moscow

Пояснения к параметрам:

  • JWT_ENABLED — включение проверки JWT-токенов.

  • JWT_SECRET — секретный симметричный ключ для подписи JWT. Должен содержать не менее 32 символов. Размер ключа должен быть больше 256 бит.

  • JWT_HEADER — заголовок и включение передачи токена в теле запроса.

  • WOPI_ENABLED — включение поддержки WOPI-интеграции.

  • ALLOW_META_IP_ADDRESS, ALLOW_PRIVATE_IP_ADDRESS- — разрешают доступ к мета- и приватным IP адресам.

  • USE_UNAUTHORIZED_STORAGE — разрешает подключение к хранилищам с самоподписанными сертификатами.

  • TZ — устанавливает часовой пояс контейнера.

Запустите сервис:

docker compose up -d

Хранение данных вне контейнеров

Все данные хранятся в специально предназначенных каталогах — томах данных, по следующим путям:

  • /var/log/onlyoffice — для журналов (логов) ONLYOFFICE Docs.

  • /var/www/onlyoffice/Data — для сертификатов.

  • /var/lib/onlyoffice — для кэша файлов.

Мы настоятельно рекомендуем хранить данные вне Docker-контейнеров — на хост-машине. Это позволит вам легко обновлять ONLYOFFICE Docs при выходе новой версии без потери данных. Чтобы получить доступ к данным, расположенным вне контейнера, необходимо смонтировать тома. Это можно сделать с помощью volumes:

volumes:

- ./documentserver/logs:/var/log/onlyoffice:Z # для логов ONLYOFFICE Docs

- ./documentserver/data:/var/www/onlyoffice/Data:Z # для сертификатов

- ./documentserver/lib:/var/lib/onlyoffice:Z # для кэша файлов

- ./documentserver/db:/var/lib/postgresql:Z # для базы данных (если не используется внешний

сервис)

ℹ️ Обратите внимание: если вы монтируете папки, которые еще не существуют, они будут созданы автоматически, но права доступа к ним будут ограничены. Вам нужно будет вручную изменить права доступа на соответствующие

Обычно нет необходимости сохранять данные контейнера, так как его работа не зависит от состояния. Однако сохранение данных будет полезно:

  • для удобного доступа к данным контейнера, например, логам;

  • чтобы снять ограничения на объём данных внутри контейнера;

  • при использовании сервисов, запускаемых вне контейнера, таких как PostgreSQL, Redis, RabbitMQ.

Использование внешнего сервиса Redis

Docker-образ onlyoffice/documentserver содержит встроенный сервер Redis. Однако, если в вашей инфраструктуре уже работает выделенный Redis-сервер, использование встроенного может быть избыточным.

Преимущества подключения внешнего Redis:

  • Централизованная работа с кэшем и сессиями для всей инфраструктуры.

  • Независимость обновлений от отделенного сервиса.

Определите следующие переменные окружения:

REDIS_SERVER_HOST=REDIS_HOST

REDIS_SERVER_PORT=6379

REDIS_SERVER_PASS=REDIS_PASSWORD

Пояснения к параметрам:

  • REDIS_SERVER_HOST — IP или DNS вашего Redis-сервера.

  • REDIS_SERVER_PORT — порт (обычно 6379).

  • REDIS_SERVER_PASS — пароль (если Redis защищен).

После этого onlyoffice/documentserver отключит встроенный Redis и подключится к указанному.

Использование внешнего сервиса RabbitMQ

Образ также включает встроенный RabbitMQ. Использование внешнего брокера позволяет:

  • Централизовать очереди задач (конвертация, уведомления и т.п.).

  • Избежать лишней нагрузки и продублированных зависимых служб.

Для подключения внешнего сервиса RabbitMQ настройте строку подключения через переменную окружения:

AMQP_URI=amqp://guest:guest@rabbitmq

Пояснения к параметрам:

  • AMQP_URI — URI для подключения к RabbitMQ.

После этого Docs не будет запускать RabbitMQ внутри контейнера, а подключится к внешнему.

Использование внешнего SQL сервера

Внутренний образ содержит встроенный PostgreSQL, но для стабильности, резерва и масштабирования можно использовать внешний SQL-сервер (PostgreSQL, MSSQL, MariaDB и др).

Определите переменные окружения:

DB_TYPE=postgres

DB_HOST=DB_SERVER

DB_PORT=5432

DB_NAME=onlyoffice

DB_USER=onlyoffice

DB_PWD=DB_PASSWORD

Пояснения к параметрам:

  • DB_TYPE — тип СУБД: PostgreSQL, MSSQL, MariaDB, MySQL, oracle.

  • Остальные — подключение к внешней базе

Убедитесь, что база и пользователь созданы перед запуском.

Пример команд создания базы данных и пользователя PostgreSQL

-- Create OnlyOfice User

create user onlyoffice with inherit login password 'DB_PASSWORD';

-- Create OnlyOfice DB

create database onlyoffice

template template0

owner onlyoffice

encoding 'utf8'

lc_collate 'ru_RU.utf8'

lc_ctype 'ru_RU.utf8';

Пример команд создания базы данных и пользователя MSSQL

create database onlyoffice;

-- Создайте пользователя и назначьте права:
CREATE LOGIN onlyoffice WITH PASSWORD = '<надёжный_пароль>';
CREATE USER onlyoffice FOR LOGIN onlyoffice;
ALTER ROLE db_owner ADD MEMBER onlyoffice;

Запуск с использованием HTTPS

Доступ к ONLYOFFICE можно обезопасить с помощью SSL, чтобы предотвратить несанкционированный доступ. Сертификат SSL, выданный удостоверяющим центром (CA), обеспечивает доверие через подтверждённого поставщика. Вы можете автоматически получить сертификаты от Let's Encrypt или использовать собственные.

Переключение ONLYOFFICE Docs на HTTPS с использованием certbot

Самый простой способ — автоматическое получение сертификатов SSL от Let's Encrypt с помощью certbot.

Определите переменные окружения:

LETS_ENCRYPT_DOMAIN=yourdomain.com

LETS_ENCRYPT_MAIL=email@example.com

Пояснения к параметрам:

  • LETS_ENCRYPT_DOMAIN — доменное имя для сертификата.

  • LETS_ENCRYPT_MAIL — email-адрес для регистрации и восстановления.

Сертификат от Let's Encrypt будет автоматически сгенерирован и установлен. После этого ONLYOFFICE Docs будет доступен по адресу https://yourdomain.com

Подключение собственных сертификатов

Для обеспечения защищённого HTTPS-доступа к ONLYOFFICE Docs с собственными сертификатами необходимо предоставить SSL-сертификаты и задать соответствующие переменные окружения.

Настройте проброс сертификатов в контейнер в docker-compose.yml:

volumes:

- ./ssl/cert.crt:/ssl/cert.crt:ro

- ./ssl/private.key:/ssl/private.key:ro

- ./ssl/dhparam.pem:/ssl/dhparam.pem:r

Настройте переменные окружения в .env:

SSL_CERTIFICATE_PATH=/ssl/cert.crt

SSL_KEY_PATH=/ssl/private.key

SSL_DHPARAM_PATH=/ssl/dhparam.pem

Пояснения к параметрам:

  • ONLYOFFICE_HTTPS_HSTS_ENABLED — включение HSTS: по умолчанию true.

  • ONLYOFFICE_HTTPS_HSTS_MAXAGE — максимальный срок HSTS: 31536000.

  • SSL_VERIFY_CLIENT — проверка клиентских сертификатов: false.

  • SSL_CERTIFICATE_PATH — путь к SSL-сертификату.

  • SSL_KEY_PATH — путь к приватному ключу.

  • SSL_DHPARAM_PATH — путь к параметрам DH.

Использование ONLYOFFICE Docs за прокси-сервером

ONLYOFFICE Docs — это онлайн-приложение, которое часто интегрируется во внутренние сети. Во многих сетях используются веб-серверы-прокси, такие как NGINX, HAProxy и Træfik, для маршрутизации и балансировки трафика. Эти прокси обеспечивают безопасность, масштабируемость и контроль над подключениями.

Чтобы ONLYOFFICE Docs корректно работал за прокси, необходимо правильно настроить пересылаемые HTTP-заголовки. При использовании прокси важно передавать информацию о клиентском запросе серверу через специальные заголовки:

  • X-Forwarded-Proto — определяет исходный протокол, использованный клиентом (HTTP или HTTPS).

  • X-Forwarded-Host — указывает исходный хост, запрошенный клиентом.

В зависимости от инфраструктуры и целей, есть несколько основных сценариев настройки:

1. Обычный сценарий (прокси на локальный сервер)

2. HTTPS-прокси → HTTP-сервер

3. Виртуальный путь (виртуальный префикс)

4. Проксирование через Frontend Первая Форма

Обычный сценарий (прокси на локальный сервер)

Используется, если необходимо просто перенаправить входящий трафик на локальный сервер с ONLYOFFICE Docs.

Пример готовой конфигурации Nginx

upstream docservice {

server backendserver-address;

}

map $http_host $this_host {

"" $host;

default $http_host;

}

map $http_x_forwarded_proto $the_scheme {

default $http_x_forwarded_proto;

"" $scheme;

}

map $http_x_forwarded_host $the_host {

default $http_x_forwarded_host;

"" $this_host;

}

map $http_upgrade $proxy_connection {

default upgrade;

"" close;

}

proxy_set_header Upgrade $http_upgrade;

proxy_set_header Connection $proxy_connection;

proxy_set_header X-Forwarded-Host $the_host;

proxy_set_header X-Forwarded-Proto $the_scheme;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

server {

listen 0.0.0.0:80;

listen [::]:80 default_server;

server_tokens off;

location / {

proxy_pass http://docservice;

proxy_http_version 1.1;

}

}

HTTPS-прокси → HTTP-сервер

Используется, когда необходимо обеспечить безопасное соединение с клиентом, но сам ONLYOFFICE Docs работает по HTTP. Все входящие соединения автоматически перенаправляются на HTTPS.

Пример готовой конфигурации Nginx

upstream docservice {

server backendserver-address;

}

map $http_host $this_host {

"" $host;

default $http_host;

}

map $http_x_forwarded_proto $the_scheme {

default $http_x_forwarded_proto;

"" $scheme;

}

map $http_x_forwarded_host $the_host {

default $http_x_forwarded_host;

"" $this_host;

}

map $http_upgrade $proxy_connection {

default upgrade;

"" close;

}

proxy_set_header Upgrade $http_upgrade;

proxy_set_header Connection $proxy_connection;

proxy_set_header X-Forwarded-Host $the_host;

proxy_set_header X-Forwarded-Proto $the_scheme;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

server {

listen 0.0.0.0:80;

listen [::]:80 default_server;

server_name _;

server_tokens off;

return 301 https://$server_name:443$request_uri;

}

server {

listen 0.0.0.0:443 ssl;

listen [::]:443 ssl default_server;

server_tokens off;

root /usr/share/nginx/html;

ssl_certificate {{SSL_CERTIFICATE_PATH}};

ssl_certificate_key {{SSL_KEY_PATH}};

ssl_verify_client off;

ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";

ssl_protocols TLSv1.2 TLSv1.3; # TLSv1 и TLSv1.1 устарели и отключены (RFC 8996). Используйте только TLSv1.2 и TLSv1.3.

ssl_session_cache builtin:1000 shared:SSL:10m;

ssl_prefer_server_ciphers on;

add_header X-Content-Type-Options nosniff;

location / {

proxy_pass http://docservice;

proxy_http_version 1.1;

}

}

Виртуальный путь (виртуальный префикс)

Подходит в ситуациях, когда нужно разместить ONLYOFFICE Docs по определённому URL-префиксу (например, /office/ ) в рамках существующего веб-приложения.

Пример готовой конфигурации Nginx

upstream docservice {

server backendserver-address;

}

map $http_x_forwarded_proto $the_scheme {

default $http_x_forwarded_proto;

"" $scheme;

}

map $http_x_forwarded_host $the_host {

default $http_x_forwarded_host;

"" $host;

}

map $http_upgrade $proxy_connection {

default upgrade;

"" close;

}

proxy_set_header Upgrade $http_upgrade;

proxy_set_header Connection $proxy_connection;

proxy_set_header X-Forwarded-Host $the_host/office;

proxy_set_header X-Forwarded-Proto $the_scheme;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

server {

listen 0.0.0.0:80;

listen [::]:80 default_server;

server_tokens off;

location /office/ {

proxy_pass http://docservice/;

proxy_http_version 1.1;

}

}

Проксирование ONLYOFFICE через Frontend «Первая Форма»

Frontend-сервис приложения Первая Форма может работать в режиме reverse proxy, если в тракте запроса не используется другое проксирующее решение.

Вы можете настроить проксирование запросов к ONLYOFFICE через виртуальный путь /office например: https://1f.domain/office

Для этого необходимо задать переменную окружения в конфигурации сервиса 1forma frontend:

PROXY_ONLYOFFICE_URL=http://onlyoffice.service

ℹ️ В конфигурации 1F-SPA эта переменная называется SPA_PROXY_ONLYOFFICE_URL. Убедитесь что используете правильное имя для вашего способа развёртывания.

Пояснения к параметрам:

  • http://onlyoffice.service — адрес сервиса ONLYOFFICE во внутренней сети (например, внутри Docker Compose).

  • PROXY_ONLYOFFICE_URL — сообщает фронтенду, куда перенаправлять запросы с пути /office.

Настройка ONLYOFFICE в приложении Первая Форма

Для корректной работы ONLYOFFICE в приложении Первая Форма необходимо выполнить два этапа настройки:

1. Настроить симметричный ключ для генерации и проверки JWT-токена.

2. Указать параметры OfficeOnlineEditor в Кастомных настройках приложения.

Настройка секрета для симметричного ключа JWT

JWT (JSON Web Token) используется для обеспечения безопасности взаимодействия между компонентами. Токен подписывается симметричным секретом, который должен быть одинаково известен как отправителю, так и получателю.

Требования к секрету:

  • Должен содержать не менее 32 символов.

  • Должен быть достаточно сложным (рекомендуется использовать случайно сгенерированную строку).

Способы настройки секрета:

1. Через файл конфигурации appsettings.json:

"R7": {

"SecretKey": "JWT_SECRET"

}

2. Через переменные окружения:

R7_SECRET_KEY=JWT_SECRET

Настройка параметров OfficeOnlineEditor

Для настройки ONLYOFFICE в приложении Первая Форма небходимо указать нужное в значение ключа OfficeOnlineEditor в разделе Кастомных настройках приложения.

Ключ имеет вид Json — объекта:

{"editor": "OnlyOffice", "settings": {"serverAddress":"https://ru.1forma.ru/office", "allowedIPs": \[\]}}

В атрибут settings можно задать адрес сервера и список разрешенных подсетей.

Пояснения к параметрам:

  • "editor": "OnlyOffice" — указывает использование редактора.

ℹ️ Обратите внимание: для корректной работы с онлайн-редакторами необходимо учитывать версию платформы. В версиях 2.264 Кассиопея и ниже в параметре "editor" для работы с OnlyOffice необходимо указывать значение "r7". Начиная с версии 2.265 Цефей и выше для одноименного редактора доступно значение "OnlyOffice", использование "r7" остается только для редактора Р7-Офис

  • "serverAddress" — адрес сервера ONLYOFFICE (например, https://1f.domain/office/).

  • "allowedIPs" — список разрешенных IP-адресов или подсетей. Может быть пустым.

После внесения всех настроек перезапустите приложение, чтобы изменения вступили в силу.

Полезные ссылки

Исходники Docker-образа (GitHub) — Готовый контейнер для запуска ONLYOFFICE Docs с инструкциями и переменными окружения

Примеры настройки Reverse Proxy (GitHub) — Готовые конфигурации для NGINX, Apache, HAProxy и Træfik для работы через прокси.