小小怪卡密验证系统 Pro
全新一代卡密验证解决方案,完全免费开源。本教程将带你从零完成系统部署与使用。
Vue 3 + Spring Boot 3
完全免费
Apache-2.0 开源
团队持续维护
环境要求
部署前请确认服务器满足以下条件。
| 组件 |
版本要求 |
说明 |
| 操作系统 |
CentOS 7+ / Debian 10+ / Ubuntu 20.04+ |
Linux 服务器(推荐) |
| JDK |
17+(推荐 20) |
后端运行环境 |
| MySQL |
8.0 或 5.6+ |
支持 MariaDB(5.6+ 兼容模式) |
| Redis |
任意稳定版 |
缓存服务 |
| Nginx |
任意稳定版 |
反向代理与静态资源 |
| Node.js |
18+(可选) |
自行构建前端时需要 |
工作流教程
以下流程基于宝塔面板部署,按顺序完成即可上线小小怪卡密系统。
1
安装宝塔
2
环境准备
3
获取安装包
4
上传解压
5
编辑配置
6
Java 项目
7
Nginx 代理
8
系统初始化
建议配合
视频教程一起操作。群文件与开源仓库均可获取安装包,任选其一即可。
安装宝塔面板
在服务器上安装宝塔面板,作为后续部署的管理入口。
-
安装宝塔
前往 宝塔官网 获取对应系统的安装命令,在服务器终端执行并完成初始化。
-
登录面板
安装完成后记录面板地址、用户名与密码,通过浏览器登录宝塔面板。
环境准备
登录宝塔面板后,在「软件商店」中安装以下组件。
- Java — 必须安装 JDK 17 或更高版本(推荐 JDK 20)
- MySQL — 8.0 或 5.6 及以上(MariaDB 请选择 5.6+ 兼容)
- Nginx — 用于反向代理与静态资源托管
- Redis — 用于缓存
- Node.js — 如需自行构建前端时安装
获取安装包
可通过 QQ 群文件或开源仓库两种方式获取部署文件。
方式一:群文件下载
加入官方 QQ 群 1050160397,在群文件中下载最新安装包(含 dist.zip 与后端 jar 包)。
点击按钮一键加群
方式二:开源仓库下载
在 Releases 页面可直接下载编译好的 dist.zip 与 backend-0.0.1-SNAPSHOT.jar。国内用户推荐 Gitee,海外用户推荐 GitHub。
上传与解压
将前端与后端文件上传至服务器对应目录。
-
上传 dist.zip
在宝塔「文件」管理中,进入网站根目录(如 /www/wwwroot/你的域名/),上传 dist.zip 并解压。
-
上传后端 Jar
将 backend-0.0.1-SNAPSHOT.jar(或重命名后的 xxgkami-pro.jar)上传至服务器,建议放在独立目录便于管理。
编辑 Jar 配置
修改后端 Jar 包内的数据库等连接配置。
-
用压缩软件打开 Jar
Jar 本质是 zip 格式,使用 WinRAR、7-Zip 等工具直接打开 backend-0.0.1-SNAPSHOT.jar,无需先解压整个文件。
-
编辑配置文件
找到并编辑路径:
BOOT-INF\classes\application.properties
配置 MySQL 数据库连接、Redis 地址等参数,保存后关闭压缩软件(会自动更新 Jar 内文件)。数据库版本支持 MySQL 8.0 或 5.6+,具体导入方式可在首次访问时的系统初始化向导中选择。
-
手动导入(可选)
若跳过向导,也可在 MySQL 中手动创建数据库并导入 kami.sql。使用 MySQL 5.6 / MariaDB 时,系统会在初始化时自动转译为兼容脚本。
添加 Java 项目
在宝塔面板中创建 SpringBoot 项目并启动后端服务。
-
进入 Java 项目管理
在宝塔左侧菜单点击「网站」→「Java 项目」。
-
添加 Java 项目
点击「添加 Java 项目」,按以下参数填写:
| 配置项 |
填写说明 |
| 项目类型 |
SpringBoot |
| 项目 Jar 路径 |
选择上传的 xxgkami-pro.jar 或 backend-0.0.1-SNAPSHOT.jar |
| 项目端口 |
默认 8080(如有冲突请修改此处或配置文件) |
| 启动用户 |
root |
| 守护进程 |
勾选「项目意外停止时自动重启」 |
| 域名 |
填写您的域名 |
确认无误后点击「提交」,等待项目启动成功。
配置 Nginx 反向代理
为网站添加 API 反向代理,使前端能正常访问后端接口。
-
打开网站配置
在宝塔「网站」中找到您的站点,点击「设置」→「配置文件」。
-
定位插入位置
找到如下静态资源缓存配置块:
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 30d;
error_log /dev/null;
access_log /dev/null;
}
-
在其下方添加 API 代理
location /api/ {
proxy_pass http://127.0.0.1:8080/api/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# 禁用缓存,防止 API 数据不刷新
add_header Cache-Control "no-cache, no-store";
}
-
保存并生效
点击「保存」,Nginx 会自动重载配置。访问您的域名,首次打开将进入系统初始化向导完成数据库配置。
系统初始化
前后端部署完成并访问站点后,首次打开会进入「系统初始化向导」。向导将自动检测运行环境并完成数据库配置,完成后不再显示本页。
1. 环境检测
2. MySQL 版本
3. 数据库账号
4. 安装策略
5. 完成
环境自动检测
向导第一步会自动检测当前服务器环境,无需手动填写。
系统初始化向导 — 环境检测
检测项包括:
| 检测项 |
说明 |
| JAVA |
自动识别已安装的 JDK 版本 |
| 操作系统 |
显示当前 Linux 内核版本 |
| REDIS |
检测 Redis 是否在线(如 localhost:6379) |
| MySQL 客户端 |
检测 mysql / mysqldump 是否可用 |
| 当前 JDBC 数据库 |
读取 application.properties 中的连接,显示版本与表数量 |
| 种子 SQL |
检测 kami.sql 是否存在,并根据数据库版本给出推荐选项 |
若系统已安装过,可点击「我已安装系统,检测数据库更新」进行增量更新检测,无需重新走完整安装流程。
数据库版本选择
第二步根据实际安装的 MySQL / MariaDB 版本选择对应脚本,系统提供两种方式。
系统初始化向导 — MySQL 版本选择
MySQL 5.0+ / 5.6+ / MariaDB
自动从 kami.sql 转译为 5.6 兼容脚本后导入。适用于 MySQL 5.6、5.7 及 MariaDB 等较低版本环境。
MySQL 8.0 及以上
直接使用 kami.sql 原文件导入,适用于 MySQL 8.0+ 环境。
MariaDB 用户请选择「MySQL 5.0+ / 5.6+ / MariaDB」兼容模式。选择完成后继续填写数据库账号与安装策略,向导会自动完成建表与初始化。
一键脚本安装
适用于 CentOS 7+ / Debian 10+ / Ubuntu 20.04+,全自动配置 JDK、MySQL、Nginx 等环境。推荐首选此方式。
国内服务器(Gitee 源)
curl -O https://gitee.com/xiaoxiaoguai-yyds/xxgkami-pro/raw/master/install.sh && chmod +x install.sh && sudo ./install.sh
海外服务器(GitHub 源)
curl -O https://raw.githubusercontent.com/xxg-yyds/xxgkami-pro/refs/heads/master/install.sh && chmod +x install.sh && sudo ./install.sh
脚本会自动检测网络环境、安装依赖、编译前后端、配置 Systemd 开机自启,以及 Nginx 反向代理。
本地文件部署
适用于无法在服务器编译、或希望直接上传制品快速上线的场景。
-
获取部署文件
从 Gitee Releases 或 GitHub Releases 下载最新的 backend.jar 和 dist.zip,或在官方 QQ 群(1050160397)群文件中获取。
-
数据库初始化
首次访问站点,通过系统初始化向导完成数据库导入。支持 MySQL 8.0 或 5.6+,也可手动导入 kami.sql。
-
启动后端
nohup java -jar backend.jar > backend.log 2>&1 &
默认监听 8080,上下文路径为 /api。
-
部署前端
将 dist.zip 解压到网站根目录(如 /www/wwwroot/your-domain/)。
-
配置 Nginx
location /api {
proxy_pass http://127.0.0.1:8080;
}
注意:proxy_pass 末尾不要加 /,否则会去掉 /api 前缀导致 404。
手动编译部署
适用于开发者或需要深度定制的场景。前提:JDK 20+、Maven 3.8+、Node.js 18+、MySQL 8.0 或 5.6+
克隆代码
git clone https://github.com/xxg-yyds/xxgkami-pro.git
cd xxgkami-pro
后端编译
cd backend
# 修改 src/main/resources/application.properties 中的数据库配置
mvn clean package -DskipTests
java -jar target/backend-0.0.1-SNAPSHOT.jar
前端编译
cd ../
npm install
npm run build
# 构建产物位于 dist/ 目录,使用 Nginx 托管
管理员后台
提供完整的卡密管理与系统配置能力。
卡密管理
批量生成、导出、状态管理,支持时间卡/次数卡
API 管理
接口密钥生成、权限控制、WebHook 回调
开发者 API
提供标准化 RESTful 接口,支持卡密核销、状态查询、WebHook 回调,API Key 签名认证保障安全。
# 卡密核销示例 (GET)
curl "https://your-domain.com/api/open/use_card?api_key=YOUR_KEY&card_key=YOUR_CARD&machine_code=DEVICE_ID"
常见问题
API 请求返回 404?
检查 Nginx 配置中 proxy_pass 末尾是否多加了 /。后端 context-path 为 /api,必须保留该前缀。
更新历程
当前版本 v1.0.7 · 构建日期 2026-06-04。
仓库:
GitHub ·
Gitee
新功能
- 在线更新:系统信息页可一键更新;自动探测后端 JAR 与前端 dist 路径,支持手动修改确认后下载 Release 制品并替换,完成后自动重启后端
- version.json 新增 releaseDownloads:Gitee / GitHub 各含 dist.zip 与 backend-0.0.1-SNAPSHOT.jar 下载地址,支持 {version} 占位符
- 检查更新优化:并行 ping gitee.com 与 github.com,优先使用先连通的通道拉取 version.json,并提示所用通道
- 首次安装向导完善:检测 kami 库是否存在 admins 表;无 admins 视为未初始化业务库,自动执行全新导入(跳过「覆盖/智能更新」策略页)
- MySQL 5.6 兼容:选 MySQL 5.6 时由 kami.sql 自动转译为 5.6 兼容脚本并显示转译进度,无需单独维护 kami_mysql56.sql
- 种子 SQL 内嵌 JAR:打包时纳入 databaes/kami.sql,部署仅上传 JAR 亦可安装;支持解压到 data/.xxgkami-seed 及自定义 seed-sql-override
- 安装/升级标记:以 data/.xxgkami-setup.complete 与 admins 表共同判定业务库就绪;未完成前跳过业务 JDBC 探测与 ApiKey 等初始化,避免空库报错
- Spring Session:使用 spring_session 表名,启动时初始化会话表;修复 SPRING_SESSION 相关启动与清理错误
- 新版升级检测:业务库就绪后按 data/.xxgkami-version.json 与远程版本比对,支持智能合并更新与版本升级向导
- 引导页与加载页 UI:logo 蒙版渐隐背景;系统初始化向导支持版本升级模式与 5.6 SQL 转译进度展示
- 卡密管理列表:缩短卡密列显示宽度;新增 IP 列(有 ip_address 显示 IP,否则显示「未绑定」)
问题修复
- 修复 MySQL 5.6 转译时 replaceAll("${1}") 触发 Java 命名捕获组告警,改为安全替换逻辑
- 修复宝塔等仅部署 JAR 环境提示「未找到 databaes/kami.sql」导致安装卡在 0% 的问题
- 修复首次启动 Spring Session 等自动建表导致向导误报「库已存在需覆盖/合并」的问题
- 远程 version.json Gitee 源地址调整为 xiaoxiaoguai-yyds/xxgkami-pro,与 Release 下载仓库一致
v1.0.7 后续补丁(已合入当前代码)
- 路径探测增强:优先从 Java 进程 -jar 参数 / ApplicationHome 解析 JAR 路径;支持宝塔 /www/wwwroot/backend/ 布局;dist 扫描站点子目录与 index.html
- 远程更新通道:Gitee 未同步 releaseDownloads 时自动回退 GitHub;下载优先 Gitee,支持 1.0.7 / v1.0.7 标签与多地址重试
- 在线更新权限:修复 JWT 在匿名认证下未生效导致 /api/monitor/update/* Access Denied
- 更新完成提示:提示宝塔权限可能导致无法自动重启,需前往「网站 → Java 项目」手动启动
- 智能更新管道:修复 mysqldump 警告混入 SQL 导致 mysql=1;失败时输出 mysql 详细错误
- 智能更新结构同步:合并前自动 ALTER TABLE 补齐种子库新增字段(如 api_keys.require_machine_code),避免 Unknown column
- 登录与向导跳转:修复管理员登录成功不进入后台;安装/升级完成后支持默认密码自动登录
Release 下载
| 通道 |
dist.zip |
backend JAR |
| Gitee |
https://gitee.com/xiaoxiaoguai-yyds/xxgkami-pro/releases/download/{version}/dist.zip
https://gitee.com/xiaoxiaoguai-yyds/xxgkami-pro/releases/download/{version}/backend-0.0.1-SNAPSHOT.jar
|
| GitHub |
https://github.com/xxg-yyds/xxgkami-pro/releases/download/{version}/dist.zip
https://github.com/xxg-yyds/xxgkami-pro/releases/download/{version}/backend-0.0.1-SNAPSHOT.jar
|
命令行更新脚本
# 国内 · Gitee
curl -O https://gitee.com/xiaoxiaoguai-yyds/xxgkami-pro/raw/master/install.sh && chmod +x install.sh && sudo ./install.sh
# 海外 · GitHub
curl -O https://raw.githubusercontent.com/xxg-yyds/xxgkami-pro/refs/heads/master/install.sh && chmod +x install.sh && sudo ./install.sh
- 新增 API 密钥管理页「代码实例」入口(位于「接口文档」左侧),便于快速查阅核销接口调用方式
- 新增核销接口多语言示例弹窗:覆盖 Shell(cURL/Wget/HTTPie 等)、PowerShell、Node.js、浏览器/JavaScript、HTML、Vue 3、Python、PHP、Go、Java、C#、Ruby、Kotlin、Dart、Rust、Swift 等常见语言与工具
- 示例数据独立维护于 apiUseCardCodeExamples.js,弹窗内支持左侧切换语言、一键复制源码
- 集成 highlight.js(GitHub Dark 主题),各语言代码块支持语法高亮;展示当前环境 API 根路径参考,便于替换示例中的 BASE_URL
- 卡密管理:支持按设备码/机器码查找对应卡密;导出支持筛选「未使用」「已使用」
- 时间卡规则:新增「叠加 / 单张」模式——单张为现行逻辑(以激活时刻起算到期);叠加模式下同一设备续充时间卡时,将新卡时长累加到当前生效授权的到期时间,实现无缝续期
- 一机一码增强:卡密在首台设备绑定且为已使用后,其它机器码无法再通过该卡核销,补全跨机校验与防重复滥用
- API 密钥能力:支持按密钥配置「同一机器码对指定卡密类型仅可成功核销一次」(例如每台机仅一次 1 天体验卡)
- 用户首页:支持用户自行解绑已绑定的机器码(无需仅依赖管理员后台)
- 管理后台:顶部导航栏布局与交互重做,提升入口清晰度与操作效率
- 修正部分示例片段(如 Go JSON 请求体、C# HttpClient 调用等),保证可对照使用
- 修复次数卡剩余最后一次无法正常扣减、次数无法归零的问题
- 修复已激活时间卡在后台修改时长不生效的问题
- 新增一机一码功能:卡密首次核销时自动绑定机器码,后续验证必须匹配
- 新增机器码管理:卡密列表展示机器码列,编辑弹窗支持重置机器码
- 新增时间卡密实时倒计时:管理端按秒刷新显示剩余时间
- 新增卡密启用/暂停功能:已使用卡密被暂停后提示「卡密被停止使用」
- 新增重复验证控制:时间卡密支持开启/关闭重复验证,关闭后仅允许验证一次
- 新增批量创建进度条:大量创建卡密时逐条创建,实时显示进度
- 优化登录页 UI:管理员与用户登录页采用不同主题,管理员页新增返回入口
- 优化自定义接口:输入/输出参数新增机器码变量,新增机器码不匹配/重复验证拒绝状态码
- 修复高级时间卡密激活后管理端显示「未激活」的问题
- 修复新创建卡密立即开始倒计时的问题(改为首次核销后才计时)
- 修复卡密导出时间卡到期时间为空的问题
- 修复 API 管理无法分配用户的问题
- 修复 CORS 不支持 PATCH 方法的问题
- 修复次数卡密在设置过期时间后被误识别为时间卡密的问题
- 优化卡密验证核心逻辑,优先根据总次数判断卡密类型
- 修复部分已知后端逻辑问题,提升系统稳定性
- 全面优化移动端 UI 体验,重构用户管理页面为响应式卡片布局
- 修复移动端侧边栏菜单无法展开的问题,优化首页导航栏显示
- API 接口自定义返回配置新增「卡密状态」字段支持
- 优化管理后台顶部导航栏,移除冗余的消息通知入口
- 修复部分已知 UI 溢出和布局错位问题
- 修复用户注册时因邮件配置缺失导致的 500 错误,优化异常处理逻辑
- 升级 xxgkami 命令行工具,新增数据库智能增量更新功能
- 优化系统安装脚本,提升部署体验
- 修复部分已知的小问题
- 完善管理员账号密码加密逻辑,数据库存储由明文全面升级为 BCrypt 加密
- 新增系统信息页面,支持查看版本信息、开源协议及开发团队
- 新增在线检查更新功能,提供国内/海外一键更新脚本
- 优化前端导航栏布局,提升用户体验
小小怪卡密验证系统 1.0 正式发布。