生产环境部署 Composer 项目必须执行 composer install --no-dev --optimize-autoloader --no-interaction --classmap-authoritative,清理 vendor/bin、tests、.git 等敏感文件,并在 CI 打包后验证 autoload 可用性,生产机严禁运行 composer install。

生产环境部署 Composer 项目,不能只跑 composer install --no-dev 就完事——它只是起点,不是终点。漏掉后续清理和验证,线上大概率出 Class not found、首页超时、甚至泄露 .env 或 installed.json。
必须加的三个参数:--no-dev --optimize-autoloader --no-interaction
这三个参数是互锁生效的最小安全集,少一个就可能卡在 CI、拖慢响应或暴露调试入口:
-
--no-dev:跳过require-dev里的所有包(如phpunit/phpunit、symfony/debug-bundle),否则它们会进vendor/autoload.php,引发类加载冲突或意外执行 -
--optimize-autoloader:生成vendor/composer/autoload_classmap.php,把类名直连文件路径;不加它,每次请求都得遍历目录找类,单次 autoload 从 0.05ms 拉到 1.2ms 以上 -
--no-interaction:防止构建时遇到 GitHub 认证提示卡住,尤其 Docker 构建会直接超时失败
注意:--classmap-authoritative 应该显式加上(替代已废弃的 --optimize),它强制 autoloader 只查 classmap,不再 fallback 到 PSR-4 扫描——性能更高,但要求所有类必须能被自动发现(比如不能靠 class_exists("Foo\" . $name) 动态拼名)。
装完必须删:vendor 里哪些东西不能留
composer install --no-dev --optimize-autoloader 只控制“装什么”,不管“留什么”。这些残留必须手动清理:
-
vendor/bin/:全删,除非你明确需要phinx或doctrineCLI 工具在线上运行 -
vendor/**/tests/、vendor/**/Tests/、vendor/**/test/、vendor/**/Test/ vendor/**/{.git,.gitignore,.travis.yml,phpunit.xml,phpstan.neon,psalm.xml}-
vendor/**/docs/、vendor/**/examples/、vendor/**/demo/ -
vendor/composer/installed.json:含全部包哈希与版本,泄露后可精准定位漏洞组件
Linux/macOS 下可用:find vendor -path '*/tests' -o -path '*/.git' -o -name 'phpunit.xml' -delete;CI 中建议用 rm -rf vendor/bin vendor/*/tests vendor/*/docs vendor/composer/installed.json 显式声明,避免 glob 漏删。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
打包前要验证:解压即运行才是真可靠
别信“打包成功”日志。上线前必须验证打包产物是否真正可运行:
- 先解压到空目录,进入后执行:
php -r "require 'vendor/autoload.php'; echo 'OK';"—— 这比任何构建步骤都管用 - 确认
composer.lock在包内且与代码提交一致;如果本地改了composer.json但没重生成 lock,线上 install 会降级或升级包,破坏可重现性 - 用
tar或zip打包时,必须显式排除:.git、tests/、.env*、phpunit.xml、docker-compose.yml;直接tar -czf release.tar.gz .很危险
推荐最小化打包命令:tar -czf release-$(date +%Y%m%d).tar.gz --exclude='.git' --exclude='tests' --exclude='.env*' --exclude='phpunit.xml' .
生产机上绝对不能运行 composer install
这不是优化建议,是硬性红线。原因很实在:
-
file_put_contents(./composer.json): failed to open stream: Permission denied:web 用户(如www-data)通常没权限写vendor/或composer.lock,排查耗时远超预估 - 环境漂移:
Your platform does not meet the requirements,比如本地 PHP 8.2,线上还是 8.1,platform-check 直接中断部署 - 安全暴露:Nginx 配置稍有疏漏(如未禁用
.env),几秒内数据库密码全进攻击者手里
正确做法是:在 CI/CD 构建机上完成 composer install --no-dev --optimize-autoloader --classmap-authoritative --no-interaction,再把整个项目(含已安装的 vendor/)打包同步到生产机。生产机不需要装 Composer,也不执行任何包管理命令。

















