Установка и интеграция OnlyOffice и NextCloud
OnlyOffice – решение позволяющее просматривать и редактировать документы через web – интерфейс, предоставлять общий доступ для совместной работы, а так же интегрировать его
в другие различные продукты.
Само решение OnlyOffice состоит из нескольких компонентов – самого сервера редактора документов (Document Server), сервера баз данных, почтового сервера, сервера для проведения ВКС и других.
Предполагается, что в IT инфраструктуре уже имеется какое-то облачное хранилище для управления вашими документами, поэтому в данной статье речь пойдет только об установке Document Server и
компонентов, необходимых для его корректной работы.
Установка будет производиться в Docker. Так же стоит обратить внимание, что для корректной работы редактора документов,
в вашей IT инфраструктуре должны присутствовать локальный DNS сервер и Reverse Proxy сервер.
Ниже представлена схема с описанием реализации решения на данном примере, если ваша IT инфраструктура отличается от представленной ниже,
вы можете адаптировать приведенные ниже инструкции под свои реалии.

1. Для сервера OnlyOffice создайте DNS запись типа – А на вашем локальном DNS сервере, указывающую на ваш Reverse Proxy сервер.
Должно получиться примерно так, как на рисунке ниже.
Обратите внимание, что запись ведет не на сам сервер OnlyOffice, а на Reverse Proxy.
Это необходимо для того, что бы контейнеры OnlyOffice могли обращаться к самим себе по доменному имени и получать при этом входящие соединение из вне.

2. На вашем Reverse Proxy сервере необходимо установить SSL сертификат и создать конфигурацию для проксирования запросов на сервер OnlyOffice.
В примере ниже указан пример конфигурации для Nginx Reverse Proxy сервера, если вы используете другое решение, адаптируйте конфигурацию под вашу ситуацию.
upstream office {
server 10.10.1.6;
}
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;
## Normal HTTP host
server {
listen 80;
server_name office.nnnn.com;
server_tokens off;
## Redirects all traffic to the HTTPS host
return 301 https://$server_name:443$request_uri;
location ^~ /.well-known/acme-challenge/ {
default_type “text/plain”;
root /var/www/letsencrypt/office;
}
location = /.well-known/acme-challenge/ {
return 404;
}
}
server {
listen 443 ssl;
server_name office.nnnn.com;
server_tokens off;
## Strong SSL Security
ssl_certificate /etc/letsencrypt/live/office.nnnn.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/office.nnnn.com/privkey.pem;
ssl_verify_client off;
ssl_ciphers “EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH”;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_session_cache builtin:1000 shared:SSL:10m;
ssl_prefer_server_ciphers on;
add_header X-Content-Type-Options nosniff;
location / {
proxy_pass http://office;
proxy_http_version 1.1;
}
location ^~ /.well-known/acme-challenge/ {
default_type “text/plain”;
root /var/www/letsencrypt/office;
}
location = /.well-known/acme-challenge/ {
return 404;
}
}
В итоге у вас должна получиться конфигурация примерно такая, как на рисунке ниже.

3. Установите Docker на ваш сервер введя команду:
apt install docker.io -y
Вывод должен быть примерно следующий:

4. Установите Docker Compose введя следующую команду:
apt install docker-compose -y
Вывод должен быть примерно следующий:

5. Перезагрузите сервер введя команду:
reboot
Вывод должен быть примерно следующим:

6. Создайте в корне файловой системы новую папку “Docker” и перейдите в нее, введя следующие команды:
mkdir /docker
cd /docker
Должно получиться примерно так:

7. Для постоянного хранения информации, что бы при перезапуске контейнера информация не удалялась, создайте следующие папки, введя следующую команду:
mkdir onlyoffice-document-postgres && \
mkdir onlyoffice-document-redis && \
mkdir onlyoffice-document-rabbitmq && \
mkdir onlyoffice-document-data && \
mkdir onlyoffice-document-log && \
mkdir onlyoffice-document-cache-files && \
mkdir onlyoffice-document-public-files && \
mkdir onlyoffice-document-fonts
Вывод команды должен быть примерно следующий:

8. Создайте файл переменных окружения “.env” и откройте его на редактирование введя следующую команду:
touch .env && nano .env
9. Заполните файл переменных окружения по примеру указанному ниже и замените все логины и пароли на ваши значения
# OnlyOffice Variables
ONLYOFFICE_DOCUMENT_POSTGRES_IMAGE_TAG=postgres:16
ONLYOFFICE_DOCUMENT_REDIS_IMAGE_TAG=redis
ONLYOFFICE_DOCUMENT_IMAGE_TAG=onlyoffice/documentserver
ONLYOFFICE_DOCUMENT_HOSTNAME=office.nnnn.com
ONLYOFFICE_DOCUMENT_DB_NAME=onlyofficedb
ONLYOFFICE_DOCUMENT_DB_USER=onlyofficedbuser
ONLYOFFICE_DOCUMENT_DB_PASSWORD=StrongPassword
ONLYOFFICE_DOCUMENT_JWT_SECRET=YOURsuperSTRONGsecret
# RabbitMQ Variables
RABBITMQ_IMAGE_TAG=rabbitmq
RABBITMQ_USER=rabbitmqdb
RABBITMQ_PASSWORD=anotherpassword
В итоге должен получиться примерно такой файл:

Сохраните изменения и закройте файл.
10. Создайте docker-compose файл и откройте его на редактирование введя следующую команду:
touch docker-compose.yml && nano docker-compose.yml
11. Заполните файл по примеру, указанному ниже
services:
postgres-onlyoffice-document:
container_name: onlyoffice-postgresql
image: ${ONLYOFFICE_DOCUMENT_POSTGRES_IMAGE_TAG}
volumes:
– ./onlyoffice-document-postgres:/var/lib/postgresql/data
environment:
POSTGRES_DB: ${ONLYOFFICE_DOCUMENT_DB_NAME}
POSTGRES_USER: ${ONLYOFFICE_DOCUMENT_DB_USER}
POSTGRES_HOST_AUTH_METHOD: trust
networks:
– onlyoffice
healthcheck:
test: [“CMD-SHELL”, “pg_isready -U $$POSTGRES_USER -d $$POSTGRES_DB”]
interval: 10s
timeout: 5s
retries: 3
start_period: 60s
restart: unless-stopped
redis-onlyoffice-document:
image: ${ONLYOFFICE_DOCUMENT_REDIS_IMAGE_TAG}
container_name: onlyoffice-redis
volumes:
– ./onlyoffice-document-redis:/data
networks:
– onlyoffice
healthcheck:
test: [“CMD”, “redis-cli”, “ping”]
interval: 10s
timeout: 5s
retries: 3
start_period: 60s
restart: unless-stopped
rabbitmq-onlyoffice-document:
image: ${RABBITMQ_IMAGE_TAG}
container_name: onlyoffice-rabbitmq
volumes:
– ./onlyoffice-document-rabbitmq:/var/lib/rabbitmq
environment:
RABBITMQ_DEFAULT_USER: ${RABBITMQ_USER}
RABBITMQ_DEFAULT_PASS: ${RABBITMQ_PASSWORD}
networks:
– onlyoffice
healthcheck:
test: rabbitmq-diagnostics -q ping
interval: 10s
timeout: 5s
retries: 3
start_period: 90s
restart: unless-stopped
onlyoffice-document:
image: ${ONLYOFFICE_DOCUMENT_IMAGE_TAG}
container_name: onlyoffice-server
volumes:
– ./onlyoffice-document-data:/var/www/onlyoffice/Data
– ./onlyoffice-document-log:/var/log/onlyoffice
– ./onlyoffice-document-cache-files:/var/lib/onlyoffice/documentserver/App_Data/cache/files
– ./onlyoffice-document-public-files:/var/www/onlyoffice/documentserver-example/public/files
– ./onlyoffice-document-fonts:/usr/share/fonts
environment:
DB_TYPE: postgres
DB_HOST: postgres-onlyoffice-document
DB_PORT: 5432
DB_NAME: ${ONLYOFFICE_DOCUMENT_DB_NAME}
DB_USER: ${ONLYOFFICE_DOCUMENT_DB_USER}
DB_PWD: ${ONLYOFFICE_DOCUMENT_DB_PASSWORD}
AMQP_TYPE: rabbitmq
AMQP_URI: amqp://${RABBITMQ_USER}:${RABBITMQ_PASSWORD}@rabbitmq-onlyoffice-document
REDIS_SERVER_HOST: redis-onlyoffice-document
REDIS_SERVER_PORT: 6379
JWT_ENABLED: ‘true’
JWT_SECRET: ${ONLYOFFICE_DOCUMENT_JWT_SECRET}
JWT_HEADER: Authorization
JWT_IN_BODY: ‘true’
networks:
– onlyoffice
ports:
– ’80:80′
– ‘443:443’
restart: unless-stopped
depends_on:
postgres-onlyoffice-document:
condition: service_healthy
rabbitmq-onlyoffice-document:
condition: service_healthy
networks:
onlyoffice:
В итоге у вас должен получиться примерно такой файл:

Сохраните изменения и закройте файл.
12. Запустите контейнеры введя следующую команду:
docker-compose up -d
Вывод команды будет примерно следующий:

13. Дождитесь пока Docker скачает все образы контейнеров и запустит их.
Убедитесь, что все контейнеры запустились, введя следующую команду
docker ps -a
Вывод команды должен быть примерно следующим:

14. На загрузку сервера уходит некоторое время, поэтому прежде, чем продолжать убедитесь, что сервер полностью загрузился и готов к работе,
для этого введите следующую команду
docker logs 9d28c7cb544c
Где:
9d28c7cb544c – Container ID контейнера “onlyoffice-server”
Вы должны увидеть строки, как на рисунке ниже. Данные логи говорят о том, что сервер готов к работе

15. В браузере перейдите на сайт вашего сервера OnlyOffice. Скопируйте команду из поля “Start test example”.

Вставьте содержимое буфера обмена в консоль вашего сервера

Так же скопируйте и вставьте в консоль сервера содержимое поля “Add it to the autostart”

Нажмите кнопку “Go to test example”

16. Создайте любой тестовый документ для проверки работоспособности

17. Если документ открылся, все кнопки кликабельны и нет никаких ошибок – значит установка сервера OnlyOffice
прошла успешно и можно переходить к следующему этапу интеграции OnlyOffice в NextCloud.

18. В вашем web браузере авторизуйтесь в вашем NextCloud под учетной записью администратора и перейдите в меню “Приложения”

19. Во вкладке “Офис и текст” найдите приложение “OnlyOffice” и нажмите кнопку “Скачать и включить”

20. После того, как приложение скачается и установится, перейдите в меню “Параметры сервера”

21. Перейдите на вкладку “OnlyOffice” и введите в поле “Адрес OnlyOffice Docs” доменное имя вашего сервера OnlyOffice.
В поле “Секретный ключ” введите ключ JWT, который вы указывали ранее в файле переменных окружения “.env” в консолe сервера OnlyOffice

22. Нажмите кнопку “Сохранить”.

23. На этом установка и интеграция OnlyOffice и NextCloud завершена. Ниже в настройках вы можете указать какие форматы файлов будут обрабатываться сервером, шаблоны и другие настройки.