Immich 家庭相册服务器部署文档(Ubuntu + Docker + Tailscale + 磁盘扩容 + 自动备份)

  • 背景介绍:

    手机存储空间限制手机使用寿命,云存储价格不便宜,家庭相册云存储不方便,本地有废弃的电脑存储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端配置

先安装immichtailscal

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 开源,本文仅用于技术学习与经验分享。 在实际搭建过程中,参考了官方文档及社区部分经验,在此表示感谢。

后记

折腾家庭服务器的过程,本质上是在用时间换自由。 当照片不再依赖第三方平台,当存储空间可以按需扩展,这套系统的价值就已经体现出来了。 如果这篇文章能帮你少踩一些坑,那就足够了。

相关推荐
yzx9910132 小时前
Ollama 完全使用指南:从零开始在本地部署大模型
数据库·mysql·github
潘达斯奈基~2 小时前
养虾-1:数字分身备份至github
ai·github
Sarvartha4 小时前
Python与API
github
qwertyuiop18224 小时前
在vscode copilot里使用IDA mcp
github·mcp
Real-Staok4 小时前
Git 积累 & 常用命令
git·gitee·github
汪海游龙4 小时前
03.17 AI 精选:面向智能体的技能框架与开发方法论
github·hacker news
AI成长日志4 小时前
【实用工具教程专栏】一文学会GitHub Actions自动化工作流入门
运维·自动化·github
Tody Guo4 小时前
OpenClaw与企业微信的定时任务设定
前端·github·企业微信
MonkeyKing_sunyuhua6 小时前
Mac 上从 0 到 1 安装 Git + 配置 GitHub SSH + 拉取 private 仓库 的完整步骤
git·macos·github