一日一技 | 使用 Docker 为 iCloud 照片生成本地备份
Matrix 首页推荐
Matrix 是少数派的写作社区,我们主张分享真实的产品体验,有实用价值的经验与思考。我们会不定期挑选 Matrix 最优质的文章,展示来自用户的最真实的体验和观点。
文章代表作者个人观点,少数派仅对标题和排版略作修改。
![](https://cdnfile.sspai.com/2024/07/19/3efed8d45f137b73b9d173542e0e248b.png?imageView2/2/w/1120/q/40/interlace/1/ignore-error/1)
由于家人的照片视频太多,我目前开了 2TB 的 iCloud 套餐。在开 iCloud 套餐之前我尝试过使用 QNAP 的 Photo 应用,但是终究没有 iCloud 方便——原图上传 iCloud,手机保留缩略图,随时可以点开来看太香了,缺点就是有点贵。
接下来这套方案在日常使用没什么问题,但最好本地可以备份一份原图。一来可以避免苹果服务器宕机(这种可能性很低),二来未来有更经济的方案可以随时进行迁移,三来也是为了照片的安全。
本方案需要使用到 Docker 服务,我自己是部署在 QNAP 的 NAS 上面的,所以接下来我会以 QNAP 来打样。如果你有群晖、树莓派、闲置的电脑理论上都是可行的。
前置准备工作
- 关闭 iCloud 账户的 ADP 功能(高级数据保护)。开启这个功能会限制使用 iCloud 网页,导致无法实现方案中备份效果,如果你非常重视端到端加密等措施,不愿意关闭此功能就此打住不用折腾了。关闭这个功能后可能需要等待一周左右的时间,才会生效,因为苹果服务器需要时间去解密数据。
- 创建一个名为「.mounted」的隐藏文件,以下简称「挂载文本」。你可以先创建一个名为「.mounted.txt」的文本文件,然后删除掉后缀名,就是一个 0kb 的文件。
- 安装好 Docker 服务并且确保可以运行。
正式安装
创建文件夹(假设登录的用户名:张三)
创建用于储存配置文件的文件夹 config,存放位置与名称随意。
![](https://cdnfile.sspai.com/2024/07/19/9bb2747008c38416eaf827a88b90f51a.png?imageView2/2/w/1120/q/40/interlace/1/ignore-error/1)
创建用于储存照片的文件夹 iCloud,存放位置与名称随意。我是在一个硬盘的根目录下直接创建的。
![](https://cdnfile.sspai.com/2024/07/19/303640afcc8f4480829a1a369375f845.png?imageView2/2/w/1120/q/40/interlace/1/ignore-error/1)
将「挂载文本」移入 iCloud 文件夹内。
创建容器
由于 Docker 服务器被屏蔽,所以大家可能比较难获取boredazfcuk/icloudpd
的 Docker 镜像。假设你已经使用电脑端的 DockerDesktop 获取到了镜像并导出了,那接下来可以进行 QNAP 的镜像导入。
镜像导入
![](https://cdnfile.sspai.com/2024/07/19/d8398ffc94749ab95c9b78527b6ee326.png?imageView2/2/w/1120/q/40/interlace/1/ignore-error/1)
![](https://cdnfile.sspai.com/2024/07/19/d05461315f4bdcd7b0c61cc1a4a40696.png?imageView2/2/w/1120/q/40/interlace/1/ignore-error/1)
生成容器
![](https://cdnfile.sspai.com/2024/07/19/2be884d3d3e059e56833a39ea77d27fa.png?imageView2/2/w/1120/q/40/interlace/1/ignore-error/1)
![](https://cdnfile.sspai.com/2024/07/19/51ce4212bbbc3e1e7e928c912251d7cf.png?imageView2/2/w/1120/q/40/interlace/1/ignore-error/1)
![](https://cdnfile.sspai.com/2024/07/19/14f2681da2b7e095242d0f2bafa6099e.png?imageView2/2/w/1120/q/40/interlace/1/ignore-error/1)
![](https://cdnfile.sspai.com/2024/07/19/40220d171311a3a8ec34b493fe63b776.png?imageView2/2/w/1120/q/40/interlace/1/ignore-error/1)
![](https://cdnfile.sspai.com/2024/07/19/52fb6c699a48b696dc8c98ee5b2a58be.png?imageView2/2/w/1120/q/40/interlace/1/ignore-error/1)
![](https://cdnfile.sspai.com/2024/07/19/fb57bbc4bb93e2f57e7630a2951233c3.png?imageView2/2/w/1120/q/40/interlace/1/ignore-error/1)
点击创建运行,等待十几秒中中停止运行。此时,为 QNAP 指定的 config 文件夹会出现一个「icloudpd.conf」,接下来我们就开始进行设置。
选项的配置与解析
icloudpd.conf 的配置
![](https://cdnfile.sspai.com/2024/07/20/ecbb7a5543ab98649227bec8c72928ee.png?imageView2/2/w/1120/q/40/interlace/1/ignore-error/1)
![](https://cdnfile.sspai.com/2024/07/20/5de4bbb05d4500cb7d589089afe3d4bf.png?imageView2/2/w/1120/q/40/interlace/1/ignore-error/1)
![](https://cdnfile.sspai.com/2024/07/20/8b0fb91e983e6d504daaa7b9dc340d89.png?imageView2/2/w/1120/q/40/interlace/1/ignore-error/1)
user_id 与 group_id 的确认
此时使用「张三」需要登陆 QNAP 的 ssh,然后输入 `id`,就会显示这两个 id 值。它们会用来解决后面可能遇到的权限问题,非常重要!
至此保存 icloudpd.conf 文件。只要接下来初始化就可以使用了。
初始化
进入容器的命令窗口
![](https://cdnfile.sspai.com/2024/07/20/c0f158eaef97e8091c1e8b9825c0ebdf.png?imageView2/2/w/1120/q/40/interlace/1/ignore-error/1)
![](https://cdnfile.sspai.com/2024/07/20/a7e4d29fe985bea1909e34e3be6a7a35.png?imageView2/2/w/1120/q/40/interlace/1/ignore-error/1)
![](https://cdnfile.sspai.com/2024/07/20/8b8bb0538cc61edb5e289b0be153595b.png?imageView2/2/w/1120/q/40/interlace/1/ignore-error/1)
输入初始化代码:sync-icloud.sh --Initialize
进行两次验证登录并写入本地密码文件
保存密码到 keyring 文件
刚开始需要等待两分钟检查更新,然后会询问是否写入 keyring 文件,此时选择「yes」。随后开始要求输入 Apple ID 的密码,界面是没有显示的,输入完成后回车确认即可。等待一会应该会要求进行验证码验证。这个登录的过程会持续两次。
问题排错
ERROR:invalid value for '-d' / '--directory': path '/icloud' is not readable
权限问题,处理方案有两种:
- 进入容器的执行界面,如何进入可以参考上文。然后运行`chmod 777 /iCloud`;
- 在之前的 conf 文件中设置好对应的「张三」的 id 和 group_id 后,确保张三对 QNAP 文件夹有权限写入
ERROR:keyring file does not exist. please try again
- 第一次启动就设置「true」导致的,先暂停容器,设置
auth_china=true
和icloud_china=true
两个变量后再启动。
成功开始备份
![](https://cdnfile.sspai.com/2024/07/20/60b6ba0a55f026e92691f42d89432ac0.png?imageView2/2/w/1120/q/40/interlace/1/ignore-error/1)
> 关注 少数派小红书,感受精彩数字生活 🍃
> 实用、好用的 正版软件,少数派为你呈现 🚀
© 本文著作权归作者所有,并授权少数派独家使用,未经少数派许可,不得转载使用。