Sign inSign up

iwmu/answerhub

By iwmu

•Updated 3 months ago

Image
0

696

iwmu/answerhub repository overview

⁠AnswerHub

一份自托管的备考题库:练习、模拟考试、错题重做、收藏、笔记、快速背题,数据全部存在本地 SQLite,单用户使用。

⁠技术栈

  • 后端:Node.js 22 / Express / better-sqlite3(WAL、外键、参数化 SQL)
  • 前端:React 18 / Vite / Tailwind CSS / KaTeX

⁠目录结构

client/     React 前端(src/pages 按页面、src/components 复用组件、src/api.js 全部接口封装)
server/     Express 后端(src/routes 按资源分路由、src/middleware 鉴权、src/test 单元测试)
data/       SQLite 运行数据(已 gitignore,勿提交)
docs/       API 文档
answerhub-skill/  Agent 技能:通过 REST API 管理题库(增删改查)

⁠本地开发

需要 Node.js 22+。先装依赖:

npm install --prefix server
npm install --prefix client

两个终端分别启动:

npm run dev:server   # Express,默认 http://localhost:6060
npm run dev:client   # Vite,默认 http://localhost:5173(/api 已代理到 6060)

浏览器打开 http://localhost:5173⁠ ,首次登录默认密码 answerhub(新装库自动生成),登录后到 Settings → 密码 修改。

⁠构建与部署

npm run build   # 构建前端并复制到 server/public
npm start       # 由 Express 同时提供 API 与前端静态资源,默认端口 6060

环境变量:

变量说明默认
PORT服务端口6060
DB_PATHSQLite 文件路径data/answerhub.db
COOKIE_SECURE设为 1 时会话 cookie 仅走 HTTPS(HTTPS 部署建议开启)未设置

生产部署推荐使用 Docker。镜像已发布到 Docker Hub(iwmu/answerhub,支持 amd64/arm64),仓库根目录自带 docker-compose.yml:

services:
  answerhub:
    image: iwmu/answerhub:latest
    container_name: answerhub
    ports:
      - "6060:6060"
    volumes:
      - ./data:/app/data
    restart: unless-stopped

启动:

docker compose up -d   # 默认映射 6060 端口,数据持久化到 ./data

等价于:

docker run -d -p 6060:6060 -v ./data:/app/data iwmu/answerhub:latest

镜像由 GitHub Actions 自动构建:推送 main 更新 latest 标签,打 v* tag 额外发布对应版本号。

⁠数据与备份

  • 全部数据在 data/answerhub.db(WAL 模式),该目录已 gitignore。
  • 页面内 Settings → 数据 可导出 Excel、下载备份、恢复备份、重置题库。
  • 手动备份:复制 data/answerhub.db(备份前建议在页面内下载备份,WAL 数据更完整)。

⁠安全说明

  • 密码以 scrypt 哈希存储(settings.password_hash),旧明文会在启动时自动迁移并删除。
  • 会话使用随机 token,数据库仅存 token 哈希;改密码后所有旧会话立即失效。
  • 登录有防爆破限流:同一 IP 10 分钟内连续失败 5 次返回 429。
  • HTTPS 部署时设置 COOKIE_SECURE=1。
  • 题目/笔记内容经 DOMPurify 消毒后渲染,可安全展示导入的不可信内容。

⁠测试与代码检查

cd server && npm test        # vitest:计分逻辑 + 工具函数
cd client && npm run lint    # ESLint
cd client && npm run format  # Prettier 格式化

⁠API 操作技能(answerhub-skill)

answerhub-skill/ 是一个 Agent Skill,让 AI 助手通过 REST API 直接管理题库:查询、新增、修改、删除专业/科目/题目,以及错题、收藏、笔记等。

使用步骤:

  1. 获取 API Key:Web 端 Settings → API
  2. 设置环境变量:
export ANSWERHUB_KEY=<你的key>
export ANSWERHUB_BASE=http://localhost:6060   # 远程部署时改为对应地址
  1. 之后可直接对 AI 助手用自然语言操作(如“把题目 123 的答案改成 B”“删除题目 456”),也可手动调用脚本:
answerhub-skill/scripts/ah.sh GET /professions                          # 查询专业
answerhub-skill/scripts/ah.sh GET "/subjects/1/questions?keyword=投资"   # 搜索题目
answerhub-skill/scripts/ah.sh PUT /questions/5 '{"answer":"B"}'         # 修改题目
answerhub-skill/scripts/ah.sh DELETE /questions/5                       # 删除题目

删除专业/科目会级联删除其下所有题目,操作前请确认。完整接口见 API 文档⁠。

⁠更多文档

Tag summary

Content type

Image

Digest

sha256:f572627d4…

Size

76 MB

Last updated

3 months ago

docker pull iwmu/answerhub