群晖中定时同步 iCloud 照片库

目标

旨在确定群晖中使用 icloudpd 同步备份 iCloud 照片库,并自动被 Photos 识别,而不需要额外创建计划任务。

前文研究

通过icloudpd间接实现iOS后台自动备份照片至群晖

步骤

1. 准备用户目录服务、权限

安装 Photos 组件会要求启用该服务,理论上已经启用。

打开 Control Panel > User & Group > Advance,拉到底部,选中 Enable user home service

继续切换到 File Services > NFS > Enable NFS service

再切换到 Shared Folder > homes,点编辑,在 NFS Permissions 中创建一个规则,如下:

1
2
3
4
5
6
7
8
Hostname or IP: <你的 nas 主机 IP>
Privilege: Read/Write
Squash: Map all users to admin
Security: sys

√ Enable asynchronous
√ Allow connections from non-privileged ports
√ Allow users to access mounted subfolders

2. 准备文件及 docker volume

打开群晖的 File Station,创建以下目录:

1
2
docker/config/icloudpd
homes/<用户>/Photos/iCloud

以及以下文件:

1
homes/<用户>/Photos/iCloud/.mounted

用 ssh 连接到群晖,创建一个 docker volume,通过 NFS 连接至用户文件夹:(假设 homes/volume2/homes

1
2
3
4
5
docker volume create --driver local \
--opt type=nfs \
--opt o=addr=<你的 nas 主机 IP>,rw \
--opt device=:/volume2/homes \
hosthomes

3. 部署 icloudpd

ssh 连接到群晖,执行以下命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
docker create \
--name icloud-pd \
--hostname iCloudDownloader \
--network bridge \
--restart=unless-stopped \
--privileged \
--env user=admin \
--env user_id=1024 \
--env group=users \
--env group_id=100 \
--env apple_id=<你的 appleid> \
--env authentication_type=2FA \
--env synchronisation_interval=43200 \
--env skip_check=true \
--env download_path=/mnt/<用户>/Photos/iCloud \
--env folder_structure={:%Y/%m} \
--env synology_ignore_path=true \
--volume /volume2/docker/config/icloudpd:/config \
--volume hosthomes:/mnt \
tsanie/icloudpd:latest

上述 admin, users 不推荐修改,因为 nfs 挂载后映射的用户已经设置为 admin,保持统一即可

4. 启动并配置 2FA 登录

群晖中打开 Docker > Container,选择 icloud-pd 启动,双击它,切换至 Terminal,等待出现 Restarting in 5 minutes... 后,执行以下命令:

1
docker exec -it icloud-pd /usr/local/bin/sync-icloud.sh --Initialise

然后按提示进行登录即可。