群晖上 Composer 报错主因是 CLI 与 WebStation 使用不同 PHP 环境:需统一使用 WebStation 所配 PHP 路径(如 /volume1/@appstore/PHP82/usr/bin/php),检查扩展、CA 证书路径,并用该 PHP 安装及运行 Composer,避免系统默认 PHP 干扰。

确认 WebStation 对应的 PHP 路径和 CLI 环境是否一致
群晖上 composer 启动就报错,90% 是因为用了系统默认的 php(比如 PHP 5.6),而 WebStation 实际跑的是 /volume1/@appstore/PHP82/usr/bin/php。这两套环境完全隔离:扩展、php.ini、甚至 OpenSSL 证书路径都不同。
- 先查你站点绑定的 PHP 版本:DSM → WebStation → PHP 设置 → 看「已启用的 PHP 版本」及对应「PHP Path」
- 用该路径验证 CLI 是否可用:
/volume1/@appstore/PHP82/usr/bin/php -v - 再检查关键扩展是否加载:
/volume1/@appstore/PHP82/usr/bin/php -m | grep -E "(curl|openssl|json|phar|zlib|mbstring)"—— 缺哪个,就回 WebStation 的「扩展」里勾选,然后**单独重启该 PHP 版本**(不是重启 WebStation)
下载安装 composer.phar 必须绕过系统 curl 和默认 php
群晖默认没 curl 命令,或版本太老不支持 HTTPS SNI;直接 curl -sS https://getcomposer.org/installer | php 会失败,且生成的 composer.phar 可能依赖错误 PHP 版本,后续 composer install 解包 Phar 或加载 autoload.php 就崩。
- 改用 PHP 内置
copy()下载安装器:/volume1/@appstore/PHP82/usr/bin/php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" - 指定同一 PHP 运行安装脚本:
/volume1/@appstore/PHP82/usr/bin/php composer-setup.php --filename=composer.phar --install-dir=/usr/local/bin --version=2.7.7(v2.7.7兼容 PHP 8.0–8.2,避开 v2.8+ 的严格要求) - 删掉临时文件:
rm composer-setup.php
软链接到 /usr/local/bin/composer 失败?别用 root
ln: failed to create symbolic link '/usr/local/bin/composer': Operation not permitted 不是权限不够,而是群晖把 /usr/local/bin 挂为只读——但它允许普通 DSM 用户(如 admin)在此创建符号链接,前提是别切 root。
- SSH 登录时用你的 DSM 用户名,例如:
ssh admin@192.168.1.10,不要sudo -i或su - 把
composer.phar放到你有写权限的位置,比如:/volume1/homes/admin/bin/composer - 再执行:
ln -sf /volume1/homes/admin/bin/composer /usr/local/bin/composer - 验证:
which composer应返回/usr/local/bin/composer,且composer --version能输出版本号
composer diagnose 报 SSL 或 git 错误?说明还没真正可用
composer --version 成功 ≠ composer install 能跑通。常见问题包括:CA 证书缺失导致 HTTPS 请求失败、git 命令未安装、或 CLI 的 openssl.cafile 没指向正确路径。
- 运行
composer diagnose,重点看curl和openssl检查项 - 若提示 SSL 错误,手动编辑 CLI 的
php.ini(路径类似/etc/php/cli-php82/php.ini),添加:openssl.cafile=/etc/ssl/certs/ca-certificates.crt - 群晖默认没装
git,需手动安装(如通过 Entware):opkg install git,否则composer create-project会卡在克隆阶段
php 二进制路径,漏一步,后面 autoload、扩展、SSL、git 全都会陆续报错。









