Интеграция NextCloud с Collabora Online

В этой публикации я покажу, как выполняется интеграция NextCloud с Collabora Online. Установку можно выполнить либо в качесиве пакета непосредственно в операционной системе, либо установить Collabora Online в качестве Docker контейнера. Я буду рассматривать установку в виде контейнера.

Устанавливать Collabora Online я буду на тот же сервер, где я уже установил NextCloud ранее. В качестве веб сервера я использовал Apache.

Предварительная подготовка

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

sudo apt update
sudo apt install -y docker.io

Убедимся, что Docker будет запускаться автоматически:

sudo systemctl enable --now docker

Запустим образ Collabora Online в качестве контейнера Docker:

sudo docker run -t -d -p 127.0.0.1:9980:9980 --name collabora -e 'domain=files.itproblog.ru' --restart always --cap-add MKNOD  collabora/code

В параметре “-e ‘domain=files.itproblog.ru'” необходимо указать имя сервера с NextCloud.

И вот тут есть двоякий момент – в документации указано экранировать точки через двойной слэш. Например, ‘domain=cloud\\.nextcloud\\.com’. Но в моем случае при таком подхода документы не открывались на редактирование, а генерировалась ошибка “failed to load nextcloud office”. В логах самого контейнера была ошибка “No acceptable WOPI hosts found matching the target host”.

В файле hosts я добавлю соответствующую запись:

sudo nano /etc/hosts
10.10.10.88 office.itproblog.ru

С настройкой разрешения имен в контейнере немного сложнее. Как правило контейнер получает в качестве сервера DNS тот адрес, который указан в DHCP. В моем случае – это домашний Mikrotik. Соответственно в статический DNS на Mikrotik я добавил две записи:

Настройка публикации

На веб сервере Apache включим необходимы модули:

sudo a2enmod proxy
sudo a2enmod proxy_wstunnel
sudo a2enmod proxy_http
sudo a2enmod ssl

Перезапустим Apache:

sudo systemctl restart apache2

Настроим правило публикации:

sudo nano /etc/apache2/sites-available/collabora.conf

Содержимое файла:

<VirtualHost *:4443>
    ServerName office.itproblog.ru:4443

    # SSL configuration, you may want to take the easy route instead and use Lets Encrypt!
    SSLEngine on
    SSLCertificateFile "/etc/nextcloud/certs/itproblog.ru.crt"
    SSLCertificateKeyFile "/etc/nextcloud/certs/itproblog.ru.key"
    SSLCertificateChainFile "/etc/nextcloud/certs/itproblog.ru.chain"
    SSLProtocol             all -SSLv2 -SSLv3
    SSLCipherSuite ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS
    SSLHonorCipherOrder     on

    # Encoded slashes need to be allowed
    AllowEncodedSlashes NoDecode

    # Container uses a unique non-signed certificate
    SSLProxyEngine On
    SSLProxyVerify None
    SSLProxyCheckPeerCN Off
    SSLProxyCheckPeerName Off

    # keep the host
    ProxyPreserveHost On

    # static html, js, images, etc. served from coolwsd
    # browser is the client part of LibreOffice Online
    ProxyPass           /browser https://127.0.0.1:9980/browser retry=0
    ProxyPassReverse    /browser https://127.0.0.1:9980/browser

    # WOPI discovery URL
    ProxyPass           /hosting/discovery https://127.0.0.1:9980/hosting/discovery retry=0
    ProxyPassReverse    /hosting/discovery https://127.0.0.1:9980/hosting/discovery

    # Main websocket
    ProxyPassMatch "/cool/(.*)/ws$" wss://127.0.0.1:9980/cool/$1/ws nocanon

    # Admin Console websocket
    ProxyPass   /cool/adminws wss://127.0.0.1:9980/cool/adminws

    # Download as, Fullscreen presentation and Image upload operations
    ProxyPass           /cool https://127.0.0.1:9980/cool
    ProxyPassReverse    /cool https://127.0.0.1:9980/cool

    # Endpoint with information about availability of various features
    ProxyPass           /hosting/capabilities https://127.0.0.1:9980/hosting/capabilities retry=0
    ProxyPassReverse    /hosting/capabilities https://127.0.0.1:9980/hosting/capabilities
    </VirtualHost>
<IfModule ssl_module>
        Listen 4443
</IfModule>

Только укажите актуальные для вас значения в параметрах ServerName, SSLCertificateChainFile, SSLCertificateFile и SSLCertificateKeyFile

Включим публикацию на apache:

sudo a2ensite collabora
sudo systemctl reload apache2

Проверить публикацию можно, например, перейдя вот по такой ссылке (с учетом вашего доменного имени):

https://office.itproblog.ru:4443/hosting/discovery

Вы должны увидеть XML документ с метаданными:

При публикации сервера NextCloud во внешний мир также не забудьте опубликовать Collabora Online. В моем случае это адрес https://office.itproblog.ru:4443.

Интеграция NextCloud с Collabora Online

Откроем консоль управления приложениями:

Необходимо установить и включить приложение для Collabora Online:

Еще дополнительно необходимо установить пакет NextCloud Office:

Затем переходим в настройки NextCloud Office и указываем, что мы собираемся использовать свой сервер. Указываем URL для подключения к серверу, который мы с вами настроили на сервере Apache:

https://office.itproblog.ru:4443

Сохраняем внесенные изменения.

Проверка

Теперь проверим работу онлайн редактора Collabora.

Создадим табличный документ:

Если все настройки были выполнены корректно, то в браузере должен открыться онлайн редактор Collabora.

Если что-то пошло не так, то в документации есть отдельный гайд по устранению проблем.

Интеграция NextCloud с Collabora Online: 2 комментария

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *