Thiết lập NextCloud + ONLYOFFICE trên cùng một máy chủ với Docker

Này Habr! Tôi xin trình bày với các bạn bản dịch của bài viết "Thiết lập NextCloud và ONLYOFFICE trên một máy chủ với Docker".

Thật khó để đánh giá thấp giá trị của các bộ ứng dụng văn phòng trực tuyến như Google Docs và lưu trữ đám mây trong cuộc sống của những người đam mê công nghệ. Công nghệ trở nên phổ biến đến mức ngay cả Microsoft, vốn từ lâu đã thống trị thị trường ứng dụng văn phòng, gần đây cũng tập trung phát triển ứng dụng web Office 365 và thuyết phục người dùng chuyển sang mô hình đăng ký sử dụng dịch vụ của chính họ. Chúng tôi mời những ai quan tâm đến quá trình cài đặt và định cấu hình bộ lưu trữ của riêng họ dưới cat.

Cách đây một thời gian, chúng tôi đã xem xét các giải pháp lưu trữ đám mây và bộ ứng dụng văn phòng web nguồn mở có thể dễ dàng triển khai để sử dụng trong một doanh nghiệp vi mô. Động lực chính để lưu giữ tất cả tài liệu trực tuyến là giữ giấy tờ ở mức tối thiểu và thực hiện các phương pháp kinh doanh tốt mặc dù khối lượng giao dịch thấp. Mặt khác của vấn đề là việc thuê máy chủ đám mây để cung cấp dịch vụ này kém an toàn hơn so với việc lưu trữ trực tiếp tại cơ sở của doanh nghiệp, vì bạn không có bất kỳ phương tiện kiểm tra quyền truy cập vật lý nào vào máy chủ hoặc lưu lượng truy cập của mình. Do đó, mã hóa đầu cuối và phần mềm nguồn mở cũng được yêu cầu.

Khi tính đến tất cả thông tin có sẵn về các giải pháp nguồn mở, chúng tôi đã tìm thấy hai dự án đang hoạt động (với các cam kết trong kho git trong 12 tháng qua) được phát triển để lưu trữ trên đám mây: NextCloud và OwnCloud, cũng như bộ ứng dụng văn phòng ONLYOFFICE duy nhất đang hoạt động. Cả hai công cụ lưu trữ đám mây đều có chức năng gần giống nhau và quyết định chọn NextCloud dựa trên bằng chứng tồn tại cho thấy nó có thể được tích hợp với ONLYOFFICE để người dùng tương tác thoải mái với phần mềm. Tuy nhiên, khi chúng tôi bắt đầu triển khai dịch vụ, việc thiếu thông tin về việc tích hợp các dịch vụ trên trở nên rõ ràng. Chúng tôi đã tìm thấy 3 video hướng dẫn về cách tích hợp:

Không có video nào trong số ba video trả lời câu hỏi cài đặt dịch vụ tài liệu ONLYOFFICE trên cùng một máy chủ vật lý với NextCloud có nginx dùng chung. Thay vào đó, họ sử dụng các kỹ thuật phân tách như sử dụng các cổng riêng cho api dịch vụ tài liệu. Một đề xuất khác là triển khai một máy chủ riêng cho Dịch vụ Tài liệu, định cấu hình thủ công phiên bản nginx được tích hợp trong Dịch vụ Tài liệu để cài đặt khóa truy cập (khóa truy cập đã biết trước để xác nhận quyền truy cập vào đám mây dữ liệu) và chứng chỉ TLS. Các cách tiếp cận trên được cho là không an toàn và không đủ hiệu quả nên chúng tôi đã tích hợp NextCloud, ONLYOFFICE và một nginx phổ biến giúp phân tách các yêu cầu theo tên miền bằng cách sử dụng docker-compose. Dưới đây là thông tin từng bước về cách thực hiện.

Bước 1: vùng chứa nginx

Đây là một thiết lập rất đơn giản, nhưng bước này đòi hỏi nhiều công sức nhất để định cấu hình máy chủ proxy ngược. Đầu tiên chúng tôi tạo cấu hình docker-compose cho hình ảnh 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

Điều này tạo ra một vùng chứa có cổng 80 và 443 mở công khai, ánh xạ cấu hình tới nginx/nginx-vhost.conf và xác định kho lưu trữ các chứng chỉ được tạo dưới dạng chứng chỉ tự ký hoặc sử dụng certbot của Let's Encrypt trong /nginx/certificates. Vị trí này phải chứa các thư mục cho office.yourdomain.com và cloud.yourdomain.com, với các tệp fullchain1.pem và privkey1.pem tương ứng cho chuỗi chứng chỉ và khóa riêng của máy chủ. Bạn có thể đọc thêm về cách tạo chứng chỉ tự ký tại đây. www.akadia.com/services/ssh_test_certificate.html (đổi tên .key và .crt thành .pem hoạt động mà không chuyển đổi cấu trúc tệp cho nginx).

Sau đó, chúng tôi đã xác định tệp vhost. Trước tiên, chúng tôi xác định hành vi của cổng 80 là chuyển hướng đơn giản tới https, bởi vì chúng tôi không muốn cho phép bất kỳ lưu lượng truy cập http nào

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

Sau đó, chúng tôi đã tạo hai máy chủ ảo trên cổng 443 cho các dịch vụ của mình:

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

Bước 2: Dịch vụ tài liệu

Bây giờ chúng ta cần thêm vùng chứa dịch vụ tài liệu vào docker-compose.yml. Không có gì đặc biệt để cấu hình ở đây.

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

Nhưng đừng quên liên kết vùng chứa nginx với dịch vụ tài liệu:

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

Bước 3: NextCloud

Đầu tiên, thêm các dịch vụ mới:

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

và thêm một liên kết đến nginx:

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

Bây giờ là lúc để tải các container.

docker-compose up -d  

Sau một thời gian, nginx sẽ bắt đầu chuyển hướng bạn đến giao diện người dùng NextCloud, đây là trang cấu hình mặc định. Bạn sẽ cần nhập tên người dùng và mật khẩu cho người dùng quản trị viên đầu tiên của mình và thông tin xác thực cơ sở dữ liệu bạn đã cung cấp trong docker-compose.yml Sau khi thiết lập hoàn tất, bạn sẽ có thể đăng nhập. Trong trường hợp của chúng tôi, thời gian chờ đợi mất gần một phút và yêu cầu làm mới trang đăng nhập thêm trước khi chúng tôi có thể đăng nhập vào dịch vụ đám mây.

Cửa sổ cài đặt dịch vụ NextCloudThiết lập NextCloud + ONLYOFFICE trên cùng một máy chủ với Docker

Bước 4: Kết nối NextCloud và ONLYOFFICE

Ở bước này, bạn sẽ cần cài đặt ứng dụng cho NextCloud, ứng dụng này kết nối chức năng ONLYOFFICE. Hãy bắt đầu với bảng điều khiển ứng dụng ở góc trên bên phải của menu. Tìm ứng dụng ONLYOFFICE (trong Office & text hoặc sử dụng tìm kiếm), cài đặt và kích hoạt ứng dụng.

Sau đó, hãy đi tới Cài đặt qua menu ở góc trên cùng bên phải và bạn sẽ tìm thấy mục CHỈ CÓ VĂN PHÒNG trong menu bên trái. Đi sâu vào nó. Bạn sẽ cần phải đăng ký các địa chỉ như được chỉ ra dưới đây.

Cài đặt ứng dụng tích hợpThiết lập NextCloud + ONLYOFFICE trên cùng một máy chủ với Docker

Địa chỉ đầu tiên dùng để liên kết tới một số file js và css trực tiếp từ ứng dụng đang chạy trên trình duyệt (đây là địa chỉ chúng ta cần để mở quyền truy cập vào dịch vụ ONLYOFFICE thông qua nginx). Khóa bí mật không được sử dụng vì chúng tôi tin cậy lớp cách ly Docker hơn khóa xác thực liên tục. Địa chỉ thứ ba được bộ chứa NextCloud sử dụng để kết nối trực tiếp với API ONLYOFFICE và địa chỉ này sử dụng tên máy chủ nội bộ mặc định từ Docker. Chà, trường cuối cùng được sử dụng để ONLYOFFICE có thể gửi yêu cầu quay lại API NextCloud bằng địa chỉ IP bên ngoài hoặc địa chỉ Docker nội bộ nếu bạn đang sử dụng mạng Docker, nhưng trường này không được sử dụng trong trường hợp của chúng tôi. Đảm bảo cài đặt tường lửa của bạn cho phép các loại tương tác này.

Sau khi lưu, NextCloud sẽ kiểm tra kết nối và nếu mọi thứ đều chính xác, sẽ hiển thị cho bạn các cài đặt liên quan đến tích hợp - ví dụ: loại tệp nào có thể được chỉnh sửa bằng tích hợp này. Tùy chỉnh khi bạn thấy phù hợp.

Bước cuối cùng: tìm trình soạn thảo ở đâu

Nếu bạn quay lại thư mục lưu trữ đám mây của mình và nhấp vào “+” để tạo tệp mới, thì bạn sẽ có tùy chọn mới để tạo tài liệu, bảng tính hoặc bản trình bày. Với sự trợ giúp của họ, bạn sẽ tạo và có thể chỉnh sửa ngay lập tức các loại tệp này bằng cách sử dụng ONLYOFFICE.

Trình đơn tạo tập tinThiết lập NextCloud + ONLYOFFICE trên cùng một máy chủ với Docker

Bổ sung năm 1

Nội dung đầy đủ của docker-compose.yml có thể được tìm thấy ở đây: https://pastebin.com/z1Ti1fTZ

Nguồn: www.habr.com

Thêm một lời nhận xét