Laravel如何部署到宝塔面板_Laravel 生产环境上线步骤【实战】

7次阅读

上线 laravel 必须用 nginx/apache + PHP-FPM,核心是权限、路径、伪静态和环境配置四件事:确保 PHP ≥ 8.1 且启用必要扩展;网站根目录指向 public/;配置 Laravel 伪静态规则;重置 .env 并执行 config:cache 等缓存清理命令。

Laravel如何部署到宝塔面板_Laravel 生产环境上线步骤【实战】

直接上生产环境前,php artisan serve 肯定不能用,宝塔面板里必须用 Nginx/Apache + PHP-FPM 托管 Laravel,核心是权限、路径、伪静态和环境配置四件事。

确认宝塔 PHP 版本和扩展是否满足 Laravel 要求

Laravel 10+ 要求 PHP ≥ 8.1,且必须启用 opensslpdombstringtokenizerxmlctypejsonzip(如果要用 php artisan storage:link 或压缩包部署)。

  • 在宝塔「软件商店」→「PHP 管理」里点进你选的 PHP 版本 →「安装扩展」勾选上述模块,重启 PHP-FPM
  • php -vphp -m | grep -E "openssl|pdo|mbstring" 可在终端验证(宝塔终端或 ssh 进去执行)
  • 若用 Laravel Scout + Algolia 或队列 + redis,还得额外装 redis 扩展,并确保宝塔已部署 Redis 服务

上传代码并设置正确的网站根目录

Laravel 的 Web 入口是 public/ 目录,不是项目根目录。宝塔新建站点时,「网站目录」必须指向 /www/wwwroot/your-site.com/public,而不是 /www/wwwroot/your-site.com

  • 上传完整 Laravel 项目(含 .envcomposer.json 等)到 /www/wwwroot/your-site.com
  • 在宝塔「网站」→「设置」→「网站目录」中,把「运行目录」改为 /public(这是最稳妥方式,比手动改根路径更可靠)
  • 别忘了改完后点击「保存」,否则 Nginx 配置不会重载
  • 如果用 storage:link 命令生成软链接,需在 SSH 中进入项目根目录执行:cd /www/wwwroot/your-site.com && php artisan storage:link,并确保 storage/bootstrap/cache/ 可写(宝塔文件管理器右键「权限」设为 755,属主保持 www)

配置 Nginx 伪静态规则(关键!否则 404)

宝塔默认不带 Laravel 伪静态,必须手动加。否则除首页外所有路由都 404。

  • 在「网站」→「设置」→「伪静态」选项卡中,选择「Laravel 5」(它适配 Laravel 5–11,规则通用)
  • 若没这个选项,粘贴以下规则(注意替换 your-site.com 为实际域名):
location / {     try_files $uri $uri/ /index.php?$query_string; } location ~ .php$ {     fastcgi_pass 127.0.0.1:9000; # 或 unix:/tmp/php-cgi.sock,看你的 PHP 版本监听方式     fastcgi_index index.php;     fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;     include fastcgi_params; }
  • 保存后「重载配置」,再测试访问 /login 或自定义路由是否正常
  • 如果用了 Vue router history 模式或前端 SPA 嵌套,需额外加一条 location ^~ /api/ { ... } 把 API 请求明确转发给 PHP,避免被前端路由劫持

.env 和缓存必须重置,不能复用本地配置

上传后第一件事不是刷新页面,而是改 .env 并清空所有缓存。本地开发的 .env 通常含 APP_DEBUG=trueDB_HOST=127.0.0.1REDIS_HOST=127.0.0.1,但生产环境数据库/Redis 往往不在本机,且 APP_DEBUG=true 会泄露敏感信息。

  • 修改 /www/wwwroot/your-site.com/.env:确保 APP_ENV=productionAPP_DEBUG=falseAPP_URL=https://your-site.com
  • 数据库填宝塔「数据库」里创建的实际库名、用户名、密码(不要用 root)
  • 执行命令清缓存(在 SSH 中进入项目根目录):php artisan config:clear && php artisan cache:clear && php artisan view:clear && php artisan route:clear
  • 再执行 php artisan config:cache(这步必须做,否则 .env 修改不生效)
  • 如果用了 Horizon 或队列,还要跑 php artisan horizon:publish(若用 Horizon)和 php artisan queue:work --daemon(需配合 Supervisor 管理进程)

最容易漏的是 config:cachestorage/ 目录权限——前者导致 .env 不生效,后者让日志写不进 storage/logs/,查错时一片空白。

text=ZqhQzanResources