laravel new 命令仅初始化框架骨架,后续需手动配置 .env、生成密钥、链接存储、执行迁移等;推荐用 shell 脚本串联 artisan 命令,并添加失败重试、条件判断和环境适配逻辑。

laravel new 命令能直接初始化项目,但不等于“一键完成”
它只负责拉取 Laravel 框架骨架和基础依赖,laravel new 之后的 .env 配置、数据库迁移、密钥生成、存储链接等全得手动补。所谓“一键初始化”,其实是把这一串必做动作封装成可复用脚本。
用 artisan 命令链 + shell 脚本组合最稳妥
别写纯 PHP 脚本去模拟安装流程——artisan 已经覆盖了绝大多数初始化动作,shell 只需按顺序调用并处理失败退出即可。
-
laravel new myapp && cd myapp:先创建项目目录,避免路径错乱 -
php artisan key:generate:必须在.env存在后执行,否则报Application key not set -
php artisan storage:link:开发环境需要,但 CI 环境或 Docker 中可能失败(权限/挂载点问题) -
php artisan migrate --force:加--force是因为生产环境默认禁止未确认迁移,本地首次安装也得带上
常见卡点:.env 文件缺失或 APP_KEY 冲突
很多脚本直接 cp .env.example .env,但漏掉两件事:APP_NAME 未设、DB_DATABASE 默认是 laravel,而本地 MySQL 往往没这个库。
- 务必在
cp .env.example .env后追加sed -i 's/^DB_DATABASE=.*$/DB_DATABASE=myapp_dev/' .env(Linux/macOS) - Windows 用户用
PowerShell替代 sed,或改用php -r "file_put_contents('.env', str_replace('DB_DATABASE=laravel', 'DB_DATABASE=myapp_dev', file_get_contents('.env')));" -
php artisan key:generate如果重复执行,会不断覆盖APP_KEY,导致 session 失效——脚本里加判断:grep -q '^APP_KEY=' .env || php artisan key:generate
Docker 或 CI 场景下要绕开交互式命令
比如 php artisan storage:link 在容器里常因 public/storage 已存在而报错;migrate 若数据库没启好会卡住超时。
- 用
php artisan storage:link --force强制覆盖符号链接 - 加重试逻辑:
until php artisan migrate --force 2>/dev/null; do sleep 2; done(适用于 db 容器启动慢) - CI 中禁用颜色输出:
php artisan migrate --force --no-ansi,避免日志解析异常
真正难的不是写几行命令,而是判断哪些步骤必须串行、哪些可以并发、哪些该加兜底检查——比如 .env 里 DB 凭据写错了,后面所有 artisan 命令都会连不上,但错误信息全挤在最后一行,不容易定位。











