Skip to content

自建服务端 ​

用于存储使用 nitaiPage 过程中产生的数据,可实现多设备间同步

快速开始 ​

Node.js 22+ 或 直接用容器(推荐)

bash
cp .env.example .env
npm install
npm start # 首次启动会自动拉取构建前端
bash
docker compose up -d --build

批准设备:

bash
npm run pair -- <配对码>

docker compose exec nitaipage npm run pair -- <配对码> # 容器部署

端口 ​

端口默认值
前端页面11123
API 接口11125
  • API 端口 Access-Control-Allow-Origin 为 *,不认 cookie,凭证只走 HEADER

鉴权 ​

由 AUTH_MODE 决定,默认 pairing:

方式AUTH_MODE
配对pairing(默认)
密码password

配对(推荐) ​

没有共享口令,凭证在服务端只存 SHA-256 摘要

bash
npm run pair # 列出所有等待批准的设备
npm run pair -- AB3F9K2M # 批准设备
npm run pair -- --deny AB3F9K2M # 拒绝设备
npm run pair -- --devices # 列出所有已授权设备
npm run pair -- --revoke <id> # 撤销某个已授权设备
npm run pair -- --sweep # 马上清理过期的申请和过期的凭证(服务端每 60 秒清一次)

密码(不建议) ​

dotenv
AUTH_MODE=password

# ———————前端密码————————— #
APP_PASSWORD_HASH= # 用 `npm run hash-password` 生成(建议)
APP_PASSWORD= # 或直接写密码(改密码后所有设备都要重新验证)
# ———连接数据库时的密码———— #
API_TOKEN=

SESSION_MAX_AGE=2592000 # 会话有效期(秒),默认 30 天

如果你要在浏览器扩展连接到自建数据库,必须使用 pairing 模式

环境变量 ​

变量默认值说明
AUTH_MODEpairing鉴权方式
WEB_PORT / API_PORT11123 / 11125页面 / API 端口
HOST0.0.0.0仅本机填127.0.0.1
DATA_DIR./data数据目录(SQLite + 文件)
FRONTEND_REPO / FRONTEND_REF官方仓库 /v3.0.1指定的前端版本(tag)
PREPARE_FRONTENDtruefalse 则跳过构建
ONLY_SERVER / SERVER_URLfalse / 空强制保存数据到服务器
APP_PASSWORD_HASH / APP_PASSWORD空仅password,摘要优先
API_TOKEN空仅password,API 端口静态令牌
SESSION_MAX_AGE2592000会话有效期(秒)
LOGIN_MAX_FAILURES / LOGIN_WINDOW_MS10 / 900000登录失败限流
PAIRING_TTL / MAX_PENDING_PAIRINGS600000 / 20配对码有效期(毫秒)/ 待批准上限
DEVICE_TOKEN_MAX_AGE15552000设备凭证有效期(秒),默认 180 天
MAX_BODY_BYTES / MAX_UPLOAD_BYTES33554432 / 209715200请求体 / 单文件上限
MAX_VALUE_WARN_BYTES262144kv 值上限(警告,但不会拒绝写入)

接口 ​

除 /api/health、/api/version、/favicon.ico 与当前鉴权方式的入口(pairing 是 /pair 与 /api/pair/*,password 是 /login 与 /api/login)外,其余都需要授权

方法路径说明
GET/api/health · /api/version健康检查、
版本 / 鉴权方式 / 前端构建信息
GET/api/stats库  行数、占用、最大条目
POST/api/pair/request · /api/pair/claim · /api/pair/revoke-self配对申请 / 领取凭证 / 设备自己撤销(仅pairing)
POST/api/login · /api/logout口令登录 / 登出(仅password)
GET / PUT / DELETE/api/db/:db/:store/:key三级定位的键值读写
GET / POST/api/db/:db/:store读整个 store / 新 key(key 由服务端生成)
PUT/api/db/:db/:store/_all整表替换(清空与写入用同一个事务)
POST/api/files?name=x.jpg上传文件(body 为原始二进制)
GET / DELETE/api/files/:ref下载(带缓存头)/ 删除文件
GET/backup · /backup/download带鉴权的备份下载页 / 流式下载 zip

:db / :store / :key 与 nitaiPage db.js 的调用一致(如 dbGet('nppstore', 'Npp', id) 对应 GET /api/db/nppstore/Npp/{id}),鉴权元数据在同一库的 system 下

前端构建 ​

服务启动时会自动按 FRONTEND_REF 拉取前端并构建

ref 或 ONLY_SERVER 或 SERVER_URL没变就直接跳过,改了 FRONTEND_REF 后重启就自动重建

ref 只能填 tag

ONLY_SERVER = true 则锁定数据库存储

SERVER_URL可锁定 api 地址

不启动服务、单独构建前端: ​

bash
npm run prepare-frontend

构建记录在 frontend/.frontend.json,删掉就会强制重建

PREPARE_FRONTEND=false 就直接跳过构建

查看当前版本: ​

bash
curl http://localhost:11123/api/version
# { "server": "1.0.0", "frontend": { "ref": "v3.0.1", "commit": "abc1234", "builtAt": "..." } }

数据与备份 ​

data/
├── nitaiPage.sqlite
└── files/

数据存储在 ​data/​ 目录,备份该目录,或者导出容器卷

Released under the Apache-2.0 License.