Laravel项目在宝塔面板跑不起来,主因是网站根目录未设为public子目录、.env未正确加载、数据库配置错误、前端资源路径异常及目录权限问题。

宝塔面板里 Laravel 项目跑不起来,多半是 public 目录没设对
宝塔默认把网站根目录指向你上传的整个 Laravel 项目文件夹(比如 /www/wwwroot/myapp),但 Laravel 的入口必须是 public 子目录。直接访问会报 Class 'Illuminate\Foundation\Application' not found 或 403/500 错误。
实操建议:
- 在宝塔「网站」列表里点你的站点 → 「设置」→ 「网站目录」→ 把「网站目录」改成
/www/wwwroot/myapp/public(注意末尾的public) - 别改「运行目录」——宝塔新版已弃用该字段,改了反而可能冲突
- 确认
public下有index.php,且它能正常加载../vendor/autoload.php - 如果用的是 PHP 8.1+,检查
composer install --no-dev是否执行成功,vendor目录是否存在且权限可读
Laravel 的 .env 文件在宝塔里总被忽略
本地开发时 .env 自动生效,但上线后宝塔 + Nginx 不会自动加载它——根本原因是 PHP-FPM 进程启动时没读取到环境变量,或者 .env 权限/位置不对。
实操建议:
-
.env必须放在项目根目录(即/www/wwwroot/myapp/.env),不是public/下 - 文件权限设为
644,所属用户和 PHP-FPM 进程一致(通常是www用户):执行chown www:www .env - 更稳妥的做法:在宝塔「网站」→ 「配置文件」里,在
location ~ \.php$块内加一行:fastcgi_param APP_ENV production;,并确保.env中APP_DEBUG=false - 验证是否生效:临时在
routes/web.php里写dd(env('APP_NAME')),看能否输出
执行 php artisan migrate 提示 SQLSTATE[HY000] [1045] Access denied
这不是 Laravel 的错,是宝塔新建数据库时,给的用户名/密码和 实操建议: Laravel Mix 编译后的文件名带哈希,靠 实操建议: 最麻烦的其实是权限链:宝塔用 .env 里填的不一致,或者数据库主机写成了 localhost(宝塔 MySQL 默认只允许 127.0.0.1 或具体 IP 连接)。
.env 的 DB_USERNAME 和 DB_PASSWORD,别手打DB_HOST 改成 127.0.0.1(不是 localhost),因为 Unix socket 路径在宝塔环境下常不可用DB_PORT 显式写上 3306,避免某些 PHP 版本解析失败php -d disable_functions= -d memory_limit=-1 artisan migrate(绕过宝塔面板的 PHP 限制)
前端资源(CSS/JS)404,
mix-manifest.json 找不到或路径错mix() 辅助函数查 mix-manifest.json 映射。上线后常见问题是:没运行 npm install && npm run prod,或编译产物没传到服务器,或 public/mix-manifest.json 里的路径前缀多了 /。
npm ci && npm run prod,然后只传 public/css、public/js 和 public/mix-manifest.json
mix-manifest.json 内容,确认键名是 "/css/app.css" 这种带斜杠的,而不是 "css/app.css";Laravel 9+ 默认带前缀,若部署在子目录需额外配置 MIX_ASSET_URL
.env 和 .gitignore 容易漏传bootstrap/cache/config.php 和 storage/framework/views/,避免缓存旧路径www 用户跑 Nginx 和 PHP-FPM,但你用 root 上传文件,storage 和 bootstrap/cache 目录就写不了日志、缓存、session。这个点很多人试到第三遍才想起来 chown -R www:www storage bootstrap/cache。










