ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

苹果相册大搬家:用 docker-icloudpd 把 iCloud 照片悄悄存进自家硬盘

苹果相册大搬家:用 docker-icloudpd 把 iCloud 照片悄悄存进自家硬盘 苹果相册大搬家用 docker-icloudpd 把 iCloud 照片悄悄存进自家硬盘【免费下载链接】docker-icloudpdAn Alpine Linux container for the iCloud Photos Downloader command line utility项目地址: https://gitcode.com/GitHub_Trending/do/docker-icloudpd先讲个我自己的血泪故事去年年底我换了台新手机旧 iPhone 里攒了六年的照片和视频大概有 40GB。导出的那天晚上我坐在电脑前盯着「正在同步」的进度条等了整整三个小时中途还断了一次又从头再来。那一刻我就在想这些照片明明是我自己的凭什么取回来要这么费劲后来我把照片放进群晖 NAS日子算是安定了。可我老婆的手机、我爸妈的手机还各自躺在各自的 iCloud 里。让二老学会「定期导出照片」比让他们学会用 iPad 还难。直到我遇到 docker-icloudpd事情才真正开始变简单。这个东西到底是什么一句话说清docker-icloudpd 是一个跑在 Alpine Linux 上的轻量级 Docker 容器里面装好了 iCloud Photos Downloader 这个命令行工具。你只要把 Apple ID 给它它就会按照你定的节奏自动把 iCloud 里的照片和视频拉到你的服务器或 NAS 上全程无人值守。说白了它像是一个只认你家的 iCloud 专属搬运工替你盯着云端来一张搬一张。它还顺手解决了几个很实际的麻烦——苹果的 HEIC 格式它可以自动转成 JPG登录凭证它帮你存在系统钥匙环里相册、共享图库、实况照片都能按需下载。甚至它连「你家有几个人用 iPhone」这件事都考虑到了一台机器可以同时伺候多个账号。跟「手动导出」和「网盘中转」比它到底强在哪很多人听到「iCloud 备份」第一反应是我直接用浏览器下载不就行了或者干脆把照片转发到百度网盘。我们不妨把这几种路数摆在一起看看方案要不要人工盯着能否自动增量HEIC 兼容数据主权多账号支持浏览器手动下载要且断点续传看运气否得自己转格式在你自己手里无网盘中转要还得忍受压缩否会被二次压缩在别人手里无手机端「隔空投送」要几十张就累否部分设备打不开在你自己手里无docker-icloudpd 定时同步不用是按小时/天自动拉取自动转 JPG完全在自己硬盘里支持一人一套配置这么一对比就清楚了这个容器最大的价值不是「能下载」而是「能自动、安静、持续地下载」把一件本来要手工反复做的事情变成了后台的固定日程。动手前先备好这几样东西别紧张门槛真的不高你需要准备的只有四样一台装了 Docker 的机器Linux 服务器、群晖、威联通甚至树莓派都行一个开启了双重认证的 Apple ID至少 1GB 的可用磁盘空间照片多的建议按你相册体量准备一个愿意花二十分钟的晚上有一个前提必须先说清楚如果你的 iCloud 开启了「高级数据保护」Advanced Data Protection这个容器是无法工作的因为它要求照片在苹果服务器上可被网页访问。动手之前先去设置里把这个开关关掉。从零到一半小时跑通第一张照片第一步把「家」先搭起来我们先在服务器上给照片建一个专门的落脚点。注意这个目录必须手动放一个名为.mounted的占位文件进去mkdir -p /home/你的用户名/iCloud touch /home/你的用户名/iCloud/.mounted别小看这个动作。容器有个「保险丝」设计它每次干活前都会检查这个文件在不在如果不在就拒绝下载。这是为了防止你的存储卷没挂好时它把照片一股脑写进系统盘把根分区撑爆。所以这个文件是硬性要求少了它同步永远不启动。第二步用 compose 把容器拉起来我建议直接复用项目自带的编排模板它比我见过的很多示例都贴心——一上来就演示了「两个用户怎么共存」networks: icloudpd: name: icloudpd driver: bridge volumes: icloudpd_user1_config: name: icloudpd_user1_config icloudpd_user2_config: name: icloudpd_user2_config services: icloudpd_user1: hostname: icloudpd_user1 networks: icloudpd: aliases: - icloudpd_user1 environment: - TZAsia/Shanghai - useruser1 image: boredazfcuk/icloudpd healthcheck: test: /usr/local/bin/healthcheck.sh start_period: 30s restart: always volumes: - icloudpd_user1_config:/config - ./iCloud/:/home/user1/iCloud/如果你只有一个人用把 user2 那一段删掉就行。这里有两个细节值得留意/config必须用具名卷因为登录凭证和 cookie 都存在这里。你要是图省事随便映射了个普通目录容器一重建就得重新登录。TZ时区建议直接设成Asia/Shanghai它会影响到照片文件的时间戳计算。在项目目录下执行docker compose up -d第三步初始化登录这一步最像「仪式」容器第一次跑起来后不会立刻干活它要等你「授个权」。执行docker exec -it icloudpd_user1 sync-icloud.sh --Initialise接下来就是跟着提示走输入 Apple ID 和密码选择验证方式输入手机上收到的六位验证码。搞定之后密码会存进容器内的系统钥匙环同时生成一个 MFA 登录 cookie。整个流程走完你会看到一条Multifactor authentication cookie generated的日志到这儿搬运工就正式上岗了。第四步认识一下那张「配置总表」首次启动时容器会在/config/icloudpd.conf里生成一份默认配置。以后你改配置都是在改这个文件容器会自己热加载大部分情况不用重启。几个最常用的开关我先给你划重点配置项干什么用的我的建议apple_id登录哪个账号必填相当于身份证download_interval多久同步一次默认 8640024小时就挺好别小于 12 小时folder_structure照片落盘的目录结构默认{:%Y/%m/%d}按年月日归档强烈建议保持convert_heic_to_jpegHEIC 自动转 JPG设成true原文件会保留额外产出一份 JPGjpeg_qualityJPG 压缩质量默认 90够用photo_size下载原图还是缩略图默认original别动skip_check跳过文件清单检查照片超过几千张时设成true能避免大库卡死icloud_china国区账号开关国区用户记得设成true走 icloud.com.cn如果你正好是国区用户记住一句话icloud_china和auth_china这两个开关要么都不开要么一起开只开一个容器会自己嘟囔「你是不是搞错了」。认证书过期了别慌有两种姿势都能救苹果为了「安全」把 MFA cookie 的有效期从 90 天一路砍到了 30 天。也就是说每隔一个月左右容器就会开始提示你该重新认证了。在家的时候最简单直接进容器跑一句docker exec -it icloudpd_user1 reauth.sh手机会弹出验证码输进去就完事比重新初始化快得多。人在外面也不用干着急——如果你配了 Telegram 通知直接在聊天窗口里给机器人发一句「你的用户名 auth」容器会在几分钟内回复你问你要验证码。你再把「用户名 空格 六位数字」发回去它自己就完成了重新认证全程不用碰命令行。对了这条功能是作者特意做的他还在文档里苦口婆心地提醒大家验证码别随便给人但你自己信得过自己的容器那就随意。官方文档没细说的几个进阶玩法玩法一给 Telegram 发个名字立刻触发同步默认 24 小时同步一次听起来有点慢其实你根本不用等。只要配好了 Telegram往机器人那儿发一条消息内容是你在配置里设的user名字容器收到后会立刻开始一轮同步。周末出去玩拍了一堆照片回家路上发个消息到家就能在 NAS 里看到了。玩法二让 Nextcloud 替你二次备份这个容器不止会下载它还能把下载好的照片继续上传到你的 Nextcloud。打开nextcloud_uploadtrue填好地址、用户名、密码和目标目录之后每一张下载的照片都会自动同步进 Nextcloud。删除了的也会跟着删。相当于给照片上了双保险一套数据两份存放。玩法三用 cron 代替常驻循环如果你不喜欢容器一直挂着轮询可以把single_passtrue设上容器跑完一轮就退出。然后你在宿主机上用 cron 定时拉起它比如每天凌晨三点跑一次。注意这时候容器的restart策略必须设成no不然它会「跑完立刻重启」跟苹果服务器较劲。玩法四给老照片补一张 JPG早期版本的 HEIC 转换工具有个旋转方向的 bug导致转出来的 JPG 是歪的。如果你手上有那批历史文件不用重新下载直接执行docker exec -it icloudpd_user1 sync-icloud.sh --Force-Convert-All-HEICs它会用现在内置的 ImageMagick 把旧文件重新转一遍把方向纠正过来。类似的命令还有--Convert-All-HEICs只补缺的、--Remove-All-JPGs清掉所有带对应 HEIC 的 JPG、--List-Albums看看有哪些相册可下等都在sync-icloud.sh里挂着用--help就能看到。新手最容易踩的 3 个坑坑一忘了建.mounted文件容器「装死」这是问得最多的一个。容器启动了、日志也正常就是不下照片。九成原因都是那个.mounted占位文件没创建。记住这个文件必须手动建没有捷径。坑二同步间隔设太短被苹果「关小黑屋」有人觉得同步越勤越好直接设成 1 小时。苹果那边会判定你访问太频繁然后返回ACCESS_DENIED提示你过几个小时再试。官方建议是 24 小时一次最多别低于 12 小时。真被限流了把间隔调回去容器关掉六到十二小时等它消气。坑三账号开了「高级数据保护」这个最隐蔽。如果你在 iOS 16.2 之后开了 Advanced Data Protection照片在苹果服务器上是被端到端加密的网页端拿不到容器自然也就下载不了。症状表现为一切配置正确但始终同步失败。解决办法就是在 Apple ID 设置里关掉这个功能。另外还有两个「小提醒」级别的坑一是树莓派用户如果发现容器行为异常创建时加上--privileged参数往往能解决二是如果你要同时下载多个相册苹果可能会要求你重新走一遍双重认证这不是 bug是苹果的机制。写在最后让照片真正「属于你」做完这一切之后你会发现一个很安心的变化每天深夜容器会安静地醒来把这一天新增的照片从云端搬回你家的硬盘然后继续睡去。你不用再惦记「要不要备份」因为备份这件事已经变成了一条不会忘记的流水线。照片这东西真正值钱的从来不是像素而是它记录的那些日子。与其每年为云存储续费或者在某次换机时手忙脚乱地导出不如花上二十分钟让它们从此踏踏实实地躺进你自己的硬盘里。如果你也想自己动手编译这个镜像可以拉取仓库源码研究git clone https://gitcode.com/GitHub_Trending/do/docker-icloudpd今晚就让你家那台闲置的服务器开始替你守护全家人的回忆吧。【免费下载链接】docker-icloudpdAn Alpine Linux container for the iCloud Photos Downloader command line utility项目地址: https://gitcode.com/GitHub_Trending/do/docker-icloudpd创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表