Laravel生产环境部署需六步:一、安装PHP 8.1+、Nginx、MySQL、Composer及必要扩展;二、Git克隆代码并运行composer install --no-dev --optimize-autoloader;三、设APP_ENV=production、APP_DEBUG=false,生成密钥,禁止.env网络访问;四、Nginx root指向public,配置try_files与PHP处理;五、chown -R www-data:www-data storage bootstrap/cache;六、执行migrate --force及config:cache、route:cache、view:cache。

部署 Laravel 项目不是简单地把代码扔到服务器上,关键在于让环境“可信、可控、可复现”。它本质是一套围绕配置加载、权限隔离、运行时行为控制的系统性实践,而不是单点操作。
环境变量与配置加载机制
Laravel 使用 phpdotenv 库在启动时逐层加载环境变量:先读取 .env 文件,再覆盖到 PHP 的 $_ENV 和 $_SERVER,最后由 config/ 目录下的 PHP 文件通过 env() 或 $_ENV 取值。这个过程发生在框架引导早期,决定了后续所有组件的行为。
-
.env只应在开发和预发布环境存在,生产环境应通过系统级环境变量(如 systemd、Docker secrets、K8s Secret)注入,避免文件读取开销和泄露风险 -
php artisan config:cache会将所有配置合并为一个静态 PHP 数组,跳过.env解析,大幅提升性能;但执行后不能再动态修改.env,必须重新缓存 - 敏感配置(如数据库密码、API密钥)绝不能硬编码进
config/文件,必须经由环境变量注入
多环境隔离与部署策略
Laravel 原生支持 APP_ENV(如 local、staging、production),不同环境应有明确的边界:
- 开发环境启用
APP_DEBUG=true,显示详细错误,配合 Homestead 或 Laravel Sail 实现本地一致性 - 测试环境禁用调试,开启日志记录,使用内存数据库或专用测试库,避免污染真实数据
- 生产环境必须关闭调试、强制 HTTPS、设置严格 CSP 头、限制错误日志暴露,并通过
config:cache和route:cache加速启动 - 宝塔面板部署时,站点根目录应指向
public/而非项目根,防止.env和app/等敏感目录被直接访问
安全加固与最小权限原则
部署阶段是安全防线的第一道闸口:
-
.env文件权限设为600(仅属主可读写),并确保已加入.gitignore;Git 提交前可用git check-ignore -v .env验证 - Web 服务器用户(如
www-data)对storage/和bootstrap/cache/有写权限,但对.env、app/、config/等仅需读权限 - 数据库账号按需授权,例如只给应用库的
SELECT, INSERT, UPDATE, DELETE,不赋予DROP或CREATE - 使用
php artisan storage:link创建软链接而非开放public/storage目录写入权限
容器化与云原生部署要点
在 Docker 或 Kubernetes 中部署 Laravel,核心是解耦配置与镜像:
- 基础镜像选用官方
php:8.2-apache或php:8.2-cli,构建时只复制源码和依赖,不包含.env - 运行时通过
environment:或env_file:注入变量,敏感信息用secrets:管理(Docker)或Secret对象(K8s) - 对于 Reverb、队列、Horizon 等长时服务,需单独定义 Service 并配置健康检查探针
- 利用 Laravel Pulse 或自定义 Prometheus Exporter 实现运行时指标采集,避免仅靠日志排查问题


















