Collabora Online - Nextcloud 18. Centos 7.

ONLYOFFICE VS Collabora
Официальная документация -  nextcloud.com/collaboraonline
Для запуска Collabora Online у нас есть сервер Nextcloud c действительным ssl сертификатом, и понадобится отдельный сервер Collabora Online который мы установим на тот же физический где и Nextcloud. Здесь стоит упомянуть onlyoffice  который требует несоизмеримо больше вычислительных ресурсов процессора и оперативной памяти на старте, который уже не получится поставить на сервер из гип.
Начнем с установки Docker - https://ru.wikipedia.org/wiki/Docker
Запускаем скрипт установки

terminal
root@server  ]# sudo yum check-update
root@server  ]#curl -fsSL https://get.docker.com/ | sh

Запускаем Docker, включаем автозапуск
terminal
[root@server]# systemctl start docker
[root@server]# systemctl enable docker
[root@server]# systemctl status docker
● docker.service - Docker Application Container Engine
Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled)
Active: active (running) since Вт 2019-08-13 13:14:19 MSK; 36s ago
Docs: https://docs.docker.com
Main PID: 5842 (dockerd)
Tasks: 10
Memory: 40.5M
CGroup: /system.slice/docker.service
└─5842 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

Добавим в группу docker нашего пользователя(user - замените на своего пользователя), для выполнения команд без sudo

terminal
[root@server]# usermod -aG docker user

синтаксис Docker имеет такой вид:
docker [option] [command] [arguments]

Для загрузки и запуска сервера Collabora  в докере выполним

terminal
[user@server ~]$ docker pull collabora/code
[user@server ~]$ docker run -t -d -p 127.0.0.1:9980:9980 -e 'domain=cloud\\.mydomain\\.ru' --restart always --cap-add MKNOD collabora/code

Вместо cloud.mydomain.ru - указываем ваш домен с nextcloud. В домене необходимо перед каждой точкой поставить два обратных слеша.
Для добавления словарей, необходимо добавить в команду:   -e 'dictionaries=en ru'

terminal
[user@server ~]$ docker run -t -d -p 127.0.0.1:9980:9980 -e 'domain=cloud\\.mydomain\\.ru' -e 'dictionaries=en ru' --restart always --cap-add MKNOD collabora/code

Проверить состояние запущенных контейнеров можно командой:
terminal
[root@server sites-enabled]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4e680d60849e collabora/code "/bin/sh -c 'bash st…" 4 hours ago Up 3 hours 127.0.0.1:9980->9980/tcp upbeat_cori
[root@server sites-enabled]#

Чтобы просмотреть все  команды, введите:

terminal
[root@server sites-enabled]#docker

Дальше нам потребуется обратный прокси сервер, который запросы будет направлять серверу Collabora.
В нашем случае сервер Apache, посмотрим установленные модули, интересуют proxy_wstunnel, proxy_http.

terminal
[root@server ~]# cat /etc/httpd/conf.modules.d/00-proxy.conf
# This file configures all the proxy modules:
LoadModule proxy_module modules/mod_proxy.so
LoadModule lbmethod_bybusyness_module modules/mod_lbmethod_bybusyness.so
LoadModule lbmethod_byrequests_module modules/mod_lbmethod_byrequests.so
LoadModule lbmethod_bytraffic_module modules/mod_lbmethod_bytraffic.so
LoadModule lbmethod_heartbeat_module modules/mod_lbmethod_heartbeat.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_express_module modules/mod_proxy_express.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
LoadModule proxy_fdpass_module modules/mod_proxy_fdpass.so
LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_scgi_module modules/mod_proxy_scgi.so
LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so
[root@server ~]#

Далее настраиваем виртуальный хост прокси, получаем сертификат для домена office.mydomain.ru и пример конфигурации:

terminal
[root@server ~]# nano /etc/httpd/sites-available/office.conf
<VirtualHost *:443>
ServerName office.mydomain.ru

# SSL configuration, you may want to take the easy route instead and use Lets Encrypt!
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/office.mydomain.ru/cert.pem
SSLCertificateChainFile /etc/letsencrypt/live/office.mydomain.ru/chain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/office.mydomain.ru/privkey.pem
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-$
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 loolwsd
# loleaflet is the client part of LibreOffice Online
ProxyPass /loleaflet https://127.0.0.1:9980/loleaflet retry=0
ProxyPassReverse /loleaflet https://127.0.0.1:9980/loleaflet

# 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 "/lool/(.*)/ws$" wss://127.0.0.1:9980/lool/$1/ws nocanon

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

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

# 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>

Конфигурация для Nginx

server {
    listen       443 ssl;
    server_name  office.mydomain.ru;

    ssl_certificate /path/to/certficate;
    ssl_certificate_key /path/to/key;
    
    # static files
    location ^~ /loleaflet {
        proxy_pass https://localhost:9980;
        proxy_set_header Host $http_host;
    }

    # WOPI discovery URL
    location ^~ /hosting/discovery {
        proxy_pass https://localhost:9980;
        proxy_set_header Host $http_host;
    }

   # main websocket
   location ~ ^/lool/(.*)/ws$ {
       proxy_pass https://localhost: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://localhost:9980;
       proxy_set_header Host $http_host;
   }
   
   # Admin Console websocket
   location ^~ /lool/adminws {
       proxy_pass https://localhost:9980;
       proxy_set_header Upgrade $http_upgrade;
       proxy_set_header Connection "Upgrade";
       proxy_set_header Host $http_host;
       proxy_read_timeout 36000s;
   }
}


Последнее, что нужно сделать - установить приложение Collabora Online в Nextcloud, указать адрес сервера  в разделе настроек:
Настройки -> Collabora Online -> « https://office.mydomain.ru »)

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

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