Laravel生产环境部署必须设APP_ENV=production、APP_DEBUG=false、APP_URL,生成APP_KEY,运行config:cache并禁用dev依赖;Nginx需限制敏感路径访问,PHP须启用指定扩展,数据库需支持JSON字段并建索引。

将Laravel项目部署到生产环境时,必须确保配置安全、性能稳定、路径正确且敏感功能被禁用,否则可能引发数据泄露、500错误或静态资源无法加载等问题。
基础环境与配置检查
确认服务器已安装 PHP 8.2+(Laravel 11 要求)、OpenSSL、PDO、Mbstring、Tokenizer、XML、Ctype、JSON 和 BCMath 扩展。缺少任一扩展会导致 Artisan 命令失败或路由无法解析。
运行 php -v 和 php -m | grep -E "openssl|pdo|mbstring" 验证版本与模块状态。
【APP_KEY 必须在部署前生成且不可为空】 若未设置,Laravel 会抛出 RuntimeException 并拒绝启动;执行 php artisan key:generate --force 写入 .env,切勿使用默认 key 或留空。
环境变量与缓存处理
第一步:编辑 .env 文件,确保以下三项明确设置:
APP_ENV=production
APP_DEBUG=false
APP_URL=https://your-domain.com
第二步:清除所有旧缓存并重建生产级配置缓存:
php artisan config:clear → php artisan config:cache → php artisan cache:clear
注意:执行 config:cache 后,env() 函数在非 config/ 目录下将返回 null,所有环境读取必须通过 config('app.name') 等方式间接获取。
静态资源与上传目录防护
将 public/ 目录设为 Web 服务器根目录(如 Nginx 的 root 或 Apache 的 DocumentRoot),其他文件(app/、vendor/ 等)严禁对外可访问。
在 public/.htaccess 末尾添加三行,禁止目录列表暴露上传文件:
<Files *>
Options -Indexes
</Files>
若使用 Nginx,需在 server 块中显式拒绝访问敏感路径:
location ~ ^/(app|bootstrap|config|database|resources|routes|tests|vendor)/ { return 403; }
依赖安装与开发包隔离
方法一:使用 --no-dev 参数安装生产依赖,跳过 debugbar、pint、pest 等仅开发用包:
composer install --no-dev --optimize-autoloader
方法二:若已存在 vendor/,先删除再重装:
rm -rf vendor → composer install --no-dev --optimize-autoloader
这一步能减少约 60% 的磁盘占用,并消除因开发包引入的潜在 XSS 或信息泄露入口。
数据库与 JSON 字段兼容性
确认数据库版本满足要求:MySQL ≥ 5.7、MariaDB ≥ 10.2、PostgreSQL ≥ 9.4——Nova Flexible Content 等依赖 JSON 字段的扩展在此类低版本上会直接报错。
对含 JSON 字段的表执行索引优化:
ALTER TABLE users ADD INDEX idx_settings_json (settings->"$.theme");
不建索引会导致 WHERE JSON_CONTAINS(settings, '"dark"') 类查询全表扫描,页面加载延迟从 20ms 拉升至 2s+。


















