Skip to content

ZherKing/PizzaBox

Repository files navigation

PizzaBox

商用虚拟机切片管理面板,包含用户中心、套餐与实例管理、工单系统、公告系统、管理员后台、宿主机 Agent 网关、同域 /api 接口与 Docker 一键构建部署能力。

最后更新:2026-06-26(按当前仓库代码同步)

目录

  1. 项目截图
  2. 项目概览
  3. 技术栈与运行环境
  4. 项目结构
  5. 快速开始(本地开发)
  6. 环境变量
  7. 数据库与展示数据
  8. 后端 API 模块总览
  9. 前端页面与路由
  10. Agent 与宿主机对接说明
  11. Docker 构建与部署
  12. 常用开发/运维命令
  13. 常见问题

1、项目截图

Snipaste_2026-06-26_16-12-59 Snipaste_2026-06-26_16-14-41 Snipaste_2026-06-26_16-13-11 Snipaste_2026-06-26_16-14-48 Snipaste_2026-06-26_16-13-25

2. 项目概览

PizzaBox 面向“把一台宿主机切成多个可售卖实例”的业务场景,当前仓库已包含以下核心能力:

  • 用户注册、登录、会话管理与个人设置
  • 资源池分类、宿主机节点、套餐管理
  • 套餐购买、实例创建、实例详情、续费与管理员操作
  • 全局系统镜像目录管理,并与套餐可选系统联动
  • 工单系统(用户提交/回复 + 管理员处理)
  • 公告系统、通知系统、推广返利、优惠券与账单管理
  • 宿主机 Agent WebSocket 网关与实例操作下发
  • 同域 /api 接口模式
  • 单容器 Docker 构建与部署脚本

3. 技术栈与运行环境

后端

  • Node.js + Express
  • Prisma + SQLite
  • JWT 鉴权
  • Multer(图片上传)
  • WebSocket(宿主机 Agent 通信)
  • Morgan / CORS

前端

  • React 19
  • Vite 8
  • React Router 7
  • Tailwind CSS 4

Agent

  • Go
  • 负责宿主机状态上报、实例创建/删除/重装等动作执行

建议环境

  • Node.js 20+
  • npm 10+
  • SQLite(通过 Prisma 使用)
  • Docker / Docker Buildx(可选)

4. 项目结构

PizzaBox/
├── agent/                     # 宿主机 Agent 与相关脚本
│   ├── main.go
│   ├── lxd/
│   ├── metrics/
│   └── build.sh
├── backend/                   # 后端服务
│   ├── package.json
│   ├── prisma/
│   │   ├── schema.prisma      # Prisma 数据模型
│   │   ├── seed.js            # 展示数据种子脚本
│   │   ├── pizzabox.db        # SQLite 数据库
│   │   └── backups/           # 数据库备份
│   ├── src/
│   │   ├── app.js             # 后端入口,挂载 API、静态站点与 Agent 网关
│   │   ├── controllers/       # 业务控制器
│   │   ├── routes/            # API 路由
│   │   ├── middlewares/       # 鉴权中间件
│   │   ├── services/          # 业务服务层
│   │   ├── utils/             # 工具与网关
│   │   └── crons/             # 定时任务
├── frontend/                  # 前端工程
│   ├── package.json
│   ├── vite.config.js
│   ├── index.html
│   └── src/
│       ├── App.jsx            # 前端路由入口
│       ├── components/        # 通用组件
│       ├── pages/             # 用户页与管理页
│       ├── utils/             # API、站点配置、系统镜像等工具
│       └── assets/            # 图标与图片资源
├── secrets/                   # 支付证书等敏感文件目录
│   └── alipay/
├── Dockerfile                 # 单容器镜像构建
├── .dockerignore
├── .env.example               # 示例环境变量
├── build.sh                   # 构建 amd64 镜像 + 导出 tar/zip
├── deploy.sh                  # 本地镜像部署脚本
├── IMPORTANT.txt              # Docker 发布包说明(构建时自动补)
└── README.md

5. 快速开始(本地开发)

4.1 安装依赖

cd backend && npm install
cd ../frontend && npm install

4.2 配置环境变量

cp .env.example .env

本地开发至少建议填写:

  • JWT_SECRET
  • PORT
  • URL

如果不填:

  • PORT 默认走 5001
  • URL 代码里默认会回退到 http://localhost:5173

4.3 初始化数据库

cd backend
npx prisma db push
node prisma/seed.js

4.4 启动开发环境

建议两个终端分别启动:

# 终端 1:后端(默认 :5001)
cd backend
npm run dev

# 终端 2:前端(默认 :5173)
cd frontend
npm run dev

当前前端通过 Vite 代理:

  • /api -> http://localhost:5001
  • /uploads -> http://localhost:5001

6. 环境变量

以根目录 .env.example 为基础,当前代码实际会读到这些变量。

5.1 核心变量

变量 用途 示例
PORT 后端监听端口 5001
JWT_SECRET JWT 签名密钥 change_me
NODE_ENV 运行环境 development / production
DATABASE_URL Prisma SQLite 数据库路径 file:./pizzabox.dbfile:/app/backend/prisma/pizzabox.db
URL 用于邀请链接等站点地址生成 http://localhost:5173
VITE_API_URL 前端 API 基址,默认可不填 /api

5.2 当前仓库示例

根目录 .env.example 当前内容:

PORT=5001
JWT_SECRET=change_me
NODE_ENV=production
DATABASE_URL="file:/app/backend/prisma/pizzabox.db"
URL=http://localhost:5001
VITE_API_URL=/api

说明:

  • 本地开发时,后端代码通过 dotenv 从根目录 .env 读取变量
  • 前端默认直接走同域 /api,通常不需要额外设置 VITE_API_URL

7. 数据库与展示数据

6.1 数据库类型

6.2 常用命令

cd backend
npx prisma db push
npx prisma generate
node prisma/seed.js

6.3 当前展示数据种子

backend/prisma/seed.js 目前会生成演示数据,包括:

  • 管理员用户
  • 普通用户
  • 公告
  • 工单与对话
  • 节点
  • 资源池分类
  • 套餐
  • 虚拟机实例
  • 账单
  • 通知
  • 会话
  • 优惠券与返利演示数据

6.4 默认演示账号

  • 管理员
    • 邮箱:admin@pizzabox.io
    • 用户名:admin
    • 密码:admin123
  • 普通用户 1
    • 邮箱:alice@example.com
    • 用户名:alice
    • 密码:123456
  • 普通用户 2
    • 邮箱:bob@example.com
    • 用户名:bob
    • 密码:123456

8. 后端 API 模块总览

后端入口位于 backend/src/app.js

当前主要 API 前缀如下:

前缀 说明
/api/auth 注册、登录、验证码、重置密码、用户会话
/api/configs 系统配置、公共站点配置、系统设置、后台控制台信息
/api/announcements 公告查询与管理
/api/admin/tickets 管理员工单处理
/api/tickets 用户工单
/api/plans 套餐查询与管理
/api/categories 资源池分类
/api/admin/nodes 宿主机节点管理
/api/admin/users 用户管理
/api/admin/coupons 优惠券管理
/api/referrals 推广返利、提现
/api/instances 实例购买、详情、动作、管理员实例管理
/api/invoices 账单查询与管理
/api/payments 支付订单、支付宝当面付链路
/api/notifications 用户通知
/api/configs/upload 图片上传接口

静态资源与站点入口:

  • /uploads/*:上传文件
  • /api/uploads 路径:在生产模式下由后端直接返回前端 dist

9. 前端页面与路由

前端入口位于 frontend/src/App.jsx

用户端

  • /login 登录 / 注册 / 找回密码
  • /dashboard 仪表盘
  • /purchase 购买服务
  • /management 管理服务
  • /management/details/:id 服务器详情
  • /tickets 工单管理
  • /billing 个人账单
  • /promotion 推广返利

管理端

  • /admin/console 控制台
  • /admin/users 用户管理
  • /admin/user-servers 用户服务器列表
  • /admin/servers 服务器管理
  • /admin/plans 套餐设置
  • /admin/coupons 优惠券设置
  • /admin/billing 全站账单
  • /admin/tickets 全站工单
  • /admin/announcements 公告管理
  • /admin/system 系统设置

说明

  • 管理端页面通过前端 AdminRoute 做基础权限守卫
  • 站点名称、Favicon 与副标题通过 /api/configs/public 动态同步

10. Agent 与宿主机对接说明

agent/ 目录是 PizzaBox 的宿主机侧代理程序。

当前职责:

  • 向主站回报宿主机状态
  • 接收主站下发的实例动作指令
  • 负责实例创建、删除、重装、启动、停止等宿主机操作

当前仓库中:

如果你要真正接生产宿主机,除了主站外,还需要单独部署并配置对应的 Agent。

11. Docker 构建与部署

10.1 构建镜像

chmod +x build.sh
./build.sh

也可以直接指定版本:

./build.sh 1.0.0

当前 build.sh 会:

  • 使用 docker buildx 构建 linux/amd64 镜像
  • 默认镜像名:pizzabox:<tag>
  • 自动导出 tar 到 release/
  • 自动打包 zip 发布包到 release/

生成物示例:

  • release/pizzabox-1.0.0-amd64.tar
  • release/Docker-pizzabox-1.0.0-amd64.zip

10.2 部署镜像

chmod +x deploy.sh
./deploy.sh 1.0.0

当前 deploy.sh 会:

  • 检查本地镜像是否存在
  • 自动准备 ./data/db./data/uploads
  • 若根目录没有 .env,则从 .env.example 复制
  • 自动修正 .env 中的 PORT / DATABASE_URL / NODE_ENV / VITE_API_URL
  • 删除旧容器
  • 启动新容器

默认行为:

  • 容器名:pizzabox
  • 映射端口:5001:5001
  • 数据库存放:./data/db/pizzabox.db
  • 上传文件存放:./data/uploads

访问地址:

  • 前台:http://localhost:5001
  • API:http://localhost:5001/api

10.3 单容器架构说明

当前 Dockerfile 使用多阶段构建:

  1. 构建前端 dist
  2. 安装后端依赖并生成 Prisma Client
  3. 将前端静态文件与后端一起打进最终镜像

因此生产环境下只需要一个容器即可同时提供:

  • 前端页面
  • /api 接口
  • /uploads 资源

12. 常用开发/运维命令

本地开发

cd backend && npm run dev
cd frontend && npm run dev

前端构建

cd frontend
npm run build

后端语法检查

node --check backend/src/app.js

Prisma

cd backend
npx prisma db push
npx prisma generate
node prisma/seed.js

Docker

./build.sh 1.0.0
./deploy.sh 1.0.0
docker logs -f pizzabox
docker ps

13. 常见问题

Q1:前端能打开,但接口请求失败

  • 检查后端是否已启动在 5001
  • 本地开发确认 frontend/vite.config.js/api 代理是否生效
  • 若是 Docker 部署,确认容器已成功启动且 .envPORT=5001

Q2:登录后跳回登录页

  • 检查浏览器本地 tokenuser 是否被清空
  • 检查 JWT_SECRET 是否在服务重启前后发生变化
  • 检查后端是否返回了 401 / 403

Q3:数据库数据丢失

  • 当前本地数据库默认在 backend/prisma/pizzabox.db
  • Docker 部署时数据库持久化在 ./data/db/pizzabox.db
  • 若要保留旧数据,先手动备份数据库文件

Q4:图片上传后打不开

  • 检查 backend/uploads 或 Docker 下的 ./data/uploads
  • 确认访问路径是否为 /uploads/...
  • 确认后端容器有对应目录挂载权限

Q5:build.sh 已构建成功,但 deploy.sh 提示找不到镜像

  • deploy.sh 当前默认从本地 Docker 镜像仓库读取镜像
  • 如果你是把 tar 发到另一台机器,需要先 docker load -i xxx.tar,或者后续把 deploy.sh 扩成支持直接从 tar 导入

Q6:Agent 不在线导致实例无法下发

  • 这类情况主站页面仍可展示实例记录
  • 但真正的开机、关机、删除、重装动作依赖宿主机 Agent 在线

License

请在商用、二次分发或对外部署前,自行确认依赖许可证、支付证书、Agent 侧脚本与宿主机控制链路的合规要求。

About

一个虚拟化平台,可进行创建虚拟机,并且进行管理和使用。

Resources

License

Stars

1 star

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors