0

Sử dụng nextcloud trên local và publish lên internet

Mục tiêu của bài viết này là sử dụng Nextcloud để làm hệ thống lưu trữ dữ liệu ở local và publish hệ thống đó lên internet thông qua VPS để có thể truy cập vào Nextcloud local từ bất cứ đâu

Chuẩn bị

mình giả sử bạn đã có 1 VPS hoạt động và có 1 domain drive.example.com đã được trỏ về VPS Mình sử dụng dịch vụ của cloudflare để quản lý domain, cũng như để có thể sử dụng được https cho domain của mình Bạn cần có 1 laptop cũ để chạy Nextcloud trên docker

Bạn cần biết những kiến thức cơ bản về docker để có thể tiếp tục bài viết này

Bước 1: Cài đặt Nextcloud trên Laptop của bạn

Install Nextcloud trên laptop của bạn sử dụng docker và docker-compose, đây là 1 file cơ bản để chạy Nextcloud trên docker, lưu ý nên thay đổi password cho MYSQL_ROOT_PASSWORD và MYSQL_PASSWORD khi sử dụng trên môi trường production

docker-compose.yml

version: '3.7'

services:
  db:
    image: mariadb
    restart: always
    environment:
      - MYSQL_ROOT_PASSWORD=nextcloud # should change this password when push to Production
      - MYSQL_DATABASE=nextcloud
      - MYSQL_USER=nextcloud
      - MYSQL_PASSWORD=nextcloud
    volumes:
      - db:/var/lib/mysql
    networks:
      - nextcloud

  app:
    image: nextcloud
    restart: always
    ports:
      - 8080:80
    depends_on:
      - db
    volumes:
      - nextcloud:/var/www/html
    networks:
      - nextcloud
    environment:
      - MYSQL_HOST=db
      - MYSQL_DATABASE=nextcloud
      - MYSQL_USER=nextcloud
      - MYSQL_PASSWORD=nextcloud
      - MYSQL_ROOT_PASSWORD=nextcloud

Khi khởi tạo xong, bạn có thể truy cập vào Nextcloud bằng địa chỉ http://localhost:8080 và đăng nhập bằng tài khoản admin và password mà bạn đã khởi tạo khi cài đặt Nextcloud

Khi xong bước này, bạn có thể sử dụng Nextcloud để lưu trữ dữ liệu của mình trên laptop của mình, tuy nhiên bạn chỉ có thể truy cập vào Nextcloud ở local, nếu bạn muốn truy cập vào Nextcloud ở local từ bất cứ đâu thì bạn cần phải publish Nextcloud ở local lên internet chúng ta sẽ làm ở bước tiếp theo

Bước 2: Liên kết Nextcloud ở local với VPS sử dụng P2P network

Mình sử dụng Zerotier để tạo 1 network P2P giữa laptop và VPS, sau đó bạn có thể truy cập vào Nextcloud ở VPS bằng địa chỉ http://<IP của LAPTOP>:8080

Bạn vào https://my.zerotier.com để tạo 1 tài khoản và tạo 1 network, giả sử network ID của mình là 1234567890abcdef

Trên VPS, bạn cần cài đặt Zerotier và tham gia vào network 1234567890abcdef, tương tự trên laptop, bạn cần cài đặt Zerotier và tham gia vào network 1234567890abcdef

sau khi tham gia thì bạn có thể truy cập vào Nextcloud ở VPS bằng địa chỉ http://<IP của LAPTOP>:8080

IP của LAPTOP có thể xem ở https://my.zerotier.com hoặc bạn có thể sử dụng Zerotier One để xem IP của LAPTOP thông thường thì để tránh xung đột IP thì bạn nên tránh sử dụng dải IP 192.168.x.x(LOCAL) và 10.x.x.x (VPS) bạn có thể sử dụng dải IP 172.16.x.x

Khi VPS và laptop của bạn đã online thì zerotier sẽ tự động tạo ra 1 network P2P giữa 2 thiết bị này, và cấp cho mỗi node 1 IP trong dải 172.16.x.x

giả sử IP của laptop là 172.16.0.123 thì khi bạn truy cập vào http://172.16.0.123:8080 thì bạn sẽ truy cập vào Nextcloud ở laptop

Mình chọn Zerotier để tạo 1 network P2P giữa laptop và VPS vì nó dễ dàng và miễn phí, ngoài ra nó suport trên nhiều hệ điều hành khác nhau và có thể sử dụng trên nhiều thiết bị khác nhau tối đa 25 thiết bị ( bản free )

Bước 3: Publish Nextcloud ở local lên internet

Sau bước 2 bạn có thể truy cập vào nextcloud ở VPS bằng địa chỉ http://172.16.0.123:8080, tuy nhiên bạn muốn truy cập vào nextcloud bằng domain thì bạn phải dùng 1 reverse proxy để trỏ domain dến Nextcloud địa chỉ http://172.16.0.123:8080 và cấu hình SSL cho domain

Bạn có thể sử dụng nginx-proxy-manager để làm reverse proxy và cấu hình SSL cho domain, dưới đây là file mẫu để cấu hình nginx-proxy-manager sử dụng docker

docker-compose.yml

version: '3.7'

services:
  reverse-proxy:
    image: nginx-proxy-manager
    restart: always
    ports:
      - 80:80
      - 81:81
      - 443:443
    volumes:
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt
    environment:
      - TZ=Asia/Ho_Chi_Minh
      - PGID=1000
      - PUID=1000
      - DISABLE_IPV6=true
    network-mode: "host" # quan trọng: để có thể truy cập vào Nextcloud ở VPS bằng địa chỉ http://<IP của LAPTOP>:8080

sau khi cấu hình xong bạn có thể truy cập vào nginx-proxy-manager ở địa chỉ http://<IP của VPS>:81 để cấu hình proxy trỏ domain đến Nextcloud của bạn

Flow hệ thống hoàn chỉnh

image.png

Phần phụ bạn có thể tham khảo

Cấu hình SSL cho domain

Mình sử dụng cloudflare để quản lý domain và cấu hình SSL cho domain, bạn có thể sử dụng cloudflare hoặc dịch vụ khác để quản lý domain và cấu hình SSL cho domain

Bạn có thể cấu hình SSL cho domain bằng cách sử dụng cloudflare proxy lưu ý là nên dùng mode full SSL ( bạn generate SSL certificate ở cloudflare và download về và cài đặt trên VPS )

Những điều cần làm khi publish Nextcloud ở local lên internet

  1. thêm Trusted Domains vào Nextcloud của bạn
  2. config force https trong Nextcloud của bạn ở file config.php key overprotocol => 'https', bạn có thể đọc thêm tại đây https://docs.nextcloud.com/server/latest/admin_manual/configuration_server/reverse_proxy_configuration.html
  3. Một vài app bạn cần cài đặt để Nextcloud của bạn hoạt động tốt hơn như: TOTP (xác thực 2 lớp), pdf viewer, raw preview ...
  4. cron.php có thể không chạy được nếu bạn không cấu hình cronjob cho Nextcloud của bạn, bạn có thể đọc thêm tại đây https://docs.nextcloud.com/server/latest/admin_manual/configuration_server/background_jobs_configuration.html

All Rights Reserved

Viblo
Let's register a Viblo Account to get more interesting posts.