Giới thiệu
Immich là một giải pháp tự lưu trữ (self-hosted) để quản lý ảnh và video, được ví như “Google Photos mã nguồn mở”. Bài viết này hướng dẫn cài đặt Immich trên Ubuntu Server sử dụng Docker, phù hợp cho cả máy chủ cấu hình thấp (N5105, 8GB RAM) lẫn máy chủ mạnh (Xeon, 32GB RAM).
📋 Yêu cầu hệ thống
| Thành phần | Tối thiểu | Khuyến nghị |
|---|---|---|
| Hệ điều hành | Ubuntu 22.04 hoặc 24.04 | Ubuntu 24.04 LTS |
| RAM | 4GB | 8GB+ (cho ML features) |
| CPU | 2 nhân | 4 nhân+ |
| Docker | Có cài đặt | Docker + Compose |
| Lưu trữ | Đủ chứa ảnh + 2-3x dung lượng ảnh gốc (cho thumbnail và video transcoding) |
🚀 Bước 1: Cài đặt Docker và Docker Compose
# Cập nhật hệ thống
sudo apt update && sudo apt upgrade -y
# Cài Docker và Docker Compose
sudo apt install -y docker.io docker-compose-plugin
# Khởi động Docker
sudo systemctl enable --now docker
# Thêm user vào docker group (để chạy không cần sudo)
sudo usermod -aG docker $USER
# Đăng xuất và đăng nhập lại để áp dụng, hoặc chạy:
newgrp docker
# Kiểm tra cài đặt
docker --version
docker compose version
🐳 Bước 2: Tải cấu hình Immich
# Tạo thư mục cho Immich
sudo mkdir -p /opt/immich
cd /opt/immich
# Tải file docker-compose.yml và .env từ bản phát hành mới nhất
sudo wget -O docker-compose.yml https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml
sudo wget -O .env https://github.com/immich-app/immich/releases/latest/download/example.env
# Tạo thư mục lưu trữ ảnh
sudo mkdir -p /var/lib/immich/{upload,thumbs,encoded-video,profile}
sudo chown -R 1000:1000 /var/lib/immich
⚙️ Bước 3: Cấu hình biến môi trường (.env)
sudo nano /opt/immich/.env
Sửa các dòng sau (thay giá trị phù hợp):
# Đường dẫn lưu ảnh upload
UPLOAD_LOCATION=/var/lib/immich/upload
# Mật khẩu PostgreSQL (quan trọng - thay bằng mật khẩu mạnh)
DB_PASSWORD=ThayBangMatKhauManhCuaBan
# Múi giờ (bỏ dấu # và sửa)
TZ=Asia/Ho_Chi_Minh
# Phiên bản Immich (để "release" để dùng bản mới nhất)
IMMICH_VERSION=release
Lưu ý bảo mật: Không commit file .env lên Git public .
🎯 Bước 4: Cấu hình truy cập thư mục ảnh có sẵn (External Library)
Nếu bạn đã có sẵn thư mục ảnh (ví dụ từ cài đặt SMO trước đó), có thể mount vào Immich mà không cần di chuyển:
# Mở file docker-compose.yml
sudo nano /opt/immich/docker-compose.yml
Thêm volume mount vào service immich-server và immich-microservices:
services:
immich-server:
# ... các cấu hình khác giữ nguyên ...
volumes:
- ${UPLOAD_LOCATION}:/usr/src/app/upload
# THÊM DÒNG NÀY - đường dẫn đến thư mục ảnh đã có
- /home/huannv/Data/ANH_CHUP_PROCESSED/Images:/mnt/existing-photos:ro
- /etc/localtime:/etc/localtime:ro
immich-microservices:
# ... các cấu hình khác giữ nguyên ...
volumes:
- ${UPLOAD_LOCATION}:/usr/src/app/upload
# THÊM DÒNG NÀY - giống như trên
- /home/huannv/Data/ANH_CHUP_PROCESSED/Images:/mnt/existing-photos:ro
- /etc/localtime:/etc/localtime:ro
:ro ở cuối có nghĩa là read-only – Immich sẽ đọc ảnh nhưng không sửa/xóa file gốc .
🚀 Bước 5: Khởi động Immich
cd /opt/immich
# Khởi động tất cả container
docker compose up -d
# Kiểm tra trạng thái
docker compose ps
# Xem log (nếu cần)
docker compose logs -f
🌐 Bước 6: Truy cập và cấu hình lần đầu
-
Mở trình duyệt và truy cập:
http://<IP_SERVER>:2283 -
Tạo tài khoản admin đầu tiên
-
Đăng nhập và bắt đầu sử dụng
Cấu hình External Library (thư mục ảnh có sẵn)
Sau khi đăng nhập:
-
Vào Administration → External Libraries
-
Click Create Library
-
Đặt đường dẫn:
/mnt/existing-photos -
Click Scan Library
🔧 Bước 7: Các lệnh quản lý Immich
| Mục đích | Lệnh |
|---|---|
| Xem trạng thái | docker compose ps |
| Xem log | docker compose logs -f [tên-service] |
| Khởi động lại | docker compose restart |
| Dừng | docker compose down |
| Cập nhật | docker compose pull && docker compose up -d |
| Sao lưu database | docker compose exec -T database pg_dumpall -U postgres | gzip > backup.sql.gz |
⚡ Tối ưu hiệu suất cho từng cấu hình
Cấu hình thấp (N5105, 8GB RAM)
# Giảm số worker để tránh quá tải
# Mở file docker-compose.yml, thêm vào service immich-server và immich-microservices:
environment:
- MACHINE_LEARNING_WORKERS=2
- MACHINE_LEARNING_REQUEST_THREADS=4
Cấu hình mạnh (Xeon 2670v3, 32GB RAM)
# Tăng worker để tận dụng đa luồng
environment:
- MACHINE_LEARNING_WORKERS=6
- MACHINE_LEARNING_REQUEST_THREADS=12
🛡️ Bảo mật và Sao lưu
Cơ bản – Không mở cổng 2283 ra ngoài Internet
# Không nên port-forward cổng 2283 [citation:2]
# Sử dụng VPN (WireGuard) hoặc Cloudflare Tunnel để truy cập từ xa
Sao lưu hàng ngày
# Tạo script backup
cat > /opt/immich/backup.sh << 'EOF'
#!/bin/bash
BACKUP_DIR="/backup/immich"
DATE=$(date +%Y%m%d-%H%M)
mkdir -p "$BACKUP_DIR"
# Backup database
docker compose -f /opt/immich/docker-compose.yml exec -T database \
pg_dumpall -U postgres | gzip > "$BACKUP_DIR/immich-db-${DATE}.sql.gz"
# Backup photos (nếu cần)
rsync -av --delete /var/lib/immich/upload/ /backup/immich/photos/
# Xóa backup cũ hơn 30 ngày
find "$BACKUP_DIR" -name "*.sql.gz" -mtime +30 -delete
EOF
chmod +x /opt/immich/backup.sh
# Thêm vào crontab (chạy lúc 3h sáng)
echo "0 3 * * * root /opt/immich/backup.sh >> /var/log/immich-backup.log 2>&1" | \
sudo tee /etc/cron.d/immich-backup
📊 Cấu trúc thư mục sau cài đặt
/opt/immich/
├── docker-compose.yml
├── .env
└── (các file cấu hình khác)
/var/lib/immich/
├── upload/ # Ảnh upload từ mobile/web
├── thumbs/ # Ảnh thumbnail
├── encoded-video/ # Video đã transcoded
└── profile/ # Ảnh đại diện user
/home/huannv/Data/ANH_CHUP_PROCESSED/Images/ # External library (read-only)
🩺 Xử lý sự cố thường gặp
| Lỗi | Giải pháp |
|---|---|
| Permission denied | sudo chown -R 1000:1000 /var/lib/immich |
| Postgres không start | sudo chown -R 999:999 /var/lib/immich/postgres |
| Không truy cập được web | Mở port: sudo ufw allow 2283/tcp |
| ML container lỗi | Kiểm tra log: docker compose logs immich-machine-learning |
📝 Tổng kết
Immich là giải pháp quản lý ảnh tự lưu trữ mạnh mẽ, có thể chạy ổn định trên cả máy chủ cấu hình thấp lẫn cao. Với External Library, bạn có thể tận dụng kho ảnh đã được phân loại từ SMO mà không cần di chuyển hay copy lại.