So sánh PhotoPrism và Immich: Chọn server ảnh nào?
So sánh chi tiết PhotoPrism và Immich cho nhu cầu self-hosted. Phân tích mức tiêu thụ RAM, tính năng app di động, bản đồ và lệnh backup Docker cần thiết khi chạy trên VPS.
PhotoPrism và Immich: câu trả lời ngắn gọn
Lựa chọn giữa PhotoPrism và Immich là lựa chọn giữa hai công việc khác nhau, không phải hai phiên bản của cùng một sản phẩm. Immich thay thế Google Photos: một ứng dụng điện thoại tự động sao lưu cuộn camera của bạn, và dòng thời gian bạn nhận được trông rất quen thuộc với bất kỳ ai muốn rời bỏ thư viện ảnh trên điện thoại. PhotoPrism tổ chức một thư viện ảnh mà bạn đã có sẵn: nó lập chỉ mục các thư mục tệp trên ổ đĩa, đọc metadata của chúng, đặt chúng lên bản đồ và giữ nguyên các tệp tại vị trí cũ.
Chọn Immich nếu vấn đề là "điện thoại của tôi đã đầy và tôi muốn rời bỏ Google Photos". Chọn PhotoPrism nếu vấn đề là "tôi có 400 GB ảnh trên ổ đĩa và tôi không thể tìm thấy bất cứ thứ gì trong đó". Cả hai đều là mã nguồn mở, cả hai đều chạy dưới dạng Docker container trên một VPS thông thường, và cả hai đều lập chỉ mục cũng như tìm kiếm thư viện của bạn mà không gửi bất kỳ dữ liệu nào cho bên thứ ba.
Sự khác biệt về triết lý và lý do nó quyết định mọi thứ
Immich sở hữu các tệp tin. Bạn trỏ nó đến một vị trí tải lên, ứng dụng điện thoại hoặc trình tải lên web sẽ gửi các tệp gốc vào, và Immich lưu trữ chúng theo đường dẫn riêng với cách đặt tên riêng. Cơ sở dữ liệu nắm giữ thông tin xác thực về các album, khuôn mặt và tìm kiếm. Thiết kế đó là thứ tạo nên trải nghiệm tốt trên điện thoại, vì máy chủ luôn biết trạng thái đầy đủ của mọi tài sản.
PhotoPrism đọc các tệp tin. Bạn mount một thư mục originals mà bạn đã kiểm soát, và PhotoPrism xây dựng một chỉ mục trên đó. Cấu trúc thư mục của bạn vẫn là của bạn. Nếu bạn gỡ bỏ PhotoPrism vào ngày mai, các bức ảnh vẫn nằm đó trong cùng các thư mục với cùng tên gọi, và PhotoPrism sẽ ghi các tệp YAML sidecar bên cạnh chúng để mô tả những gì nó đã học được.
Sự khác biệt duy nhất đó giải thích hầu hết các phần còn lại. Immich có hỗ trợ di động mạnh mẽ vì nó kiểm soát quá trình tiếp nhận dữ liệu. PhotoPrism có khả năng quản lý thư viện mạnh mẽ vì nó không bao giờ xung đột với cấu trúc hiện có của bạn. Immich là câu trả lời tốt hơn cho một gia đình có ảnh lưu trên điện thoại. PhotoPrism là câu trả lời tốt hơn cho một kho lưu trữ nằm trên ổ đĩa.
Nhu cầu phần cứng: Immich đòi hỏi nhiều hơn
Các mức bộ nhớ tối thiểu được ghi trong tài liệu có sự chênh lệch lớn, và trên một VPS nhỏ, đây thường là yếu tố quyết định.
The data behind this chart
[
{
"label": "Immich",
"min_ram_gb": 6,
"recommended_ram_gb": 8
},
{
"label": "PhotoPrism",
"min_ram_gb": 3,
"recommended_ram_gb": 4
}
]Immich ghi trong tài liệu là cần 6 GB RAM làm mức tối thiểu và 8 GB làm mức khuyến nghị, kèm theo lưu ý rằng máy 4 GB chỉ có thể chạy được nếu tắt tính năng học máy (machine learning). PhotoPrism ghi trong tài liệu là cần 3 GB bộ nhớ vật lý và hai nhân CPU, đồng thời cho biết dung lượng RAM nên tương ứng với số nhân CPU.
Khoảng cách này là có thật, và nó xuất phát từ container học máy. Immich chạy các mô hình của nó trong một dịch vụ immich-machine-learning riêng biệt, dịch vụ này tải các mô hình CLIP (contrastive language image pretraining) và nhận diện khuôn mặt vào bộ nhớ. Trên một máy 2 GB, kernel sẽ giết container đó, và bạn sẽ thấy nó thoát với mã 137, đây là cách Docker báo hiệu một tiến trình bị giết do thiếu bộ nhớ (out of memory). Các mô hình TensorFlow của PhotoPrism nhỏ hơn và nó sẽ tự giảm hiệu năng thay vì bị chết: trên các máy có 1 GB RAM hoặc ít hơn, nó sẽ vô hiệu hóa tính năng chuyển đổi RAW và TensorFlow thay vì bị crash.
Cả hai dự án đều yêu cầu swap. Tài liệu của PhotoPrism nêu rõ việc cần ít nhất 4 GB swap trên server. Hãy thêm swap trước khi bạn cài đặt một trong hai ứng dụng này.
sudo fallocate -l 4G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
free -hfree -h bây giờ sẽ in ra một dòng Swap: hiển thị 4.0Gi. Nếu nó in ra 0B, thì swapon đã thất bại, thường là do hệ thống tập tin không hỗ trợ fallocate, và sudo dd if=/dev/zero of=/swapfile bs=1M count=4096 là phương án dự phòng. Các giới hạn bộ nhớ của container cũng quan trọng ở đây, và thiết lập giới hạn bộ nhớ trong Docker Compose là cách bạn ngăn một dịch vụ ngốn RAM làm sập toàn bộ máy chủ.
Còn một yêu cầu nữa thường gây khó khăn cho người dùng. Cơ sở dữ liệu Postgres của Immich phải nằm trên một hệ thống tập tin Unix thông thường với quyền sở hữu và quyền truy cập thực tế, trên lưu trữ cục bộ, tuyệt đối không được nằm trên ổ đĩa mạng (network share). PhotoPrism cũng đưa ra yêu cầu tương tự đối với các tập tin cơ sở dữ liệu của nó. Cả hai ứng dụng đều không an toàn khi chạy với cơ sở dữ liệu đặt trên một object store được mount vào.
Cách cài đặt từng ứng dụng
Cả hai bản cài đặt đều bao gồm một file compose của nhà phát triển và một câu lệnh. Hãy thiết lập Docker Engine và plugin Compose trước, như đã hướng dẫn trong hướng dẫn của chúng tôi về Docker Compose trên VPS.
Immich phát hành file compose và một file môi trường mẫu kèm theo mỗi bản release.
sudo mkdir -p /opt/immich && cd /opt/immich
wget -O docker-compose.yml https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml
wget -O .env https://github.com/immich-app/immich/releases/latest/download/example.envChỉnh sửa .env trước khi bắt đầu bất cứ việc gì. UPLOAD_LOCATION là nơi lưu trữ các file gốc của bạn, và DB_PASSWORD phải được thay đổi so với giá trị mặc định, chỉ sử dụng các ký tự A-Za-z0-9, vì các ký tự đặc biệt sẽ làm hỏng chuỗi kết nối. Sau đó, khởi chạy ứng dụng.
docker compose up -d
docker compose psGiao diện web phản hồi trên cổng 2283. Tài khoản đầu tiên được đăng ký thông qua trang đó sẽ trở thành quản trị viên, vì vậy hãy truy cập và đăng ký ngay lập tức thay vì để một instance mở trên internet.
PhotoPrism cung cấp một file compose đã bao gồm sẵn MariaDB.
sudo mkdir -p /opt/photoprism && cd /opt/photoprism
wget https://dl.photoprism.app/docker/compose.yamlMở compose.yaml và thay đổi PHOTOPRISM_ADMIN_PASSWORD trước lần khởi chạy đầu tiên. Tài liệu hướng dẫn nêu rõ: ứng dụng sẽ khởi chạy với bất kỳ mật khẩu ban đầu nào có trong file đó, độ dài tối thiểu là 8 ký tự, và giá trị mặc định không bao giờ được phép sử dụng trên một server công khai. Đồng thời, hãy thiết lập volume originals trỏ đến thư mục chứa ảnh của bạn.
docker compose up -d
docker compose logs -f photoprismPhotoPrism phản hồi trên cổng 2342 với người dùng admin. Không nên để lộ trực tiếp cả hai ứng dụng này ra ngoài. Hãy đặt một reverse proxy có hỗ trợ TLS (transport layer security) phía trước, tương tự như mô hình thiết lập được sử dụng cho Nextcloud tự lưu trữ với Docker, TLS và sao lưu.
Ứng dụng điện thoại nào tốt hơn
Đây là điểm khác biệt lớn nhất giữa hai dự án, và cũng là lý do khiến hầu hết người dùng chọn Immich.
Immich phát hành các ứng dụng chính thức cho Android và iOS. Chúng thực hiện sao lưu cuộn camera trong nền, nghĩa là ảnh mới sẽ tự động rời khỏi điện thoại mà không cần ai phải mở ứng dụng. Ứng dụng yêu cầu một endpoint HTTPS, vì vậy reverse proxy là bắt buộc nếu bạn định sử dụng nó khi không ở nhà.
PhotoPrism không có ứng dụng native chính thức. Nó cung cấp một progressive web app, bạn có thể thêm vào màn hình chính từ trình duyệt, và dự án hướng dẫn sử dụng WebDAV (web distributed authoring and versioning) làm phương thức đồng bộ từ điện thoại. Dự án khuyến nghị sử dụng ứng dụng bên thứ ba có tên là PhotoSync cho việc này, trỏ đến thư mục /import/ hoặc /originals/ thông qua WebDAV. Cách này hoạt động được, nhưng đây là một ứng dụng trả phí của bên thứ ba thực hiện công việc mà Immich đã tích hợp sẵn trong client của chính nó.
Nếu yêu cầu là sao lưu điện thoại tự động cho nhiều thành viên trong gia đình, thì quyết định đã rõ ràng. Đó là Immich.
Machine learning thực sự mang lại cho bạn những gì
Immich thực hiện tìm kiếm ngữ nghĩa trên thư viện của bạn bằng cách sử dụng CLIP, vì vậy một truy vấn như "xe đạp đỏ trong tuyết" sẽ tìm thấy những bức ảnh mà chưa ai từng gắn thẻ. Nó cũng thực hiện phát hiện và phân nhóm khuôn mặt, cùng với phát hiện ảnh trùng lặp. Việc lập chỉ mục một lượng dữ liệu nhập lớn trên CPU sẽ chạy trong nhiều giờ ở chế độ nền, đây là điều bình thường và không cần đến GPU (đơn vị xử lý đồ họa).
PhotoPrism phân loại hình ảnh bằng TensorFlow thành các nhãn, phát hiện khuôn mặt và nhóm chúng thành từng người, đồng thời đọc siêu dữ liệu vị trí để xây dựng bản đồ địa điểm. Bản đồ là tính năng khiến người dùng ở lại: một thư viện được lập chỉ mục theo nơi sự kiện diễn ra là một cách duyệt qua hai mươi năm ảnh hoàn toàn khác biệt. Nhận dạng khuôn mặt được bao gồm trong phiên bản Community miễn phí. Các gói thành viên Essentials và Plus trả phí bổ sung thêm các tính năng như lớp bản đồ phong phú hơn, nhiều vai trò người dùng hơn và giao diện quản lý người dùng, với giá khởi điểm vài euro mỗi tháng tính đến tháng 7 năm 2026.
Immich hoàn toàn miễn phí và không có gói trả phí. Phần cốt lõi của PhotoPrism là miễn phí, với các tính năng bổ sung trả phí tùy chọn.
Sao lưu quyết định việc bạn có giữ được dữ liệu hay không
Một máy chủ ảnh không có sao lưu chỉ cách việc mất sạch dữ liệu gia đình một lần hỏng ổ cứng. Cả hai ứng dụng đều cần hai bản sao lưu: cơ sở dữ liệu và các tệp tin.
Đối với Immich, hãy dump cơ sở dữ liệu từ container Postgres và sao chép vị trí lưu trữ tệp tải lên.
docker exec -t immich_postgres pg_dump --clean --if-exists --dbname=immich --username=postgres | gzip > /backup/immich-db.sql.gzSau đó sao lưu UPLOAD_LOCATION. Các thư mục chứa dữ liệu không thể thay thế là upload, library và profile. Các thư mục thumbs và encoded-video có thể được tạo lại, nhưng sẽ tốn hàng giờ CPU. Một bản dump cơ sở dữ liệu đơn thuần không khôi phục được gì cả, vì nó chỉ chứa metadata.
Đối với PhotoPrism, chỉ mục (index) có lệnh riêng của nó.
docker compose exec photoprism photoprism backup -i -fLệnh đó ghi một bản dump SQL vào storage/backup/. Sau đó, hãy sao chép thư mục originals và thư mục storage. Vì PhotoPrism cũng ghi các tệp YAML sidecar mô tả từng bức ảnh, nên một chỉ mục bị mất có thể được xây dựng lại từ chính các tệp tin, đây là một lợi thế thực sự cho một kho lưu trữ mà bạn dự định giữ trong nhiều thập kỷ.
Dù bạn chọn ứng dụng nào, hãy chuyển các bản sao lưu đó ra khỏi máy chủ theo lịch trình với các bản sao lưu restic đã mã hóa, khử trùng lặp tới bộ lưu trữ từ xa. Một bản sao lưu nằm trên cùng ổ cứng với thư viện ảnh không được coi là bản sao lưu.
Bạn nên chạy phần mềm nào
Hãy chạy Immich nếu ảnh của bạn nằm trên điện thoại, nếu có nhiều hơn một người cần sao lưu thư viện ảnh và nếu bạn có thể cấp cho server từ 6 GB RAM trở lên. Đây là giải pháp gần giống với Google Photos nhất mà bạn có thể tự host, và trải nghiệm trên thiết bị di động chính là điểm mạnh của nó. Hướng dẫn cài đặt Immich từng bước của chúng tôi đề cập chi tiết về các lỗi thiếu bộ nhớ và những cạm bẫy khi nâng cấp.
Hãy chạy PhotoPrism nếu bạn đã có sẵn kho lưu trữ ảnh trên ổ cứng, nếu bạn quan tâm đến bản đồ, metadata và muốn giữ cấu trúc thư mục của riêng mình, hoặc nếu VPS của bạn chỉ có 4 GB RAM và bạn muốn một thư viện hoạt động ổn định thay vì bị tràn bộ nhớ (swapping). Đây là công cụ quản lý ảnh tốt hơn và nhẹ nhàng hơn với phần cứng cấu hình thấp.
Chạy cả hai cũng là một lựa chọn hợp lý. Immich xử lý việc nhập ảnh hàng ngày từ điện thoại, và mỗi năm một lần, bạn lọc những ảnh cần giữ lại vào kho lưu trữ của mình rồi để PhotoPrism index thư mục đó. Chúng không xung đột với nhau vì PhotoPrism đọc các thư mục, trong khi Immich quản lý dữ liệu của riêng nó.
FAQ
PhotoPrism và Immich có thể dùng chung thư mục ảnh không?
Không an toàn nếu cả hai cùng ghi dữ liệu. PhotoPrism đọc thư mục originals và ghi các tệp YAML sidecar bên cạnh ảnh của bạn, trong khi Immich yêu cầu quyền kiểm soát nội dung tại vị trí tải lên của nó. Bạn có thể trỏ PhotoPrism vào một bản sao chỉ đọc của thư mục library trên Immich để duyệt ảnh, nhưng đừng để cả hai ứng dụng cùng quản lý các tệp đó. Lý do là template lưu trữ của Immich có thể di chuyển hoặc đổi tên tài nguyên trong khi PhotoPrism đang lập chỉ mục.
Immich có đủ ổn định để lưu trữ bản sao duy nhất cho ảnh của tôi không?
Không ứng dụng tự lưu trữ (self-hosted) nào nên là nơi duy nhất chứa dữ liệu của bạn. Immich thường xuyên phát hành các thay đổi gây lỗi (breaking changes), và một thao tác docker compose pull bất cẩn có thể khiến cơ sở dữ liệu không thể khởi động. Hãy ghim phiên bản (pin version) và đọc ghi chú phát hành trước khi nâng cấp. Hãy sao lưu các tệp gốc ra ngoài máy chủ để giảm thiểu rủi ro.
Tại sao container học máy (machine learning) của Immich liên tục khởi động lại?
Nó bị hệ thống ngắt do sử dụng quá nhiều bộ nhớ. Hãy chạy docker compose ps và tìm xem dịch vụ học máy có thoát với mã 137 hay không, đây là dấu hiệu của trình quản lý bộ nhớ (OOM killer) trong kernel. Hãy thêm swap, hoặc giới hạn bộ nhớ cho container để nó bị bóp băng thông thay vì bị ngắt, hoặc vô hiệu hóa hoàn toàn tính năng học máy nếu bạn dùng máy 4 GB RAM. Tính năng tìm kiếm sẽ không hoạt động nếu thiếu nó, nhưng các phần còn lại của Immich vẫn chạy bình thường.
PhotoPrism có cần MariaDB không, hay dùng SQLite là đủ?
SQLite hoạt động tốt cho thư viện cá nhân, nhưng PhotoPrism giới hạn ở mức bốn worker khi dùng SQLite. Tài liệu khuyến nghị chuyển sang MariaDB vì nó xử lý đồng thời tốt hơn. Tệp compose mà dự án cung cấp đã bao gồm sẵn MariaDB, vì vậy đây cũng là lựa chọn mặc định được khuyến nghị.
Tôi nên dự trù bao nhiêu dung lượng đĩa ngoài kích thước thư viện ảnh?
Hãy cộng thêm 10 đến 20 phần trăm so với kích thước tệp gốc cho cả hai ứng dụng. Dung lượng này dùng cho các tệp thumbnail và bản xem trước video đã chuyển mã. Với bộ sưu tập 200 GB, bạn nên chuẩn bị khoảng 300 GB dung lượng ổ đĩa để chừa chỗ cho cơ sở dữ liệu, bản sao lưu cục bộ và không gian phát triển trong tương lai.