Laravel Forge 本质上是一个服务器管理与部署自动化平台,它并不自己出租物理机或虚拟机,而是借助你的 DigitalOcean、AWS、Linode 等云账户去开通实例,随后通过 SSH 完成系统级初始化。对于习惯写业务代码但不想深陷运维细节的开发者来说,这种“半托管”模式既保留了底层控制权,又省去了重复编写 Ansible 脚本的成本。理解它的工作逻辑,核心在于分清“provision(供给)”和“deploy(部署)”两个阶段:前者只发生一次,负责把裸机变成能跑 PHP 应用的环境;后者每次发版触发,负责把新代码安全送到线上。

如何创建服务器并完成系统初始化
在 Forge 控制台中点击“Create Server”,首先要选择云服务商并填写 API Token,这样 Forge 才能代你调用厂商接口开机器。接着需要指定区域、实例规格、数据库类型(MySQL、PostgreSQL 或 MariaDB)以及 PHP 版本。这里一个容易忽略的点是“Default Site”设置,它决定了这台服务器上第一个虚拟主机绑定的域名和项目路径,如果暂时没有域名,可以先填服务器 IP,后续再在 Site 管理里修改。
点击确认后,Forge 会在后台执行长达数分钟的 provision 流程。它实际做的是通过 root 身份 SSH 登录新机,安装 Nginx、所选 PHP 版本的 FPM、数据库服务、Redis(可选)、以及 Supervisor 用于托管队列进程。与此同时,Forge 会为你创建独立的 forge 系统用户,并把自己的公钥写进 authorized_keys,保证以后部署时能用非 root 身份拉代码。这套动作等价于你手工执行几十行 apt 命令,但 Forge 额外处理了权限边界和目录结构,避免新手把项目直接放在 /var/www 下导致写权限混乱。
初始化结束后,面板会展示服务器的 IP、SSH 连接命令和数据库密码。此时若你登入机器,会看到 /home/forge 下已存在默认站点目录。需要强调的是,provision 阶段生成的配置模板偏向通用安全基线,比如关闭 root 远程登录、开启 ufw 防火墙仅放行 22、80、443。如果你的业务需要自定义内核参数或挂载对象存储,仍要在服务器层面手动补充,Forge 并不覆盖这类深度定制。
站点与 Git 仓库如何关联并触发部署
服务器就绪后,进入“Sites”标签页新增站点,填写域名并选择此前创建的服务器。Forge 会自动生成 Nginx 的 server 块,并将项目根目录指向 /home/forge/你的域名 这样的路径。下一步是绑定代码源,支持 GitHub、GitLab 和 Bitbucket,授权后在下拉框选中具体仓库与分支。这里要注意,默认部署分支应是稳定分支如 main,而非开发中的 feature 分支,否则一次误合并就会直接反映到生产。
部署脚本是 Forge 的灵魂。平台提供一份可编辑的模板,内容大致包含 git pull、composer install --no-dev、php artisan migrate --force、缓存清理与重启队列。你可以根据项目需要插入前端构建命令,例如 npm ci 与 npm run build。每次点击“Deploy Now”或向仓库推送并配置好 Quick Deploy 钩子,Forge 就会以 forge 用户身份跑这份脚本。相比手工登录执行,它保证了环境一致,也留下了每次部署的退出码日志,方便排查失败。
一个常见误区是认为 Forge 会自动做零停机。实际上默认脚本是原地拉取,若迁移锁表或队列重启瞬间,可能出现短暂请求错误。成熟做法是在脚本开头使用 php artisan down 维护模式,结尾再 up,或者引入 Envoyer 做蓝绿发布。下面是一段典型的自定义部署脚本片段,展示了如何在拉取代码后正确重载 PHP 服务而不中断 Nginx:
cd /home/forge/example.ipipp.com git pull origin main composer install --no-interaction --prefer-dist --optimize-autoloader php artisan migrate --force php artisan config:cache php artisan route:cache sudo supervisorctl restart all echo "部署完成"
服务器日常监控与队列任务管理
除了部署,Forge 把运维面板也做了轻量化整合。在服务器详情页能直接看到 CPU、内存、磁盘的实时折线图,数据来源于它安装的监控代理,无需你再接 Prometheus。当某个站点流量突增导致 PHP-FPM 进程占满时,你可以不登机就在面板里调整 pm.max_children 参数并热重启,这种闭环显著降低了故障响应时间。对于小团队,这比单独搭建 Grafana 更划算。
队列与定时任务同样可以在 UI 中声明。以往写 cron 要记得漏了重定向日志就会塞满 mail,而 Forge 的“Scheduler”让你勾选 Artisan 命令、设置频率,背后自动写成 /etc/cron.d 文件并落盘。守护进程则交给 Supervisor 配置段,面板提供新增 worker 的表单,填好命令 php artisan queue:work 与进程数即可。下面是用 Forge 风格管理的 Supervisor 配置示例,注意程序名避免重名:
[program:forge-worker] process_name=%(program_name)s_%(process_num)02d command=php /home/forge/example.ipipp.com/artisan queue:work redis --sleep=3 --tries=3 autostart=true autorestart=true user=forge numprocs=2 redirect_stderr=true stdout_logfile=/home/forge/worker.log
最后谈谈成本与边界。Forge 按月收费但不包含云主机费用,若你只有一台机器,单价可能显得略高,但当你管理五台以上异构服务器时,统一密钥、批量打补丁的价值就出来了。它不适合完全无法联网的内网隔离环境,因为控制面依赖 SaaS 通道。对于追求极致合规的企业,可评估将其仅用于非敏感业务的快速验证,核心系统仍走自有 CI/CD 流水线。
Laravel_Forge服务器部署自动化运维修改时间:2026-08-17 22:32:32