laravel-admin本身不自带生产级安全防护,必须首次登录后立即修改admin/admin默认账号,且确保app_debug=false、.env不可web访问;安装须严格按composer require→vendor:publish→admin:install顺序执行;生产环境需关闭调试、禁止敏感文件访问、配置路由和配置缓存,并为自定义路由显式添加权限校验。

直接上结论:laravel-admin 本身不自带生产级安全防护,admin:install 创建的默认账号(admin/admin)必须在首次登录后立即修改,且 APP_DEBUG=false 和 .env 文件 Web 不可访问是硬性前提——漏掉任一环节,后台等于裸奔。
安装前必须处理的数据库兼容问题
MySQL 5.7.7+ 或 MariaDB 10.2.2+ 默认启用 innodb_large_prefix,但 laravel-admin 的迁移文件中部分索引长度会超限,导致 php artisan admin:install 报错 Specified key was too long。
- 临时方案:在
app/Providers/AppServiceProvider.php的boot()方法里加一行\Schema::defaultStringLength(191); - 长期方案:升级 MySQL 配置,或改用
utf8mb4_unicode_ci排序规则并确保innodb_file_format= Barracuda、innodb_file_per_table=ON - 注意:Laravel 9+ 已默认设置 191,若你用的是 Laravel 10/11 且未手动改过 schema 长度,这步可跳过
安装命令执行顺序不能颠倒
laravel-admin 的三步安装不是建议顺序,而是强依赖链。任意跳步或调换顺序都会导致表缺失、路由 404 或权限系统失效。
-
composer require encore/laravel-admin—— 必须先装包,否则后续命令无法识别 -
php artisan vendor:publish --provider="Encore\Admin\AdminServiceProvider"—— 必须发布配置,config/admin.php不存在时admin:install会静默失败 -
php artisan admin:install—— 必须最后执行,它依赖前两步生成的配置和迁移文件,且只运行一次(重复运行会报错)
生产环境部署必须关闭调试并隔离入口
本地能跑 ≠ 生产能用。laravel-admin 后台默认路径是 /admin,一旦 APP_DEBUG=true 或 .env 被 Web 直接访问,攻击者就能看到完整路径、数据库凭证甚至堆栈信息。
- 确认
APP_DEBUG=false、APP_ENV=production已写入.env - Nginx/Apache 配置中,禁止对
.env、config/、storage/的直接 HTTP 访问(Nginx 示例:location ~ /\.(env|ini|log|sql|sh|inc|bak|conf)$ { deny all; }) - 考虑修改后台路径:在
config/admin.php中改'prefix' => 'secret-admin',避免被扫描器批量爆破/admin/login - 别忘了运行缓存命令:
php artisan config:cache、php artisan route:cache,否则中间件和路由加载变慢,间接增加被撞库的时间窗口
最常被忽略的一点:laravel-admin 的权限模型基于 Laravel Gate,默认只校验菜单可见性,不自动拦截控制器方法。如果你新增了自定义路由或控制器,必须显式加 @can('some-permission') 或中间件,否则「有菜单没权限」和「没菜单却能直连 URL」都会发生。











