Установка и интеграция 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 завершена. Ниже в настройках вы можете указать какие форматы файлов будут обрабатываться сервером, шаблоны и другие настройки.

Scroll to Top