name: dootask-install
description: 首次部署 DooTask:前置检查后执行 sudo ./cmd install(建库 + migrate --seed 的重操作),刚性流程、单次确认、失败即停。
DooTask 安装流程
刚性技能——前置检查 → 向用户确认一次 → 执行 → 报告结果。任何一步失败立即停止。
核心原则
违反字面规则 = 违反流程精神。 不要擅自增加、省略、合并步骤,不要为"省事"绕过 sudo 或确认。
./cmd install 已把整套安装封装为单条命令(赋权→起容器→composer install→key:generate→migrate --seed→up -d)。本技能的职责是安装前把关、选对参数、执行前确认、已知失败处理,而不是把脚本逻辑拆开重做。
前置检查(全部通过才能继续)
执行前依次确认:
- 工作目录:必须在项目根(存在
cmd、docker-compose.yml、.env.docker) - Docker:
docker与docker-compose/docker compose(v2+) 可用且 daemon 在跑(脚本check_docker也会查,但提前确认能更早报错) - Node.js ≥ 20(脚本
check_node会查) - APP_ID 不冲突:若
.env已有APP_ID且被其他实例占用,脚本check_instance会报错——此时停止,提示用户先清空.env里的APP_ID和APP_IPPR再装 - sudo:
./cmd install需 root(check_sudo),用sudo ./cmd install执行
⚠️ 这是重操作:会创建数据库并执行 migrate --seed(灌入种子数据)。在已有数据的环境上重装前务必和用户确认,避免覆盖。
检查通过后汇报结果,向用户确认一次再执行。
参数选择
| 参数 | 作用 | 何时用 |
|---|---|---|
--port <端口> |
指定 HTTP 端口(脚本会做端口占用检测) | 用户要自定义端口,或默认端口被占 |
--relock |
删除 node_modules/package-lock.json/vendor/composer.lock 后重装 |
谨慎:仅在依赖锁损坏、用户明确要求重建锁时用,会拖慢安装 |
不确定时不要自作主张加参数,按需询问用户。
执行
确认后执行(按用户选择带上参数):
sudo ./cmd install
# 或: sudo ./cmd install --port 8080
成功后脚本会输出访问地址并调用 repassword.sh。执行完向用户报告:访问地址(http://127.0.0.1:<APP_PORT>)、以及数据库密码提示。
失败处理
- 任何步骤失败立即停止,原样报告错误信息
- 不要自动重试,不要自动跳过
- 常见失败与对应处理:
APP_ID(xxx)已被其他实例使用→ 停止,让用户清空.env的APP_ID/APP_IPPR再装端口 xxx 已被占用→ 停止,让用户换--port目录【xxx】权限不足/ 目录权限检测失败 → 这是目录属主/权限问题,引导用户用 dootask-fix-permission 技能修复后重装安装依赖失败(composer)→ 报告,交用户决定(常因网络/镜像源)
禁止项
| 错误做法 | 正确做法 |
|---|---|
不加 sudo 直接 ./cmd install |
用 sudo ./cmd install(脚本强制 root) |
| 失败后"我再试一次"或自动跳过 | 立即停止,交还用户 |
| 在已有数据环境上不问就重装 | 先确认会 migrate --seed,可能影响现有数据 |
遇权限报错自己乱 chmod/chown |
走 dootask-fix-permission 技能统一处理 |
不问就加 --relock |
默认不加;仅用户明确要求或锁损坏时用 |
Red Flags —— 出现这些念头立即停下
- "端口/权限报错了我顺手帮 TA 改一下别的" → 停下,只处理本次报的问题,按指引走对应技能
- "种子数据应该没事,直接重装" → 不,先确认是否会覆盖现有数据
- "sudo 麻烦,先试试不加" → 不,install 必须 root