Настройка на NextCloud + ONLYOFFICE на един и същи сървър с помощта на Docker

Здравейте, Хабр! Представям ви превод на статия «Настройване на NextCloud и ONLYOFFICE на един единствен сървър с Docker».

Трудно е да се подценява ползата от онлайн пакети офис приложения като 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 за веригата на сертификатите и частния ключ на сървъра съответно. Можете да прочетете повече за това как да генерирате самоподписан сертификат тук. www.akadia.com/services/ssh_test_certificate.html (преименуването на .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=#put some password here
      - MYSQL_PASSWORD=#put some other password here
      - MYSQL_DATABASE=nextcloud
      - MYSQL_USER=nextcloud
  app:
    image: nextcloud
    depends_on:
      - db
      - onlyoffice
    restart: always

и добавяме връзка към nginx:

services:
...
  nginx:
    ...
    depends_on:
      - app 

Сега е време да стартирате контейнерите.

docker-compose up -d  

След малко, nginx ще започне да ви пренасочва към външния интерфейс на NextCloud, който по подразбиране е конфигурационната страница. Ще трябва да въведете потребителско име и парола за вашия първи администраторски потребител и данните за вход в базата данни, които сте посочили в docker-compose.yml. След завършване на настройката, ще можете да влезете. В нашия случай, изчакването отне почти минута и изискваше допълнително обновление на страницата за вход, преди да можем да влезем в облачната услуга.

Прозорец за настройка на услугата NextCloudНастройка на NextCloud + ONLYOFFICE на един и същи сървър с помощта на Docker

Стъпка 4: свързване на NextCloud и ONLYOFFICE

На тази стъпка ще трябва да инсталирате приложението за NextCloud, което свързва функционалността на ONLYOFFICE. Нека започнем с панела за управление на приложения в горния десен ъгъл на менюто. Намерете приложението ONLYOFFICE (в раздела „Офис и текст“ или с помощта на търсенето), инсталирайте и активирайте го.

След това продължете към Настройки чрез менюто в горния десен ъгъл, и трябва да намерите елемента ONLYOFFICE в лявото меню. Влезте в него. Ще трябва да въведете адресите, както е посочено по-долу.

Настройки на интеграционното приложениеНастройка на NextCloud + ONLYOFFICE на един и същи сървър с помощта на Docker

Първият адрес се използва за връзка с някои js и css файлове директно от приложенията, стартирани в браузъра (това е причината да трябва да отворим достъпа до услугата ONLYOFFICE през nginx). Тайният ключ не се използва, тъй като се доверяваме на слоя на изолация на Docker повече от постоянен ключ за автентикация. Третият адрес се използва от контейнера NextCloud за директно свързване с ONLYOFFICE API и той използва вътрешното име на хоста по подразбиране от Docker. Последното поле се използва, за да може ONLYOFFICE да прави запитвания обратно към NextCloud API, използвайки външния IP адрес или вътрешния адрес на Docker, ако използвате Docker мрежи, но в нашия случай това не се използва. Уверете се, че настройките на вашия защитен екран позволяват подобни видове взаимодействия.

След запазването, NextCloud ще тества връзката и, ако всичко е правилно, ще ви покаже настройките, свързани с интеграцията — например, какви типове файлове могат да се редактират с тази интеграция. Настройте го по ваше усмотрение.

Заключителна стъпка: къде да търсите редактора

Ако се върнете в папките на вашето облачно хранилище и натиснете на „+“ за създаване на нов файл, ще получите нова опция за създаване на документ, таблица или презентация. С тях ще можете да създадете и веднага да редактирате тези типове файлове, използвайки ONLYOFFICE.

Меню за създаване на файловеНастройка на NextCloud + ONLYOFFICE на един и същи сървър с помощта на Docker

Допълнение 1

Пълното съдържание на docker-compose.yml може да намерите тук: https://pastebin.com/z1Ti1fTZ

Източник: habr.com

Купете надежден хостинг за сайтове с защита от DDoS, VPS VDS сървъри 🔥 Купете надежден хостинг за сайтове с защита от DDoS, VPS VDS сървъри | ProHoster