真凶可能是内存不足——admin:install批量执行迁移和seed,低配服务器上PHP默认128M内存不够,需临时php -d memory_limit=512M artisan admin:install或永久修改php.ini并重启服务。

php artisan admin:install 卡住或超时,真凶可能是内存不足
不是配置错、不是命令漏,而是 PHP 进程被系统 kill 了——admin:install 在初始化数据库表、插入初始菜单、生成管理员账号时会批量执行迁移和 seed 操作,对内存消耗明显高于普通 Artisan 命令。尤其在低配服务器(如 512MB RAM 的轻量云)上,PHP 默认内存限制(通常 128M)根本不够用。
- 先验证:运行
php -r "echo ini_get('memory_limit');",如果输出128M或更低,基本就是瓶颈 - 临时提限(仅用于安装):执行
php -d memory_limit=512M artisan admin:install - 永久生效(推荐):修改
php.ini中的memory_limit = 512M,然后重启 PHP-FPM 或 Apache - 注意:Docker 环境需进容器改
/usr/local/etc/php/conf.d/下的配置,不能只改宿主机
MySQL 连接失败但 .env 明明写对了?查 max_allowed_packet 和 wait_timeout
admin:install 启动后报 SQLSTATE[HY000] [2002] Connection refused 或卡在 “Creating tables…” 阶段,不一定是密码错——MySQL 服务本身可能因资源限制主动断连。
- 登录 MySQL 执行
SHOW VARIABLES LIKE 'max_allowed_packet';,若低于64M,admin:install导入初始 SQL(含 base64 编码的图标字段)会失败 - 检查
wait_timeout,值过小(如 60 秒)会导致长安装过程被中断;建议设为28800(8 小时) - 修改方法:在 MySQL 配置文件(
/etc/mysql/my.cnf或/etc/my.cnf)的[mysqld]段下加:max_allowed_packet = 128Mwait_timeout = 28800
然后sudo systemctl restart mysql
安装中途报错 “Specified key was too long”,别急着改迁移文件
这个错误(SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long)本质是 MySQL 5.7+ 默认使用 utf8mb4 字符集,而旧版 InnoDB 引擎对索引长度限制更严。直接改 vendor/ 里的迁移文件是徒劳的,因为下次 composer update 就会被覆盖。
- 正确解法:在
app/Providers/AppServiceProvider.php的boot()方法里加一行:Schema::defaultStringLength(191); - 必须确保该 Provider 已注册到
config/app.php的'providers'数组中 - 如果用了 Laravel 10+,还要确认
bootstrap/app.php中是否调用了->withProviders([App\Providers\AppServiceProvider::class]) - 改完后清缓存:
php artisan config:clear,再重跑admin:install
public/vendor/laravel-admin 目录为空?vendor:publish 没生效
访问 /admin 页面空白或 404,但路由已注册、控制器也存在——大概率是前端资源压根没发布出来。常见于 Composer 安装后未执行 publish,或 publish 时选错了 provider。
- 确认命令完整:必须是
php artisan vendor:publish --provider="Encore\Admin\AdminServiceProvider",少一个引号或拼错类名都会静默失败 - 检查
config/admin.php是否生成:没有这个文件,admin:install会跳过静态资源发布逻辑 - 手动验证目录:
ls -la public/vendor/laravel-admin,应有css/、js/、fonts/等子目录;若为空,删掉public/vendor/laravel-admin再重试 publish - Windows 用户注意路径权限:有时防病毒软件会拦截写入,临时关闭再试
最易被忽略的是:所有这些操作都依赖于 APP_URL 和 ASSET_URL 的一致性。如果 APP_URL=http://localhost 而你通过 https://mydomain.com 访问后台,JS/CSS 会因混合内容被浏览器拦截,页面看起来“加载完成”实则功能全废。


















