在 RK3588 小主机上部署 Immich 开源相册服务
在 RK3588 小主机上部署 Immich 开源相册服务 前言 最近在我的 RK3588 小主机上成功部署了 Immich——一个高性能的开源照片和视频管理解决方案。Immich 可以作为 Google Photos 的完美替代品,支持自动备份、人脸识别、智能搜索等功能。本文将详细记录整个部署过程,特别是如何充分利用 RK3588 的硬件加速能力。
硬件环境
主机 : RK3588 小主机
操作系统 : OpenMediaVault (基于 Debian)
存储 : ZFS 文件系统
处理器 : RK3588 (8核心,包含 NPU 和硬件编解码器)
内存 : 推荐 8GB 及以上
为什么选择 RK3588? RK3588 芯片的优势在于:
强大的 NPU : 6 TOPS 算力,可以加速机器学习任务(人脸识别、物体检测等)
硬件编解码 : 支持 H.264/H.265 硬件加速转码,显著降低 CPU 负载
低功耗 : 相比 x86 平台,功耗更低,适合 7x24 小时运行
性价比 : 价格亲民,性能足够家庭使用
部署步骤 1. 准备工作 首先确保系统已安装 Docker 和 Docker Compose:
1 2 3 docker --version docker compose version
创建项目目录:
1 2 mkdir -p ~/immichcd ~/immich
2. 配置文件准备 2.1 主配置文件 (docker-compose.yml) 创建 immich.yml 文件(如果使用 OpenMediaVault,可以通过 Web UI 管理):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 name: immich services: immich-server: container_name: immich_server image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release} extends: file: hwaccel.transcoding.yml service: rkmpp volumes: - ${UPLOAD_LOCATION}:/data - /etc/localtime:/etc/localtime:ro env_file: - immich.env ports: - '2283:2283' depends_on: - redis - database restart: always healthcheck: disable: false immich-machine-learning: container_name: immich_machine_learning image: ghcr.io/immich-app/immich-machine-learning:${IMMICH_VERSION:-release}-rknn extends: file: hwaccel.ml.yml service: rknn volumes: - model-cache:/cache env_file: - immich.env restart: always healthcheck: disable: false redis: container_name: immich_redis image: docker.io/valkey/valkey:8-bookworm healthcheck: test: redis-cli ping || exit 1 restart: always database: container_name: immich_postgres image: ghcr.io/immich-app/postgres:14-vectorchord0.4.3-pgvectors0.2.0 environment: POSTGRES_PASSWORD: ${DB_PASSWORD} POSTGRES_USER: ${DB_USERNAME} POSTGRES_DB: ${DB_DATABASE_NAME} POSTGRES_INITDB_ARGS: '--data-checksums' volumes: - ${DB_DATA_LOCATION}:/var/lib/postgresql/data shm_size: 128mb restart: always volumes: model-cache:
2.2 环境变量配置 (immich.env) 创建 immich.env 文件:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 # 照片和视频存储位置 UPLOAD_LOCATION=/ZfsVaultMount/Photos # 数据库存储位置 DB_DATA_LOCATION=/ZfsVaultMount/DockerData/immich/postgres # 时区设置 TZ=Europe/Rome # Immich 版本 IMMICH_VERSION=release # 数据库密码(请修改为强密码) DB_PASSWORD=your_secure_password_here # RKNN 线程数配置 # 根据实际情况调整,建议设置为 2-4 MACHINE_LEARNING_RKNN_THREADS=2 # 数据库配置 DB_USERNAME=postgres DB_DATABASE_NAME=immich
重要提示 :
UPLOAD_LOCATION: 照片存储路径,建议使用大容量存储
DB_DATA_LOCATION: 数据库路径,建议放在 SSD 上以提升性能
MACHINE_LEARNING_RKNN_THREADS: RKNN 线程数,RK3588 建议设置为 2
2.3 硬件加速配置 - 转码 (hwaccel.transcoding.yml) 创建 hwaccel.transcoding.yml 文件:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 services: cpu: {} nvenc: deploy: resources: reservations: devices: - driver: nvidia count: 1 capabilities: - gpu - compute - video quicksync: devices: - /dev/dri:/dev/dri rkmpp: security_opt: - systempaths=unconfined - apparmor=unconfined group_add: - video devices: - /dev/rga:/dev/rga - /dev/dri:/dev/dri - /dev/dma_heap:/dev/dma_heap - /dev/mpp_service:/dev/mpp_service - /dev/mali0:/dev/mali0 volumes: - /etc/OpenCL:/etc/OpenCL:ro - /usr/lib/aarch64-linux-gnu/libmali.so.1:/usr/lib/aarch64-linux-gnu/libmali.so.1:ro vaapi: devices: - /dev/dri:/dev/dri vaapi-wsl: devices: - /dev/dri:/dev/dri - /dev/dxg:/dev/dxg volumes: - /usr/lib/wsl:/usr/lib/wsl environment: - LIBVA_DRIVER_NAME=d3d12
RKMPP 配置说明 :
/dev/rga: 2D 图形加速器
/dev/mpp_service: 媒体处理平台服务
/dev/mali0: Mali GPU(用于 OpenCL HDR 到 SDR 色调映射)
需要挂载 Mali 库以支持 OpenCL 加速
2.4 硬件加速配置 - 机器学习 (hwaccel.ml.yml) 创建 hwaccel.ml.yml 文件:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 services: armnn: devices: - /dev/mali0:/dev/mali0 volumes: - /lib/firmware/mali_csffw.bin:/lib/firmware/mali_csffw.bin:ro - /usr/lib/libmali.so:/usr/lib/libmali.so:ro rknn: security_opt: - systempaths=unconfined - apparmor=unconfined devices: - /dev/dri:/dev/dri cpu: {} cuda: deploy: resources: reservations: devices: - driver: nvidia count: 1 capabilities: - gpu rocm: group_add: - video devices: - /dev/dri:/dev/dri - /dev/kfd:/dev/kfd openvino: device_cgroup_rules: - 'c 189:* rmw' devices: - /dev/dri:/dev/dri volumes: - /dev/bus/usb:/dev/bus/usb openvino-wsl: devices: - /dev/dri:/dev/dri - /dev/dxg:/dev/dxg volumes: - /dev/bus/usb:/dev/bus/usb - /usr/lib/wsl:/usr/lib/wsl
3. 启动服务 1 2 3 4 5 6 7 8 9 10 11 cd ~/immichdocker compose -f immich.yml up -d docker compose -f immich.yml logs -f docker compose -f immich.yml ps
4. 初始化设置
访问 http://your-server-ip:2283
创建管理员账户
在移动端下载 Immich App 并配置自动备份
关键配置说明 硬件加速的重要性 在 RK3588 上启用硬件加速是获得良好性能的关键:
转码加速 (RKMPP)
不使用硬件加速 : CPU 使用率可达 80-100%,转码速度慢,发热严重
使用 RKMPP 加速 : CPU 使用率降至 10-20%,转码速度提升 3-5 倍
在 Immich Web 界面中启用硬件转码:
进入 管理 → 视频转码设置
选择 硬件加速: RKMPP
设置目标分辨率和码率
机器学习加速 (RKNN) RKNN 是 Rockchip 的 NPU 推理框架,可以大幅加速:
人脸识别
物体检测
智能标签生成
CLIP 文本-图像搜索
性能对比 :
CPU 推理: ~2-3 张图片/秒
RKNN NPU 加速: ~8-12 张图片/秒
ZFS 存储优化 如果使用 ZFS 文件系统,建议优化设置:
1 2 3 4 5 6 7 8 zfs set recordsize=1M tank/photos zfs set compression=lz4 tank/photos zfs set atime=off tank/photos
数据库性能优化 对于大型照片库(10 万+ 照片),建议:
将数据库放在 SSD 上
增加 PostgreSQL 的 shared memory:
1 2 database: shm_size: 256mb
性能表现 在我的 RK3588 小主机上,处理 1.2 TB Google Takeout 数据的表现:
初始导入速度 : 约 50-80 GB/小时(取决于文件大小和数量)
人脸识别 : ~10 张图片/秒(使用 RKNN)
智能搜索 : 响应时间 < 1 秒
视频转码 : 4K@30fps → 1080p@30fps,实时率约 1.5x
功耗 : 整机约 15-25W(包括硬盘)
内存占用 :
immich-server: ~500MB
immich-machine-learning: ~800MB
postgres: ~200MB
redis: ~50MB
常见问题和解决方案 1. 设备权限问题 如果遇到 /dev/mpp_service 或其他设备访问被拒绝:
1 2 3 4 5 6 7 8 ls -l /dev/mpp_service /dev/rga /dev/drisudo usermod -aG video $USER sudo systemctl restart docker
2. RKNN 初始化失败 确保系统内核支持 RKNN:
1 2 3 4 5 ls -l /dev/dri/renderD*lsmod | grep rknpu
3. 内存不足 如果内存较小(< 8GB),可以:
1 2 3 4 5 6 7 8 9 docker update --memory=2g immich_machine_learning immich-machine-learning: deploy: resources: limits: memory: 2G
4. 转码失败 检查硬件加速是否正常工作:
1 2 3 4 5 6 docker exec -it immich_server bash ffmpeg -hwaccels ffmpeg -encoders | grep rkmpp
5. 数据库连接慢 对于 HDD 存储的数据库,在 docker-compose.yml 中添加:
1 2 3 database: environment: DB_STORAGE_TYPE: 'HDD'
备份策略 数据备份 定期备份关键数据:
1 2 3 4 5 rsync -avh --progress /ZfsVaultMount/Photos /backup/location/ docker exec immich_postgres pg_dump -U postgres immich > immich_backup_$(date +%Y%m%d).sql
配置备份 1 2 3 4 5 6 tar -czf immich_config_$(date +%Y%m%d).tar.gz \ immich.yml \ immich.env \ hwaccel.transcoding.yml \ hwaccel.ml.yml
更新升级 1 2 3 4 5 6 7 8 9 10 11 docker compose -f immich.yml down docker compose -f immich.yml pull docker compose -f immich.yml up -d docker compose -f immich.yml logs -f
监控和维护 容器监控 1 2 3 4 5 docker stats docker logs immich_server --tail 100 -f
数据库维护 1 2 3 4 5 6 7 8 9 10 11 12 13 14 docker exec -it immich_postgres psql -U postgres -d immich SELECT pg_size_pretty(pg_database_size('immich' )); SELECT schemaname, tablename, pg_size_pretty(pg_total_relation_size(schemaname||'.' ||tablename)) FROM pg_tables ORDER BY pg_total_relation_size(schemaname||'.' ||tablename) DESC LIMIT 10; VACUUM ANALYZE;
总结 在 RK3588 小主机上部署 Immich 是一个非常值得的选择。通过合理配置硬件加速,可以获得:
✅ 优秀的性能 : NPU 和硬件编解码器大幅提升处理速度 ✅ 低功耗 : 相比 x86 方案,功耗更低,更环保 ✅ 高性价比 : 硬件成本低,性能够用 ✅ 完整功能 : 支持人脸识别、智能搜索、自动备份等全部功能 ✅ 隐私安全 : 数据完全掌握在自己手中
对于家庭用户来说,RK3588 + Immich 是替代 Google Photos 等云服务的理想方案。
参考资料
更新日志
2025-02 : 初始部署,配置硬件加速
持续优化中…
如有问题或建议,欢迎交流讨论!