Настройка NextCloud + ONLYOFFICE на адным серверы з дапамогай Docker

Прывітанне, Хабр! прадстаўляю вашай увазе пераклад артыкула "Setting up NextCloud and ONLYOFFICE на адным цэлары з Docker".

Складана недаацэньваць карысць анлайнавых пакетаў офісных прыкладанняў накшталт Google Docs і хмарных сховішчаў у жыцці тэхнічна арыентаваных людзей (tech-oriented people). Тэхналогіі атрымалі настолькі шырокі распаўсюд, што нават кампанія 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 і вызначае сховішча для сертыфікатаў, згенераваных як самападпісаныя сертыфікаты або з выкарыстаннем Сertbot ад Let's encrypt у /nginx/certifica. У гэтым месцы павінны знаходзіцца тэчкі для 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 (у раздзеле "Офіс і тэкст" (Office & text) або з выкарыстаннем пошуку), усталюйце і актывуйце яго.

Пасля гэтага накіроўвайцеся ва Ўстаноўкі (Settings) праз меню ў правым верхнім куце, і вы павінны будзеце знайсці элемент 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

Дадаць каментар