You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GitLab CI通过SSH部署时提示composer: command not found问题求助

问题原因

你遇到的报错本质是SSH远程执行命令时默认使用非交互非登录shell,不会加载用户家目录下的.bashrc、.profile等环境变量配置文件,而你服务器上的Composer路径大概率是写到了这些用户级配置的PATH变量里,没有加入全局环境变量,所以远程执行时系统找不到Composer命令。
你本地登录服务器、直接挂载Docker镜像运行都是用的登录/交互shell,会加载完整环境变量,所以可以正常执行。

解决方法

方案1(最快捷,优先推荐):使用Composer绝对路径执行

  1. 手动登录你的部署服务器,执行which composer获取Composer的绝对路径,例如输出为/usr/local/bin/composer
  2. 修改.gitlab-ci.yml中script段的对应命令,替换为绝对路径即可:
script:
  - ssh ${DEPLOY_USER}@${DEPLOY_SERVER} "cd ${DEPLOY_DIR} && git pull origin main"
  # 把这里的composer替换为你实际查到的绝对路径
  - ssh ${DEPLOY_USER}@${DEPLOY_SERVER} "cd ${DEPLOY_DIR} && /usr/local/bin/composer install --no-interaction --prefer-dist --optimize-autoloader"

方案2:强制SSH执行时加载登录shell

在远程执行的命令前加bash -l -c触发登录shell加载用户环境变量:

- ssh ${DEPLOY_USER}@${DEPLOY_SERVER} "cd ${DEPLOY_DIR} && bash -l -c 'composer install --no-interaction --prefer-dist --optimize-autoloader'"

方案3:全局配置Composer路径(需要服务器root权限)

编辑服务器的/etc/environment文件,把Composer所在的目录追加到PATH变量中,保存后所有用户、所有类型的shell都可以直接识别composer命令。

额外排查点

确认你CI配置中使用的${DEPLOY_USER}和你手动登录服务器测试的用户是同一个,避免出现不同用户环境变量配置不一致的问题。

内容的提问来源于stack exchange,提问作者patrick

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 16:30:02