Cài UniFi Network Application lên NAS Synology

Cài UniFi Network Application lên NAS Synology

Nhà hay văn phòng đang dùng AP, switch hay gateway của Ubiquiti (dòng UniFi) thì chắc chắn cần thứ này — nó là "bộ não" quản lý toàn bộ đám thiết bị đó. Tên cũ là UniFi Controller, đổi tên nhưng bản c

UniFi Network Application là gì, dùng để làm gì?

Nhà hay văn phòng đang dùng AP, switch hay gateway của Ubiquiti (dòng UniFi) thì chắc chắn cần thứ này — nó là "bộ não" quản lý toàn bộ đám thiết bị đó. Tên cũ là UniFi Controller, đổi tên nhưng bản chất vẫn vậy: một web app cho bạn nhìn toàn bộ hạ tầng mạng trên một dashboard duy nhất, thay vì phải đăng nhập từng thiết bị một để chỉnh.

Bình thường phần mềm này chạy trên Cloud Key (thiết bị chuyên dụng của Ubiquiti) hoặc một máy tính/mini PC cắm điện 24/7. Vấn đề là: bạn đã có sẵn con NAS Synology chạy suốt ngày đêm rồi, giờ lại phải mua thêm một cục Cloud Key chỉ để... chạy phần mềm quản lý mạng? Nghe hơi phí tiền. Bài này giải quyết đúng chuyện đó — nhét UniFi Network Application vào NAS đang có sẵn.

Cụ thể nó làm được gì:

  • Quản lý tập trung toàn bộ AP/switch/gateway UniFi từ một dashboard: xem thiết bị nào online, băng thông đang dùng, ai đang kết nối.
  • Cấu hình SSID, VLAN, mạng khách (guest network) một lần rồi áp cho hàng loạt AP, không cần vào từng cái.
  • Theo dõi lịch sử lưu lượng, cảnh báo khi thiết bị rớt mạng, thống kê client theo thời gian.
  • Cập nhật firmware AP/switch từ xa, khỏi phải leo lên trần nhà gỡ AP xuống cắm dây console.

Vài tình huống thực tế hay gặp:

  • Nhà bạn có 2-3 AP UniFi, không muốn bỏ thêm 2-3 triệu mua Cloud Key Gen2 chỉ để quản lý ngần đó thiết bị — trong khi NAS đang chạy sẵn 24/7 rồi.
  • Dân IT quản mạng văn phòng vài chục client, cần dashboard xem ngay ai đang "ăn" hết băng thông, đồng thời tách VLAN riêng cho khách và nhân viên.
  • Vừa tháo Cloud Key cũ ra (housing hỏng, quạt kêu to, hoặc đơn giản muốn gộp bớt thiết bị cắm điện), giờ cần dời controller sang chỗ khác mà không mất lịch sử dữ liệu.

So với Cloud Key Gen2 hay UniFi Express — thiết bị "cắm điện là chạy", tự backup, không phải lo gì — chạy trên NAS thì tận dụng phần cứng đã có, không tốn thêm tiền lẫn ổ cắm điện. Đổi lại, bạn phải tự tay quản lý container và MongoDB. Có thêm việc để làm, chứ không phải cắm-là-xong.

Sơ đồ UniFi Network Application chạy trên NAS Synology quản lý thiết bị UniFi

Vì sao chọn cách dán docker-compose vào Container Manager

Package Center của Synology không có gói UniFi chính thức, SynoCommunity cũng không hỗ trợ khoản này — đừng tốn công lục Package Center tìm nút "Install" màu xanh, không có đâu. Buộc phải xuống Container Manager.

Trong Container Manager, cách cũ là dùng Registry kéo image về rồi chạy wizard "Run" cho từng container riêng lẻ (kiểu image jacobalberty/unifi ngày xưa hay dùng). Cách này bắt bạn tự tạo Docker network, tự nối container UniFi với container MongoDB qua địa chỉ IP thủ công. Nghe thì được, nhưng chỉ cần NAS restart một cái, IP nội bộ đổi là mất kết nối, lại phải vào sửa tay. Rất dễ sai, khó bảo trì lâu dài.

Cách gọn hơn nhiều: vào tab Project của Container Manager, dán một file docker-compose.yml định nghĩa 2 service (MongoDB + UniFi Network Application), bấm Deploy. Project tự tạo một bridge network nội bộ riêng cho project đó, hai container gọi nhau qua tên service (ví dụ unifi-db) thay vì qua IP — khỏi lo IP đổi, khỏi cần biết Docker network CLI là gì. Đây cũng là cách duy nhất qua giao diện GUI cho phép khai báo quan hệ phụ thuộc (MongoDB phải lên trước, UniFi mới kết nối vào) mà không đụng một dòng lệnh Terminal nào.

Tiêu chíRun wizard (Registry)docker-compose
Kết nối UniFi ↔ MongoDBNhập IP thủ công✓ Tự động qua network
Khi NAS restart✗ Dễ mất kết nối✓ Ổn định
Tạo Docker networkTự tạo thủ công✓ Định nghĩa sẵn
Độ phức tạp thiết lậpNhiều bước rời rạcDán 1 lần, chạy hết

Chuẩn bị trước khi cài

  • DSM từ 7.2 trở lên — tab Project chỉ xuất hiện từ bản này. Container Manager là tên mới của gói Docker cũ, nếu NAS bạn còn thấy gói tên "Docker" thì cập nhật DSM trước.
  • Biết UID/GID của user NAS bạn sẽ dùng chạy container — vào Control Panel > User & Group > Advanced để xem, hoặc tra trong phần thông tin user. Cái này để điền vào PUID/PGID, tránh lỗi ghi file bên dưới.
  • Chuẩn bị sẵn 2-3 mật khẩu mới, đừng để mặc định — sẽ giải thích tại sao ở phần bảo mật.

Các bước cài đặt

Bước 1: Cài Container Manager

Mở Package Center, gõ "Container Manager", bấm Install nếu chưa có. Nếu NAS bạn đang có gói "Docker" cũ thì nó đã tự đổi tên thành Container Manager sau khi cập nhật DSM lên 7.2+.

Bước 2: Tạo thư mục chứa dữ liệu

Mở File Station, vào thư mục docker (tạo mới nếu chưa có), tạo 2 thư mục con:

  • /volume1/docker/unifi/config — nơi UniFi lưu cấu hình.
  • /volume1/docker/unifi/db — nơi MongoDB lưu dữ liệu.

Tạo trước thư mục thật trên NAS rồi mới map vào container, đừng để Docker tự tạo — dễ dính lỗi quyền lằng nhằng về sau.

Bước 3: Tạo project trong Container Manager

Mở Container Manager > Project > Create. Đặt tên project, ví dụ unifi. Ở phần Path, chọn đúng thư mục docker/unifi vừa tạo. Chọn kiểu "Create docker-compose.yml", rồi dán nội dung sau vào:


services:
  unifi-db:
    image: mongo:4.4
    container_name: unifi-db
    restart: unless-stopped
    environment:
      - MONGO_INITDB_ROOT_USERNAME=admin
      - MONGO_INITDB_ROOT_PASSWORD=doi_mat_khau_nay
      - MONGO_USER=unifi
      - MONGO_PASS=doi_mat_khau_nay_nua
      - MONGO_DBNAME=unifi
    volumes:
      - /volume1/docker/unifi/db:/data/db
      - /volume1/docker/unifi/init-mongo.sh:/docker-entrypoint-initdb.d/init-mongo.sh:ro

  unifi-network-application:
    image: lscr.io/linuxserver/unifi-network-application:latest
    container_name: unifi-network-application
    restart: unless-stopped
    depends_on:
      - unifi-db
    environment:
      - PUID=1026
      - PGID=100
      - TZ=Asia/Ho_Chi_Minh
      - MONGO_HOST=unifi-db
      - MONGO_PORT=27017
      - MONGO_USER=unifi
      - MONGO_PASS=doi_mat_khau_nay_nua
      - MONGO_DBNAME=unifi
      - MONGO_AUTHSOURCE=admin
    volumes:
      - /volume1/docker/unifi/config:/config
    ports:
      - "8443:8443"
      - "8080:8080"
      - "3478:3478/udp"
      - "10001:10001/udp"

Lưu ý mấy chỗ phải đổi:

  • PUID/PGID: thay 1026/100 bằng số thật của user NAS bạn (xem lại phần Chuẩn bị).
  • Mật khẩu: MONGO_INITDB_ROOT_PASSWORDMONGO_PASS — đổi hết, đừng copy y nguyên từ bài viết nào trên mạng, kể cả bài này.
  • Image mongo ghim bản 4.4, không dùng mongo:latest. MongoDB không tự nâng cấp major version, dùng latest mà đúng ngày image cập nhật lên bản mới là dữ liệu cũ đọc không được nữa.

Bước 4: Tạo script bật RBAC cho MongoDB

Mặc định MongoDB không bật xác thực (auth) — ai gõ đúng địa chỉ là đọc được hết dữ liệu, không cần mật khẩu. Cần file init-mongo.sh để tạo user riêng cho UniFi với quyền giới hạn. Trong File Station, tạo file /volume1/docker/unifi/init-mongo.sh với nội dung:


#!/bin/bash
set -e
mongosh <<EOF
use admin
db.auth("$MONGO_INITDB_ROOT_USERNAME", "$MONGO_INITDB_ROOT_PASSWORD")
db = db.getSiblingDB("$MONGO_DBNAME")
db.createUser({
  user: "$MONGO_USER",
  pwd: "$MONGO_PASS",
  roles: [
    { role: "dbOwner", db: "unifi" },
    { role: "dbOwner", db: "unifi_stat" },
    { role: "dbOwner", db: "unifi_audit" },
    { role: "dbOwner", db: "unifi_restore" }
  ]
})
EOF

File này phải nằm đúng đường dẫn khai trong compose ở Bước 3 (/volume1/docker/unifi/init-mongo.sh), MongoDB sẽ tự chạy nó lúc khởi tạo lần đầu.

Bước 5: Deploy

Bấm Next > Done. Container Manager tự pull cả 2 image về và deploy song song. Lần đầu mất vài phút vì UniFi phải tự khởi tạo database — đừng sốt ruột tắt đi bật lại, cứ để yên theo dõi trong tab Container > Log cho đến khi thấy container unifi-network-application chuyển sang trạng thái "Running" ổn định, không nhảy liên tục.

Kiểm tra và adopt thiết bị

Mở trình duyệt, vào https://IP-NAS-cua-ban:8443. Trình duyệt sẽ cảnh báo chứng chỉ không hợp lệ — bình thường thôi, đây là chứng chỉ tự ký, bấm "Advanced > Proceed" để vào tiếp. Chạy qua wizard cài đặt ban đầu: tạo tài khoản admin Ubiquiti, chọn khu vực.

Sau đó adopt các AP/switch UniFi hiện có: hoặc đặt Inform URL trên từng thiết bị trỏ về controller mới, hoặc dùng app UniFi Network trên điện thoại quét và adopt. Nếu thiết bị nằm cùng dải mạng LAN với NAS, đa số trường hợp tự thấy nhau, không cần chỉnh gì thêm.

Lỗi hay gặp và cách xử lý

  • Container MongoDB cứ crash-loop ngay sau khi start: nguyên nhân phổ biến nhất là CPU Synology không hỗ trợ tập lệnh AVX, mà bạn lỡ dùng bản mongo mới hơn 4.4 (MongoDB 5.0 trở lên bắt buộc AVX trên x86_64). Nhiều dòng Synology entry-level/đời cũ không có AVX. Giải pháp: đổi lại đúng mongo:4.4 như compose mẫu ở trên.
  • UniFi báo "Permission denied" không ghi được vào /config: PUID/PGID trong compose không khớp UID/GID thật của user trên NAS. Vào lại Control Panel > User & Group > Advanced kiểm tra số chính xác, sửa trong compose rồi deploy lại project.
  • UniFi báo lỗi xác thực, không kết nối được MongoDB: hoặc mật khẩu MONGO_PASS có ký tự đặc biệt chưa URL-encode, hoặc MONGO_HOST gõ sai tên service (phải đúng y chang tên service unifi-db khai trong compose, không phải IP). Đặt mật khẩu chỉ gồm chữ và số cho an toàn nếu không chắc cách encode.
  • Port 8080 hoặc 8443 báo trùng, container không lên được: NAS đang chạy dịch vụ khác (Web Station, ứng dụng khác) chiếm port này rồi. Đổi port ở phía host trong compose, ví dụ map "8444:8443", giữ nguyên port bên trong container.
  • AP không adopt được, cứ báo "Isolated": thường do firewall DSM (Control Panel > Security > Firewall) đang chặn các port cần thiết (3478/udp, 10001/udp), hoặc "Override inform host" trong Settings > System của UniFi chưa trỏ đúng IP NAS.

Tùy chọn nâng cao (không bắt buộc)

Mấy mục dưới đây không cần để UniFi chạy được, chỉ làm khi bạn thật sự cần:

  • Reverse proxy (qua Synology Application Portal hoặc Nginx Proxy Manager) để truy cập bằng domain riêng kèm chứng chỉ SSL hợp lệ, thay vì cảnh báo "not secure" ở port 8443 mỗi lần vào.
  • Đặt "Override inform host" trong Settings > System của UniFi về đúng IP NAS — chỉ cần làm nếu AP báo lỗi kết nối/adopt, mạng LAN đơn giản thường không cần đụng đến.
  • Nâng MongoDB lên bản mới (7.0 hay 8.0, tương ứng UniFi 9.0 trở lên) nếu CPU NAS bạn hỗ trợ AVX và muốn dùng bản mới hơn. Mặc định nên ở mongo:4.4 cho an toàn trước, việc nâng cấp chỉ nên làm khi đã hiểu rõ và có backup.

Bảo mật và bảo trì

Vài điểm không nên bỏ qua:

  • Đừng map port 27017 (MongoDB) ra ngoài. Không khai ports cho service unifi-db trong compose — để 2 container nói chuyện nội bộ qua network riêng của Project là đủ. Mở port này ra ngoài coi như để cả DB không mật khẩu cho ai cũng vào đọc được, kể cả khi bạn đã chạy script RBAC ở trên, vì nhiều cấu hình mặc định vẫn cho phép truy cập không xác thực từ localhost.
  • Bắt buộc chạy init-mongo.sh như Bước 4, đừng bỏ qua vì "thấy chạy được là xong" — không bật RBAC nghĩa là ai có quyền truy cập container network cũng đọc/ghi được toàn bộ dữ liệu UniFi của bạn.
  • Không port-forward 8443/8080 thẳng ra Internet trừ khi thật sự cần quản lý từ xa. Cần thì đi qua VPN (Synology VPN Server hoặc Tailscale) chứ đừng mở cổng ra WAN trực tiếp — mở là kiểu sớm muộn gì cũng có bot quét cổng gõ cửa.
  • Backup định kỳ thư mục /volume1/docker/unifi/db/volume1/docker/unifi/config qua Hyper Backup — mất dữ liệu MongoDB là mất luôn lịch sử cấu hình VLAN, SSID, thống kê client, phải cấu hình lại từ đầu.

Vậy là xong. Không cần Cloud Key, không cần SSH — dán compose vào Container Manager, thế là con NAS gánh thêm một việc mà chẳng tốn thêm ổ cắm điện nào.

Mua NAS chính hãng

Xem tất cả →

Thiết bị NAS Synology & ổ cứng chính hãng Nhật Bản — tư vấn cấu hình, lắp đặt và bảo hành. Mua qua Shopee, giao toàn quốc.

No comments yet