必须配置composer脚本自动执行密钥生成、迁移和缓存清理:在composer.json中添加post-root-package-install、post-create-project-cmd、post-install-cmd和post-update-cmd等scripts,确保部署时自动生成.env、app_key,运行migrate并重建所有缓存。

在Windows或Linux服务器上完成Laravel项目部署时,必须通过Composer脚本配置确保自动执行关键初始化动作,比如生成密钥、运行迁移、清空缓存,否则新部署的站点将无法正常访问或报错“Application key not set”。
确认Composer已就绪并切换国内镜像
打开终端(CMD/PowerShell/Terminal),执行 composer --version,看到版本号即表示可用;若提示“不是内部命令”,说明未加入系统Path或安装失败。
执行以下命令将Packagist源切换为阿里云镜像,避免因网络问题卡在“Loading composer repositories”:
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
【注意:此操作影响全局所有项目,不可逆】
在laravel项目根目录下配置scripts字段
用文本编辑器打开项目根目录下的 composer.json 文件,在 "scripts" 键下添加以下内容(若无该键则新建):
"post-root-package-install": [
"@php -r \"file_exists('.env') || copy('.env.example', '.env');\""
],
"post-create-project-cmd": [
"@php artisan key:generate"
],
"post-install-cmd": [
"@php artisan clear-compiled",
"@php artisan optimize",
"@php artisan config:clear",
"@php artisan cache:clear"
],
"post-update-cmd": [
"@php artisan migrate --force",
"@php artisan storage:link",
"@php artisan config:cache",
"@php artisan route:cache",
"@php artisan view:cache"
]
保存文件。这些脚本会在不同阶段自动触发,例如 post-update-cmd 会在 composer update 后执行迁移和缓存重建。
验证scripts是否生效
方法一:手动触发测试
进入项目根目录,执行:
composer run-script post-install-cmd
观察终端输出是否出现 Application key set successfully. 和 Configuration cached successfully. 等成功提示。
方法二:模拟完整部署流程
① 删除 bootstrap/cache/config.php 和 .env 文件
② 执行 composer install --no-dev --optimize-autoloader
③ 检查是否自动生成了 .env 并设置了 APP_KEY,且 public/storage 软链接存在
如果第②步执行后未生成密钥或报错“Key path does not exist”,说明 post-root-package-install 或 post-create-project-cmd 未被正确识别——此时需确认 composer.json 中 scripts 的缩进格式为双引号包裹的字符串数组,且无语法错误。
上线前强制启用scripts的安全加固
在生产环境部署时,禁止跳过 scripts 执行:
执行 composer install --no-dev --optimize-autoloader --no-interaction
其中 --no-interaction 是关键,它让 Composer 不等待用户输入,完全依赖 scripts 自动完成初始化;缺少该参数可能导致 migration 被挂起等待确认。
若部署后仍出现 500 错误,立即检查 storage/logs/laravel.log,常见原因是 APP_KEY 为空或 config:cache 失败——这说明对应 script 未运行,应返回上一步检查 composer.json 结构。











