Konfiguracja NextCloud + ONLYOFFICE na jednym serwerze z użyciem Docker

Cześć, Habr! Przedstawiam Wam tłumaczenie artykułu „Konfiguracja NextCloud i ONLYOFFICE na jednym serwerze z użyciem Docker”.

Trudno przecenić korzyści płynące z używania pakietów aplikacji biurowych online, takich jak Google Docs, oraz z usług przechowywania w chmurze, w życiu osób technicznie zorientowanych. Technologie stały się tak powszechne, że nawet Microsoft, który przez długi czas dominował na rynku aplikacji biurowych, w ostatnim czasie skoncentrował się na rozwijaniu aplikacji internetowej Office 365 i nakłanianiu użytkowników do przejścia na model subskrypcyjny używania swoich własnych usług. Wszystkich, którzy są zainteresowani procesem instalacji i konfiguracji własnego magazynu, zapraszamy pod kat.

Jakiś czas temu zapoznaliśmy się z rozwiązaniami do przechowywania w chmurze oraz pakietami aplikacji biurowych z otwartym kodem źródłowym, które mogłyby być łatwo wdrożone do używania w mikroprzedsiębiorstwie. Główną motywacją do przechowywania całej dokumentacji online jest zmniejszenie ilości papierowej dokumentacji do minimum i wdrożenie pozytywnych praktyk biznesowych, mimo niewielkiego zakresu operacji. Z drugiej strony, wynajem serwera w chmurze do świadczenia tej usługi jest mniej bezpieczny niż przechowywanie danych bezpośrednio na terenie przedsiębiorstwa, ponieważ nie ma możliwości audytowania fizycznego dostępu do Waszego serwera ani ruchu. W związku z tym konieczne jest również szyfrowanie end-to-end oraz oprogramowanie z otwartym kodem źródłowym.

Biorąc pod uwagę wszystkie dostępne informacje o rozwiązaniach z otwartym kodem źródłowym, znaleźliśmy dwa działające projekty (z commitami w repozytorium git w ciągu ostatnich 12 miesięcy), zaprojektowane do przechowywania w chmurze: NextCloud i OwnCloud, oraz jeden aktywny pakiet aplikacji biurowych ONLYOFFICE. Oba narzędzia do przechowywania w chmurze mają podobną funkcjonalność, a decyzja o wyborze NextCloud opierała się na dostępności dowodów na to, że można je zintegrować z ONLYOFFICE dla komfortowego użytkowania. Jednak, gdy zaczęliśmy wdrażanie usług, niedobór informacji na temat integracji tychże usług stał się oczywisty. Znaleźliśmy 3 filmy instruktażowe dotyczące integracji:

Żadne z trzech filmów nie odpowiedziało na pytanie dotyczące instalacji usługi dokumentów ONLYOFFICE na tym samym serwerze fizycznym, co NextCloud z wspólnym nginx. Zamiast tego zastosowano technologie segregacji, takie jak użycie oddzielnych portów dla API usługi dokumentów. Inna sugerowana opcja to wdrożenie oddzielnego serwera dla usługi dokumentów z ręczną konfiguracją wbudowanego instancji nginx, aby zainstalować klucz dostępu (wcześniej znany klucz dostępu, potwierdzający prawo do dostępu do chmury danych) oraz certyfikatów TLS. Opisane podejścia uznano za niezabezpieczone i niewystarczająco efektywne, dlatego zintegrowaliśmy NextCloud, ONLYOFFICE i wspólny nginx, który rozdziela żądania według nazw domen, przy użyciu docker-compose. Poniżej przedstawiono szczegółowe informacje, jak to zrobić.

Krok 1: kontener nginx

To bardzo prosta instalacja, ale ten krok wymaga najwięcej pracy przy konfiguracji serwera proxy odwrotnego. Najpierw stworzyliśmy konfigurację docker-compose dla obrazu 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

Tworzy to kontener, z portami 80 i 443 otwartymi dla publicznego dostępu, mapuje konfigurację na nginx/nginx-vhost.conf i określa miejsce przechowywania certyfikatów, wygenerowanych jako certyfikaty samopodpisane lub z użyciem Certbota od Let’s Encrypt w /nginx/certificates. W tym miejscu muszą znajdować się foldery dla office.yourdomain.com i cloud.yourdomain.com z plikami fullchain1.pem i privkey1.pem w każdym z nich dla łańcucha certyfikatów i prywatnego klucza serwera odpowiednio. Można przeczytać więcej o tym, jak wygenerować samopodpisany certyfikat tutaj www.akadia.com/services/ssh_test_certificate.html (zmiana nazw plików .key i .crt na .pem działa bez konwersji struktury plików dla nginx).

Po tym określiliśmy plik vhost. Najpierw definiujemy zachowanie portu 80 jako proste przekierowanie na https, ponieważ nie chcemy zezwalać na jakikolwiek ruch http

server {
    listen 80;
    location / {
        return 301
            https://$host$request_uri;
    }
}

Następnie stworzyliśmy dwa wirtualne serwery na porcie 443 dla naszych usług:

serwer {
    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;
    }
}
serwer {
    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;
    }
}

Krok 2: usługa dokumentów

Teraz musimy dodać kontener usługi dokumentów do naszego docker-compose.yml. Nie ma tu zbyt wiele do konfiguracji.

services:
...
  onlyoffice:
    image: onlyoffice/documentserver
    restart: always

Ale nie zapomnij połączyć kontenera nginx z usługą dokumentów:

services:
...
  nginx:
    ...
    depends_on:
      - onlyoffice

Krok 3: NextCloud

Najpierw dodajemy nowe usługi:

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

i dodajemy link do nginx:

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

Teraz czas na załadowanie kontenerów.

docker-compose up -d  

Po chwili nginx zacznie przekierowywać cię do interfejsu zewnętrznego NextCloud, który domyślnie jest stroną konfiguracji. Będziesz musiał wprowadzić nazwę użytkownika i hasło dla twojego pierwszego użytkownika administracyjnego oraz dane logowania do bazy danych, które podałeś w docker-compose.yml. Po zakończeniu konfiguracji będziesz mógł się zalogować. W naszym przypadku oczekiwanie trwało prawie minutę i wymagało dodatkowego odświeżenia strony logowania, zanim mogliśmy uzyskać dostęp do usługi w chmurze.

Okno ustawień usługi NextCloudKonfiguracja NextCloud + ONLYOFFICE na jednym serwerze z użyciem Docker

Krok 4: połączenie NextCloud z ONLYOFFICE

Na tym etapie będziesz musiał zainstalować aplikację dla NextCloud, która łączy funkcjonalności ONLYOFFICE. Zaczniemy od panelu sterowania aplikacjami w prawym górnym rogu menu. Znajdź aplikację ONLYOFFICE (w sekcji „Biuro i tekst” (Office & text) lub używając opcji wyszukiwania), zainstaluj i aktywuj ją.

Następnie przejdź do Ustawień (Settings) poprzez menu w prawym górnym rogu, gdzie powinieneś znaleźć element ONLYOFFICE w lewym menu. Wejdź w niego. Będziesz musiał wpisać adresy, jak pokazano poniżej.

Ustawienia aplikacji integracyjnejKonfiguracja NextCloud + ONLYOFFICE na jednym serwerze z użyciem Docker

Pierwszy adres służy do podlinkowania niektórych plików js i css bezpośrednio z działającej w przeglądarce aplikacji (to jest powód, dla którego musimy otworzyć dostęp do usługi ONLYOFFICE przez nginx). Klucz tajny nie jest używany, ponieważ ufamy, że warstwa izolacji Dockera jest bardziej niezawodna niż stały klucz uwierzytelniający. Trzeci adres jest używany przez kontener NextCloud do bezpośredniego łączenia się z API ONLYOFFICE i wykorzystuje domyślne wewnętrzne imię hosta z Dockera. Ostatnie pole jest używane, by ONLYOFFICE mógł wysyłać zapytania do API NextCloud, używając zewnętrznego adresu IP lub wewnętrznego adresu Dockera, jeśli korzystasz z sieci Dockera, ale w naszym przypadku to nie jest używane. Upewnij się, że ustawienia zapory sieciowej pozwalają na tego rodzaju interakcje.

Po zapisaniu, NextCloud przetestuje połączenie i jeśli wszystko jest poprawne, wyświetli ci ustawienia związane z integracją — na przykład, jakie typy plików mogą być edytowane dzięki tej integracji. Skonfiguruj to według uznania.

Ostatni krok: gdzie znaleźć edytor

Jeśli wrócisz do folderów swojego chmurowego magazynu i naciśniesz "+" aby utworzyć nowy plik, to będziesz mieć nową opcję tworzenia dokumentu, arkusza lub prezentacji. Dzięki nim stworzysz i od razu będziesz mógł edytować te typy plików, korzystając z ONLYOFFICE.

Menu tworzenia plikówKonfiguracja NextCloud + ONLYOFFICE na jednym serwerze z użyciem Docker

Dodatek 1

Pełną zawartość docker-compose.yml można znaleźć tutaj: https://pastebin.com/z1Ti1fTZ

Źródło: habr.com

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster