Skip to content

Repository files navigation

🎨 万能涂鸦画布 · Doodle Canvas

一个可自行部署的 AI 可视化创作平台

🧩 节点式画布编排 · 🤖 多模型代理 · 💰 金币计费 · 🛠️ 完整管理后台

License Node Vue Vite MySQL Redis

🔗 仓库地址 · 📖 在线文档 · 🚀 快速开始 · 📜 License: MIT


📌 项目简介

万能涂鸦画布(Doodle Canvas)是一个开箱即用的 AI 创作平台,将 🧩 可视化节点画布🤖 多模型统一代理 结合在一套服务中。用户在浏览器中拖拽文本、图片、视频和大语言模型节点,即可编排个性化的 AI 工作流;服务端统一处理 chat / image / video 请求,支持多渠道优先级调度、金币计费、持久化任务和文件管理,并附带完整的管理后台。

🔐 第三方模型密钥只保存在服务端,并使用 AES-256-GCM 加密后写入数据库,浏览器永远不会接触明文密钥。

📸 截图预览

🏠 首页 🎨 画布工作区
首页 画布
⚙️ 工作流编排 🔧 渠道配置
工作流 渠道配置

✨ 核心功能

🧩 可视化画布

  • 🟦 节点式工作流:文本节点、图片节点、视频节点、LLM 节点自由拖拽编排,每种类型配备独立配置节点。
  • 🔗 连线语义:支持顺序连线、角色连线和提示词连线,表达节点间的数据流向与依赖关系。
  • 📁 项目管理:画布内容可保存为项目,支持多项目切换与持久化。

🤖 多模型代理

  • 🌐 统一入口:一套 API 同时处理 chat、image、video 三类请求,对前端透明。
  • 🏆 多渠道优先级:同一模型可绑定多个渠道,按优先级自动选择可用线路。
  • 🔌 协议适配器:内置 7 种 Provider 适配器,兼容主流大模型服务。
📦 支持的 Provider 🏷️ 类型 📝 说明
openai chat / image / video OpenAI 或兼容 API
aliyun chat / image / video 阿里云百炼 / DashScope
doubao chat / image / video 火山方舟兼容接口
hunyuan chat / image / video 腾讯混元兼容接口
stepfun chat / image / video 阶跃星辰兼容接口
agnes chat / image / video Agnes API
custom chat / image / video 自定义 OpenAI 兼容服务

👤 用户与会话

  • 📝 注册 / 登录 / 邮箱验证 / 密码重置全流程。
  • 🔑 双 Token 会话机制:Access Token 短时效 + Refresh Token 哈希存储与轮换。
  • 🗄️ Redis 保存 Token 撤销状态,MySQL 持久化会话记录。

💰 金币计费

  • 💳 金币余额体系,支持充值、消费、预扣和失败退款。
  • 📊 灵活的计费规则与固定金币价格配置。
  • 👥 用户组倍率机制,支持分层定价。

📋 持久化任务

  • 🗃️ 图片生成任务持久化写入 MySQL,进程重启后可自动恢复。
  • ⚙️ 后台 Worker 按租约领取任务,收费请求先预扣,失败路径执行幂等退款。
  • 🎬 视频渠道支持上游任务 ID 与状态查询。

📂 文件存储

  • 🖼️ 图片和视频上传、生成文件归档、签名访问与软删除。
  • 🔒 /storage/* 请求需服务端签名并校验数据库状态。
  • 🛡️ 远程媒体下载阻止私网和环回地址,降低 SSRF 风险。

🛠️ 管理后台

覆盖完整的运营管理能力:

📊 模块 ⚡ 能力
📈 仪表盘 站点概览与统计
👥 用户管理 用户列表、状态控制、余额调整
🏷️ 用户组 分组与倍率配置
🔌 渠道管理 Provider、Base URL、API Key、测试、启停
🧠 模型管理 模型类型、上游标识、参数边界、价格
💵 计费规则 计费策略与默认价格
🪙 金币管理 充值记录与交易流水
📜 调用记录 请求日志与成本追溯
🗂️ 文件管理 文件列表与归档状态
🐛 错误日志 异常堆栈与排查线索
📢 公告管理 站点公告发布与展示

🧰 技术栈

🖥️ 前端

📦 技术 📝 说明
⚡ Vue 3 组合式 API,响应式视图框架
🔥 Vite 5 极速构建与热更新开发服务器
🕸️ Vue Flow 节点式画布与交互编排
🎨 Naive UI 现代化 Vue 3 组件库
🍍 Pinia 类型友好的状态管理
🌬️ TailwindCSS 原子化 CSS 工具集
🧭 Vue Router 单页应用路由
📡 Axios HTTP 请求客户端

⚙️ 后端

📦 技术 📝 说明
🟢 Express 4 轻量 Node.js Web 框架
🐬 Sequelize 6 + mysql2 MySQL ORM 与驱动
🔴 ioredis Redis 客户端,限流与令牌撤销
🔐 jsonwebtoken + bcryptjs JWT 签发与密码哈希
📤 multer + sharp 文件上传与图片处理
✉️ nodemailer 邮件验证与密码重置
📝 winston 结构化日志
🛡️ helmet + cors + express-validator 安全中间件与参数校验

🏗️ 基础设施

🧩 组件 ✅ 要求
🟢 Node.js 18 或更高,推荐 20 LTS
🐬 MySQL 5.7.44 或 8.0,推荐 8.0
🔴 Redis 6 或更高
🌐 Nginx / PM2 生产环境推荐

🚀 快速安装

💡 以下命令适用于 Linux、macOS 和 Git Bash;Windows PowerShell 可将 cp 替换为 Copy-Item

1️⃣ 获取代码并安装依赖

git clone https://github.com/kggzs/Doodle-Canvas-Service.git
cd Doodle-Canvas-Service

npm ci
npm --prefix server ci
cp server/.env.example server/.env

编辑 server/.env,至少设置 MySQL、Redis、站点地址和 SMTP 参数。完整参数及密钥要求见 📖 配置说明

2️⃣ 创建数据库并导入 Schema

CREATE DATABASE canvas CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'canvas'@'localhost' IDENTIFIED BY 'replace-with-a-strong-password';
GRANT ALL PRIVILEGES ON canvas.* TO 'canvas'@'localhost';
FLUSH PRIVILEGES;
mysql -u canvas -p canvas < server/sql/init.sql

3️⃣ 构建、启动并创建管理员

npm run build
npm run start

# 在另一个终端执行
npm run create-admin -- \
  --email admin@example.com \
  --username admin \
  --password 'replace-with-a-strong-password'

4️⃣ 访问服务

🌐 地址 📌 用途
http://127.0.0.1:3000/ 🖥️ Web 应用
http://127.0.0.1:3000/admin 🛠️ 管理后台
http://127.0.0.1:3000/api/health 💓 进程存活检查
http://127.0.0.1:3000/api/ready ✅ MySQL、Redis、存储就绪检查

🧠 模型配置

启动后进入 /admin,按以下顺序配置模型:

  1. 🔌 创建渠道 — 选择 Provider,填写 Base URL 和 API Key。
  2. 🧠 创建模型 — 选择 chat / image / video 类型,填写上游模型标识。
  3. 🔗 绑定渠道 — 将模型绑定到同类型渠道并设置优先级(数字较小者优先)。
  4. 启用 — 启用渠道、模型和绑定关系。
  5. 💰 定价 — 配置固定金币价格;未配置时使用环境变量中的默认价格。
  6. 🧪 测试 — 渠道测试通过后,从用户页面发起实际请求。

Provider、端点和参数约定见 📖 模型渠道


💻 开发

后端默认监听 3000,Vite 开发服务器监听 3003 并代理 /api

# 终端 1:启动 Express(支持热重载)
npm run server:dev

# 终端 2:启动 Vite(支持前端热更新)
npx vite

运行项目检查:

npm run check

📋 常用命令

⌨️ 命令 📌 用途
npm run build 📦 构建前端到 dist/
npm run start ▶️ 启动 Express 生产服务
npm run server:dev 🔄 使用 nodemon 启动 Express(热重载)
npm run test 🧪 运行服务端 Node 测试
npm run check ✅ 运行测试 + 生产构建
npm run create-admin -- ... 👑 创建管理员账号

更多命令和目录说明见 📖 开发说明


🌐 生产部署

推荐拓扑:

Internet → Nginx (HTTPS) → Node/Express :3000 → MySQL
                                         → Redis
                                         → persistent storage

生产环境必须持久保存 server/.envserver/.runtime.env 和文件存储目录。多实例部署必须共享相同的 JWT_SECRETAES_SECRET_KEYSTORAGE_SIGNING_SECRET

PM2 配置已提供于 server/ecosystem.config.js

pm2 start ecosystem.config.js --env production

完整的 PM2、Nginx、防火墙、备份和上线检查步骤见 📖 部署指南


🗂️ 项目结构

Doodle-Canvas/
├── src/                        # 🖥️ 前端源码
│   ├── views/                  #   📄 页面视图(用户端 + 管理后台)
│   ├── components/             #   🧩 组件(画布节点、连线、布局壳等)
│   │   ├── nodes/              #     🟦 画布节点(文本/图片/视频/LLM 及配置节点)
│   │   └── edges/              #     🔗 连线(顺序/角色/提示词)
│   ├── stores/                 #   🍍 Pinia 状态管理
│   ├── api/                    #   📡 API 客户端(chat/image/video/backend)
│   ├── hooks/                  #   🪝 组合式逻辑(工作流编排等)
│   └── router/                 #   🧭 路由配置
├── server/                     # ⚙️ 后端源码
│   ├── src/
│   │   ├── routes/             #   🛣️ 用户 API + admin/ 管理后台 API
│   │   ├── services/           #   🔧 业务逻辑(认证/计费/生成/存储等)
│   │   ├── adapters/           #   🔌 上游模型协议适配器(7 种 Provider)
│   │   ├── models/             #   🗃️ Sequelize 数据模型(21 个表)
│   │   ├── middleware/         #   🛡️ 中间件(鉴权/限流/审计/请求 ID)
│   │   ├── scheduler/          #   ⏰ 后台任务调度
│   │   ├── config/             #   ⚙️ MySQL/Redis/JWT/密钥配置
│   │   └── scripts/            #   📜 管理员与数据库维护脚本
│   ├── sql/init.sql            #   🐬 新数据库完整 Schema
│   ├── test/                   #   🧪 Node 内置测试
│   └── ecosystem.config.js     #   🚀 PM2 进程配置
├── doc/                        # 📚 文档与界面截图
├── index.html
├── vite.config.js
└── tailwind.config.js

📚 文档

📖 文档 📝 内容
🏗️ 架构说明 组件、数据流、目录和安全边界
⚙️ 配置说明 全部环境变量、默认值和排错
🚀 部署指南 从空服务器到 HTTPS 服务的完整流程
🔌 模型渠道 Provider、Base URL、模型绑定和测试
💻 开发说明 本地开发、测试、构建和常用命令

🔒 安全

  • 🚫 不要提交 server/.envserver/.runtime.env、日志、上传文件或数据库备份。
  • 🔐 生产环境使用独立低权限数据库账号和 Redis 密码,并限制网络访问。
  • ⚠️ AES_SECRET_KEY 丢失后,数据库中的模型 API Key 将无法解密。
  • 🔄 已泄露的密码或 Token 必须在对应服务端轮换,删除本地文件不能使旧凭据失效。
  • 🔒 公网部署应启用 HTTPS,并正确设置 TRUST_PROXY_HOPSCORS_ORIGINSPUBLIC_ORIGIN_ALLOWLIST

📜 License

MIT


⭐ 如果这个项目对你有帮助,欢迎 Star 支持!

🎨 Made with ❤️ by kggzs

About

一个融合 节点式工作流编排 与 多模型 AI 生成 的全栈创作平台。前端拖拽连线,后端统一代理模型调用,提供完整的计费、文件与管理系统。

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages