Triển khai Nextcloud Hub (AIO) trên Docker: Lưu trữ đám mây Self-Hosted và cộng tác cho gia đình

HomeLab tutorial - IT technology blog
HomeLab tutorial - IT technology blog

Bối cảnh & Lý do lựa chọn

Giữa hai gói Google One 2TB và một gói iCloud bổ sung, gia đình tôi phải chi tới 36 USD mỗi tháng—hơn 430 USD một năm—chỉ để lưu trữ ảnh, video và dữ liệu cá nhân của bốn chiếc điện thoại. Tệ hơn nữa, dữ liệu bị phân tán khắp nơi. Mỗi khi cần bản sao sổ đỏ hay hồ sơ thuế, cả nhà lại phải lục tung các luồng email và ứng dụng nhắn tin. Thêm vào đó, chúng tôi cũng không mấy thoải mái khi các nhà cung cấp dịch vụ đám mây thương mại sử dụng kho dữ liệu cá nhân của người dùng để huấn luyện các mô hình AI.

Tôi cần một giải pháp thay thế riêng tư nhưng phải vượt qua được "bài kiểm tra phê duyệt từ gia đình": tự động tải ảnh từ camera chạy ngầm mượt mà, duyệt thư viện ảnh nhanh chóng, chỉnh sửa tài liệu trực tiếp trên trình duyệt và chia sẻ liên kết dễ dàng.

Việc tự triển khai Nextcloud bản chuẩn (vanilla) từ đầu thường biến thành một công việc toàn thời gian thứ hai. Bạn sẽ phải loay hoay tinh chỉnh PHP-FPM worker pool, cân đối giới hạn bộ nhớ Redis, quản lý các bản nâng cấp PostgreSQL và xử lý lỗi kết nối socket của Collabora. Đến khi một bản phát hành thượng nguồn làm hỏng gói phụ thuộc, toàn bộ ngày cuối tuần của bạn sẽ bốc hơi trên các diễn đàn công nghệ.

Nextcloud All-in-One (AIO) đã loại bỏ hoàn toàn gánh nặng quản trị này. Được duy trì trực tiếp bởi đội ngũ Nextcloud, AIO điều phối một stack gồm các container microservice chuyên dụng—PostgreSQL 16, Redis, Apache, Collabora và BorgBackup—được quản lý bởi một supervisor daemon gọn nhẹ.

Sau sáu tháng vận hành, hệ thống của chúng tôi đang quản lý 1,4 TB dữ liệu và khoảng 88.000 bức ảnh của bốn người dùng hoạt động thường xuyên. Việc cập nhật phần mềm chỉ mất năm phút với một nút bấm duy nhất trên giao diện web, và toàn bộ hệ thống hoạt động ổn định mà chưa từng gặp phải sự cố sập hay xung đột đồng bộ dữ liệu nào.

Cài đặt

Yêu cầu phần cứng rất dễ tiếp cận. Tôi chạy hệ thống này trên một chiếc mini PC HP EliteDesk tái sử dụng, trang bị Intel Core i5-8500T (6 nhân), 16 GB RAM DDR4, ổ khởi động NVMe 256 GB và một ổ cứng ngoài 4 TB Western Digital Red Plus để lưu trữ tệp. Bất kỳ máy chủ chạy Debian 12 hoặc Ubuntu 22.04 LTS nào đã cài sẵn Docker Engine và Docker Compose đều có thể hoạt động trơn tru.

Mở cổng (port forward) 80, 443 và 8080 trên router trỏ về địa chỉ IP nội bộ của máy chủ. Sau đó, trỏ một bản ghi DNS A (chẳng hạn như cloud.yourdomain.com) về địa chỉ IP public của mạng gia đình bạn.

1. Tạo cấu trúc thư mục

Tạo một thư mục riêng cho cấu hình compose:

mkdir -p /opt/nextcloud-aio
cd /opt/nextcloud-aio

2. Thiết lập tệp Docker Compose

Tạo tệp docker-compose.yml. Chúng ta gắn kết (bind) Docker socket để AIO supervisor có thể khởi tạo và quản lý các container worker một cách linh hoạt. Lưu ý rằng cổng 443 được chủ ý bỏ qua trong danh sách cổng của master container; supervisor sẽ tạo một container nextcloud-aio-apache riêng biệt để liên kết trực tiếp với cổng 443:

services:
  nextcloud-aio-mastercontainer:
    image: nextcloud/all-in-one:latest
    init: true
    container_name: nextcloud-aio-mastercontainer
    restart: always
    ports:
      - "80:80"
      - "8080:8080"
    environment:
      - APACHE_PORT=443
      - APACHE_IP_BINDING=0.0.0.0
      - NEXTCLOUD_DATADIR=/mnt/storage/nextcloud_data
    volumes:
      - nextcloud_aio_mastercontainer:/mnt/docker-aio-config
      - /var/run/docker.sock:/var/run/docker.sock:ro

volumes:
  nextcloud_aio_mastercontainer:
    name: nextcloud_aio_mastercontainer

Trỏ NEXTCLOUD_DATADIR tới điểm gắn kết lưu trữ thực tế của bạn (chẳng hạn như phân vùng ext4, ZFS dataset hoặc mảng RAID chuyên dụng).

3. Khởi chạy Master Container

Khởi động supervisor daemon:

docker compose up -d

Lấy mật khẩu thiết lập một lần từ nhật ký khởi động của container:

docker logs nextcloud-aio-mastercontainer

Sao chép mật khẩu hiển thị ở đầu ra, sau đó mở https://<your-server-ip>:8080 trên trình duyệt của bạn.

Cấu hình

1. Xác minh tên miền và chọn tiện ích bổ sung

Bỏ qua cảnh báo chứng chỉ tự ký của trình duyệt trên cổng 8080, nhập mật khẩu thiết lập và gửi tên miền public của bạn. Master container sẽ kích hoạt một trình lắng nghe ACME challenge tạm thời trên cổng 80 để xác minh quyền sở hữu tên miền và phát hành chứng chỉ Let’s Encrypt hợp lệ.

Sau khi xác minh xong, hãy chọn các mô-đun tiện ích bổ sung cho hệ thống của bạn:

  • Nextcloud Office (Collabora Online): Chỉnh sửa tệp DOCX, XLSX và PPTX trực tiếp trên trình duyệt theo thời gian thực.
  • Imagick / Memories: Bộ nhớ đệm tạo ảnh thu nhỏ (thumbnail) tốc độ cao. Rất quan trọng nếu bạn muốn cuộn mượt mà qua hàng loạt ảnh chụp 48 MP từ điện thoại.
  • Talk: Nhắn tin và gọi video riêng tư có mã hóa cho cả gia đình.
  • ClamAV: Trình quét diệt virus theo thời gian thực (on-access). Hãy tắt tùy chọn này trừ khi máy chủ của bạn có tối thiểu 16 GB RAM, vì chỉ riêng cơ sở dữ liệu mẫu virus của ClamAV đã ngốn hơn 1,5 GB RAM.

2. Khởi tạo container và thông tin quản trị viên

Nhấn vào Start Containers. Master container sẽ tải về các image đã được kiểm định cho PostgreSQL, Redis, Apache và Nextcloud Core, rồi khởi động từng dịch vụ theo thứ tự phụ thuộc. Với đường truyền mạng gia đình 100 Mbps tiêu chuẩn, quá trình này mất khoảng bốn phút. Khi hoàn tất, hãy sao chép ngay thông tin đăng nhập quản trị viên vừa được tạo vào trình quản lý mật khẩu của bạn.

3. Tăng cường bảo mật và tối ưu hiệu năng

Đăng nhập tại https://cloud.yourdomain.com và kiểm tra mục Cài đặt quản trị > Tổng quan (Administration settings > Overview) để xem các cảnh báo cấu hình. Xử lý các cờ cảnh báo phổ biến liên quan đến khu vực thông qua dòng lệnh occ:

# Đặt mã vùng điện thoại để định dạng số liên hệ chính xác
docker exec --user www-data -it nextcloud-aio-nextcloud php occ config:system:set default_phone_region --value="US"

# Lên lịch lập chỉ mục cơ sở dữ liệu và quét dọn tệp định kỳ vào lúc 1:00 sáng
docker exec --user www-data -it nextcloud-aio-nextcloud php occ config:system:set maintenance_window_start --type=integer --value=1

Nếu gia đình bạn thường xuyên tải lên các video gia đình chuẩn 4K dung lượng trên 2 GB, hãy tăng giới hạn tải lên bằng cách thêm PHP_UPLOAD_LIMIT=16G và PHP_MEMORY_LIMIT=2048M vào khối environment của master container trong tệp Compose.

4. Thiết lập ứng dụng máy khách và tự động tải lên trên điện thoại

Trong mục Người dùng (Users), tạo tài khoản cho từng thành viên trong gia đình kèm hạn ngạch dung lượng riêng (ví dụ: 250 GB mỗi người). Hướng dẫn họ tải ứng dụng Nextcloud từ Google Play hoặc iOS App Store:

  • Cấu hình tính năng Tự động tải lên (Auto-upload) cho các thư mục ảnh chụp, sắp xếp tự động theo năm và tháng.
  • Bật tùy chọn Chỉ tải lên khi có Wi-Fi (Upload only on Wi-Fi) và Chỉ tải lên khi đang sạc (Only while charging) để tiết kiệm pin và dung lượng mạng di động.
  • Cài đặt ứng dụng cộng đồng Memories từ Nextcloud App Store. Ứng dụng này thay thế trình xem ảnh mặc định bằng một giao diện tương tự Google Photos, đầy đủ thanh cuộn dòng thời gian, nhận diện khuôn mặt và định vị địa lý đảo ngược (reverse geocoding).

Kiểm tra & Giám sát

1. Kiểm tra trạng thái hệ thống

Xác nhận rằng tất cả các microservice được khởi tạo đều đang hoạt động tốt:

docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"

Bảng tiến trình của bạn sẽ hiển thị danh sách các container ở trạng thái healthy gồm nextcloud-aio-database, nextcloud-aio-redis, nextcloud-aio-apache, nextcloud-aio-collabora và nextcloud-aio-nextcloud.

2. Giám sát nhật ký và quá trình thực thi Cron

Các tác vụ chạy ngầm sẽ lập chỉ mục tệp mới, xóa các liên kết hết hạn và tạo ảnh thu nhỏ xem trước. Kiểm tra Cài đặt quản trị > Tác vụ nền (Administration settings > Background jobs) để đảm bảo bộ lập lịch được đặt thành Cron và đã chạy trong vòng năm phút gần nhất.

Để theo dõi các phiên đồng bộ dữ liệu theo thời gian thực và phát hiện lỗi đồng bộ từ điện thoại ngay khi chúng xảy ra:

docker logs -f --tail=100 nextcloud-aio-nextcloud

3. Kiểm tra tính hợp lệ của sao lưu tự động

Bản sao lưu chưa từng thử nghiệm chỉ là ảo tưởng. Nextcloud AIO tích hợp sẵn tính năng tạo snapshot mã hóa nguyên bản thông qua BorgBackup. Trong giao diện AIO (:8080), hãy cấu hình một ổ cứng gắn trong thứ hai hoặc một thư mục chia sẻ NFS trên NAS làm nơi lưu trữ sao lưu.

Trước mỗi lần cập nhật container, supervisor sẽ tự động ngắt lưu lượng truy cập, trích xuất bản dump sạch của PostgreSQL, tạo một Borg snapshot khử trùng lặp dữ liệu (deduplicated) và khởi động lại các container. Với dung lượng 1,4 TB của chúng tôi, các bản sao lưu vi sai (differential backup) hằng ngày hoàn tất trong vòng chưa đầy bảy phút. Bạn có thể kiểm tra lịch sử snapshot bất cứ lúc nào từ terminal:

docker exec -it nextcloud-aio-borgbackup borg list /mnt/backup/borg

Chuyển sang Nextcloud AIO đã chấm dứt hoàn toàn các hóa đơn đăng ký định kỳ và mang các tài liệu riêng tư của chúng tôi về lại phần cứng do chính mình kiểm soát vật lý. Quá trình thiết lập chỉ mất đúng một buổi tối, việc cập nhật định kỳ mất năm phút mỗi tháng và các tệp dữ liệu không bao giờ rời khỏi mạng gia đình khi chưa được mã hóa.

Share: