Здравейте, Хабр! Представям на вашето внимание превод на статия .
Трудно е да се подцени ползата от онлайн пакетите за офис приложения като Google Docs и облачните хранилища в живота на технически ориентирани хора. Технологиите се разпространиха толкова широко, че дори компания Microsoft, която от дълго време доминира на пазара на офис приложения, напоследък се съсредоточи върху разработването на уеб приложението Office 365 и убеждаването на потребителите да преминат на абонаментен модел на използване на собствените си услуги. Тези, които се интересуват от процеса на инсталиране и настройка на собствено хранилище, са поканени под кат.
Преди време се запознахме с решенията за облачно съхранение и пакетите за офис уеб приложения с отворен код, които биха могли да бъдат лесно внедрени за използване в микропредприятия. Основната мотивация за съхраняване на цялата документация онлайн е свиването на обема на хартиената документация до минимум и внедряването на положителни бизнес практики, въпреки малкия обем на операциите. Обратната страна на медала е, че наемането на облачен сървър за предоставяне на тази услуга е по-малко безопасно, отколкото съхранението на място в предприятието, тъй като нямате средства за одит на физическия достъп до вашия сървър или трафик. Следователно, също е необходимо end-to-end шифроване и софтуер с отворен код.
Като взехме предвид цялата налична информация за решенията с отворен код, намерихме два активни проекта (с ангажименти в git репозитории през последните 12 месеца), разработени за облачно съхранение: NextCloud и OwnCloud, и единственото активно приложение за офис ONLYOFFICE. Функционалността на двете средства за облачно съхранение е приблизително сходна, а изборът на NextCloud беше направен на базата на съществуващи доказателства за възможността за интеграция с ONLYOFFICE, за да се осигури удобство при взаимодействието на потребителя със софтуера. Въпреки това, когато започнахме разгръщането на услугите, дефицитът на информация за интеграцията на горепосочените услуги стана очевиден. Намерихме 3 обучителни видеа за това как да се извърши интеграцията:
Нито едно от трите видеа не отговори на въпроса за инсталиране на приложението за документи ONLYOFFICE на същия физически сървър като NextCloud с общ nginx. Вместо това, те използваха технологии за разделяне, като използване на отделни портове за API на приложението. Друг предложен вариант беше разгръщането на отделен сървър за приложението за документи с ръчна конфигурация на nginx инстанцията, вградена в приложението, за инсталиране на ключ за достъп (предварително известен ключ за достъп, потвърдящ правото на достъп до облака с данни) и TLS сертификати. Описаните по-горе подходи бяха признати за несигурни и недостатъчно ефективни, затова извършихме интеграция на NextCloud, ONLYOFFICE и общ nginx, който разделя заявките по домейни, с помощта на docker-compose. Тук е предоставена стъпка по стъпка информация за това как да го направим.
Стъпка 1: контейнер nginx
Това е много проста инсталация, но този етап изисква най-много работа за конфигурацията на обратния прокси сървър. Първо, създадохме конфигурация docker-compose за образа nginx:stable.
version: '2'
services:
nginx:
image : nginx:stable
restart: always
volumes:
- ./nginx/nginx-vhost.conf:/etc/nginx/conf.d/default.conf:ro
- ./nginx/certificates:/mycerts
ports:
- 443:443
- 80:80
Това създава контейнер с портове 80 и 443, отворени за публичен достъп, прави мапинг на конфигурацията на nginx/nginx-vhost.conf и определя хранилище за сертификати, генерирани като самоподписани сертификати или с помощта на Certbot от Let’s Encrypt в /nginx/certificates. Тук трябва да бъдат папките за office.yourdomain.com и cloud.yourdomain.com с файловете fullchain1.pem и privkey1.pem в всяка от тях за веригата на сертификата и частния ключ на сървъра съответно. Можете да прочетете повече за това как да генерирате самоподписан сертификат тук (преименуването на .key и .crt на .pem работи без конвертиране на файловата структура за nginx).
След това определихме файла vhost. Първо определяме поведението на порт 80 като просто пренасочване към https, тъй като не искаме да разрешаваме никакъв http трафик
server {
listen 80;
location / {
return 301
https://$host$request_uri;
}
}
След това създадохме два виртуални сървъра на порт 443 за нашите услуги:
server {
listen 443 ssl;
server_name cloud.yourdomain.com;
root /var/www/html;
ssl_certificate /mycerts/cloud.yourdomain.com/fullchain1.pem;
ssl_certificate_key /mycerts/cloud.yourdomain.com/privkey1.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5;
location / {
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_set_header Host $http_host;
proxy_redirect off;
proxy_pass http://app:80;
}
}
server {
listen 443 ssl;
server_name office.yourdomain.com;
root /var/www/html;
ssl_certificate /mycerts/office.yourdomain.com/fullchain1.pem;
ssl_certificate_key /mycerts/office.yourdomain.com/privkey1.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5;
location / {
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_set_header Host $http_host;
proxy_redirect off;
proxy_pass http://onlyoffice:80;
}
}
Стъпка 2: услуга за документи
Сега трябва да добавим контейнера на услугата за документи в нашия docker-compose.yml. Тук няма много за конфигуриране.
services:
...
onlyoffice:
image: onlyoffice/documentserver
restart: always
Но не забравяйте да свържете контейнера nginx с услугата за документи:
services:
...
nginx:
...
depends_on:
- onlyoffice
Стъпка 3: NextCloud
Първо добавяме нови услуги:
services:
...
db:
image: mariadb
command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW
restart: always
volumes:
- /data/nextcloud_db:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=#въведете парола тук
- MYSQL_PASSWORD=#въведете друга парола тук
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud
app:
image: nextcloud
depends_on:
- db
- onlyoffice
restart: always
и добавяме линк към nginx:
услуги:
...
nginx:
...
зависи_от:
- app
Сега е време да заредим контейнерите.
docker-compose up -d
След известно време, nginx ще започне да ви пренасочва към външния интерфейс на NextCloud, който по подразбиране е страница за конфигурация. Ще трябва да въведете потребителско име и парола за вашия първи администраторски потребител и данните за базата данни, които сте посочили в docker-compose.yml. След като настройката приключи, ще можете да влезете. В нашия случай изчакването отне почти минута и изискваше допълнително актуализиране на страницата за вход, преди да можем да влезем в облачната услуга.
Прозорец с настройки за услугата NextCloud
Стъпка 4: свързване на NextCloud и ONLYOFFICE
На тази стъпка ще трябва да инсталирате приложението за NextCloud, което свързва функционалността на ONLYOFFICE. Започнете от контролната панел на приложенията в горния десен ъгъл на менюто. Намерете приложението ONLYOFFICE (в раздела “Офис и текст” или с помощта на търсене), инсталирайте и активирайте го.
След това отидете в Настройки през менюто в горния десен ъгъл, и трябва да намерите елемента ONLYOFFICE в лявото меню. Влезте в него. Ще трябва да напишете адресите, както е посочено по-долу.
Настройки на интеграционното приложение
Първият адрес се използва за свързване към някои js и css файлове директно от стартираното в браузъра приложение (това е причината да отворим достъп до услугата ONLYOFFICE чрез nginx). Тайната ключова стойност не се използва, защото имаме доверие в изолационния слой на Docker повече, отколкото в постоянния ключ за удостоверяване. Третият адрес се използва от контейнера NextCloud за директно свързване с ONLYOFFICE API и използва името на хоста по подразбиране от Docker. Последното поле се използва, за да може ONLYOFFICE да прави заявки обратно към NextCloud API, използвайки външния IP адрес или вътрешния адрес на Docker, ако ползвате Docker мрежи, но в нашия случай това не се използва. Уверете се, че настройките на вашия защитен софтуер позволяват тези видове взаимодействия.
След запазване, NextCloud ще тества връзката и, ако всичко е вярно, ще ви покаже настройките, свързани с интеграцията — например, какви типове файлове могат да бъдат редактирани с тази интеграция. Настройте както сметнете за необходимо.
Последен етап: къде да търсите редактора
Ако се върнете в папките на вашето облачно хранилище и натиснете на “+” за създаване на нов файл, ще имате нова опция за създаване на документ, таблица или презентация. С тях ще можете да създавате и веднага редактирате тези типове файлове, използвайки ONLYOFFICE.
Меню за създаване на файлове
Добавление 1
Цялото съдържание на docker-compose.yml можете да намерите тук:
Източник: habr.com
