前段时间在转转收了个64G的N1,相比原本16G的内存容量没有容量焦虑,可以部署的应用也多了,所以考虑使用docker部署icloudpd同步icloud照片到本地备份。

拉取镜像

docker pull boredazfcuk/icloudpd:latest

创建容器

icloudpd 部署命令参数注释如下,可以根据自己的需求调整

docker create \  #不要改
--name icloudpddjz \  #可以改,只是容器的名字,部署多个容器时,必须要改,不能一致
--hostname icloudpd_boredazfcuk \  #不用改
--network bridge \  #openwrt环境下,用bridge桥接即可
--restart=always \  #不用改
--env user=root \  #openwrt环境下,默认只有root用户,作者建议与宿主系统用户名一致,避免权限问题
--env user_id=0 \  #openwrt环境下,root用户的id是0
--env group=root \  #openwrt环境下,root用户的用户组也是root
--env group_id=0 \  #openwrt环境下,root组id也是0
--env apple_id="xxxxxxx@icloud.com" \  #填写你的iCloud账号
--env authentication_type=2FA \  #身份验证类型,如果你启用了两步验证,则为2FA,否则为Web
--env folder_structure={:%Y/%m} \  #下载目录的文件夹结构,我设置的是/年/月结构 
--env auto_delete=True \  #扫描iCloud中“最近删除”的照片和视频,并在本地下载目录中也删除对应的照片和视频。(如果您在iCloud中恢复照片,它将再次下载)
--env synchronisation_interval=43200 \  #同步间隔时间,可设置为以下时段:21600(6 小时)、43200(12 小时)、86400(24 小时)、129600(36 小时)、172800(48 小时)和 604800(7 天)。默认为 86400 秒。设置较短的同步周期时要小心,Apple倾向于限制过于频繁地访问其服务器的连接。设置小于 12 小时的值将显示警告,因为 Apple 可能会限制您。我设置的是每12小时同步一次。
--env icloud_china=True \  #如果设置了这个变量,它将使用云上贵州icloud.com.cn,而不是icloud.com 作为下载源。推荐设置上这个参数。
--env TZ=CST-8 \  #设置容器时间为东八区时间
--env download_path=/home/root/iCloud \  #容器中的目录,此变量设置上比较好,不设定的话,默认也是这个
--volume /root/icloudpd_config:/config \  #配置文件挂载路径。冒号前面是openwrt环境的绝对路径,冒号后面是映射到容器里的路径,你需要修改的就是冒号前面的。
--volume /root/icloudpd_photo:/home/root/iCloud \  #照片下载路径。冒号前面是openwrt环境的绝对路径,冒号后面是映射到容器里的路径,你需要修改的就是冒号前面的。
boredazfcuk/icloudpd  #不要改

初始化容器

如果是首次运行,命令行会回显

ERROR    Keyring file /config/python_keyring/keyring_pass.cfg does not exist.
INFO      - Please add the your password to the system keyring using the --Initialise script command line option.
INFO      - Syntax: docker exec -it <container name> sync-icloud.sh --Initialise
INFO      - Example: docker exec -it icloudpd sync-icloud.sh --Initialise
INFO     Restarting in 5 minutes...

此时需要执行命令初始化容器

docker exec -it icloudpd sync-icloud.sh --Initialise

执行命令后会提示输入icloud账号密码,如果启用了两部验证,会提示输入6位验证码

2020-08-06 16:45:58 INFO     ***** boredazfcuk/icloudpd container for icloud_photo_downloader started *****
2020-08-06 16:45:58 INFO     Alpine Linux v3.12
2020-08-06 16:45:58 INFO     Interactive session: True
2020-08-06 16:45:58 INFO     Local user: user:1000
2020-08-06 16:45:58 INFO     Local group: group:1000
2020-08-06 16:45:58 INFO     LAN IP Address: 192.168.20.1
2020-08-06 16:45:58 INFO     Apple ID: email@address.com
2020-08-06 16:45:58 INFO     Authentication Type: 2FA
2020-08-06 16:45:58 INFO     Cookie path: /config/emailaddresscom
2020-08-06 16:45:58 INFO     Cookie expiry notification period: 7
2020-08-06 16:45:58 INFO     Download destination directory: /home/user/iCloud
2020-08-06 16:45:58 INFO     Folder structure: {:%Y}
2020-08-06 16:45:58 INFO     Directory permissions: 750
2020-08-06 16:45:58 INFO     File permissions: 640
2020-08-06 16:45:58 INFO     Synchronisation interval: 43200
2020-08-06 16:45:58 INFO     Time zone: Europe/London
2020-08-06 16:45:58 INFO     Additional command line options: --auto-delete --set-exif-datetime
2020-08-06 16:45:58 INFO     Adding password to keyring...
Enter iCloud password for email@address.com:
Save password in keyring?  [y/N]: y
Two-step authentication required. Your trusted devices are:
  0: SMS to 07********
Which device would you like to use? [0]: 0
Please enter validation code: 123456
2020-08-06 16:47:04 INFO     Using password stored in keyring
2020-08-06 16:47:04 INFO     Generate 2FA cookie with password: usekeyring
2020-08-06 16:47:04 INFO     Check for new files using password stored in keyring...
  0: SMS to 07********
  1: Enter two-factor authentication code
Please choose an option: [0]: 1
Please enter two-factor authentication code: 123456
2020-08-06 16:47:30 INFO     Two factor authentication cookie generated. Sync should now be successful.

登录成功之后会保存cookie到config文件夹,cookie有效期为三个月,过期之后必须重新初始化容器。

由于云上贵州页面调整,国内用户使用boredazfcuk/icloudpd会无法通过两步验证,可以使用更换镜像miniers/icloudpd