Tự Dựng Private Google Photos Alternative: Hướng Dẫn Host Immich Trên VPS Kết Hợp Cloudflare R2 Storage
Giới Thiệu Xu Hướng Tự Host Kho Ảnh Cá Nhân
Trong kỷ nguyên số, dữ liệu hình ảnh và video cá nhân ngày càng lớn, khiến các dịch vụ lưu trữ đám mây quen thuộc như Google Photos hay iCloud liên tục tăng giá hoặc thắt chặt dung lượng miễn phí. Đối với các doanh nghiệp nhỏ hoặc người dùng có kiến thức kỹ thuật, việc tìm kiếm một giải pháp thay thế Google Photos (Google Photos Alternative) có tính bảo mật cao, toàn quyền kiểm soát dữ liệu và chi phí tối ưu là bài toán cấp thiết.
Immich nổi lên như một ứng dụng mã nguồn mở xuất sắc nhất hiện nay, sở hữu giao diện mượt mà và các tính năng AI nhận diện khuôn mặt, tìm kiếm thông minh không thua kém gì Google Photos. Tuy nhiên, nếu lưu trữ trực tiếp trên ổ cứng (SSD/NVMe) của VPS, chi phí sẽ rất đắt đỏ khi thư viện ảnh lên tới hàng trăm GB hoặc TB. Giải pháp tối ưu chính là kết hợp một cấu hình VPS vừa phải để chạy phần mềm và đẩy toàn bộ dữ liệu lưu trữ gốc sang Cloudflare R2 Storage – dịch vụ lưu trữ đối tượng (Object Storage) tương thích S3 với ưu điểm vượt trội: không tính phí băng thông tải về (Zero Egress Fees).
---Tại Sao Nên Chọn Bộ Ba: Immich, VPS Và Cloudflare R2?
Mô hình kiến trúc này phân tách rõ ràng giữa phần xử lý tính toán (Compute) và phần lưu trữ (Storage), mang lại nhiều lợi ích kinh tế lẫn kỹ thuật:
- Immich: Trải nghiệm người dùng tuyệt vời, có ứng dụng native trên iOS và Android, hỗ trợ backup tự động dưới nền, nhận diện khuôn mặt và phân loại vật thể bằng AI cục bộ.
- VPS (Virtual Private Server): Đóng vai trò làm cổng xử lý (Backend Engine). Bạn chỉ cần một VPS có cấu hình CPU/RAM tầm trung và dung lượng ổ cứng thấp để chạy hệ điều hành, cơ sở dữ liệu và lưu cache, giúp tiết kiệm tối đa chi phí hàng tháng.
- Cloudflare R2: Kho lưu trữ đám mây không giới hạn dung lượng với chi phí cực rẻ (khoảng $0.015/GB/tháng và miễn phí 10GB đầu tiên). Đặc biệt, R2 không thu phí egress, loại bỏ hoàn toàn nỗi lo "sập tiệm" vì hóa đơn băng thông khi bạn duyệt lại các video 4K cũ.
---Lưu ý quan trọng: Để kết nối Immich với Cloudflare R2, chúng ta sẽ sử dụng công cụ Rclone để mount bucket R2 thành một thư mục local trên VPS. Immich sẽ ghi dữ liệu vào thư mục này, và Rclone sẽ tự động đồng bộ hóa lên đám mây Cloudflare dưới dạng các object.
Chuẩn Bị Tài Nguyên Trước Khi Cài Đặt
Để quá trình triển khai diễn ra suôn sẻ, bạn cần chuẩn bị sẵn các tài nguyên sau:
- Một VPS chạy hệ điều hành Ubuntu 22.04 LTS hoặc Ubuntu 24.04 LTS. Cấu hình khuyến nghị tối thiểu là 2 vCPU và 4GB RAM (để chạy mượt mà các tiến trình AI của Immich).
- Một tài khoản Cloudflare đã kích hoạt dịch vụ R2 Storage (yêu cầu liên kết thẻ thanh toán quốc tế nhưng sẽ không bị trừ tiền nếu dùng trong hạn mức miễn phí).
- Một tên miền (Domain) đã trỏ về Cloudflare để thiết lập reverse proxy mã hóa SSL (HTTPS) bảo mật cho Immich.
- Cài đặt sẵn Docker và Docker Compose trên VPS.
Hướng Dẫn Chi Tiết Các Bước Triển Khai
Bước 1: Cấu hình Cloudflare R2 Storage
Đầu tiên, bạn truy cập vào Dashboard của Cloudflare, chọn mục R2 và tiến hành tạo một Bucket mới đặt tên là immich-media-storage. Chọn khu vực (Location) gần với vị trí địa lý của VPS nhất để tối ưu độ trễ (Latency).
Tiếp theo, vào phần Manage R2 API Tokens để tạo một token mới có quyền Edit (đọc và ghi). Lưu lại các thông tin quan trọng sau:
- Access Key ID
- Secret Access Key
- Endpoint URL (Có cấu trúc dạng:
https://).r2.cloudflarestorage.com
Bước 2: Cài đặt và cấu hình Rclone trên VPS
Đăng nhập vào VPS qua SSH bằng quyền root và cài đặt Rclone phiên bản mới nhất bằng lệnh:
sudo remote-script-install
sudo apt-get install fuse3 -y
Sau khi cài đặt xong, chạy lệnh rclone config để tạo một kết nối mới với Cloudflare R2. Hoặc bạn có thể tạo trực tiếp file cấu hình nhanh bằng cách mở file: nano ~/.config/rclone/rclone.conf và dán nội dung sau vào:
[cloudflare-r2]
type = s3
provider = Cloudflare
access_key_id = YOUR_ACCESS_KEY_ID
secret_access_key = YOUR_SECRET_ACCESS_KEY
endpoint = https://YOUR_ACCOUNT_ID.r2.cloudflarestorage.com
acl = private
Tạo một thư mục trên VPS để mount dữ liệu, ví dụ: sudo mkdir -p /mnt/immich-r2. Tiến hành mount bằng lệnh nền để hệ thống tự duy trì:
rclone mount cloudflare-r2:immich-media-storage /mnt/immich-r2 \
--allow-other \
--vfs-cache-mode writes \
--dir-cache-time 24h \
--vfs-cache-max-age 48h \
&
Mẹo: Bạn nên thiết lập lệnh này thành một systemd service để thư mục tự động mount lại mỗi khi VPS khởi động lại.
Bước 3: Triển khai Immich bằng Docker Compose
Tạo một thư mục làm việc riêng cho Immich: mkdir ~/immich-app && cd ~/immich-app. Tải file cấu hình mẫu chính thức của Immich về máy:
wget [https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml](https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml)
wget [https://github.com/immich-app/immich/releases/latest/download/example.env](https://github.com/immich-app/immich/releases/latest/download/example.env) -O .env
Mở file .env lên và chỉnh sửa biến môi trường quan trọng nhất quyết định nơi lưu trữ ảnh: UPLOAD_LOCATION. Hãy trỏ biến này về thư mục Rclone vừa mount:
# Vị trí lưu trữ dữ liệu gốc của Immich
UPLOAD_LOCATION=/mnt/immich-r2
# Các cấu hình cơ sở dữ liệu
DB_PASSWORD=Thay_Doi_Mat_Khau_Cua_Ban_O_Day
Khuyến nghị bảo mật và hiệu năng: Cơ sở dữ liệu PostgreSQL của Immich (chứa thông tin tài khoản, metadata, vector nhận diện khuôn mặt) bắt buộc phải nằm trên ổ cứng local của VPS để đảm bảo tốc độ truy vấn IOPS cao. Tuyệt đối không di chuyển thư mục DB lên Cloudflare R2 thông qua Rclone, vì việc này sẽ gây treo ứng dụng do độ trễ mạng cao.
Khởi chạy hệ thống Immich bằng lệnh:
docker compose up -d
---
Tối Ưu Hóa Hiệu Năng Và Những Lưu Ý Quan Trọng
Khi chạy Immich theo mô hình hybrid kết hợp Cloudflare R2, có một số điểm kỹ thuật bạn cần lưu ý để hệ thống vận hành mượt mà:
- Cấu hình Cache của Rclone: Việc bật tham số
--vfs-cache-mode writesgiúp Immich ghi file cục bộ vào ổ cứng VPS trước, sau đó Rclone sẽ tải ngầm lên Cloudflare R2, tránh việc ứng dụng di động bị treo do chờ upload mạng trực tiếp. - Xử lý tác vụ AI (Machine Learning): Quá trình quét khuôn mặt và tạo các vector tìm kiếm ảnh ban đầu sẽ tiêu tốn rất nhiều CPU. Nếu VPS của bạn bị quá tải (CPU nhảy lên 100%), bạn có thể vào giao diện Quản trị (Administration) của Immich trên trình duyệt để giới hạn số lượng luồng (Job threads) xử lý cùng lúc.
- Chi phí Class A và Class B Operations: Cloudflare R2 miễn phí hoàn toàn băng thông, nhưng họ vẫn tính phí dựa trên số lượng request gọi API (Class A cho việc ghi/tạo, Class B cho việc đọc). Việc cuộn timeline ảnh quá nhanh hoặc quét lại thư viện liên tục sẽ sinh ra nhiều request. Tuy nhiên, hạn mức miễn phí hàng tháng của Cloudflare rất lớn (1 triệu Class A và 10 triệu Class B), hoàn toàn đủ cho nhu cầu gia đình từ 3-5 người dùng.
Kết Luận
Việc tự xây dựng một hệ thống Private Google Photos Alternative bằng cách kết hợp Immich, VPS và Cloudflare R2 mang lại sự cân bằng hoàn hảo giữa tính kinh tế, hiệu năng và sự riêng tư tuyệt đối. Bạn không còn phải lo lắng về việc dữ liệu bị các tập đoàn lớn quét quét duyệt cho mục đích quảng cáo, đồng thời có thể dễ dàng mở rộng dung lượng lên tới hàng Terabyte với mức chi phí rẻ chỉ bằng một phần nhỏ so với các gói cước đám mây truyền thống.
