不能直接在树莓派上同步 packagist 全量数据,因其超 400 万包会导致内存耗尽、sd 卡 i/o 崩溃、php-pcntl 不稳定及空间不足;可行方案是用 composer-proxy 做被动缓存代理,配合 usb ssd 缓存、nginx + php-fpm 及正确客户端配置。

Composer 镜像源同步本身不是为树莓派这类 ARM 设备设计的典型工作负载,直接在 Pi 上跑完整镜像站(如 packagist.org 全量同步)既不现实也不必要——它会吃光内存、拖垮 SD 卡寿命,且无实际收益。
为什么不能直接在树莓派上同步 packagist 全量数据
packagist.org 的元数据量已超 400 万包,全量拉取 + 解析 + 存储需要:
-
composer archive每次请求都触发大量 HTTP/HTTPS 连接和 JSON 解析,Pi 4B 的单核性能瓶颈明显 - SQLite 或 MySQL 在 SD 卡上频繁写入会导致 I/O 崩溃或提前损坏(尤其
vendor/级别缓存目录) - 官方
packagist-mirror工具依赖php-pcntl和php-redis,而树莓派默认 PHP(php8.2)在armhf下对pcntl支持不稳定,容易 SIGCHLD 崩溃 - 全量镜像需至少 15GB 可用空间,远超多数 Pi 启动卡容量
真正可行的低功耗方案:只缓存你用到的包
与其“同步镜像”,不如让 Pi 成为一个被动缓存代理——它不主动拉取,只在首次请求时下载并本地存一份,后续复用。这是唯一能在 Pi Zero 2W / Pi 4B 上长期稳定运行的方式。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 使用
toran-proxy的轻量替代品:composer-proxy(纯 PHP 实现,无数据库,基于文件系统缓存) - 配置
cache-dir指向外接 USB SSD(避免 SD 卡磨损),例如/mnt/ssd/composer-cache - 启动命令加
--memory-limit=256M防止 OOM,Pi 4B(2GB 版)建议设为512M - 用
systemd管理进程,启用Restart=on-failure和MemoryMax=512M限制
如何让本地项目真正走 Pi 上的缓存代理
关键不在 Pi 怎么跑,而在客户端 Composer 是否真把请求发过去。常见失效原因:
- 没改全局
config.json,只改了项目级的——执行composer config -g repo.packagist composer https://pi-ip:8080 - HTTP 代理未启用 TLS:Pi 上若用
https://域名但没配证书,客户端会拒绝连接;建议用http://pi-ip:8080并在composer.json中显式指定"secure-http": false - 防火墙拦截:Raspberry Pi OS 默认启用
ufw,需运行sudo ufw allow 8080 - PHP 内置服务器不支持并发:别用
php -S跑,改用nginx + php-fpm,哪怕只开 2 个 worker
最易被忽略的是缓存键设计——composer-proxy 默认按 name+version 缓存,但如果你在 composer.json 中用了 dev-main 或 dev-feature/x 这类分支引用,它不会命中缓存,而是每次都回源。生产环境应统一约束为 ^x.y.z 语义化版本。










