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
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
- thêm Trusted Domains vào Nextcloud của bạn
- 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
- 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 ...
- 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