UPD 2024.03.01: Добавил решение, чтобы можно было редактировать документы и на телефоне
UPD 2023.04.11: Добавил ниже решение про ошибку, что токен безопасности документа имеет неправильный формат
При установке Nextcloud можно увидеть, что можно установить офисный пакет OnlyOffice как приятную возможность редактирования документов в своём облаке. Однако при первоначальной установке что-то идёт не так и этот пакет не ставится. Поэтому при начальной установке я галочку снимаю и ставлю его позже.
Но недостаточно установить приложение OnlyOffice и пользоваться всеми преимуществами облачного офиса. Нужно ещё установить и сам пакет офиса. Вариантов установки несколько, но самый простой для меня — это установка OnlyOffice как docker образ и подключение его к Nextcloud. Этим и займёмся.
Дано:
- Сервер (в моём случае) Ubuntu Server 18.04, где установлен Nextcloud (IP: 192.168.0.2)
- Сервер, где будет установлен OnlyOffice (у меня они стоят на разных машинах) (IP: 192.168.0.3)
- Обратный прокси, с которого будет обеспечиваться доступ к Nextcloud’у и к OnlyOffice. Настройка прокси немного описывается здесь. (IP: 192.168.0.1)
Шаги.
- Ставим Docker
- Ставим OnlyOffice
- Связываем OnlyOffice и Nextcloud.
Шаг 1. Ставим Docker
Заходим пользователем на машину, где будет стоять OnlyOffice.
По инструкции с сайта ставим пакеты. Тут всё просто.
sudo apt-get update sudo apt-get install \ apt-transport-https \ ca-certificates \ curl \ gnupg-agent \ software-properties-common -y curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - sudo add-apt-repository \ "deb [arch=amd64] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) \ stable" sudo apt-get update sudo apt-get install docker-ce docker-ce-cli containerd.io
Если вы хотите запускать docker не от рута, то добавьте пользователя в группу docker
sudo usermod -aG docker $USER
После этого надо завершить текущий сеанс и выполнить вход повторно. Затем выполните проверку работы Docker
docker run hello-world
В ответ должно выйти приветственное сообщение об успешном выполнении.
Шаг 2. Ставим OnlyOffice
Опять же, всё делаем на той же машине, где поставили Docker.
По понятной инструкции с сайта OnlyOffice подготавливаем и ставим образ.
Для начала создаём сертификаты для связи Nextcloud’а и OnlyOffice.
openssl req -x509 -newkey rsa:4096 -keyout onlyoffice.key -out onlyoffice.crt -nodes -days 3650 -subj '/CN=localhost'
Генерируем параметры Диффи-Хеллмана (DHE), обеспечивающие более высокую стойкость.
openssl dhparam -out dhparam.pem 2048
Создаём директорию для хранения сертификатов
sudo mkdir -p /app/onlyoffice/DocumentServer/data/certs
Перемещаем в неё свежесозданные самоподписанные сертификаты.
sudo mv onlyoffice.key onlyoffice.crt dhparam.pem /app/onlyoffice/DocumentServer/data/certs/ sudo chmod 400 /app/onlyoffice/DocumentServer/data/certs/onlyoffice.key
И запускаем контейнер в фоне, который будет всегда перезапускаться, если он был остановлен. Например, после перезагрузки сервера. Также пробросим в контейнер папку с нашими сертификатами.
docker run -it -d -p 443:443 --restart=always -v /app/onlyoffice/DocumentServer/data:/var/www/onlyoffice/Data onlyoffice/documentserver
Сам образ OnlyOffice при запуске ищет в /var/www/onlyoffice/Data сертификаты с именами, которые были созданы выше.
Сервер с OnlyOffice готов и дальше его можно не трогать.
Шаг 3. Связываем OnlyOffice и Nextcloud.
Сначала переходим на прокси, где в файле настроек, описывающего доступ к облаку, вписываем директиву location для OnlyOffice.
location /edit/ { proxy_pass https://192.168.0.3/; proxy_http_version 1.1; }
Потом переходим в веб-интерфейс Nextcloud, а затем в Приложения

В списке слева ищем раздел «Офис и текст» и ставим приложение ONLYOFFICE, нажав «Скачать и включить».

Теперь, когда установили приложение, переходим в настройки.
Слева находим пункт ONLYOFFICE

Переходим. В поле Адрес службы редактирования документов вводим адрес, где расположен наш сервер, путь для которого мы определили выше описывая директиву location для nginx. Иначе говоря, вводим в поле доменное имя, по которому расположен Nextcloud с путём к серверу документов. Получившийся путь должен быть примерно таким:
https://example.org/edit

Нажмите сохранить и интерфейс должен стать похожим на тот, что на скриншоте выше.
В настройках можете указать какой тип документов открывать.
Важное замечание
Для ещё большего удобства использования облака совместно с onlyoffice существует замечательное приложение для Android — ONLYOFFICE Documents. С помощью которого можно удобно редактировать таблицы, документы, презентации и т.д.
Интерфейс его довольно заурядный, как и у всех офисных пакетов, но вот функция интеграции с облаком выделяет это приложение.
Однако после 5 версии OnlyOffice разработчики убрали эту замечательную функцию редактирования документа из облака на своём телефоне. И теперь появляется вот такое сообщение при попытке открыть документ.

Так вот, как оказалось, с пятой версии сервера разработчики сделали такую возможность только для платных версий OnlyOffice, но не для бесплатных.
Путём недолгих экспериментов с образами Docker, я выяснил, что последняя рабочая версия OnlyOffice — 5.4.2.46. А так как у нас тут контейнерные перевозки, то нет никаких проблем запускать образ докера с нужной версией OnlyOffice, которая равняется 5.4.2.46. Таким образом команда для запуска нормально работающей версии OnlyOffice такая:
docker run -it -d -p 443:443 --restart=always -v /app/onlyoffice/DocumentServer/data:/var/www/onlyoffice/Data onlyoffice/documentserver:5.4.2.46
Собственно после обновления плагина к Nextcloud, старый сервер будет несовместим с ним. Так что или оставайтесь на старом плагине и старом облаке или переходите на тёмную сторону, где нет печенек.
UPD 2024.03.01 Путём нехитрых манипуляций с контейнерами можно пользоваться возможностью редактирования документа и с приложения на телефоне (за подсказку спасибо читателю). Поэтому ниже описано, что надо поменять.
UPD 2024.04.11: С версии 7.2 разработчики добавили необходимость указывать в поле секретного ключа на странице настроек плагина текстовый ключ для JWT-токена, так резко набирающего популярность в вебе. Чтобы получить ключ, зайдите на адрес вашего OnlyOffice сервера и там будет показана подсказка.
Правда после перезапуска контейнера ключ придётся генерировать заново. Чтобы этого не делать каждый раз, можно указать свой токен и передать его через переменные окружения.
Для этого воспользуемся docker compose, чтобы не городить большую строку для запуска контейнера. Да и файл теперь будет лежать в доступном месте для редактирования и не надо искать по истории как запускать сервис.
Также немного изменим образ, чтобы редактировать документы с телефонного приложения
Создайте директорию Docker рядом с файлом docker-compose.yml
В директории Docker создайте файл Dockerfile со следующим содержимым:
FROM onlyoffice/documentserver:${OO_VERSION:-latest} RUN /bin/bash -c "sed -i 's/isSupportEditFeature=function(){return!1}/isSupportEditFeature=function(){return 1}/g' /var/www/onlyoffice/documentserver/web-apps/apps/*/mobile/dist/js/app.js"
Далее создайте файл docker-compose.yml со следующим содержимым (не забывайте про отступы в виде пробелов, а не табов):
version: '3.8' services: onlyoffice-documentserver: container_name: onlyoffice-documentserver-custom build: context: ./Docker image: onlyoffice/documentserver:${OO_VERSION:-latest}-custom environment: - JWT_ENABLED=${JWT_ENABLED:-false} - JWT_SECRET=${JWT_SECRET:-""} - JWT_HEADER=${JWT_HEADER:-""} - JWT_IN_BODY=${JWT_IN_BODY:-""} ports: - '443:443' restart: unless-stopped volumes: - /app/onlyoffice/DocumentServer/data:/var/www/onlyoffice/Data
А в файле .env рядом с docker-compose.yml укажем необходимые переменные, чтобы каждый раз не искать и не редактировать нужные поля в самом файле docker-compose.
Файл .env
OO_VERSION=7.3.3.50 JWT_ENABLED=true JWT_SECRET=R8o1...B4apbpg8 JWT_HEADER=Authorization JWT_IN_BODY=true
Теперь докер при запуске скомпилирует новый docker образ и будет смотреть содержимое файла .env, используя переменные из этого файла.
После можно запускать сервис через docker compose up -d. Спустя примерно минуту сервис будет доступен. Так же вводите свой токен в поле секретного ключа в веб-интерфейсе Nextcloud и будет вам счастье.
На этом вроде всё
В 3м пункте «…Сначала переходим на прокси, где в файле настроек, описывающего доступ к облаку…»
…хде оно…
— подскажите примерный путь и название файла исходя из вашего примера?
На 192.168.0.1 (он же обратный прокси) в конфиге nginx по пути /etc/nginx/ лежат ваши конфигурационные файлы. Директива location может быть внутри опции server. Зависит от вашей фантазии. Можно вообще выделить отдельное доменное имя для сервера редактирования документов.
Пусть для примера location будет в файле /etc/nginx/sites-enabled/example.org.conf
# /etc/nginx/sites-available/example.org.conf
server {
listen 80;
server_name example.org;
# Редирект с HTTP на HTTPS (опционально)
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
server_name example.org;
# Пути к SSL-сертификатам
ssl_certificate /etc/letsencrypt/live/example.org/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.org/privkey.pem;
# Настройки SSL
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ‘ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256…’;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
# Корневая директория для статических файлов
root /var/www/example.org/html;
index index.html;
# Логи
access_log /var/log/nginx/example.org_access.log;
error_log /var/log/nginx/example.org_error.log;
# Проксирование для /edit
location /edit/ {
# Адрес сервера документов
proxy_pass https://192.168.0.3:443/;
# Настройки проксирования
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# Таймауты
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
# Отключение буферизации для SSE/long-polling
proxy_buffering off;
}
# Дополнительные настройки для статических файлов
location / {
try_files $uri $uri/ =404;
}
# Обработка ошибок
error_page 404 /404.html;
location = /404.html {
internal;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
internal;
}
}
Здравствуйте.
Вот честно не понимаю, что мне надо сделать для исполнения «UPD 2024.03.01» и «UPD 2024.04.11». Так как у меня Synology DS920+.
Как скрыть страницу в прикрепленном изображении или чтобы она сменилась на иную правильную, так как при открытии по адресу страницы она настораживает.
В статье про OnlyOffice я бы шаг 14 заменил бы на docker-compose как в статье про установку Nextcloud. Заодно через yaml файл можно будет заставить нормально работать эту связку.
На служебной странице нет особо ценных данных. Можно например, скрыть ей веб-сервером.
Что бы редактировать документ с мобильного устройства надо поставить в свойствах браузера отображать версию для ПК. Изменится размер, но редактирование заработает.
а ведь это все можно развернуть на одной машине ))))
Да, конечно. Трудностей особых не возникнет, только с сертификатами будут небольшие. Это просто как общий шаблон действий