在 Azure Web App 中不应手动运行 composer install,因其无状态容器会在重启或扩缩容时重置文件系统,导致 vendor 目录和 Composer 工具丢失;唯一可靠方式是在 ZIP 或 CI/CD 部署流程中自动执行或预生成 vendor 并打包。

在 Azure Web App 中直接执行 composer install 是不可靠的,也不推荐——它只在部署阶段由平台自动触发,且无法保证持久生效。
为什么不能在 SSH 里手动运行 composer install?
你确实能通过 SCM(https://{your-app}.scm.azurewebsites.net/webssh/host)连进容器并执行 composer install,但问题在于:
- Azure App Service for Linux 是无状态容器,每次重启、扩缩容或底层实例切换都会重置文件系统;
/home/site/wwwroot以外的写入(比如vendor/目录)可能被丢弃 - 即使你用
curl -sS https://getcomposer.org/installer | php装了composer.phar并设为全局命令,下次容器重建后它就没了 - PHP 运行时本身不包含 Composer,它只是部署流水线中的一个环节,不是运行时依赖
真正起作用的只有部署时的自动化流程
Azure 应用服务在 ZIP 或 Git 部署时会按固定顺序执行构建步骤,composer install 只有在这套机制里才稳定生效:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 如果你用 ZIP 部署(推荐),且 ZIP 包中包含
composer.json,Kudu 会自动检测并运行php composer.phar install --no-interaction --prefer-dist - 如果你用 GitHub Actions 或 Azure Pipelines,应在构建阶段显式调用
composer install,再把生成的vendor/打包进 ZIP - 若需自定义行为(如指定镜像源、跳过脚本),可通过环境变量控制:
COMPOSER_MIRROR=alibaba或在composer.json中配置"config": {"fxp-asset": {"enabled": false}}
绕过自动安装的两种安全替代方式
当自动安装失败(比如因 SSL 证书或网络策略报错 SSL3_GET_SERVER_CERTIFICATE),不要硬改容器,而是从源头解决:
- 本地运行
composer install --no-dev --optimize-autoloader,把完整的vendor/目录打进 ZIP 包再上传——这是最可控的方式 - 在部署前脚本中预加载证书:设置
PRE_BUILD_COMMAND="wget -O /tmp/cacert.pem http://curl.haxx.se/ca/cacert.pem && export SSL_CERT_FILE=/tmp/cacert.pem",再让平台继续走默认流程
关键点是:Azure Web App 的 PHP 环境不为你维护开发态工具链,它只负责运行已准备好的代码。任何试图“在生产容器里装 Composer”的操作,本质上是在对抗平台的设计约束。

















