Ну что ж, начну с того, что многие статьи про это есть, открываем поиск забиваем, и видим, а Docker, вот копируем вставляем) ну уже хорошо, но давайте разберемся?
Не буду объяснять, что нужно для докера, берем Linux ОС, дальше по вкусу...
Берем с оффа, стандартную установку (ссылочки давать не буду, да и не хочу, все же будет описано тут!)
По ресурсам, представляем что у нас уже есть широко распространённая версия Nextcloud либо Nextcloud в doker (последнее могу сказать я сомневался, хотя попробовал много вариантов и скажу сразу двоякие чувства).
Продолжим... Значит у нас некий серв, с кучей контейнеров и мы хотим улучшить свое облачко, что бы редактировать офисные файлы, тоесть у нас есть 2 сервера приступим:
Развернем контейнер по старинке берем код который нам рекомендует разработчик.
Install the Collabora Online server (так замеччательно, оригинальный файл)
The following steps will download the Collabora Online docker. Make sure to replace “cloud.example.com” with the host that your own Nextcloud runs on. If you want to use the docker container with more than one Nextcloud, you can add another -e aliasgroup2=https://cloud2.example.com:443.
docker pull collabora/code
Тут все забывают, что это не запускается сразу, должны еще дождаться ответ
Status: Downloaded newer image for collabora/code:latest
а потом уже docker run -t -d -p 127.0.0.1:9980:9980 \ -e 'aliasgroup1=https://cloud.example.com:443' \ --restart always \ --cap-add MKNOD \ collabora/code
Вкраце говоря: берем docker pull загружаем образ, 127.0.0.1:9980:9980 локальная сеть спортами, https://cloud.example.com:443 - адрес нашего облачка (не забываем вставить свое реальное доменное имя) ну и т.д.
Что ж вроде все просто и вуаля запустили... А не работает, начинаем все это исследовать и понимаем, а нам нужен прокси, ведь это все внутри docker (далее перейду на докер), но и тут вы ощутите недостаток ведь предыдущего кода запуска не достаточно!
А что нужно, а ну конечно админка, ну что бы на ружу смотрел и сертификат подтягивал, либо через запросить в Let's Encrypt либо свой купленный, что ж помучались знатно, но продолжим:
docker run --name collabora -t -d -p 127.0.0.1:9980:9980 -e "aliasgroup1=https://nextcloud.example.com:443" --add-host "nextcloud.example.com":192.1.1.10 -v "/etc/letsencrypt/live/collabora.example.com/fullchain.pem":/etc/coolwsd/ca-chain.cert.pem -v "/etc/letsencrypt/live/collabora.example.com/privkey.pem":/etc/coolwsd/key.pem -v "/etc/letsencrypt/live/collabora.example.com/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.example.com (нашего сервера Nextcloud) IP-адрес 192.1.1.10 (--add-host), но тут можно не вносить ip если у нас работает служба DNS которую мы настроили и она в полной мере реагирует на ответ что имя домена это ip, и в обратку если ip то имя домена;
• в контейнер добавим файлы сертификатов (-v) /etc/letsencrypt/live/collabora.example.com/имена сертификатов, это нажождение сертификатов в рельной среде сервера которые мы пробрасываем в виртуальный коталог докера, очень важно, ибо по https у вас не запуститься;
• в конфигурацию collabora добавим запрет на создание нового сертификата, добавим наш сервер nextcloud для разрешения подключаться к серверу;
• используем русский и английские языки;
• задаем логин admin и пароль passadmin для Admin Console - а все про нее забывают, хотя она очень полезная штука, особенно когда нужно увидеть нагрузку.
Дальше docker ps - проверим, все ли гуд, с нашим/ми контейнером/ами...
Добавлю тут, я больше предпочитаю через docker-compose, создадим файл docker-compose.yml - как по правильному, кашерному. Отредактируем его, все любят vi, nano - но я не такой труадмин, я предпочитаю mc - b соответсвенно делаем mcedit /расположение/docker-compose.yml, ну или в графическом mc переходим и нажимаем F4 - редактирование.
version: '3.3'
services:
collabora:
image: collabora/code
container_name: collabora
ports:
- 9980:9980
environment:
- aliasgroup1=https://cloud.example.com:443
- username= admin
- password= passadmin
- extra_params=--o:ssl.enable=true
volumes:
- /etc/letsencrypt/live/collabora.example.com/fullchain.pem:/etc/loolwsd/ca-chain.cert.pem
- /etc/letsencrypt/live/collabora.example.com/privkey.pem:/etc/loolwsd/key.pem
- /etc/letsencrypt/live/collabora.example.com/fullchain.pem:/etc/loolwsd/cert.pem
cap_add:
- MKNOD
tty: true
restart: always
Опишу процесс, станет яснее:
- Версия
- version: '3.3': Указывает версию Docker Compose, используемую для этого файла. Версия 3.3 поддерживает множество функций, включая использование сетей и томов.
- Сервисы
- services: Определяет список сервисов, которые будут запущены в контейнерах.
- Collabora
- collabora: Имя сервиса, который будет запущен в контейнере.
- image: collabora/code: Использует официальный образ Collabora Online из Docker Hub.
- container_name: collabora: Указывает имя контейнера, которое будет использоваться для этого сервиса.
- ports: 9980:9980: Маппинг порта 9980 на хосте к порту 9980 в контейнере. Это позволяет доступ к Collabora Online через этот порт.
- environment: Определяет переменные окружения, которые будут использоваться в контейнере:
- aliasgroup1: URL-адрес, по которому будет доступен Collabora Online. Замените cloud.example.com на ваш фактический домен.
- username: Имя пользователя для доступа к Collabora Online. В данном случае это admin.
- password: Пароль для доступа к Collabora Online. В данном случае это passadmin.
- extra_params: Дополнительные параметры конфигурации. В данном случае включается SSL.
- /etc/letsencrypt/live/collabora.example.com/fullchain.pem: Путь к полному сертификату SSL.
- /etc/letsencrypt/live/collabora.example.com/privkey.pem: Путь к приватному ключу SSL.
- /etc/letsencrypt/live/collabora.example.com/fullchain.pem: Путь к сертификату SSL.
- cap_add:
- MKNOD: Добавляет возможность создания специальных файлов в контейнере.
- tty: true: Позволяет контейнеру работать в интерактивном режиме, что может быть полезно для отладки.
- restart: always: Указывает Docker перезапускать контейнер автоматически в случае его остановки или при перезагрузке Docker.
И далее docker-compose up -d смотрим че происходит, ну что вроде на этом все, а нет забыли ж как мы будем редиректить, ведь у нас работает внутри сети, а нам нужно ГЛОБАЛЬНО, через интернет у нас удаленные пользователи…
Описывать как подключать Collabora Dokcer к Nextcloud не буду, полно инфы да и все просто пишем адрес сервера в настройка Nextcloud и смотрим ошибки.
Так нам нужно все это проксировать и что уже есть nginx с конфигами это замечательно, нет придется ставить, но это уже в другой статье (напишу и вставлю сюда ссылу).
Ну и так у нас есть nginx-прокси, дабавляем еще один конфиг и вперед:
server {
listen 9980 ssl;
server_name collabora.example.com;
ssl_certificate /etc/letsencrypt/live/collabora.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/collabora.example.com/privkey.pem;
location ^~ /loleaflet {
proxy_pass https://192.1.1.10:9980;
proxy_set_header Host $http_host;
}
# WOPI discovery URL
location ^~ /hosting/discovery {
proxy_pass https://192.1.1.10:9980;
proxy_set_header Host $http_host;
}
# Capabilities
location ^~ /hosting/capabilities {
proxy_pass https://192.1.1.10:9980;
proxy_set_header Host $http_host;
}
# main websocket
location ~ ^/lool/(.*)/ws$ {
proxy_pass https://192.1.1.10: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.1.1.10:9980;
proxy_set_header Host $http_host;
}
# Admin Console websocket
location ^~ /lool/adminws {
proxy_pass https://192.1.1.10:9980;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header Host $http_host;
proxy_read_timeout 36000s;
}
}
Честно скажу это из офф источника, по факту оно работает, но было протестировано и без нее, все равно работает, наверное разработчикам было лень да и спокойней указать что бы было меньше проблем, распишем основные черты:
1. server:
listen 9980 ssl: Указывает, что сервер будет слушать на порту 9980 с использованием SSL (HTTPS).
server_name collabora.example.com: Указывает доменное имя, для которого будет обрабатываться этот сервер. Замените collabora.example.com на ваш фактический домен.
2. SSL-сертификаты:
ssl_certificate: Путь к полному сертификату SSL, полученному от Let's Encrypt.
ssl_certificate_key: Путь к приватному ключу SSL.
3. location: Определяет, как обрабатывать определенные URL-пути.
location ^~ /loleaflet: Обрабатывает запросы к /loleaflet и перенаправляет их на внутренний сервер Collabora.
proxy_pass: Указывает, куда перенаправлять запросы (в данном случае на https://192.1.1.10:9980).
proxy_set_header Host $http_host: Устанавливает заголовок Host в запросе, чтобы он соответствовал оригинальному хосту.
location ^~ /hosting/discovery: Обрабатывает запросы к /hosting/discovery и перенаправляет их на внутренний сервер.
location ^~ /hosting/capabilities: Обрабатывает запросы к /hosting/capabilities и перенаправляет их на внутренний сервер.
location ~ ^/lool/(.*)/ws$: Обрабатывает WebSocket-запросы для основного веб-сокета.
proxy_set_header Upgrade $http_upgrade: Устанавливает заголовок для обновления соединения до WebSocket.
proxy_set_header Connection "Upgrade": Указывает, что соединение должно быть обновлено.
proxy_read_timeout 36000s: Устанавливает тайм-аут для чтения данных из соединения.
location ~ ^/lool: Обрабатывает запросы к /lool и перенаправляет их на внутренний сервер.
location ^~ /lool/adminws: Обрабатывает WebSocket-запросы для административной консоли.
Аналогично предыдущему WebSocket-обработчику.
Теперь, что касается работы с серверами в разных сетях или внешних сетях:
Обратный прокси: Nginx может работать как обратный прокси-сервер, который принимает запросы от клиентов и перенаправляет их на внутренние серверы. Это позволяет скрыть внутреннюю архитектуру и обеспечить безопасность.
Если ваш Nginx и Collabora находятся в разных сетях, вам нужно убедиться, что:
Nginx имеет доступ к IP-адресу 192.1.1.10 (где работает Collabora).
Правила брандмауэра и маршрутизации настроены правильно, чтобы разрешить трафик между этими сетями.
DNS и маршрутизация: Убедитесь, что DNS-записи для collabora.example.com указывают на IP-адрес вашего Nginx-сервера. Если Nginx находится за NAT или в облачной среде, убедитесь, что все необходимые порты открыты и правильно настроены.
SSL: Использование SSL (как в вашем примере) обеспечивает безопасность передачи данных между клиентами и Nginx, а также между Nginx и Collabora, если вы используете HTTPS для внутреннего сервера.
Конфигурационный файл для nginx, как правило, находится в каталоге /etc/nginx/sites-enabled или /etc/nginx/conf.d.
Делаем nginx -t, затем если все хорошо нет ошибок, то nginx reload кому как нравиться restart.
Далее расскажу в следующей статье, а что у нас происходит и почему не работают шрифты, которые мы добавили Nextcloud, но по каким-то причинам они не добавились в Collabora, сразу скажу это боль преследует и наших зарубежных коллег, потом опишу как упросить себе жизнь установив portainer, да и пожалуй буду еще вести свои заметки…
Как и обещал статья про шрифты Collabora + Nextcloud