生产环境必须关闭Debugbar和Telescope:Debugbar会泄露SQL、环境变量等敏感信息并拖慢响应;Telescope若未禁用则持续写入导致I/O压力和存储膨胀,两者均增加20–100ms开销。

生产环境必须关掉所有调试工具,否则会暴露敏感信息、拖慢响应速度,甚至被利用发起攻击。
为什么 Debugbar 和 Telescope 不能在生产环境开着
Debugbar 会在页面底部注入完整 SQL、请求头、会话内容、环境变量,APP_KEY、数据库密码可能直接出现在 HTML 源码里;Telescope 虽然默认只记录请求日志,但它的 Telescope::startRecording() 如果没被禁用,仍会持续写入数据库或 Redis,造成 I/O 压力和存储膨胀。两者都会让每个请求多出 20–100ms 的额外开销。
常见错误现象:
- 页面底部突然出现 Debugbar 面板(说明
APP_DEBUG=true或debugbar没卸载) - 访问
/telescope路由返回 200(说明 Telescope 未禁用或权限控制失效) - Redis 内存占用持续上涨,
keys telescope:*返回大量键
彻底关闭 Debugbar 的三步操作
仅靠设置 APP_DEBUG=false 不够,Debugbar 在 --dev 安装时就注册了服务提供者,必须显式移除。
- 运行
composer remove barryvdh/laravel-debugbar(推荐,一劳永逸) - 如果暂时不能卸载,注释掉
config/app.php中的Barryvdh\Debugbar\ServiceProvider::class - 确保
.env中DEBUGBAR_ENABLED=false(部分版本支持该开关)
验证方式:清空浏览器缓存后访问页面,检查 HTML 源码里是否还存在 debugbar-include 或 __DEBUGBAR__ 字符串。
安全禁用 Telescope 而不删包
Telescope 提供了运行时开关,比卸载更灵活,适合灰度或临时排查场景。
- 在
app/Providers/TelescopeServiceProvider.php的register()方法中,添加判断:
public function register()
{
if ($this->app->environment('local')) {
$this->app->register(TelescopeServiceProvider::class);
}
}
- 或者更严格地,在
config/telescope.php中设'enabled' => env('TELESCOPE_ENABLED', false),并在.env中写TELESCOPE_ENABLED=false - 执行
php artisan telescope:publish后,手动删除routes/telescope.php(防止路由被加载)
注意:php artisan telescope:install 生成的迁移文件无需回滚,只要不运行 php artisan migrate 或禁用记录,就不会写数据。
别漏掉 config:cache 和 route:cache 的副作用
执行 php artisan config:cache 后,.env 变更不再生效;而 route:cache 会忽略闭包路由——如果你在路由文件里写了 Route::get(..., function () { ... }),缓存后这些路由将 404。
真正容易被忽略的是:一旦开了 config:cache,APP_DEBUG 就完全由缓存值决定,改 .env 没用,必须 php artisan config:clear && php artisan config:cache 才生效。很多团队线上突然看到 Debugbar,就是卡在这一步。











