@ifiander/gachacenter
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
One utility function for module authors to define compiler constants for all bui...
Version History
| Version | Released | License |
|---|---|---|
| 1.0.0 |
Pre-releases (1)
| Version | Released | License |
|---|---|---|
| 0.0.0-stage |