Cài đặt Immich - High performance self-hosted photo and video backup solution

Mình sẽ cài 1 server chạy Immich, mục đích là để backup, đồng bộ các ảnh, video trên điện thoại, dễ hình dung thì Immich tính năng rất tương tự Google Photo

Trên VPS thường dung lượng 25-50 GB, hơi thiếu cho ảnh và video, mình dùng máy bàn làm server để có nhiều dung lượng hơn =))

Cài đặt server

Immich mình đọc thấy dùng RAM cũng khá nhiều, đâu đó cũng khoảng 2-4GB, bạn có thể set thêm 1 chút RAM trên server tại nhà, trong trường hợp lưu trữ ít < 200GB, dùng VPS miễn phí 24GB RAM của Oracle cũng ổn

Cài đặt docker và docker-compose

  • Nếu bạn đã cài thì bỏ qua bước này
# update OS
sudo apt update && sudo apt upgrade -y

# set locale
locale-gen en_US.UTF-8
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8

# Tắt Firewall
sudo apt remove iptables-persistent -y
sudo ufw disable
sudo iptables -F

# Chỉnh về múi giờ Việt Nam
timedatectl set-timezone Asia/Ho_Chi_Minh

# Enable TCP BBR congestion control
cat <<EOF > /etc/sysctl.conf
net.core.default_qdisc=fq
net.ipv4.tcp_congestion_control=bbr
EOF

# Cài đặt docker và docker-compose
curl -sSL https://get.docker.com | sh
sudo usermod -aG docker $(whoami)
sudo systemctl start docker
sudo systemctl enable docker
apt install docker-compose -y

Cài đặt Immich

  • Tạo thư mục lưu trữ và tạo file cấu hình
mkdir ./immich-app
cd ./immich-app
wget 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.env

Bên trong file .env, có thể đổi lại password khác đi cho an toàn 1 chút cũng được

  • Khởi chạy
docker compose up -d

Tạo link quản trị

Đơn giản nhất thì dùng Cloudflare Tunnels làm reverse proxy thay thế cho dãy localhost:2283

  • Cloudflare Zero Trust ->Access -> Tunnel -> Create a tunnel -> đặt 1 tên cho dễ nhớ (Server Images Localhost) -> Install and run a connector

  • Sau đó tạo Public hostnames photo.bibica.net tới localhost:2283

Lúc này bạn có thể truy cập tới https://photo.bibica.net/ để tạo tài khoản quản trị

Nhìn giao diện khá giật mình, vì y chang Google Photo luôn 😀

Mobile App

Immich hỗ trợ iOS và Android theo mình là đủ, để chắc cú tác giả hỗ trợ cả file apk

  • Login vào theo đường dẫn https://photo.bibica.net/api (thêm api so với login trên web), còn lại việc login như nhau

Việc set quyền truy cập ảnh, cấu hình chạy ngầm … thì cũng rất giống Google Photo

Do mình dùng trên iOS, vướng các vấn đề liên quan tới chạy ngầm, nên để đồng bộ được, bắt buộc phải để Immich chạy trực tiếp, bạn nào dùng Android chắc khoản đồng bộ tự động ngon hơn

Hiệu năng

Immich bào phần cứng khiếp thật, con CPU máy bàn mình đang dùng là 10900k, cũng dạng khá khỏe, mà khi đồng bộ, thấy nó ăn ~CPU 50% luôn, RAM khi hoạt động dùng ~3GB

Thử nghiệm trên Oracle A1 Flex 4 CPU 24 GB RAM, lúc đồng bộ CPU gần như 100% load 😀 đây là cấu hình phần cứng cực mạnh để chạy WordPress, mà đụng tới vấn đề video, encode này nọ thì không xi nhê

CPU 100% load cả ngày thế này dễ Oracle xóa tài khoản của mình mất 😀

Trong lúc upload từ điện thoại, vào giao diện web nhìn thì đúng là socks, chỉ 1 cái ứng dụng người dùng cuối viết, mà tác giả dùng các công nghệ tương tự Google, detect ra mặt người các kiểu như thật 😀 hỏi sao lúc chạy nó ăn phần cứng khiếp thế 😛 kiểm nghiệm sơ bộ thì vài tình huống mình thấy detect ra chính xác, 1 vài tình huống thì nhầm người A sang B (nếu quá giống nhau, vụ này thì thực tế Google Photo cũng nhầm, nên không có gì bàn nhiều)

Khá hài là Immich detect ra mẹ, em gái, chị gái của mẹ mình là …. 1 người =)) không lẽ sau này có thể dùng Immich để check họ hàng 😀

Sau khi upload được khoảng 90% số ảnh và video đang có lên Immich, so sánh thử với Google Photo, detect theo gương mặt của Immich khá ngon, ở điều kiện các ảnh hiện ra mặt đầy đủ, bắt chính xác 😀 còn chỉ bắt 1/2, 1/3 gương mặt thì kém Google Drive khá xa

Khoản này thì cũng rất dễ hiểu, vì phần cứng Google đang dùng, chắc mạnh hơn tỷ lần so với cấu hình mình đang dùng 😀

Tác giả cũng bổ xung cấu hình dùng phần cứng để xử lý, mà mình thấy lằng nhằng quá, nên ở bước cài đặt bỏ qua, chắc cũng chẳng ai đọc bài này quan tâm đâu 😛

  • Ảnh đồng bộ được đầy đủ thông tin, map miếc đầy đủ

Vấn đề dung lượng, Immich dùng cũng khá nhiều, vì khi tạo thumbnail …. nó cũng phải lưu xuống dĩa, sau cache đủ kiểu lên RAM

-> Immich sử dụng CPU, RAM, HDD cực kì nhiều

Nói chung sau khi cài đặt, thứ mình có thể phàn nàn, nó lại là vấn đề liên quan tới iOS, còn lại mình không dám chê cái gì luôn, ứng dụng do cộng đồng viết mà tính năng ngang ngửa Google Photo thì khét thật

Tùy chỉnh cá nhân

Tùy chỉnh lại docker-compose.yml một chút để lưu các dữ liệu vào bên trong thư mục gốc /root/immich-app, sau này có chuyển VPS sang nơi khác thì chuyển thư mục này đi là được, cũng tiện cho việc backup docker hàng ngày lên OneDriver hoặc Google Drive hơn

Quan trọng: set chỉ sử dụng 2 core (core 0 và core 1) trong 4 core của Oracle A1 Flex 4 CPU 24 GB RAM

version: "3.8"

#
# WARNING: Make sure to use the docker-compose.yml of the current release:
#
# https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml
#
# The compose file on main may not be compatible with the latest release.
#

name: immich

services:
  immich-server:
    container_name: immich_server
    cpus: "1"
    cpuset: "0-1"
    image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release}
    command: [ "start.sh", "immich" ]
    volumes:
      - ./${UPLOAD_LOCATION}:/usr/src/app/upload
      - /etc/localtime:/etc/localtime:ro
    env_file:
      - .env
    ports:
      - 2283:3001
    depends_on:
      - redis
      - database
    restart: always

  immich-microservices:
    container_name: immich_microservices
    cpus: "1"
    cpuset: "0-1"
    image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release}
    # extends:
    #   file: hwaccel.yml
    #   service: hwaccel
    command: [ "start.sh", "microservices" ]
    volumes:
      - ./${UPLOAD_LOCATION}:/usr/src/app/upload
      - /etc/localtime:/etc/localtime:ro
    env_file:
      - .env
    depends_on:
      - redis
      - database
    restart: always

  immich-machine-learning:
    container_name: immich_machine_learning
    cpus: "1"
    cpuset: "0-1"
    image: ghcr.io/immich-app/immich-machine-learning:${IMMICH_VERSION:-release}
    volumes:
      - ./model-cache:/cache
    env_file:
      - .env
    restart: always

  redis:
    container_name: immich_redis
    image: redis:6.2-alpine@sha256:b6124ab2e45cc332e16398022a411d7e37181f21ff7874835e0180f56a09e82a
    restart: always

  database:
    container_name: immich_postgres
    image: tensorchord/pgvecto-rs:pg14-v0.1.11@sha256:0335a1a22f8c5dd1b697f14f079934f5152eaaa216c09b61e293be285491f8ee
    env_file:
      - .env
    environment:
      POSTGRES_PASSWORD: ${DB_PASSWORD}
      POSTGRES_USER: ${DB_USERNAME}
      POSTGRES_DB: ${DB_DATABASE_NAME}
    volumes:
      - ./pgdata:/var/lib/postgresql/data
    restart: always

volumes:
  pgdata:
  model-cache:

Khi chạy chỉ fullload 2 core 0 và 1, các core khác chạy vừa phải để hạn chế quá tải

Cấu hình này khá tốt, do luôn còn CPU, nên tốc độ upload file không bị nghẽn như cấu hình mặc định 🙁

  • Trên iPhone, các ảnh mình chụp, hay ở chế độ LIVE, dễ hiểu thì Immich sẽ coi các ảnh này như là 1 đoạn video khoảng 1-2s 😀

“Hậu quả” cho việc này, mỗi tấm ảnh mình chụp, thường phải xử lý như là 1 video 😀 thay vì chỉ phải tạo thumbnail, detect gương mặt 1 lần, mỗi tấm ảnh của mình phải làm thành 24 cho tới 48 lần, nó tàn phá hệ thống Immich điên cuồng luôn 😛

Ăn vài quả video 4k cỡ 10-20GB, chắc Immich ngồi xử lý cả tuần luôn mất 😀

Kết luận

Sau khi cài đặt, trải nghiệm Immich khoảng nửa ngày thì mình khá phân vân, một sản phẩm lưu trữ ảnh, video mà có tới 20k sao Github thì chứng tỏ mọi người quan tâm và đánh giá cao, quan trọng nhất là vấn đề chất lượng vote, vì thường ai dùng Github, họ cũng có 1 số kiến thức nhất định về ứng dụng, không phải vote ảo như các cuộc thi vote cho thần tượng

Vấn đề sự hiệu quả self-hosted trên backup photo và video rất kém, gần như vắt kiệt công xuất server, cấu hình phần cứng tối thiểu để tạm gọi là chạy được Immich cần khoảng 4 core CPU, 8 GB RAM và thật nhiều dung lượng, trung bình VPS cấu hình này + 100GB dung lượng, giá khoảng $5-$10 /1 tháng

Nếu dùng Google Photo, chi phí khoảng $1.5/ 1 tháng, mà có tới 2 TB dung lượng lưu trữ, đấy là chưa kể nếu dùng Immich, bạn phải tự cài đặt, quản lý, cấu hình cả 1 hệ thống nữa

Chi phí và hiệu quả mang lại của Immich thật sự không đáng để bạn phải tìm hiểu

Nói chung trừ vụ bạn đặc biệt nhạy cảm với các hình ảnh, video, không muốn bất cứ ai dòm ngó, hay bạn sống tại Trung Quốc, các dịch vụ như Google bị cấm, còn lại mình không nghĩ ra lý do gì một người bình thường phải đi dùng các app dạng này

Tất nhiên, nếu bạn có VPS Oracle miễn phí, dùng Andoird và nhu cầu chỉ lưu trữ < 200GB, Immich rất đáng để dùng thử, vì combo này miễn phí và phù hợp

Trường hợp của mình chạy qua iOS thì không hiệu quả lắm, phải nhớ mà bật app lên để nó tự đồng bộ, khá là mất công

Comment policy: We love comments and appreciate the time that readers spend to share ideas and give feedback.
Notes: However, those deemed to be spam or solely promotional will be deleted.

You can create a Gravatar account, add avatar, then use that email to comment here, your account will have a more beautiful Avatar, easier to recognize with other members.

Please use real emails, you can receive notifications when comments are replied