Установка и настройка локального сервера Collabora и его связка с Nextcloud/Owncloud
Для совместной работы с документами в облачном сервисе Nextcloud/Owncloud есть несколько популярных программных продуктов, например, ONLYOFFICE, LibreOffice Online и Collabora Online. Последний может быть развернут локально и использоваться бесплатно.
Рассмотрим процесс установки Collabora Online на одном сервере с Nextcloud без привязки к конкретной системе Linux (это может быт CentOS, Ubuntu, Debian и так далее). Предполагается, что Nextcloud установлен, иначе, можно воспользоваться инструкцией Установка и настройка NextCloud на CentOS или Установка и настройка Nextcloud + NGINX на Ubuntu.
Предварительная настройка
Установка Collabora на сервер
Развертывание приложения в Nextcloud
Настройка интеграции с Nextcloud
Настройка NGINX-прокси
Решение возможных проблем
Читайте также
Подготовка системы
Для работы Collabora используется TCP-порт 9980, чтобы его добавить в Linux вводим команды, в зависимости от используемой утилиты управления netfilter.
а) если firewalld:
firewall-cmd --permanent --add-port=9980/tcp
firewall-cmd --reload
б) если iptables:
iptables -I INPUT -p tcp --dport 9980 -j ACCEPT
Для сохранения правил в Iptables устанавливаем iptables-persistent и выполняем команду netfilter-persistent:
apt-get install iptables-persistent
netfilter-persistent save
Установка и запуск сервера Collabora
На практике лучше работает Collabora, установленная в качестве docker-контейнера.
Для начала необходимо установить docker. В зависимости от используемой системы Linux, действия будут немного отличаться. Подробнее процесс описан в инструкции Установка Docker на Linux.
После готов, как мы установили и запустили Docker, для получения нужного нам контейнера вводим команду:
docker pull collabora/code
Процесс загрузки займет несколько минут — в итоге мы должны увидеть:
Status: Downloaded newer image for collabora/code:latest
Для запуска контейнера нам нужен правильный сертификат, полученный на домен. Его можно купить или запросить бесплатно в Let's Encrypt. Предположим, что мы сохранили наш сертификат по пути /etc/letsencrypt/live/collabora.dmosk.ru.
Команда для запуска контейнера с сервером collabora зависит от версии (в новых версиях не поддерживается переменная domain и необходимо использовать переменную aliasgroup).
а) Для 21.11.2.4.1 и старее:
docker run --name collabora -t -d -p 9980:9980 --add-host "nextcloud.dmosk.ru":192.168.1.15 -v "/etc/letsencrypt/live/collabora.dmosk.ru/fullchain.pem":/etc/coolwsd/ca-chain.cert.pem -v "/etc/letsencrypt/live/collabora.dmosk.ru/privkey.pem":/etc/coolwsd/key.pem -v "/etc/letsencrypt/live/collabora.dmosk.ru/fullchain.pem":/etc/coolwsd/cert.pem -e 'DONT_GEN_SSL_CERT=1' -e "domain=nextcloud\\.dmosk\\.ru" -e "dictionaries=en ru" -e "username=admin" -e "password=passadmin" --restart always --cap-add MKNOD collabora/code
б) Для 21.11.3.6 и новее:
docker run --name collabora -t -d -p 9980:9980 -e "aliasgroup1=https://nextcloud.dmosk.ru:443" --add-host "nextcloud.dmosk.ru":192.168.1.15 -v "/etc/letsencrypt/live/collabora.dmosk.ru/fullchain.pem":/etc/coolwsd/ca-chain.cert.pem -v "/etc/letsencrypt/live/collabora.dmosk.ru/privkey.pem":/etc/coolwsd/key.pem -v "/etc/letsencrypt/live/collabora.dmosk.ru/fullchain.pem":/etc/coolwsd/cert.pem -e 'DONT_GEN_SSL_CERT=1' -e "dictionaries=en ru" -e "username=admin" -e "password=passadmin" --restart always --cap-add MKNOD collabora/code
* в итоге
- наш контейнер будет слушать сетевые запросы на порту 9980 (параметр -p);
- мы добавим для разрешения имени nextcloud.dmosk.ru (нашего сервера Nextcloud) IP-адрес 192.168.1.15 (--add-host);
- в контейнер добавим файлы сертификатов (-v);
- в конфигурацию collabora добавим запрет на создание нового сертификата, добавим наш сервер nextcloud для разрешения подключаться к серверу;
- используем русский и английские языки;
- задаем логин admin и пароль passadmin для Admin Console.
Проверить состояние можно командой:
docker ps
Использование docker-compose
Для удобства и наглядности, лучше использовать docker-compose. Примеры его использования смотрите в инструкции Шпаргалка по работе с docker-compose. Приведем пример его использования для более свежей версии collabora.
Создаем каталог для хранения данных:
mkdir /opt/collabora
Перейдем в него:
cd /opt/collabora
Создаем compose-файл:
vi docker-compose.yml
services:
collabora:
image: collabora/code
container_name: collabora
hostname: collabora
restart: unless-stopped
environment:
TZ: "Europe/Moscow"
aliasgroup1: https://nextcloud.dmosk.ru:443
DONT_GEN_SSL_CERT: 1
dictionaries: en ru
ports:
- 9980:9980
extra_hosts:
nextcloud.dmosk.ru: 192.168.1.15
volumes:
- /etc/letsencrypt/live/collabora.dmosk.ru/fullchain.pem:/etc/coolwsd/ca-chain.cert.pem
- /etc/letsencrypt/live/collabora.dmosk.ru/privkey.pem:/etc/coolwsd/key.pem
- /etc/letsencrypt/live/collabora.dmosk.ru/fullchain.pem:/etc/coolwsd/cert.pem
Значение переменной aliasgroup1 и указатель extra_hosts критически важны для корректной работы collabora. По сути, это адрес, куда collabora возвращает ответ и данный адрес должен соответствовать точки входа (куда отправляет изначально запрос браузер). То есть если к nextcloud мы обращаемся напрямую, то нужно указывать его IP-адрес, но если мы подключаемся с порталу через http-прокси, то мы должны указывать в качестве адреса aliasgroup1 — адрес данного прокси.
Запускаем контейнер:
docker-compose up -d
Проверить состояние можно командой:
docker ps
Установка приложения в Nextcloud
Убедимся, что в Nextcloud установлено приложение Collabora Online - Built-in CODE Server. Это можно сделать через веб-интерфейс в разделе по работе с приложениями. Но мы воспользуемся командной строкой. В зависимости от типа Linux, команды будут немного отличаться.
а) Для DEB (Ubuntu / Debian / Astra Linux):
sudo -u www-data php /var/www/nextcloud/occ app:enable richdocumentscode
б) Для RPM (Rocky Linux / CentOS / РЕД ОС):
sudo -u apache php /var/www/nextcloud/occ app:enable richdocumentscode
Настройка Nextcloud
В данной инструкции мы рассмотрим пример связки Collabora с Nextcloud. Для Owncloud действия будут похожи.
Для интеграции Collabora с Nextcloud заходим на веб-интерфейс последней и заходим в настройки:
В меню слева кликаем по Collabora Online Development Edition (в более новых версиях Office или Office Online или Встроенный ):
В поле URL-адрес (и порт) сервера документов Collabora Online добавляем адрес нашего сервера collabora:
* важно, чтобы запрос был на доменное имя. Таким образом, домен должен быть зарегистрирован в DNS. Если у нас есть недочеты с сертификатом (например, нет полной цепочки) ставим галочку Отключить проверку сертификата (небезопасно).
Переходим к папкам и файлам на облачном сервисе. Пробуем открыть любой документ docx или создать новый — он должен открыться в Collabora:
Настройка NGINX
Если наши запросы проходят через nginx-прокси, необходимо сконфигурировать его следующим образом:
server {
listen 9980 ssl;
server_name collabora.dmosk.ru;
ssl_certificate /etc/letsencrypt/live/collabora.dmosk.ru/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/collabora.dmosk.ru/privkey.pem;
location ^~ /loleaflet {
proxy_pass https://192.168.0.15:9980;
proxy_set_header Host $http_host;
}
# WOPI discovery URL
location ^~ /hosting/discovery {
proxy_pass https://192.168.0.15:9980;
proxy_set_header Host $http_host;
}
# Capabilities
location ^~ /hosting/capabilities {
proxy_pass https://192.168.0.15:9980;
proxy_set_header Host $http_host;
}
# main websocket
location ~ ^/lool/(.*)/ws$ {
proxy_pass https://192.168.0.15:9980;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header Host $http_host;
proxy_read_timeout 36000s;
}
# download, presentation and image upload
location ~ ^/lool {
proxy_pass https://192.168.0.15:9980;
proxy_set_header Host $http_host;
}
# Admin Console websocket
location ^~ /lool/adminws {
proxy_pass https://192.168.0.15:9980;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header Host $http_host;
proxy_read_timeout 36000s;
}
}
* конфигурационный файл для nginx, как правило, находится в каталоге /etc/nginx/sites-enabled или /etc/nginx/conf.d.
* где:
- collabora.dmosk.ru — домен, на который будут приходить запросы.
- ssl_certificate и ssl_certificate_key — путь до сертификатов (открытый и закрытый кличи соответственно).
- 192.168.0.15 — IP-адрес сервера с Collabora.
Возможные ошибки
Failed to initialize COOLWSD
Контейнер уходит в циклическую перезагрузку. Если проверить лог:
docker logs collabora
... мы увидем что-то на подобие:
Failed to initialize COOLWSD: SSL context exception: Error loading private key from file /etc/coolwsd/key.pem: error:0200100D:system library:fopen:Permission denied wsd-00001-00001 2023-04-20 20:10:24.591831 +0300 [ coolwsd ] FTL Failed to initialize COOLWSD: SSL context exception: Error loading private key from file /etc/coolwsd/key.pem: error:0200100D:system library:fopen:Permission denied| wsd/COOLWSD.hpp:505 SSL context exception: Error loading private key from file /etc/coolwsd/key.pem: error:0200100D:system library:fopen:Permission denied terminate called after throwing an instance of 'Poco::SystemException' what(): System exception
Причина: проброшенный в контейнер сертификат имеет на хосте права, недостаточные для чтения пользователем в контейнере.
Решение: выставление прав на чтение для нужного нам сертификата (как правило, закрытого) решит проблему:
chmod +r <путь до сертификата на хосте docker>
Читайте также
Данная информацию тоже может оказаться полезной:
Установка и настройка OnlyOffice Server на Ubuntu, а также интеграция его с Nextcloud.