@ifiander/gachacenter

GachaCENTER. 创作者档案网站完整源码:Nuxt SSR、MySQL、审核与管理后台
297
Install
npm install @ifiander/gachacenter
Latest Version:1.0.0
Last Updated:Oct 10, 2026
Links: npm
Maintainer: ifiander

GachaCENTER.

面向 Gacha Club 及相关创作社区的公开创作者档案站,默认正式域名 https://center.gacha.icu。本站为社区资料站,不代表游戏或平台官方。实现了 Nuxt 服务端渲染的前台、真实 MySQL 数据库、审核 API 和 /admin 管理后台。

本地运行

npm 源码分发包为 @ifiander/gachacenter。下载解压、安装与发版说明见 npm 源码分发;它仍需 MySQL 和服务器构建,不提供 npx 启动器。

需要 Node.js 22.12+ 或 24 LTS、npm 10+、MySQL 8.0/8.4(utf8mb4,推荐服务器时间 UTC)。版本固定于 package.json/package-lock.json;目标 Linux 部署时重新安装依赖并生成 Prisma Client。

node --version
npm --version
mysql --version

先创建空数据库和专属账号。复制 .env.example 为 .env,填写 DATABASE_URL。数据库密码的特殊字符需 URL 编码。生成自己的 SESSION_SECRET,不使用任何固定默认密码:

node -e "console.log(require('crypto').randomBytes(48).toString('hex'))"
npm ci
npm run db:migrate
npm run admin:init -- --username owner
npm run dev

初始化命令在交互终端隐藏输入管理员密码(12 至 128 字符),且仅在没有后台账号时可用。非交互环境可临时设置 ADMIN_USERNAME、ADMIN_PASSWORD,运行后清除变量;不要写入源码、命令参数、截图或共享日志。打开 http://localhost:3000 和 /admin/login。开发监听 loopback,SITE_URL 必须与浏览器地址一致,避免 CSRF 拒绝。

空库仅初始化五个平台,没有创作者示例;首页和目录完整呈现空状态。独立示例导入(虚构资料,明确标记):

# Linux/macOS
SEED_EXAMPLE_CONFIRM=yes npm run seed:example
# Windows PowerShell
$env:SEED_EXAMPLE_CONFIRM = 'yes'
npm run seed:example
Remove-Item Env:SEED_EXAMPLE_CONFIRM

不要将此命令加入生产部署流程。

构建与启动

npm run typecheck
npm test
npm run build
node --env-file=.env .output/server/index.mjs

生产需 NODE_ENV=production、SITE_URL=https://center.gacha.icu 和 >=32 字符 SESSION_SECRET。npm start 不自动载入 .env,应由宝塔注入变量,或使用上面的 Node --env-file 启动方式。默认仅监听 127.0.0.1:3000。上传目录必须可写且位于持续保留的数据目录,不能随发布删除。

Windows 开发服务运行时会占用 Prisma 引擎 DLL;运行 generate/build 前停止本项目开发服务。如果 npm 访问官方 registry 不稳定,可选用可信 npm 镜像安装;锁文件含完整性校验。无需修改源码或降级框架。

项目结构

目录/文件 用途
pages/、layouts/、components/ 公开 SSR 页面、后台页面、结构化表单和共用组件
assets/css/ 紫罗兰设计变量、响应式样式、焦点和减少动效支持
server/api/[...path].ts API 路由调度,公开读取、审核、管理、登录及上传
server/utils/ Prisma 单例、安全、参数校验、事务档案操作、上传处理
server/middleware/ 安全响应头、后台/API 缓存限制
server/routes/ 动态 sitemap、robots、持久化图片服务
prisma/schema.prisma、prisma/migrations/ MySQL 数据模型、版本化 utf8mb4 迁移
scripts/ 一次性管理员初始化、独立示例导入、真实 HTTP/MySQL 验收
tests/ 密码、链接规范化、数据校验规则测试
docs/、deploy/ API 契约、安全规则、验收记录、宝塔及 Nginx 配置

数据模型包含创作者、平台账号、作品、平台、标签关联、投稿、处理历史、修订、后台账号、会话、日志、站点设置和限速计数。审核状态、公开状态、软删除分别记录。平台账号使用同平台稳定 ID 与规范化 URL 的哈希唯一约束,同名不会自动合并。合并在 MySQL 事务内完成,并保留旧 URL 跳转、两份档案的修订和资料来源。

目录支持关键词、平台、标签、创作类型、排序及分页,状态保存在 URL。公开页面仅展示已审核发布且未删除/合并的档案。访客无需注册提交请求,查询凭证只保存在用户手中,通过 POST 查询有限状态。后台管理员可以管理账号、设置和合并;编辑可以维护档案、审核和编辑分类,权限由每个 API 服务端检查。

常用命令

命令 用途
npm run dev 本地开发
npm run db:generate 当前平台生成 Prisma Client
npm run db:migrate 部署版本化迁移
npm run db:dev -- --name change_name 本地开发新增迁移;不要用于生产
npm run admin:init -- --username owner 一次性管理员初始化
npm run seed:example 显式授权后导入标记的虚构示例
npm run typecheck、npm test 静态类型和安全规则验证
npm run build、npm start 生产构建和单进程运行
npm run test:integration -- --managed 启动并重启编译后的服务,验证真实 MySQL 流程

真实数据库验收

必须在隔离测试数据库迁移并初始化管理员。设置 RUN_INTEGRATION_TESTS=1、TEST_ADMIN_USERNAME、TEST_ADMIN_PASSWORD 后运行验收;凭证也可放在忽略版本管理的 .local/admin-credentials.json。--managed 使用3100端口并运行/重启编译后的服务;不带此参数针对 TEST_BASE_URL(默认 localhost:3000)。测试创建标记为示例的资料并只清理本次记录,不重置数据库,不连接虚构内存后端。结果输出到 artifacts/integration-results.json。

$env:RUN_INTEGRATION_TESTS = '1'
# 临时设置 TEST_ADMIN_USERNAME 和 TEST_ADMIN_PASSWORD,避免写入命令历史
npm run test:integration -- --managed
Remove-Item Env:RUN_INTEGRATION_TESTS

详见 实际验收记录、数据与安全规则、宝塔部署步骤、Nginx 配置示例。生产服务器上的 DNS、TLS、宝塔运行用户、Linux Prisma 引擎与备份恢复必须在实际服务器按文档验收。

Related Packages

@scayle/storefront-nuxt

Nuxt integration for the SCAYLE Commerce Engine and Storefront API

152,903
nuxt-tsconfig-stub

Stub Nuxt's generated tsconfig.json at installation

70,835 24
kuranuxt

Look at the Nuxt 3 documentation to learn more.

871 0
nuxt-define

One utility function for module authors to define compiler constants for all bui...

13,412,511
dayjs-nuxt

Day.JS Module for Nuxt

1,986,864 126

Version History

Version Released License
1.0.0
Pre-releases (1)
Version Released License
0.0.0-stage