-
背景介绍:
手机存储空间限制手机使用寿命,云存储价格不便宜,家庭相册云存储不方便,本地有废弃的电脑存储1T,还有500g的机械,本着折腾和废物利用的原则搭建家庭相册服务器部署。
-
环境:Ubuntu Server / Desktop
-
目标:
- 搭建 Immich 私有照片库
- 系统盘 + 外接盘自动扩容
- 自动备份到 Windows 电脑
- 开机自动运行
- 打通网络访问
-
-
配置要求
- Ubuntu版本24
- inter i3-5005U
- 内存 8G
- 存储 1T + 外挂512GB
1.docker安装
bash
# 更新系统
sudo apt update
# 安装 Docker
sudo apt install docker.io docker-compose -y
# 启动 Docker
sudo systemctl enable docker
sudo systemctl start docker
#验证
docker --version

2.部署 Immich
创建数据目录
bash
sudo mkdir -p /data/immich
cd /data/immich
下载官方 docker-compose
bash
wget https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml
wget https://github.com/immich-app/immich/releases/latest/download/example.env
mv example.env .env
启动Immich
bash
cd /data/immich
docker compose up -d
浏览器打开,注册管理员账号即可使用,可自行添加用户
arduino
http://服务器IP:2283
3.拓展存储-添加外接硬盘
3.1 添加外接硬盘扩容
bash
#查看磁盘
lsblk
#假设外盘是
/dev/sdb
#创建分区
sudo fdisk /dev/sdb
#步骤
n
1
Enter
Enter
w
#格式化
sudo mkfs.ext4 /dev/sdb1
3.2 挂载外接盘
bash
# 创建目录
sudo mkdir -p /mnt/immich_ext/library
# 获取 UUID
sudo blkid /dev/sdb1
# 示例 UUID=97dd27ca-a7f0-4c05-b97c-95d2930c4479
# 编辑 fstab
sudo nano /etc/fstab
# 加入
UUID=97dd27ca-a7f0-4c05-b97c-95d2930c4479 /mnt/immich_ext/library ext4 defaults,nofail 0 2
# 测试
sudo mount -av

3.3 安装 mergerfs(磁盘合并)
bash
# 安装
sudo apt install mergerfs -y
# 创建合并目录
sudo mkdir -p /data/immich/library_pool
# 编辑 fstab
sudo nano /etc/fstab
# 加入
/data/immich/library:/mnt/immich_ext/library /data/immich/library_pool fuse.mergerfs defaults,allow_other,use_ino,category.create=mfs,minfreespace=50G,nofail 0 0
解释:
| 参数 | 作用 |
|---|---|
| allow_other | 允许 docker 访问 |
| mfs | 写入剩余空间最多的盘 |
| minfreespace=50G | 磁盘保留50G |
| nofail | 外盘未插不影响开机 |
bash
# 刷新 systemd
sudo systemctl daemon-reload
# 挂载
sudo mount -a
# 检查
df -h
# 应该看到
/data/immich/library_pool 1.2T
3.4 配置Immich存储路径
bash
# 编辑
nano /data/immich/.env
# 改为
UPLOAD_LOCATION=/data/immich/library_pool
# 重启容器
cd /data/immich
docker compose down
docker compose up -d
4.自动备份的到windows磁盘
windows创建一个目录用于备份数据,创建的目录需要打开共享
Windows 共享目录
makefile
F:\ImmichBackup
Ubuntu创建共享目录
bash
sudo mkdir -p /mnt/windows_backup
创建备份脚本
bash
nano /data/backup_to_windows.sh
Ubuntu备份脚本
bash
#!/bin/bash
LOCK_FILE="/tmp/immich_backup.lock"
BACKUP_MOUNT="/mnt/windows_backup"
WINDOWS_SHARE="//windows-ip/ImmichBackup"
USERNAME="共享用户名"
PASSWORD="密码"
# 单例锁
exec 200>$LOCK_FILE
flock -n 200 || {
echo "备份任务已在运行,退出"
exit 1
}
echo "开始Immich备份 $(date)"
# 创建挂载目录
sudo mkdir -p $BACKUP_MOUNT
# 如果已经挂载先卸载
if mount | grep $BACKUP_MOUNT > /dev/null; then
sudo umount $BACKUP_MOUNT
fi
# 挂载Windows共享
sudo mount -t cifs $WINDOWS_SHARE $BACKUP_MOUNT \
-o username=$USERNAME,password=$PASSWORD,iocharset=utf8,vers=3.0
# 判断是否挂载成功
if mount | grep $BACKUP_MOUNT > /dev/null; then
echo "挂载成功,开始同步"
mkdir -p $BACKUP_MOUNT/immich
rsync -avh --partial\
--exclude="postgres/postmaster.pid" \
--exclude="postgres/*.sock" \
--exclude="postgres/pg_wal/*" \
/data/immich/ $BACKUP_MOUNT/immich/
echo "备份完成"
sudo umount $BACKUP_MOUNT
echo "已卸载Windows共享"
else
echo "Windows未开启或挂载失败,跳过备份"
fi
给执行权限
bash
chmod +x /data/backup_to_windows.sh
定时自动执行
bash
# 编辑 cron
crontab -e
# 加入:
0 3 * * * /data/backup_to_windows.sh >> /data/immich_backup.log 2>&1
# 含义:每天凌晨3点自动备份
# 日志位置:
/data/immich_backup.log
5.打通网络访问-安装Tailscale
5.1 一键安装
arduino
curl -fsSL https://tailscale.com/install.sh | sh
安装后不会自动登录
5.2 启动 Tailscale
运行
sudo tailscale up
终端会出现一个登录链接,类似:
vbnet
To authenticate, visit:
https://login.tailscale.com/xxxx
复制到浏览器打开,用github登录好一点,Android 设备可以不用翻墙
登录成功终端会提示success
查看代理ip
tailscale ip
会得到
100.64.x.x
5.3 测试是否成功
在另一台安装tailscale的设备ping 上面的ip,可以ping通就成功了
6. Android /ios端配置
tailscal需要在谷歌商店下载国内比较麻烦,可用这个网站代替apkpure,xapk的应用需要先安装apkpure应用才能安装

登录tailscale
点击打开应用-点击连接登录github账号,和服务器登录一个账号即可,要保持tailscale一直运行在后台,并且连接

登录immich
服务器地址输入tailscale ip获取到的地址,端口号2283
arduino
http://100.68.214.64:2283
登录注册账号即可
常用维护命令
查看磁盘
bash
df -h
查看 docker
docker ps
重启 immich
bash
cd /data/immich
docker compose restart
查看日志
docker logs immich_server
总结
通过以上步骤,我们完成了一套家庭私有照片库的搭建,整体实现了:
- 基于 Docker 部署 Immich 私有相册
- 多磁盘扩容(系统盘 + 外接盘 + mergerfs 合并)
- 数据自动备份到 Windows 设备
- 开机自启动与稳定运行
- 基于 Tailscale 实现内网穿透与远程访问
整套方案的核心优势在于:
- 成本低(利用闲置设备),笔记本的待机功耗也不高
- 数据完全可控(本地存储)
- 扩展性强(可随时增加硬盘)
- 使用体验接近云相册
对于有一定动手能力的用户来说,是一个非常值得折腾的家庭服务器项目。
注意事项
- 数据目录建议定期备份,避免硬盘损坏导致数据丢失
- 外接硬盘建议使用
nofail挂载,避免影响系统启动 - mergerfs 虽然方便,但不具备冗余能力(不是 RAID)
- Windows 备份依赖网络环境,建议保证局域网稳定
项目说明与致谢
本文基于开源项目 Immich 搭建与实践,项目地址:
github.com/immich-app/... Immich 基于 MIT License 开源,本文仅用于技术学习与经验分享。 在实际搭建过程中,参考了官方文档及社区部分经验,在此表示感谢。
后记
折腾家庭服务器的过程,本质上是在用时间换自由。 当照片不再依赖第三方平台,当存储空间可以按需扩展,这套系统的价值就已经体现出来了。 如果这篇文章能帮你少踩一些坑,那就足够了。