主题模式
Are you an LLM? You can read better optimized documentation at /ai/homelab/immich-self-hosted.md for this page in Markdown format
Immich 自托管照片管理:告别 Google Photos 的完整方案
Google Photos 取消免费无限存储后,越来越多的用户开始寻找替代方案。Immich 是一款开源的自托管照片管理系统,界面和交互高度还原 Google Photos 体验,同时提供人脸识别、智能分类、地图视图等高级功能。
相比其他自托管照片方案,Immich 的优势:
- 体验最接近 Google Photos:界面现代、交互流畅、移动端 App 原生体验
- AI 功能强大:人脸识别、物体检测、OCR 文字提取、智能搜索
- 全平台客户端:iOS、Android、Web 界面齐全
- 开源免费:MIT 协议,无付费墙、无功能限制
- 活跃开发:GitHub Star 60k+,更新频率极高
| 特性 | Immich | Google Photos | Nextcloud Photos | PhotoPrism |
|---|---|---|---|---|
| 人脸识别 | ✅ 本地 AI | ✅ 云端 AI | ⚠️ 基础 | ✅ 本地 AI |
| 移动端备份 | ✅ 自动 | ✅ 自动 | ✅ 手动 | ❌ 不支持 |
| 地图视图 | ✅ EXIF 定位 | ✅ | ❌ | ✅ |
| 视频转码 | ✅ | ✅ | ❌ | ⚠️ 基础 |
| 共享相册 | ✅ | ✅ | ✅ | ✅ |
| 数据所有权 | ✅ 完全掌控 | ❌ 谷歌掌控 | ✅ 完全掌控 | ✅ 完全掌控 |
| 免费额度 | 无限(自建) | 15GB | 无限(自建) | 无限(自建) |
🛠️ 准备工作
硬件需求
| 配置 | 最低 | 推荐 |
|---|---|---|
| CPU | 2 核 | 4 核+(AI 功能需要) |
| 内存 | 4GB | 8GB+ |
| 硬盘 | 100GB | 1TB+(取决于照片数量) |
| GPU | 无需 | 有 GPU 可加速 AI 识别 |
AI 加速
如果有 NVIDIA GPU,可以启用 GPU 加速人脸识别和机器学习,速度提升 5-10 倍。没有 GPU 也能用,只是首次扫描较慢。
软件环境
- Docker + Docker Compose(必备)
- 域名(可选,用于 HTTPS 远程访问)
- 反向代理:Nginx / Caddy / Cloudflare Tunnel
🐳 Docker Compose 部署
第一步:下载官方 compose 文件
Immich 官方提供了完整的 Docker Compose 配置,推荐直接使用:
bash
mkdir -p /root/data/docker_data/immich
cd /root/data/docker_data/immich
# 下载官方 compose 文件和环境变量模板
wget -O docker-compose.yml 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第二步:配置环境变量
编辑 .env 文件:
bash
# ===== 数据库配置 =====
DB_HOSTNAME=immich-postgres
DB_USERNAME=postgres
DB_PASSWORD=your_strong_db_password
DB_DATABASE_NAME=immich
# ===== Redis 配置 =====
REDIS_HOSTNAME=immich-redis
# ===== 上传目录 =====
UPLOAD_LOCATION=/root/data/docker_data/immich/uploads
# ===== 外部访问地址 =====
EXTERNAL_DOMAIN=https://photos.your-domain.com
# ===== 时区 =====
TZ=Asia/Shanghai
# ===== 版本 =====
IMMICH_VERSION=release
# ===== 机器学习(AI 功能)=====
MACHINE_LEARNING_ENABLED=true
# ===== 可选:GPU 加速 =====
# 需要安装 NVIDIA Container Toolkit
# GPU_ENABLED=true第三步:创建数据目录
bash
mkdir -p /root/data/docker_data/immich/uploads第四步:启动服务
bash
docker compose up -d查看启动状态:
bash
docker compose ps正常情况下会看到以下容器全部运行:
| 容器 | 功能 | 端口 |
|---|---|---|
| immich-server | 主服务端 | 3001 |
| immich-web | Web 前端 | - |
| immich-machine-learning | AI 机器学习 | 3003 |
| immich-postgres | PostgreSQL 数据库 | 5432 |
| immich-redis | Redis 缓存 | 6379 |
第五步:首次访问
打开浏览器访问 http://your-server-ip:2283,你会看到注册页面:
- 注册管理员账号:输入邮箱和密码
- 登录系统:使用刚注册的账号登录
- 完成初始设置:按照引导完成
安全提示
首次注册后,建议在管理设置中关闭公开注册,防止他人注册账号。
📱 移动端配置
iOS / Android App
Immich 提供原生移动端应用,体验接近 Google Photos。
安装:
- iOS:App Store 搜索 Immich
- Android:Google Play 搜索 Immich,或从 GitHub Releases 下载 APK
配置自动备份:
- 打开 App,输入服务器地址:
https://photos.your-domain.com - 登录账号
- 进入 设置 → 备份
- 开启 自动备份
- 选择备份的相册(可排除特定相册)
- 设置备份选项:
- 仅 WiFi 备份:建议开启,避免消耗流量
- 后台备份:建议开启,App 在后台自动上传
- 视频备份:可选,视频文件较大
备份策略
| 策略 | 说明 | 推荐场景 |
|---|---|---|
| 仅 WiFi | 连接 WiFi 时自动上传 | 日常使用(推荐) |
| 流量+WiFi | 任何网络环境下上传 | 出差/旅行 |
| 手动备份 | 手动选择照片上传 | 省流量 |
✨ 核心功能详解
1. 智能搜索
Immich 内置 AI 搜索引擎,支持自然语言搜索:
- 关键词搜索:搜索「猫」「海滩」「日落」等关键词
- 人脸搜索:点击人脸查看该人物所有照片
- 位置搜索:搜索城市名或地名
- 日期搜索:搜索「2025年夏天」「去年圣诞」
- 组合搜索:
人:小明 位置:北京 2025
AI 搜索原理
Immich 使用 CLIP 模型将图片转换为向量,搜索时将文本也转换为向量进行相似度匹配。所有 AI 处理都在本地完成,不上传任何数据。
2. 人脸识别
人脸识别是 Immich 最强的功能之一:
- 自动检测:上传照片后自动检测人脸
- 自动分组:将同一人的照片归为一组
- 手动命名:为人物命名(如「妈妈」「小明」)
- 合并/拆分:合并误分的同一人,拆分错合的不同人
3. 地图视图
如果照片包含 EXIF GPS 信息,Immich 会在地图上显示拍照位置:
- 世界地图:所有照片在地图上的分布
- 缩放查看:放大地图查看特定区域的照片
- 点击查看:点击地图标记查看该位置的照片
4. 共享相册
创建共享相册与家人朋友分享:
- 点击 共享 → 创建共享相册
- 选择照片添加到相册
- 邀请其他用户或生成分享链接
- 支持设置链接密码和有效期
5. 内存回顾
类似 Google Photos 的「回忆」功能:
- 今日回顾:往年今日的照片
- 人物回顾:特定人物的精选照片
- 地点回顾:特定地点的照片集
6. 视频转码
Immich 支持视频转码,确保各种格式都能在浏览器和 App 中播放:
- 自动将视频转码为兼容格式
- 支持 H.264/H.265/AV1 编码
- 保留原始文件的同时生成预览版本
🔧 进阶配置
反向代理(Nginx)
nginx
server {
listen 443 ssl http2;
server_name photos.your-domain.com;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
client_max_body_size 0; # 不限制上传大小
# 启用 WebDAV 支持(移动端上传需要)
location /api/ {
proxy_pass http://localhost:2283;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# WebSocket 支持
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
# 长连接超时设置
proxy_read_timeout 300s;
proxy_send_timeout 300s;
}
location / {
proxy_pass http://localhost:2283;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}Cloudflare Tunnel
如果不想配置 Nginx,可以使用 Cloudflare Tunnel 实现免端口映射的 HTTPS 访问,更加安全便捷。
GPU 加速 AI 识别
如果有 NVIDIA GPU,可以大幅加速 AI 功能:
bash
# Ubuntu/Debian
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit
sudo systemctl restart docker- 在
docker-compose.yml中为机器学习服务添加 GPU 支持:
yaml
immich-machine-learning:
image: ghcr.io/immich-app/immich-machine-learning:release-cuda
# 注意:需要使用 cuda 标签的镜像
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: all
capabilities: [gpu]- 重启服务:
bash
docker compose up -d存储优化
对于照片数量庞大的用户,推荐配置外部存储:
yaml
# 使用 NFS 挂载 NAS 存储
volumes:
- type: nfs
source: nas-server:/volume1/photos
target: /usr/src/app/upload
volume:
nocopy: true数据库优化
照片库变大后,数据库性能优化很重要:
bash
# 进入 PostgreSQL 容器
docker exec -it immich-postgres psql -U postgres -d immich
# 执行 Vacuum 分析
VACUUM ANALYZE;
# 查看数据库大小
SELECT pg_size_pretty(pg_database_size('immich'));🔒 安全加固
1. 关闭公开注册
进入 管理 → 设置 → 用户管理:
- 关闭 允许注册
- 设置默认存储配额
2. 配置 OAuth 登录(可选)
Immich 支持 OAuth 单点登录,可以与 Authentik/Authelia 集成:
管理 → 设置 → OAuth
- 启用 OAuth
- 配置 Issuer URL
- 配置 Client ID 和 Secret
- 配置 Scope: openid email profile3. 配置防火墙
bash
# 只允许内网访问
ufw allow from 192.168.1.0/24 to any port 2283
# 如果通过反向代理,只允许本机访问
ufw deny 2283
# 启用防火墙
ufw enable4. 定期备份
bash
#!/bin/bash
# immich-backup.sh
BACKUP_DIR=/root/backups/immich
DATE=$(date +%Y%m%d)
# 备份数据库
docker exec immich-postgres pg_dump -U postgres immich > $BACKUP_DIR/db-$DATE.sql
# 备份配置
cp /root/data/docker_data/immich/.env $BACKUP_DIR/env-$DATE
cp /root/data/docker_data/immich/docker-compose.yml $BACKUP_DIR/compose-$DATE.yml
# 保留最近 30 天备份
find $BACKUP_DIR -name "*.sql" -mtime +30 -delete
find $BACKUP_DIR -name "*.yml" -mtime +30 -delete
find $BACKUP_DIR -name "env-*" -mtime +30 -delete添加定时任务:
bash
# 每天凌晨 3 点备份
crontab -e
0 3 * * * /bin/bash /root/scripts/immich-backup.sh📊 性能参考
照片库规模与性能
| 照片数量 | 首次 AI 扫描时间 | 日常使用内存 | 磁盘占用 |
|---|---|---|---|
| 1,000 张 | ~15 分钟 | ~500MB | ~5GB |
| 10,000 张 | ~2 小时 | ~1GB | ~50GB |
| 50,000 张 | ~8 小时 | ~2GB | ~250GB |
| 100,000 张 | ~15 小时 | ~4GB | ~500GB |
首次扫描
首次上传大量照片时,AI 扫描需要较长时间。建议在夜间进行首次上传,让 AI 在空闲时完成扫描。
GPU vs CPU 对比
| 操作 | CPU (N100) | GPU (RTX 3060) |
|---|---|---|
| 人脸检测 | ~0.5s/张 | ~0.05s/张 |
| 图片编码 | ~0.3s/张 | ~0.03s/张 |
| 10,000 张 | ~2 小时 | ~15 分钟 |
❓ 常见问题
Q: 移动端 App 无法连接服务器?
排查步骤:
- 确认服务器地址正确(包含
https://) - 检查 HTTPS 证书是否有效
- 确认端口在防火墙中开放
- 如果使用反向代理,检查 Nginx 配置的 WebSocket 支持
Q: 人脸识别不工作?
解决方案:
- 进入 管理 → 设置 → 机器学习,确认已启用
- 检查
immich-machine-learning容器是否正常运行 - 在 任务 页面手动触发「人脸检测」任务
- 查看容器日志:
docker logs immich-machine-learning
Q: 上传大文件失败?
解决方案:
- Nginx 配置
client_max_body_size 0(不限制) - 检查磁盘空间是否充足
- 确认
.env中UPLOAD_LOCATION路径存在且有权限
Q: 照片占用空间太大怎么办?
解决方案:
- 启用 压缩存储:上传时自动压缩
- 定期清理 重复照片:在管理界面使用去重功能
- 挂载外部存储:使用 NFS/SMB 挂载大容量 NAS
Q: 如何迁移到更大的硬盘?
步骤:
bash
# 1. 停止服务
docker compose down
# 2. 迁移数据
rsync -av /old/path/immich/ /new/path/immich/
# 3. 更新 .env 中的 UPLOAD_LOCATION
nano .env
# 4. 重新启动
docker compose up -d🚀 下一步
- 远程安全访问:Cloudflare Tunnel 内网穿透
- 媒体中心:Jellyfin 搭建指南
- 私有云盘:Nextcloud 私有化部署
- 服务监控:Uptime Kuma 监控面板
- 家庭网络:Tailscale 组网
📋 配置清单
| 项目 | 推荐配置 |
|---|---|
| 服务器 | N100 小主机 + 16GB 内存 + 1TB SSD |
| 数据库 | PostgreSQL 16 |
| 缓存 | Redis 7 |
| 反向代理 | Nginx / Caddy / Cloudflare Tunnel |
| SSL 证书 | Let's Encrypt |
| GPU 加速 | NVIDIA GPU(可选) |
| 备份策略 | 每日数据库备份 + 文件同步 |
🔗 相关文章
- N100 小主机搭建全攻略 - 家庭服务器硬件配置
- Docker Compose 模板库 - 更多 Docker 配置
- Cloudflare Tunnel 实战 - 安全远程访问
- Nextcloud 私有云盘 - 文件同步与共享
