laravel forge部署核心是使用$php_binary变量执行artisan命令,避免调用系统旧版php导致静默失败;需手动添加supervisor重启、node.js构建、分支切换及缓存命令正确顺序。

直接用 Laravel Forge 部署项目,核心就一条:别手写 php 命令,必须用它自动注入的 $PHP_BINARY 变量,否则大概率调到系统旧版 PHP,artisan 命令静默失败、缓存不生效、甚至迁移卡住没报错。
Forge 部署脚本里为什么不能写 php artisan
Forge 在部署时会根据服务器 PHP 版本自动设置 $PHP_BINARY(比如 /usr/bin/php8.2),但这个变量只在部署脚本上下文中有效。你如果硬写 php artisan migrate,系统就会走 $PATH 里的默认 php —— 很可能是 PHP 7.4 或 8.0,跟项目要求不匹配。
-
artisan migrate --force必须加--force,否则生产环境直接跳过,不会报错也不会执行 -
composer install --no-dev --quiet --optimize-autoloader后,前端构建(如npm run build)不会自动触发,得手动加一行,且要确保 Node.js 已安装并可用 -
git pull origin main不会自动切换分支;如果你用的是production分支,得先git checkout production && git pull origin production
Supervisor 队列监听器不会自动重启
Forge 管理的 Supervisor 进程(比如 example-worker)在部署后不会自动 reload 或 restart,这意味着新代码对队列任务完全不可见,直到你手动干预。
- 部署脚本末尾必须显式加上:
sudo supervisorctl restart example-worker:(注意冒号,表示重启该组下所有进程) - 如果用的是自定义进程名(如
myapp-queue),要对应改成sudo supervisorctl restart myapp-queue: - 别依赖 Forge 的 “自动重载” 提示 —— 它只管 Nginx 和 PHP-FPM,不管 Supervisor
缓存命令顺序不能乱
config:cache、route:cache、view:cache 这三个命令有隐式依赖关系,顺序错了会导致运行时异常,比如路由 404 或配置项读不到。
- 正确顺序必须是:
config:cache→route:cache→view:cache -
route:cache依赖config:cache生效后的APP_URL、APP_DEBUG等值,否则可能缓存出错的路由前缀 -
view:cache要最后跑,否则某些 Blade 指令(如@env)可能因配置未加载而编译失败
最易被忽略的一点:Forge 的部署脚本是纯 shell 执行,没有 bash 的数组或函数支持,所有逻辑都得用 POSIX 兼容写法;哪怕只是加个日志时间戳,也得用 date +'%F %T',别用 $(date -I) 这种 GNU 扩展 —— Ubuntu 默认的 dash shell 会直接报错退出。











