Cài Immich trên Synology bằng Docker: thay Google Photos

Cài Immich trên Synology bằng Docker: thay Google Photos

Immich là phần mềm mã nguồn mở để tự backup và quản lý ảnh, video từ điện thoại — làm y hệt Google Photos, chỉ khác một chỗ: toàn bộ dữ liệu nằm trên NAS của bạn, không phải trên server của Google. Kh

Immich là gì mà dạo này ai cũng nhắc?

Immich là phần mềm mã nguồn mở để tự backup và quản lý ảnh, video từ điện thoại — làm y hệt Google Photos, chỉ khác một chỗ: toàn bộ dữ liệu nằm trên NAS của bạn, không phải trên server của Google. Không giới hạn 15GB miễn phí, không âm thầm nén ảnh xuống chất lượng thấp để "tiết kiệm", và quan trọng nhất — ảnh con bạn không nằm trên hạ tầng của một công ty quảng cáo.

Về mặt tính năng, Immich không hề thua kém đàn anh:

  • Tự động backup ảnh/video từ app di động (Android/iOS) ngay khi điện thoại bắt được Wi-Fi nhà, y như Google Photos vẫn làm.
  • AI nhận diện khuôn mặt, phân loại vật thể/cảnh vật, và tìm ảnh bằng ngôn ngữ tự nhiên kiểu "ảnh chó ở biển" — gõ đúng câu đó, kết quả ra ngay, không phải nói suông.
  • Timeline mượt, album chia sẻ cho người thân, và mục "Memories" nhắc lại ảnh cùng ngày này các năm trước.
  • Hỗ trợ đa người dùng và external library — tức là quét luôn kho ảnh cũ bạn đã có sẵn trên NAS, không cần upload lại từ đầu.

Vài tình huống mà Immich sinh ra để giải quyết: gia đình hết veo 15GB Google One, mỗi năm è cổ đóng phí mà ảnh con cái vẫn nằm trên cloud người khác. Hoặc bạn đã dùng Synology Photos có sẵn trong DSM rồi, nhưng thấy app mobile hơi cùi và tính năng tìm kiếm AI chưa đã. Hoặc đơn giản là bạn vừa "ly hôn" hệ sinh thái Google/Apple, muốn một chỗ lưu ảnh riêng tư, tự mình kiểm soát hoàn toàn.

So với Google Photos, Immich đánh đổi cái sự "cài phát chạy ngay" để lấy quyền riêng tư tuyệt đối và dung lượng chỉ giới hạn bởi ổ cứng bạn có. Còn so với Synology Photos đã có sẵn trong Package Center, Immich mạnh hơn ở AI/search và trải nghiệm mobile gần Google Photos hơn hẳn — cái giá phải trả là bạn phải tự tay dựng qua Docker, không có nút "Install" màu xanh chờ sẵn.

Sơ đồ luồng hoạt động của Immich từ điện thoại đến NAS
Tiêu chíImmichGoogle PhotosSynology Photos
Nơi lưu trữNAS riêngCloud GoogleNAS riêng
Dung lượngTheo ổ cứng15GB miễn phíTheo ổ cứng
Riêng tư dữ liệu
Tìm ảnh bằng AI
App mobile mượt
Cài đặtQua Docker

Vì sao chọn Container Manager, không dùng Virtual Machine Manager

Đập vào mắt đầu tiên: Immich không có package DSM chính chủ. Đội ngũ Immich chỉ viết guide cộng đồng riêng cho Synology, và cách được khuyến nghị chính thức là chạy qua Docker bằng Container Manager — package Docker đổi tên trên DSM 7.2+.

Có người sẽ nghĩ đến Virtual Machine Manager, dựng hẳn một VM Linux chạy Immich bên trong. Đừng làm vậy. VM ngốn thêm cả RAM lẫn CPU dự phòng cho hệ điều hành khách, backup/update phức tạp hơn nhiều, trong khi cái bạn cần chỉ là chạy vài container cho một ứng dụng đơn lẻ. Container Manager thì có UI quản lý project, xem log, theo dõi resource ngay trong DSM — update chỉ cần đổi tag version rồi bấm restart, rollback cũng nhẹ nhàng hơn hẳn.

Đánh đổi duy nhất: Container Manager chỉ chạy trên NAS dùng chip Intel/AMD (x86). Mấy dòng máy ARM như DS223, DS124, DS223j, DS223w... không cài được đâu, kể cả cố lách cũng vô ích vì package này không tồn tại trên nền ARM. Kiểm tra CPU máy trước khi đọc tiếp — cài trên NAS ARM là phí công vô ích.

Yêu cầu trước khi bắt tay vào làm

  • NAS Synology chip Intel/AMD (x86), DSM 7.2 trở lên.
  • RAM tối thiểu 6GB, khuyến nghị 8GB. Máy chỉ có 4GB vẫn chạy được nếu tắt hẳn Machine Learning (nói kỹ ở phần lỗi thường gặp bên dưới).
  • CPU tối thiểu 2 lõi, khuyến nghị 4 lõi. CPU amd64 cần hỗ trợ tập lệnh x86-64-v2 — hầu hết CPU Intel/AMD sản xuất từ khoảng 2012 trở đi đều đạt, không phải lo lắm.
  • Volume dùng EXT4 hoặc BTRFS (mặc định của Synology đã ổn, không cần đổi gì).
  • Cài package Container Manager từ Package Center.

Bước 1: Tạo cấu trúc thư mục

Mở File Station, tạo thư mục gốc /volume1/docker/immich-app/. Bên trong tạo thêm hai thư mục con: db (chứa dữ liệu Postgres) và upload (chứa ảnh/video gốc). Một số hướng dẫn gọi khác đi một chút (postgres/, library/, cache/, redis/) — tên không quan trọng, quan trọng là path này sẽ được trỏ vào file .env ở bước sau nên nhớ ghi lại chính xác.

Bước 2: Tải docker-compose.yml và .env đúng bản

Vào trang Releases của repo GitHub Immich, tải về hai file docker-compose.ymlexample.env của đúng bản release đang muốn cài. Đây là chỗ dễ dính lỗi nhất: đừng lấy file từ nhánh main. Nhánh main là code đang phát triển, có thể lệch version so với image release, service không khởi động được là chuyện thường. Lấy từ tab Releases, luôn.

Đổi tên example.env thành .env, bỏ cả hai file vào thư mục /volume1/docker/immich-app/ đã tạo ở bước 1.

Vài dòng image chính trong compose để bạn hình dung nó kéo về những gì:

ghcr.io/immich-app/immich-server:release
ghcr.io/immich-app/immich-machine-learning:release
ghcr.io/immich-app/postgres:14-vectorchord0.4.3-pgvectors0.2.0
docker.io/valkey/valkey:9

Postgres 14 kèm extension vectorchord/pgvector để phục vụ AI search, và Valkey (fork của Redis, tương thích API) thay cho Redis đời cũ. Bạn không cần chỉnh gì ở đây, cứ để nguyên theo file tải về.

Bước 3: Sửa file .env

Mở .env bằng Text Editor trong File Station hoặc SSH vào sửa trực tiếp. Các biến cần đụng tới:

  • UPLOAD_LOCATION: trỏ về đúng path thư mục upload vừa tạo, ví dụ /volume1/docker/immich-app/upload.
  • DB_DATA_LOCATION: trỏ về thư mục db.
  • DB_PASSWORD, DB_USERNAME, DB_DATABASE_NAME: đổi password mặc định, đặt mật khẩu mạnh. Đừng để nguyên giá trị demo trong file mẫu.
  • IMMICH_VERSION: khớp với bản release bạn vừa tải.
  • TZ: đặt Asia/Ho_Chi_Minh để timeline và Memories hiển thị đúng giờ Việt Nam.
  • JWT_SECRET: đổi khỏi giá trị mặc định trong file mẫu — để nguyên là lỗ hổng bảo mật ngay từ vạch xuất phát.

Một biến hay bị bỏ quên là UID/GID của user chạy container — mặc định trong file ví dụ thường để 1026:100, nhưng đó là ID của một tài khoản demo nào đó, không phải của bạn. PUID/PGID là ID user trên NAS, SSH vào gõ id là ra ngay. Ai chưa biết số này thì cũng bình thường, lần đầu ai cũng phải tra. Set sai giá trị này là nguồn gốc của lỗi "Permission denied" nói ở phần dưới.

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

  1. Mở Container Manager → mục ProjectCreate.
  2. Chọn thư mục /volume1/docker/immich-app/ đã chuẩn bị. DSM sẽ tự nhận ra file docker-compose.yml nằm trong đó.
  3. Khi được hỏi có tạo portal qua Web Station không, bỏ qua bước này — Immich tự chạy web server riêng ở port của nó, không cần Web Station can thiệp.
  4. Bấm Build & Run. Nghe hiển nhiên nhưng vẫn đáng nhắc: rà lại toàn bộ .env một lượt trước khi bấm, vì copy-paste xong tưởng ngon rồi, tối về mới phát hiện quên đổi UID thì công cốc phải build lại từ đầu.

Chờ khoảng 2 phút cho các container khởi động tuần tự: valkey (cache), postgres (database), immich-server, rồi tới immich-machine-learning. Lần đầu kéo image có thể lâu hơn tùy tốc độ mạng.

Bước 5: Mở firewall và truy cập

Port mặc định của Immich là 2283 (một số hướng dẫn cộng đồng như MariusHosting đổi sang 8212 để tránh đụng port khác — nếu bạn theo bản gốc thì cứ để 2283).

Vào Control Panel → Security → Firewall, tạo rule cho phép IP của container immich-server và port 2283. Lấy IP container trong tab Container của Container Manager.

Chỗ này có một cái bẫy: mỗi lần bạn rebuild lại project, Docker có thể cấp IP mới cho container, khiến rule firewall cũ vô tác dụng và bạn mất kết nối không rõ lý do. Cách xử lý dứt điểm là cố định subnet ngay trong docker-compose.yml, ví dụ khai báo network tĩnh 172.20.0.0/16, để IP không nhảy lung tung sau mỗi lần rebuild.

Xong xuôi, mở trình duyệt gõ http://[IP-NAS]:2283, tạo tài khoản admin đầu tiên. Cài app Immich trên điện thoại, đăng nhập, bật auto-backup — xong việc.

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

  • Permission denied khi mount thư mục ảnh có sẵn (external library): gần như luôn do UID/GID trong .env không khớp quyền thư mục thật trên NAS. Sửa lại UID/GID cho đúng, hoặc dùng tạm biến IMMICH_IGNORE_MOUNT_CHECK_ERRORS=true nếu cần chạy gấp — nhưng đây chỉ là workaround, nên sửa gốc quyền thư mục về lâu dài.
  • Container đổi IP sau mỗi lần rebuild, mất kết nối: đã nói ở trên — cố định subnet trong compose thay vì để Docker cấp IP động.
  • Lấy nhầm file từ nhánh main GitHub: lệch version giữa compose/env và image, service không lên được. Luôn tải từ trang Releases của phiên bản cụ thể.
  • Máy chỉ có 4GB RAM chạy full stack kèm Machine Learning: server dễ crash hoặc ML bị timeout. Tắt hẳn service immich-machine-learning trong compose nếu RAM hạn chế, đánh đổi là mất tính năng nhận diện khuôn mặt/search AI.
  • Cài trên NAS chip ARM: Container Manager không tồn tại trên các dòng này, kiểm tra CPU trước khi mất công tải file.

Ngoài ra có tính năng hardware transcoding (Quick Sync/VAAPI) để giảm tải CPU khi phát video — đây là tính năng thực nghiệm. Đôi khi cấu hình đúng hết theo tài liệu mà vẫn không chạy, không phải do bạn làm sai mà do Synology không expose đầy đủ /dev/dri trên mọi model. Không chạy được thì bỏ qua, đừng mất cả buổi tối debug một tính năng phụ.

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

Đừng bao giờ port-forward 2283 thẳng ra Internet qua router. Nếu cần truy cập từ ngoài, dựng reverse proxy (Synology có sẵn hoặc dùng Nginx/Caddy) kèm HTTPS và một lớp xác thực bổ sung phía trước.

Nhớ đổi JWT_SECRET mặc định và đặt password database đủ mạnh trong .env — làm ngay từ bước 3, đừng để "làm sau" rồi quên luôn.

Đây là guide cộng đồng, không phải kênh support chính thức của Synology hay Immich. Trước khi update lên version mới, đọc release notes — breaking changes giữa các bản Immich xảy ra khá thường xuyên, cứ táy máy update mà không đọc là dễ dính lỗi không đáng có.

Backup đi. Ảnh gia đình là loại dữ liệu không thể mất, và cái ổ cứng nào rồi cũng có ngày trở chứng — chỉ là nó chọn đúng lúc bạn chưa kịp backup hay không thôi. Dùng Hyper Backup của Synology sao lưu định kỳ cả volume upload lẫn dữ liệu database (hoặc pg_dump riêng phần Postgres), đừng chỉ trông chờ vào snapshot của volume.

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