简介
在将 Laravel 应用部署到生产环境时,需要做一些准备工作,让它尽可能高效地运行。 本指南将讲解可靠地进行生产部署的重要要点。部署流程
服务器要求
Laravel 框架有以下系统要求。 需要 PHP 8.3 及以上,以及下表所示的 PHP 扩展。| 扩展 | 说明 |
|---|---|
| Ctype | 字符类型检查 |
| cURL | HTTP 通信 |
| DOM | XML/HTML 的 DOM 操作 |
| Fileinfo | MIME 类型检测 |
| Filter | 数据过滤 |
| Hash | 哈希函数 |
| Mbstring | 多字节字符串处理 |
| OpenSSL | 加密 |
| PCRE | 正则表达式 |
| PDO | 数据库连接 |
| Session | 会话管理 |
| Tokenizer | PHP token 解析 |
| XML | XML 处理 |
服务器配置
Nginx
如果使用 Nginx,请以以下配置文件为基础。 关键在于将所有请求转发到public/index.php。
不要将 index.php 移到项目根目录,否则会导致敏感配置文件外泄。
FrankenPHP
FrankenPHP 是一款用 Go 编写的现代 PHP 应用服务器。 只用以下命令就可以启动 Laravel 应用。目录权限
Laravel 需要向bootstrap/cache 和 storage 目录写入。
请设置权限,使 Web 服务器进程用户可以写入这些目录。
优化
在部署到生产环境时,可以缓存配置、事件、路由和视图来提升性能。 使用optimize 命令可一次完成缓存。
optimize:clear。
各项优化命令
optimize 会同时执行以下多条命令。你也可以按需分别执行。
| 命令 | 说明 |
|---|---|
php artisan config:cache | 将配置文件合并为单个文件并缓存 |
php artisan event:cache | 缓存事件与监听器的映射 |
php artisan route:cache | 缓存路由定义以加速路由注册 |
php artisan view:cache | 预编译 Blade 视图,加速请求响应 |
执行
config:cache 之后,只能在配置文件内调用 env() 函数。
缓存后 .env 文件将不再被读取,因此在配置文件之外调用 env() 会返回 null。重载服务
在部署新版本后,队列 Worker、Laravel Reverb、Laravel Octane 等长时间运行的服务需要重启,以便使用新代码。如果你使用 Laravel Cloud,所有服务的优雅重载都会自动处理,无需运行
reload 命令。调试模式
config/app.php 中的 debug 选项控制向用户展示的错误信息量。
默认使用 .env 文件中 APP_DEBUG 环境变量的值。
健康检查路由
Laravel 内置了用于监控应用状态的健康检查路由。 可与运行时监控、负载均衡、Kubernetes 等编排系统集成。 默认提供/up 端点,应用正常启动时返回 200,启动时抛出异常则返回 500。
可以在 bootstrap/app.php 中自定义 URI。
Illuminate\Foundation\Events\DiagnosingHealth 事件,
因此你可以在监听器中实现额外的数据库或缓存检查。
使用 Laravel Cloud 或 Forge 部署
Laravel Cloud
如果你想要一个完全托管、支持自动扩缩的部署平台,推荐使用 Laravel Cloud。 它是一个针对 Laravel 优化的 PaaS,提供托管的计算、数据库、缓存和对象存储。 由 Laravel 开发团队亲自调优,与框架无缝集成。Laravel Forge
如果你希望自己管理服务器,但又不想手动配置 Nginx、MySQL 等各种服务,Laravel Forge 是很方便的选择。 它可以在 DigitalOcean、Linode、AWS 等主流云服务商上创建服务器,并自动安装管理 Nginx、MySQL、Redis、Memcached、Beanstalk 等工具。下一步
部署 — 官方文档
你可以在官方文档中查看最新的部署配置详情。