网易 IceTown 租赁服 —— 圈地管理系统
基于 Next.js + Node.js + tRPC 的现代化全栈 Minecraft 服务器领地管理平台。为 QQ 群内 Minecraft 基岩版玩家提供领地创建、成员管理、积分捐赠、管理员审批等一站式管理功能。
minecraft-qq-territory-platform/
├── apps/
│ ├── server/ # 后端 API 服务 (Express + tRPC)
│ │ ├── src/
│ │ │ ├── app.ts # Express 应用入口
│ │ │ ├── server.ts # HTTP 服务器启动
│ │ │ ├── trpc/ # tRPC 路由器 & 中间件
│ │ │ ├── services/ # 业务逻辑层
│ │ │ ├── middlewares/ # Express 中间件 (安全、限流)
│ │ │ ├── jobs/ # 定时任务 (成员清理、群同步)
│ │ │ ├── listeners/ # 事件监听器
│ │ │ ├── database/ # Prisma 数据库连接
│ │ │ └── utils/ # 工具函数
│ │ ├── prisma/ # 数据库 Schema & 迁移
│ │ └── Dockerfile
│ │
│ └── web/ # 前端 Web 应用 (Next.js + Ant Design)
│ ├── app/ # Next.js App Router 页面
│ │ ├── dashboard/ # 控制台页面
│ │ ├── login/ # 登录页
│ │ └── register/ # 注册页
│ ├── components/ # UI 组件
│ ├── hooks/ # React Hooks (tRPC + React Query)
│ ├── lib/ # 工具库 (tRPC 客户端、认证)
│ └── Dockerfile
│
├── packages/
│ └── shared/ # 共享类型 & Zod 校验
│ └── src/
│ ├── schemas/ # 输入/输出 Schema 定义
│ └── router.ts # AppRouter 类型导出
│
├── docker-compose.yml # 统一 Docker 编排
├── turbo.json # Turborepo 任务编排
├── pnpm-workspace.yaml # pnpm Workspace 配置
└── README.md
| 层级 | 技术 | 版本 |
|---|---|---|
| 前端框架 | Next.js (App Router) | 16.x |
| UI 组件库 | Ant Design | 6.x |
| 样式 | Tailwind CSS | 4.x |
| 状态/缓存 | React Query (TanStack) | 5.x |
| API 通信 | tRPC | 11.x |
| 后端框架 | Express | 5.x |
| 类型安全 API | tRPC Server | 11.x |
| 数据校验 | Zod | 4.x |
| ORM | Prisma | 6.x |
| 数据库 | MySQL | 8.0 |
| 实时通信 | Socket.IO | 4.x |
| QQ 机器人 | node-napcat-ts | 0.4.x |
| 认证 | JWT + OAuth2 | — |
| 构建工具 | Turborepo + pnpm | — |
| 部署 | Docker + PM2 + Nginx | — |
- Node.js >= 20
- pnpm >= 10
- MySQL >= 8.0
- Napcat QQ 机器人 (可选,用于群同步功能)
git clone <repo-url>
cd minecraft-qq-territory-platformpnpm install复制环境变量模板并填入实际值:
cp .env.example .env主要配置项:
# 数据库
DATABASE_URL="mysql://user:password@localhost:3306/ice_town"
# JWT 密钥
JWT_SECRET=your-secret-key
# Napcat QQ 机器人
NAPCAT_URL=ws://localhost:6098
NAPCAT_TOKEN=your_napcat_token
NAPCAT_GROUPID=你的QQ群号
ADMIN_QQ=你的QQ号
# 跨域来源
ALLOW_ORIGIN=http://localhost:3101# 生成 Prisma Client
pnpm prisma:gen
# 执行数据库迁移
cd apps/server
npx prisma migrate deploy# 同时启动前后端(需要 Turborepo)
pnpm dev
# 或分别启动
pnpm dev:server # 后端 → http://localhost:3000
pnpm dev:web # 前端 → http://localhost:3101- 前端页面: http://localhost:3101
- tRPC API: http://localhost:3000/api/trpc
- Socket.IO: ws://localhost:3000
# 构建并启动所有服务
docker compose up -d
# 查看日志
docker compose logs -f
# 停止
docker compose down服务映射:
| 服务 | 端口 |
|---|---|
| 前端 (Nginx) | 80, 443 |
| 后端 API | 3000 |
所有 API 通过 tRPC 暴露,具有完整的端到端类型安全。
| 过程 | 类型 | 说明 |
|---|---|---|
auth.register |
Mutation | 用户注册(发送验证码) |
auth.login |
Mutation | 用户登录(设置 Cookie) |
auth.authorize |
Query | OAuth2 授权 |
auth.token |
Mutation | OAuth2 获取 Token |
auth.refreshToken |
Mutation | 刷新 Access Token |
| 过程 | 类型 | 说明 |
|---|---|---|
user.me |
Query | 获取当前用户信息 |
user.updateNickname |
Mutation | 修改昵称(30天冷却) |
| 过程 | 类型 | 说明 |
|---|---|---|
territory.create |
Mutation | 创建领地 |
territory.myTerritories |
Query | 我的领地列表 |
territory.updateLocation |
Mutation | 更新领地区域 |
territory.requestDelete |
Mutation | 申请删除领地 |
territory.invite |
Mutation | 邀请成员 |
territory.acceptInvite |
Mutation | 接受邀请 |
territory.revokeInvite |
Mutation | 撤销邀请 |
territory.donate |
Mutation | 捐赠积分 |
territory.removeMember |
Mutation | 移除成员 |
| 过程 | 类型 | 说明 |
|---|---|---|
admin.tasks |
Query | 管理任务列表 |
admin.process |
Mutation | 处理管理任务 |
| 过程 | 类型 | 说明 |
|---|---|---|
notification.unread |
Query | 未读通知列表 |
notification.markRead |
Mutation | 标记已读 |
graph TB
subgraph "前端 (apps/web)"
Next[Next.js App]
TRPC_C[@trpc/client]
RQ[React Query]
SIO_C[Socket.IO Client]
end
subgraph "后端 (apps/server)"
Express[Express Server]
TRPC_S[tRPC Server]
SIO_S[Socket.IO Server]
Jobs[定时任务]
Listeners[事件监听]
Services[业务服务层]
Prisma[Prisma ORM]
end
subgraph "共享 (packages/shared)"
Schemas[Zod Schemas]
Types[TypeScript Types]
end
subgraph "外部"
MySQL[(MySQL)]
Napcat[Napcat QQ Bot]
end
Next -->|HTTP/tRPC| Express
TRPC_C -->|类型推导| Schemas
Express --> TRPC_S
TRPC_S --> Services
Services --> Prisma
Prisma --> MySQL
Jobs --> Services
Listeners --> Napcat
SIO_C <-->|WebSocket| SIO_S
TRPC_S -->|校验| Schemas
| 包名 | 路径 | 说明 |
|---|---|---|
@ice-town/server |
apps/server |
Express + tRPC 后端服务 |
@ice-town/web |
apps/web |
Next.js 前端应用 |
@ice-town/shared |
packages/shared |
共享 Zod Schema & 类型定义 |
- 在
packages/shared/src/schemas/定义 Zod Schema - 在
apps/server/src/trpc/routers/创建或扩展 Router - 前端自动获得类型推导,无需手动同步
cd apps/server
npx prisma migrate dev --name descriptionpnpm type-checkISC
🏔️ IceTown — 让 Minecraft 领地管理更简单