Laravel项目怎么部署到宝塔面板_Laravel生产环境配置与Nginx伪静态设置【流程】

13次阅读

laravel 项目在宝塔面板部署需确保:.env 配置为 production 环境并关闭 DEBUG,清除缓存,storage 和 bootstrap/cache 可写,nginx 指向 public 目录并启用 Laravel 伪静态,php 版本与扩展匹配,APP_URL 同步 httpS 域名,数据库配置正确,日志权限正常。

Laravel项目怎么部署到宝塔面板_Laravel生产环境配置与Nginx伪静态设置【流程】

确认 Laravel 项目已适配生产环境

宝塔面板本身不关心你用什么框架,但它会严格按 PHP 运行时和 Nginx 配置来执行。Laravel 在本地开发能跑,不代表丢到宝塔就能直接访问 —— 最常见的失败原因是 .env 没改、APP_DEBUG 没关、缓存没清。

  • APP_ENV=productionAPP_DEBUG=false 必须写在服务器上的 .env 里(不是本地的)
  • 执行 php artisan config:clearphp artisan cache:clearphp artisan view:clear,否则配置仍走缓存
  • storage/bootstrap/cache/ 目录必须可写,宝塔新建站点时默认权限是 755,需手动设为 775 或用 chown -R www:www storage bootstrap/cache
  • 如果用了队列或 Horizon,记得启动 supervisor 并指向正确的 artisan queue:work 命令

Nginx 配置必须指向 public 目录,且启用伪静态

宝塔建站时选“Laravel”会自动套用规则,但实际常被忽略两点:一是根目录设错(设成项目根而非 public),二是伪静态规则没生效(比如用了 apache 规则却配在 Nginx 下)。

  • 站点设置 → “网站目录” → “运行目录” 必须选 /public(不是 /
  • 伪静态 → 选“Laravel 5”,内容等价于以下 Nginx 配置片段:
location / {     try_files $uri $uri/ /index.php?$query_string; }
  • 如果用了 vue routerhistory 模式或自定义 API 路由,需额外排除静态资源路径,例如:location ^~ /api/ { try_files $uri $uri/ /index.php?$query_string; }
  • 别手动生成 .htaccess 放进去 —— Nginx 不读这个文件

PHP 版本与扩展必须匹配 Laravel 版本要求

宝塔默认装的是 PHP 8.0+,但老项目可能基于 Laravel 6/7,依赖 php-xmlphp-mbstringphp-tokenizerphp-bcmath 等扩展。缺一个,composer installartisan 命令就会报错。

  • 进宝塔 → PHP 设置 → “安装扩展”,勾选上述常用扩展(尤其 opcache 建议开启,提升性能)
  • 检查 php -vphp -m | grep mbstring 确认 CLI 模式下也加载了扩展(宝塔有时只开 FPM 模块,CLI 仍缺失)
  • Laravel 10 要求 PHP ≥ 8.1,若用宝塔一键部署旧版 PHP,得手动升级或切换 PHP 版本管理器
  • Composer 安装依赖时若卡住,先运行 composer config -g repo.packagist composer https://packagist.phpcomposer.com(国内镜像)

HTTPS 与域名绑定后,务必更新 APP_URL 并重跑 migrate

很多开发者在宝塔上绑好域名、申请完 ssl 就以为完事了,结果邮件发不出、图片路径 404、后台登录跳转回 HTTP —— 根源都在 APP_URL 没同步更新。

  • APP_URL 必须写成带协议的完整地址,如 https://example.com,不能是 http://localhost 或留空
  • 修改后要重新运行 php artisan config:cache(注意:config:cache 不能在 APP_DEBUG=true 时使用)
  • 如果用了 php artisan migrate:fresh 初始化数据库,确保 DB_HOST 指向宝塔的 mysql 地址(通常是 127.0.0.1,不是 localhost;部分宝塔版本对 localhost 解析异常)
  • 日志路径 storage/logs/laravel.log 权限不对时,500 错误不会输出具体信息,先看宝塔面板里的“错误日志”再查 Laravel 日志

Laravel 部署最耗时间的环节往往不是上传代码,而是反复验证环境变量、权限、Nginx 路由转发是否真正在起作用 —— 尤其当页面空白但无报错时,优先检查 storage/logs/ 和宝塔的 Nginx 错误日志,而不是重装。

text=ZqhQzanResources