В этой публикации я покажу, как выполняется интеграция 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 комментария
Здравствуйте
Как заставить работать по http? Без сертификата
Добрый день! Попробуйте использовать вот эту конфигурацию – https://sdk.collaboraonline.com/docs/installation/Proxy_settings.html#reverse-proxy-settings-in-apache2-config-ssl-termination