Vấn Đề Khi Giao Phó Ký Ức Cho Big Tech
Một ngày bạn mở Google Photos và phát hiện ra dung lượng lưu trữ miễn phí không giới hạn đã kết thúc từ hai năm trước. Một nửa số ảnh năm 2021 của bạn bị kẹt trong vùng xám — bạn đã vượt hạn mức mà không hay biết. Hoặc có thể bạn vừa nhận được email: “Bộ nhớ của bạn đã đầy 95%. Nâng cấp lên Google One.”
Đây chính xác là điều đã xảy ra với tôi. Nhiều năm ảnh gia đình, ảnh du lịch và đủ loại ảnh chụp màn hình — tất cả nằm trên máy chủ của người khác, sau một bức tường trả phí mà tôi phải liên tục nuôi. Vấn đề thực sự không phải là tiền. Mà là sự phụ thuộc. Khi một dịch vụ thay đổi giá hoặc đóng cửa, ký ức của bạn cũng ra đi theo.
Các dịch vụ lưu ảnh trên cloud được xây dựng để khiến bạn phụ thuộc. Tiện lợi lúc đầu, khóa chặt khi dữ liệu đã vào trong. Dung lượng miễn phí ngày càng thu hẹp, giá ngày càng leo thang, và bạn không có chút quyền kiểm soát nào đối với cách ảnh được lưu trữ, nén hay chia sẻ với nhà quảng cáo.
Nếu bạn đang chạy một HomeLab — một NAS, một chiếc PC cũ, hay thậm chí Raspberry Pi 4 — bạn hoàn toàn có thể tự host giải pháp thay thế Google Photos. Không phí hàng tháng, không nén ảnh, không đánh đổi quyền riêng tư. Giải pháp đó là Immich.
Immich Thực Sự Là Gì
Immich là giải pháp sao lưu ảnh và video mã nguồn mở, tự lưu trữ. Giao diện và cách dùng gần như giống hệt Google Photos — tự động sao lưu từ điện thoại, xem theo dòng thời gian, album, thư viện chia sẻ — nhưng mọi thứ chạy trên phần cứng của chính bạn.
Một số điểm khiến Immich nổi bật so với các công cụ đơn giản hơn như Synology Photos hay PhotoPrism:
- Ứng dụng di động cho iOS và Android với tính năng tự động sao lưu nền
- Tính năng AI: nhận diện khuôn mặt, phát hiện đối tượng, phân loại cảnh vật sử dụng CLIP embeddings
- Dòng thời gian theo EXIF: duyệt ảnh theo ngày, vị trí và model máy ảnh
- Hỗ trợ nhiều người dùng: thư viện riêng cho từng thành viên gia đình với quyền kiểm soát chia sẻ
- Hỗ trợ file RAW và lưu trữ bản gốc không mất dữ liệu — không nén lại
- Chuyển mã video qua tăng tốc phần cứng (Intel QSV, NVIDIA NVENC, VA-API)
Đưa thư viện ảnh ra khỏi cloud thương mại và vào phần cứng bạn kiểm soát là một trong những việc có tác động lớn nhất bạn có thể làm cho một HomeLab ưu tiên quyền riêng tư. Khi Immich đã chạy, tính năng tự động sao lưu từ điện thoại hoạt động trơn tru — y hệt Google Photos, chỉ khác là dữ liệu ở lại nhà bạn. Immich deploy dưới dạng tập hợp các Docker container, giúp việc cập nhật sạch sẽ và rollback đơn giản — bạn có thể quản lý toàn bộ stack trực quan hơn với Portainer nếu muốn.
Những Gì Cần Chuẩn Bị Trước Khi Bắt Đầu
Kiểm tra những điều này trước khi deploy:
- Docker và Docker Compose v2+ đã được cài đặt
- Ít nhất 4 GB RAM — nâng lên 8 GB nếu bạn bật các tính năng AI như nhận diện khuôn mặt
- Đủ dung lượng đĩa: một chiếc điện thoại thông thường tạo ra 5–10 GB ảnh và video mỗi tháng. Gắn ổ đĩa ngoài hoặc NAS share ngay từ đầu
- Tên miền là tùy chọn nhưng đáng có nếu bạn muốn truy cập từ xa qua HTTPS
Deploy Immich với Docker Compose
Bước 1: Tạo thư mục dự án và file môi trường
mkdir -p ~/immich && cd ~/immich
Tải file docker-compose.yml và template .env chính thức trực tiếp từ repository của Immich:
curl -L https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml -o docker-compose.yml
curl -L https://github.com/immich-app/immich/releases/latest/download/example.env -o .env
Bước 2: Cấu hình file .env
Mở .env và thiết lập các biến quan trọng:
# Đường dẫn lưu trữ ảnh trên máy host
UPLOAD_LOCATION=/data/immich/photos
# Đường dẫn cho database
DB_DATA_LOCATION=/data/immich/postgres
# Ghim vào một bản phát hành cụ thể hoặc dùng "release" để lấy bản ổn định mới nhất
IMMICH_VERSION=release
# Múi giờ
TZ=Asia/Tokyo
# Mật khẩu database — dùng chuỗi dài và ngẫu nhiên
DB_PASSWORD=your_strong_password_here
Đảm bảo /data/immich/photos tồn tại với đủ dung lượng. Nếu bạn đang gắn ổ đĩa ngoài, hãy trỏ UPLOAD_LOCATION đến đường dẫn mount của nó.
sudo mkdir -p /data/immich/photos /data/immich/postgres
sudo chown -R $USER:$USER /data/immich
Bước 3: Khởi động stack
docker compose up -d
Docker kéo về và khởi động bốn container:
immich-server— API chính, giao diện web và xử lý job nềnimmich-machine-learning— nhận diện khuôn mặt và CLIP embeddingsredis— hàng đợi jobpostgres— database metadata
Kiểm tra mọi thứ đã khởi động ổn không:
docker compose ps
Giao diện web chạy tại http://your-server-ip:2283. Lần đầu truy cập, hãy tạo tài khoản admin.
Bước 4: Cài đặt ứng dụng di động
Cài Immich app trên điện thoại (cả iOS và Android đều dùng được). Trong quá trình thiết lập:
- Nhập URL server của bạn:
http://your-server-ip:2283 - Đăng nhập bằng tài khoản admin, hoặc tạo tài khoản riêng cho từng thành viên gia đình
- Bật tự động sao lưu trong cài đặt app — ảnh mới sẽ tự upload nền, giống như Google Photos trước đây
Bố Cục Lưu Trữ và Gắn Ổ Đĩa Ngoài
Khi ổ đĩa hệ điều hành nhỏ (tình huống phổ biến trên mini PC và NUC), hãy trỏ Immich đến một ổ đĩa riêng ngay từ đầu. Đây là cách gắn ổ đĩa ngoài và kết nối nó:
# Tìm ổ đĩa
lsblk
# Tạo điểm mount
sudo mkdir -p /mnt/photos
# Thêm vào /etc/fstab để tự động mount khi khởi động (thay UUID bằng UUID ổ đĩa của bạn từ blkid)
echo 'UUID=your-drive-uuid /mnt/photos ext4 defaults 0 2' | sudo tee -a /etc/fstab
sudo mount -a
# Cập nhật UPLOAD_LOCATION trong .env
UPLOAD_LOCATION=/mnt/photos/immich
Sau khi chỉnh sửa .env, khởi động lại stack để áp dụng thay đổi:
docker compose down && docker compose up -d
Bật Tăng Tốc Phần Cứng cho Chuyển Mã Video
Mặc định, Immich chuyển mã video để phát trong trình duyệt bằng CPU — cực kỳ chậm trên các máy tiết kiệm điện. Một iGPU Intel thay đổi điều này đáng kể; chuyển mã VA-API xử lý 1080p theo thời gian thực trên phần cứng khiêm tốn như mini PC N100.
Trong docker-compose.yml, tìm service immich-server và thêm ánh xạ thiết bị:
immich-server:
# ... cấu hình hiện có ...
devices:
- /dev/dri:/dev/dri
Sau đó trong trang admin của Immich tại Administration → Video Transcoding, chuyển tăng tốc phần cứng sang VA-API. GPU NVIDIA làm theo cách tương tự nhưng yêu cầu cài NVIDIA container runtime trên máy host trước.
Cập Nhật Immich
Immich phát hành cập nhật thường xuyên — đôi khi hàng tuần. Việc cập nhật chỉ cần ba lệnh và ảnh của bạn không bị ảnh hưởng:
cd ~/immich
docker compose pull
docker compose up -d
Docker thay thế image mới, khởi động lại các container và tự động chạy database migration. Nếu bạn muốn tự động hóa bước này thay vì cập nhật thủ công, Watchtower có thể theo dõi và kéo image mới cho bạn trong nền.
Truy Cập Immich An Toàn từ Bên Ngoài Mạng
Hai lựa chọn gọn gàng để truy cập từ xa:
- Tailscale — cài trên cả điện thoại và server. Truy cập Immich qua đường hầm WireGuard riêng tư, không cần chuyển tiếp cổng, không phơi ra công khai
- Reverse proxy với HTTPS — dùng Caddy hoặc Nginx Proxy Manager để đặt Immich sau một tên miền thực với chứng chỉ Let’s Encrypt
Caddy khiến HTTPS trở nên cực kỳ đơn giản. Thêm đoạn này vào Caddyfile của bạn:
photos.yourdomain.com {
reverse_proxy localhost:2283
}
Caddy tự xử lý việc cấp phát chứng chỉ. Trỏ DNS A record đến IP public của server, mở cổng 443, và xong — HTTPS hợp lệ với tự động gia hạn.
Chuyển Dữ Liệu từ Google Photos
Chuyển thư viện hiện có của bạn sang Immich khá đơn giản. Bắt đầu bằng xuất dữ liệu từ Google Takeout:
- Truy cập takeout.google.com và yêu cầu xuất ảnh — với hầu hết thư viện sẽ là file nén nhiều GB
- Giải nén trên máy local — Google tổ chức file theo album hoặc năm
- Dùng Immich CLI để import hàng loạt:
# Cài Immich CLI
npm install -g @immich/cli
# Trước tiên, tạo API key: Giao diện web Immich → Account Settings → API Keys → New API Key
# Đăng nhập bằng API key
immich login http://your-server-ip:2283 --api-key YOUR_API_KEY_HERE
# Upload toàn bộ thư mục export theo cấu trúc đệ quy
immich upload --recursive /path/to/google-photos-export
CLI giữ nguyên ngày EXIF khi import. Ảnh của bạn được sắp xếp vào đúng vị trí trên dòng thời gian — ảnh kỳ nghỉ năm 2019 nằm ở năm 2019, không phải ngày hôm nay.
Vận Hành Ổn Định Theo Thời Gian
Ba thói quen giúp bạn tránh đau đầu về sau:
- Theo dõi dung lượng đĩa: ảnh tích lũy âm thầm. Một cron job đơn giản hay cảnh báo Grafana khi mount đạt 80% dung lượng tốt hơn nhiều so với phát hiện đĩa đầy lúc 2 giờ sáng
- Sao lưu database PostgreSQL: bản thân các file ảnh chỉ là file thông thường, nhưng metadata của Immich — album, nhãn khuôn mặt, tên người — nằm trong Postgres. Sao lưu định kỳ:
docker exec immich_postgres pg_dumpall -U postgres > immich_backup_$(date +%F).sql
- Giữ nguyên Google Photos cho đến khi xác minh import xong: kiểm tra ngẫu nhiên vài chục ảnh qua các năm khác nhau trước khi xóa bất cứ thứ gì trên cloud
Kết Quả Bạn Có Được
Đến đây, HomeLab của bạn xử lý toàn bộ quy trình sao lưu ảnh. Mọi điện thoại trong nhà đều tự động upload. Tìm kiếm hoạt động theo khuôn mặt, đối tượng, vị trí và ngày tháng. Album có thể chia sẻ. Video phát được trong trình duyệt.
Tất cả chạy trên phần cứng bạn sở hữu. Không đăng ký thuê bao. Không bên thứ ba nào nắm giữ 10 năm ảnh gia đình của bạn. Google Photos hay iCloud trở thành lựa chọn thay vì bắt buộc — và đó chính là mục đích cốt lõi khi xây dựng hạ tầng của riêng mình.

