Vì sao không dùng Package Center hay Nextcloud AIO
Nhiều người vẫn quen tay vào Package Center gõ "Nextcloud" rồi ngơ ngác không thấy đâu. Đúng vậy, Synology bỏ package Nextcloud chính thức khỏi Package Center từ lâu rồi. Kho cộng đồng SynoCommunity có bản community, nhưng thường lỗi thời, hay đá nhau với DSM 7.x — cài vào rồi tự dưng thành thợ sửa ống nước lúc nửa đêm thì thôi khỏi.
Lựa chọn "chính thức" mà Nextcloud khuyến nghị là Nextcloud AIO (All-In-One) — cài một phát, tự cập nhật qua giao diện, nghe rất sướng. Nhưng đọc kỹ thì AIO cần mount docker.sock vào container, tức là cấp quyền gần như root cho nó trên toàn hệ thống Docker của NAS. Nó cũng đòi chiếm cổng 8080 cho mastercontainer và thường muốn ôm luôn port 443, dễ đụng độ với Reverse Proxy và các dịch vụ khác của DSM. Chưa kể AIO bundle sẵn Talk, Collabora, Whiteboard — không dùng cũng phải cõng RAM cho nó, mà không cho tùy biến để chạy PostgreSQL theo ý mình.
Còn Virtual Machine Manager thì càng không đáng — dựng nguyên một VM Linux, cài Nextcloud kiểu snap/manual bên trong, tốn RAM/CPU cấp riêng cho cả một hệ điều hành khách chỉ để chạy một ứng dụng. VMM cũng không có trên nhiều NAS tầm trung/thấp.
Cách trong bài này: tự viết docker-compose, deploy qua tính năng Project của Container Manager (DSM 7.2+), dùng đúng 3 container — Nextcloud, PostgreSQL, Redis — rồi expose ra ngoài bằng Reverse Proxy có sẵn của DSM. Nhẹ, toàn quyền chọn version, tận dụng luôn Certificate Manager để có HTTPS miễn phí, backup thì cứ Hyper Backup nguyên thư mục là xong. Đánh đổi duy nhất: không có nút "update tự động" như AIO, phải tự tay nâng cấp từng bước.
| Phương án | Bảo mật | RAM | Tùy biến | Update tự động |
| ----------------------- | -------------------- | -------- | ---------- | -------------- |
| SynoCommunity | Không đáng tin | Thấp | Kém | Không |
| Nextcloud AIO | Rủi ro (docker.sock) | Cao | Hạn chế | Có |
| VM Manager | Cao | Rất cao | Toàn quyền | Không |
| Docker Compose thủ công | Cao | Thấp-Vừa | Toàn quyền | Không | Yêu cầu trước khi bắt tay vào
- CPU x86 (Intel/AMD) — Container Manager không chạy trên NAS dùng CPU ARM như DS223, DS124, DS223j. Kiểm tra trước, đừng để cài xong Package Center báo không tương thích mới ngã ngửa.
- RAM tối thiểu 4GB, nên có ≥8GB nếu định cài thêm app nhận diện khuôn mặt (Recognize) hoặc chạy song song nhiều app khác. Bộ ba Nextcloud + Postgres + Redis chạy nền chiếm khoảng 1-2GB.
- DSM 7.2 trở lên — bản này mới có tính năng Project trong Container Manager, cho phép dán thẳng file docker-compose.yml thay vì bấm tay từng container.
- Cài package Container Manager từ Package Center (tên cũ là Docker, đổi tên từ DSM 7.2).
Bước 1: Tạo thư mục và file docker-compose
Vào File Station, tạo shared folder docker nếu chưa có, rồi tạo cấu trúc thư mục con sau — làm trước khi tạo Project, không thì Container Manager sẽ tự tạo giùm bạn theo kiểu nó thích, dọn lại mệt hơn:
/volume1/docker/nextcloud/htmlVào Container Manager → Project → Create → chọn "Create docker-compose.yml" và trỏ project path về
/volume1/docker/nextcloud/data
/volume1/docker/nextcloud/db
/volume1/docker/nextcloud/redis
/volume1/docker/nextcloud/config/volume1/docker/nextcloud. Dán nội dung sau:
version: "3.8"Ghi chú vài chỗ dễ hiểu lầm: image pin cứng là
services:
db:
image: postgres:16-alpine
restart: unless-stopped
volumes:
- /volume1/docker/nextcloud/db:/var/lib/postgresql/data
environment:
POSTGRES_DB: nextcloud
POSTGRES_USER: nextcloud
POSTGRES_PASSWORD:
redis:
image: redis:alpine
restart: unless-stopped
volumes:
- /volume1/docker/nextcloud/redis:/data
app:
image: nextcloud:30-apache
restart: unless-stopped
ports:
- "8443:80"
volumes:
- /volume1/docker/nextcloud/html:/var/www/html
- /volume1/docker/nextcloud/data:/var/www/html/data
- /volume1/docker/nextcloud/config:/var/www/html/config
environment:
POSTGRES_HOST: db
POSTGRES_DB: nextcloud
POSTGRES_USER: nextcloud
POSTGRES_PASSWORD: NEXTCLOUD_ADMIN_USER: admin
NEXTCLOUD_ADMIN_PASSWORD: NEXTCLOUD_TRUSTED_DOMAINS: cloud.tenmiendocua.ban
OVERWRITEPROTOCOL: https
REDIS_HOST: redis
PHP_UPLOAD_LIMIT: 10G
PHP_MEMORY_LIMIT: 512M
depends_on:
- db
- redisnextcloud:30-apache chứ không phải :latest — tính đến giữa 2026 bản mới nhất là Nextcloud 34 (Hub 26), nhưng pin version cụ thể để bạn chủ động lúc nào nâng cấp, không bị Docker âm thầm kéo bản mới về lúc restart container. Port container Nextcloud lắng nghe cố định là 80 bên trong, mình chỉ map ra ngoài port khác (8443 ở đây) vì cổng 80/443 trên NAS đã bị DSM chiếm sẵn cho web portal của nó.
Điền xong mật khẩu thật (không phải để nguyên <mat_khau_manh_cua_ban> như ví dụ — nghiêm túc đấy, không phải câu đùa), bấm Deploy. Lần đầu Nextcloud build image sẽ mất vài phút, đừng sốt ruột tắt đi bật lại.
Bước 2: Truy cập và hoàn tất setup wizard
Sau khi cả 3 container ở trạng thái "Running" trong Container Manager, mở trình duyệt vào http://<IP-NAS>:8443. Nextcloud sẽ tự nhận cấu hình DB Postgres nếu bạn khai đúng biến môi trường ở trên, chỉ cần xác nhận tài khoản admin rồi chờ nó khởi tạo bảng.
Bước 3: Cấu hình Reverse Proxy để có HTTPS
Đây là phần hay bị bỏ qua nhất vì "cứ để http port 8443 dùng tạm cũng được" — đừng, dữ liệu ảnh gia đình mà đi HTTP thuần trên mạng ngoài thì không ổn. Vào Control Panel → Login Portal (hoặc "Networking" ở DSM mới) → Advanced → Reverse Proxy, tạo rule mới:
- Source: Protocol HTTPS, Hostname
cloud.tenmiendocua.ban, Port 443. - Destination: Protocol HTTP, Hostname
localhost, Port 8443 (đúng port bạn map ở compose). - Tab Custom Header: thêm
UpgradevàConnectiontheo preset "WebSocket" — thiếu chỗ này là app di động đăng nhập xong báo lỗi liền, nói ở phần lỗi bên dưới.
Certificate thì vào Control Panel → Security → Certificate, gán Let's Encrypt cho domain này — DSM tự gia hạn, khỏi phải lo hết hạn.
Sau khi bật Reverse Proxy, chạy lệnh occ để khai IP bridge Docker vào danh sách trusted proxy, tránh Nextcloud tưởng nhầm request đến từ IP nội bộ của Docker rồi redirect loạn xạ:
docker exec --user www-data nextcloud-app-1 php occ config:system:set trusted_proxies 1 --value=172.18.0.1(Đổi nextcloud-app-1 thành tên container thật của bạn, và IP bridge thì xem trong Container Manager → Network hoặc docker network inspect.)
Bước 4: Cài app di động và bật auto upload
Cài app Nextcloud chính thức trên điện thoại, đăng nhập bằng domain HTTPS vừa cấu hình (không phải IP:8443 nữa). Vào Settings → Camera upload, bật auto upload, chọn folder đích trên server, và nếu sợ tốn pin/data thì tick chỉ chạy khi có Wi-Fi và đang sạc.
Muốn giao diện kiểu Google Photos thì cài thêm app "Memories" hoặc "Photos" trong App Store của Nextcloud, kèm "Recognize" để nhận diện khuôn mặt — nhưng nhớ đây là lý do RAM nên để dư ra 8GB thay vì bám sát mức tối thiểu 4GB.
3 lỗi hay gặp nhất và cách vá
1. "Access through untrusted domain" khi vào bằng domain reverse proxy. Nguyên nhân: quên khai NEXTCLOUD_TRUSTED_DOMAINS hoặc gõ sai domain trong env. Sửa nhanh bằng occ:
docker exec --user www-data nextcloud-app-1 php occ config:system:set trusted_domains 1 --value=cloud.tenmiendocua.ban2. Redirect loop hoặc cảnh báo mixed content sau khi bật HTTPS. Thường do thiếu OVERWRITEPROTOCOL=https trong compose, hoặc trusted_proxies chưa khai đúng IP bridge Docker như bước 3 ở trên. Kiểm tra lại cả hai, thiếu một cái là nó cãi nhau liền.
3. "Another process is locking this file" khi nhiều máy cùng auto-upload một lúc. Đây chính là lý do bài này bắt buộc có Redis chứ không phải tùy chọn — thiếu REDIS_HOST trong biến môi trường của service app thì Nextcloud dùng file locking mặc định, dễ đụng độ khi hai thiết bị ghi cùng thời điểm.
Ngoài 3 lỗi trên, còn hai lỗi khác đáng chú ý. App iOS hay báo "Connection Error. Cannot parse response" sau khi qua Reverse Proxy — 90% là do quên bật custom header WebSocket ở bước 3. Còn lỗi phân quyền file (permission denied) trên volume thì do container Nextcloud chạy user www-data với UID 33; nếu thư mục shared folder trên DSM có owner khác, cần chown lại UID 33 cho các thư mục con trong /volume1/docker/nextcloud/. Cái này y hệt kiểu PUID/PGID hay gặp ở mấy container khác — lần đầu ai cũng vấp, không có gì phải ngại.
Bảo mật và bảo trì về sau
- Không bao giờ port-forward thẳng cổng Nextcloud ra Internet mà bỏ qua Reverse Proxy + HTTPS. Cứ để DSM lo phần cổng, mình chỉ quản container.
- Bật 2FA trong Nextcloud (Settings → Security) — đây là nơi chứa toàn bộ ảnh riêng tư gia đình, mất tài khoản là mất hết.
- Đổi mật khẩu admin và mật khẩu DB thật ngay từ lúc deploy, đừng để dính mẫu trong bài hướng dẫn nào kể cả bài này.
- Update định kỳ image
nextcloudvàpostgres— Nextcloud có lịch sử CVE khá đều đặn, và mỗi bản major chỉ được support khoảng 1 năm. - Backup nguyên thư mục
/volume1/docker/nextcloudbằng Hyper Backup, kèm dump PostgreSQL, trước khi nâng version lớn. Nextcloud bắt nâng từng major một, nhảy cóc là gãy DB, lúc đó backup mới là cứu tinh thật sự. - Cân nhắc bật auto-block đăng nhập sai trong Control Panel → Security cho domain reverse proxy, chống brute-force vì giờ nó lộ mặt ra Internet rồi.
Vậy là xong. Không hào nhoáng như AIO, nhưng bạn kiểm soát từng mảnh — DB nào, version nào, RAM tốn bao nhiêu đều do mình quyết chứ không phải để container mastercontainer nào đó quyết giùm.



No comments yet