Skip to content

Repository files navigation

moo-engine-skeleton

Laravel 12 后端开发骨架 + 配套新手教程

从零开始,一步步搭建一个带代码生成器JWT 登录认证完整系统管理的 Laravel 后端——并且每一步都能真机跑通,不是纸上谈兵。

这是什么

这个仓库有两部分:

  1. 一个可运行的 Laravel 12 骨架项目(在 engine/ 目录)
    已接入 moo-scaffold 代码生成器 + JWT 认证 + moo-system 系统管理模块,并带一个 moo-feedback 匿名提交 / 后台受理示例,是个「开箱即用」的起点。

  2. 一套完整的新手教程(在 docs/ 目录,带截图)
    从空目录出发,教你一步步搭出这个骨架。每一步都经过真机测试,跟着做就能跑起来。

适合谁

  • 新手:第一次用 Laravel 搭后端,不知道从哪开始
  • 想快速上手代码生成的:看过 moo-scaffold 文档,但希望有个完整示例项目
  • 需要系统管理功能的:不想从头写部门 / 人员 / 权限,直接用现成模块

能学到什么

跟完教程(主线 7 章 + 部署指引 + 增量开发 + 云端进阶),你会掌握:

  • Laravel 12 基础搭建(连 MariaDB、建库、配 .env)
  • 运行时监控采集与云端推送(moo-monitor-laravel + moo-scaffold-cloud,含 AI 辅助处理)
  • moo-scaffold 代码生成器使用(YAML → Model / Controller / Migration)
  • JWT 登录认证(自建用户,零付费依赖,含生产加固)
  • 动作级授权(ACL,细到每个接口)
  • 双守卫隔离(后台 admin + 移动端 user)
  • 接入 moo-system 系统管理模块(部门 / 人员 / 角色)
  • 用 moo-feedback 演练“匿名提交 + 独立认证的后台受理”
  • 部署上线(nginx + supervisor + Redis)
  • 日常增量开发(改表 / 加接口 / 同步 ACL)

教程共 14 章:前 6 章讲零商业依赖的基础能力,第 7 章接入 moo-system,第 8~11 章覆盖部署、增量开发、监控与身份契约,第 12 章提供正式的新项目起手入口,第 13 章用 moo-feedback 演示扩展包接入与独立安全组,第 14 章讲扩展包 resolver 与 Host 胶水组合。

两种使用方式

方式 A:直接用现成骨架(适合急着上手的)

克隆后运行初始化器。它会先准备 SQLite,再安装依赖、生成密钥、移除 Food 演示、重建 ACL、发布 scaffold 静态资源、创建开发账号并跑完整验证:

git clone git@gitee.com:charsen/moo-engine-skeleton.git orders
cd orders
./init-project \
  --name=acme/orders \
  --app-name="Orders" \
  --author="你的名字" \
  --app-url=http://orders.test \
  --scaffold-user=developer \
  --fresh-git

默认输出是保留移动端 /app 的完整 API 项目;官网后端使用 --profile=website,会删除 User/JWT 移动端切片并保留公开 /api 生成区。需要保留 Food 教学样例时加 --keep-demo,需要连教程一起保留时加 --keep-tutorial。完整参数见 ./init-project --help

方式 B:从零跟教程搭(适合想深入学习的)

从空目录开始,一步步跟着 docs/ 里的教程做:

# 第 1 章:安装 Laravel 12
composer create-project "laravel/laravel:^12.0" engine

# 第 2 章:接入 moo-scaffold 代码生成器
# (开源包;按正式版本约束从 Packagist 安装)

# 第 3~6 章:JWT 认证 + ACL + 双守卫
# 第 7 章:接入 moo-system(可选)
# 第 8 章:部署上线
# 第 9 章:增量开发演练

教程入口:docs/README.md(带「踩过的坑」速查表)

推荐用网页引导器跟做(分步模式 + 进度记忆):

cd docs
php -S 127.0.0.1:9999
# 浏览器打开 http://127.0.0.1:9999

配套包(必读)

本骨架依赖作者的另外几个包。moo-scaffoldmoo-monitor-laravel 是开源包, 目标通过 Packagist 直接安装;私有 moo-system 及其上传基础依赖 moo-upload 必须通过 Composer 授权仓库接入。正式使用不要求 clone 到同级目录;本仓本地联调可用 path repository。

访问前提

# 克隆本仓库
git clone git@gitee.com:charsen/moo-engine-skeleton.git

# 第 7 章需要 moo-system 与 moo-upload 两个私有仓库的访问权。
定位 是否必装 说明
moo-scaffold 开源(MIT,发布到 Packagist) 必装 代码生成器 + 开发后台(教程第 2 章接入)
moo-system 进阶 / 私有包 可选 系统管理模块(部门 / 人员 / 角色,教程第 7 章接入)
moo-upload 私有基础包 随 moo-system 接入 purpose 约束上传、引用消费与清理;Host 配独立安全组
moo-monitor-laravel 开源(MIT) 必装 监控采集 SDK(教程第 1.7 节显式接入)
moo-feedback 开源(MIT,发布到 Packagist) 示例内置 意见反馈扩展包;第 13 章演示公开提交与独立后台认证组

为什么还要配置 VCS 仓库?

开源包发布到 Packagist 且目标版本可解析后,不需要额外 repositories 配置。 moo-systemmoo-upload 都不在 Packagist 公开分发,接入第 7 章时需要在 composer.jsonrepositories 分别声明两个授权仓库;Composer 不继承依赖包自己的仓库配置。

本仓库口径:开源包统一使用正式版本约束安装;moo-systemmoo-upload 使用授权私有源。


环境要求

软件 版本(实测) 说明
PHP 8.2+ Laravel 12 要求 ^8.2;当前 lock 已按 PHP 8.2 可安装版本解析
Composer 2.9
Node 26 可选;只有传 --with-frontend 或自行构建 Vite 资源时需要
npm 11 同上
数据库 SQLite / MariaDB 12 / MySQL 8 起手默认 SQLite 零依赖;投产前切 MySQL/MariaDB

🚀 快速开始

教程共 14 章:第 17 章搭建主线,第 811 章讲部署、增量开发、云端监控和操作人身份契约;第 12 章收敛新项目起手流程,第 13 章给出 moo-feedback 扩展包实例,第 14 章说明 resolver 与 Host 胶水组合。

🧭 两条路,按需选

  • 从骨架直接起手(本仓库就是起点)——clone → 改名 → 配 env → 直接跑,几分钟起一个干净新项目。 下面「方式 A」是它的最短版;完整 checklist(改名/密钥/双 composer/外部接线、冒烟五命令、教学样例 Food 去留)见 第 12 章 从骨架起手新项目
  • 跟教程从零搭——从空目录一步步搭出这套骨架,理解每一块怎么来的(下面「方式 B」/ 第 1~11 章,推荐新手)。

方式 A:初始化成自己的项目(推荐):

⚠️ 前置: ① 需 PHP 8.2+; ② 需配好 moo-system / moo-upload 的 Gitee SSH 仓库访问权(私有包); ③ 仓库最终态已接入 moo-system / moo-upload(第 7 章)——没有它们的授权时 composer install 会失败,请走方式 B 从第 1 章跟做,或联系作者获取授权; ④ 初始化默认使用 SQLite;生产通常切 MySQL/MariaDB 和 Redis。单机低写入项目若明确继续使用 SQLite,按 SQLITE-DEPLOYMENT-TEMPLATE.md 把数据库放到代码目录外并建立备份。

git clone git@gitee.com:charsen/moo-engine-skeleton.git orders
cd orders
./init-project \
  --name=acme/orders \
  --app-name="Orders" \
  --author="你的名字" \
  --app-url=http://orders.test \
  --scaffold-user=developer \
  --fresh-git

初始化器结束前会执行 moo-system check、全量测试、迁移状态、路由清单和两份 Composer 校验;任一步失败都会非零退出。默认移除 Food 和教程历史,生成项目自己的 README、CLAUDE 与首个 Git 提交。

纯官网后端再加 --profile=website;该 profile 不包含移动端 User 模型、/app 路由或 user guard。受控私有仓如果确认要同步 Scaffold 调试账号的 bcrypt 文件,再显式加 --track-scaffold-accounts

💡 关于 php artisan test:phpunit.xml 把测试数据库定为 sqlite :memory:。 完全不碰本机 MariaDB——所以 MariaDB 没装/没建库测试照样全绿,反过来测试通过也 不代表 .env 的数据库配好了,两者别互相误判。仓库还自带 GitHub Actions CI (.github/workflows/tests.yml),push 后自动跑同一套测试。

方式 B:从 0 跟教程搭(推荐新手,带截图的完整教程见 docs/):

# 1. 安装 Laravel 12 到 engine/ 子目录
composer create-project "laravel/laravel:^12.0" engine
cd engine

# 2. 建库(本机示例账号 root / 7777)
mysql -uroot -p7777 -h127.0.0.1 -e \
  "CREATE DATABASE IF NOT EXISTS moo_engine_from_zero CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"

# 3. 配 .env 的数据库(DB_CONNECTION=mysql / DB_DATABASE=moo_engine_from_zero / DB_USERNAME=root / DB_PASSWORD=7777)

# 4. 接入监控标准件 + moo-scaffold(完整讲解见 docs 第 1.7 / 2 章;moo-system 见第 7 章)
composer require "charsen/moo-monitor-laravel:^0.1"
composer require "charsen/moo-scaffold:^2.1.7" --with-all-dependencies
php artisan vendor:publish --provider="Mooeen\Scaffold\ScaffoldProvider" --tag=public --force   # 发布 /scaffold 静态资源

# 5. 本地学习环境:迁移 + 演示 seed + 调试台账号(生产禁止运行该 DatabaseSeeder)
php artisan migrate --seed      # 创建公开演示账号,仅供 local/testing
php artisan moo:account:add <用户名> --password=<密码> --role=admin   # 没有它登不进 /scaffold

# 6. 启动(必须多 worker,原因见下方说明)
PHP_CLI_SERVER_WORKERS=4 php artisan serve --host=127.0.0.1 --port=8088 --no-reload

💡 为什么必须多 worker:scaffold 的接口调试器是「代理」模式——它收到你的调试请求后, 会从服务内部再向同一个服务发一次真实 HTTP 请求。php artisan serve 默认单 worker、 一次只能处理一个请求:外层请求占着唯一的 worker 等内层请求,内层请求又排不上队——互相 等待即死锁。PHP_CLI_SERVER_WORKERS=4 开多 worker 即可;换成 nginx + php-fpm、valet 等多进程环境天然没有这个问题,无需此变量。

启动后的入口(注意:「后台」没有独立网页,它是纯 API):

  • 应用首页:http://127.0.0.1:8088
  • 代码生成 / 接口调试台:http://127.0.0.1:8088/scaffold(登录用 moo:account:add 创建的账号)
  • 后台管理 API:http://127.0.0.1:8088/api/admin(登录接口 POST /api/admin/authenticate; 日常在 /scaffold 的接口调试器里带账号调它,不是打开网页登录)
  • 移动端 API:http://127.0.0.1:8088/app

📂 目录结构

Laravel 应用放在 engine/(与作者其它项目的目录约定一致),仓库根目录是文档与工程配置:

moo-engine-skeleton/
├── README.md                # 本文,仓库入口
├── HANDOFF.md               # 换机/交接速查(Packagist + Moo 私有 VCS + 初始化清单)
├── overview.md              # 立项说明
├── CLAUDE.md                # AI 协作约定
├── .github/workflows/       # CI:GitHub Actions 自动跑 php artisan test
├── .vscode/                 # 编辑器约定
├── docs/                    # 从 0 开始的新手教程(含截图)
└── engine/                  # ← Laravel 12 应用本体

(本机开发可能还有一个 CLAUDE.local.md,已被 gitignore,clone 不会带下来。)

📖 从 0 开始教程

推荐用网页引导器跟做(分步模式 + 准确恢复位置 + 代码一键复制 + 移动端章节抽屉,零依赖单文件): cd docs && php -S 127.0.0.1:9999,浏览器打开 http://127.0.0.1:9999

仓库公开后可一键上线为网页版:Gitee 仓库 →「服务」→「Gitee Pages」→ 部署目录选 docs/ → 访问 https://<你>.gitee.io/moo-engine-skeleton/ (引导器全部用相对路径,子路径部署开箱即用)。

章节 内容
第 1 章 安装 Laravel 12 建项目、连 MariaDB、建库、真机访问
第 2 章 安装 moo-scaffold 开源代码生成器接入、设计 foods 表、一键生成业务代码、两种方式调接口
第 3 章 JWT 登录认证(自建用户) 零付费依赖:最简 User 实现 JWTSubject、双守卫、三中间件、登录全链路
第 4 章 JWT 加固与生产化 生产踩坑回灌:persistent_claims、黑名单宽限、滑动续期、CORS、限流、生产 composer、接口测试
第 5 章 给 Food 上 JWT 与 ACL 动作级授权完整闭环:401→403→授权→200(User actions 最小实现)
第 6 章 移动端分片与 user 守卫 守卫隔离、无宽限 token 轮换
第 7 章 安装 moo-system(进阶) 完整系统管理:host 契约、主体切换 User→Personnel、角色授权、操作日志、调试器联调
第 8 章 部署上线(可选) Composer / Packagist 部署、Redis、nginx、supervisor、清缓存坑
第 9 章 日常增量开发:改表与加接口 加字段(增量迁移)、「自动覆盖 vs 手动补」边界、moo:adder 自定义 action、ACL/文档/测试同步、专属 Resource 链式字段控制
第 10 章 云端监控进阶 聚合告警、AI 辅助处理、MCP 与多项目管理
第 11 章 操作人身份契约 host 单点身份来源、共享 HasOperator、null 语义与扩展包接入
第 12 章 从骨架起手新项目 方式 A 正式版:./init-project 自动完成改名、密钥、依赖、ACL、样例清理、验证与独立 Git 历史
第 13 章 moo-feedback 用例 匿名提交、host 分类目录、扩展包一致命名契约、独立后台认证组与 401/403 验收
第 14 章 扩展包与 Host Resolver 包自持窄契约、moo-system 人员目录、Host 合一实现与兼容验证

教程目录页还附了一张**「踩过的坑」速查表**(31 条新手高频问题):docs/README.md

🔑 默认账号

下列账号仅供本地教程和自动测试。生产环境不得运行通用 DatabaseSeeder,也不得保留这些凭据。

用途 账号 密码 创建方式
自建用户(User 守卫):第 3~6 章作后台账号;第 7 章后台主体切到 Personnel 后它不再用于后台,但一直是移动端/app 接口、user 守卫)的账号 admin@example.com password migrate --seed(UserSeeder)
后台管理员(Personnel 守卫,第 7 章起,走 /api/admin 接口) 13800000000 admin888 migrate --seed(PersonnelSeeder)
root 超级管理员(固定 id=1 root13300000001 初始化时随机生成 moo-system reset-root-password(缺少时创建,存在时重置)
scaffold 调试台(http://127.0.0.1:8088/scaffold 的登录账号) 自定 自定 seed 不创建,需自行执行 php artisan moo:account:add <用户名> --password=<密码> --role=admin(快速开始 A/B 均已含此步)

后台账号的使用方式:后台是纯 API(前缀 /api/admin,无网页界面),拿着上表账号在 /scaffold 接口调试器里调 POST /api/admin/authenticate 登录、再调业务接口。

🧭 设计原则

  1. 每一步都有操作记录,最终沉淀成可开源的新手教程。
  2. 每一步都真机测试——不只是写代码,而是跑起来、用浏览器/接口真实请求验证。 (作者成稿时由 AI 经 MCP——Model Context Protocol,一种让 AI 驱动浏览器、调用接口的 协议——自动完成这些验证;读者跟做时手动点一遍即可,不需要了解 MCP。)

🔗 参考项目

包自身的细节文档在对应仓库里;有仓库访问权限后可查看 moo-scaffold/docs/guide/moo-system/docs/INTEGRATION.md。Packagist/GitHub 同步后, 开源包文档也会随公开仓库发布。

🎯 目标

给新手一套可用的教程,从 0 开始、零付费依赖地搭出带 JWT + ACL 的 Laravel 12 骨架; 进阶者再用 moo-system 一键升级成完整系统管理后端。

About

Laravel 12 后端开发骨架与新手教程,接入 moo-scaffold、JWT、ACL 和系统管理模块。

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages