Kaneo 2.48.0 常用 API 与运维命令详解
Kaneo 2.48.0 常用 API 与运维命令详解:API Key 与 Bearer 认证、限流实测、项目/任务/评论/标签/工时/搜索全链路接口、错误码表与备份恢复运维命令。
Kaneo 2.48.0 常用 API 与运维命令详解
目标:给 Kaneo 2.48.0 的 REST API 一份可直接照抄的实操清单——认证怎么拿、工作区/项目/任务/评论/标签/工时/搜索这些主链路怎么调、错误码怎么读、限流怎么绕,最后附日常运维命令(健康检查、备份、恢复、日志)。全部请求与响应于 2026-10-28 在 Kaneo 2.48.0 真实实例上实测照抄。
一、环境信息
| 项目 | 值 |
|---|---|
| 操作系统 | Ubuntu 22.04.5 LTS |
| Kaneo | 2.48.0 |
| 服务地址 | http://192.168.1.71:8142(应用内部监听 5173) |
| API 前缀 | http://192.168.1.71:8142/api |
| 数据库 | PostgreSQL 16,库 kaneo |
| 管理员账号 | root@kaneo.local / q1w2e3r4 |
| 实测工作区 ID | LhWKEttqzjppUFHLP6Wxe81KMCstUF5B(Kaneo Lab) |
下文所有 ID 均来自实测实例,读者照抄时替换成自己环境的值即可。
二、认证:API Key 与 Bearer
Kaneo 的 API 有两类凭据:API Key(脚本/集成用)和会话令牌(浏览器/CLI 用)。两者都通过 Authorization: Bearer 头传递。
2.1 创建 API Key
在 Web 界面 Settings → Account → API Keys → Create 创建,完整密钥只在创建时显示一次(实测生成示例):
AWLeXaDAKWshZXwEzlpRKqcxmElZdeIgGPToPurZzmEXXaEWULecPFDozIEytXlQ
拿到后存入环境变量,不要写进脚本明文:
export KANEO_API_KEY='<你的密钥>'
2.2 用 API Key 访问
curl --fail-with-body -s \
-H "Authorization: Bearer $KANEO_API_KEY" \
http://192.168.1.71:8142/api/user/me
实测回显:
{"id":"DWV4ls5Iqeaw1nOcABrbVeKARJd4jpW3","name":"root","email":"root@kaneo.local","image":null,"role":"admin","managedProfileFields":[]}
HTTP 200
2.3 用邮箱密码换会话令牌
curl -s -X POST http://192.168.1.71:8142/api/auth/sign-in/email \
-H 'Content-Type: application/json' \
-d '{"email":"root@kaneo.local","password":"q1w2e3r4"}'
实测回显:
{"redirect":false,"token":"DlEg1hdL8SLKPMXRABgmY4QNM80ZySKv","user":{"name":"root","email":"root@kaneo.local","emailVerified":false,"image":null,"createdAt":"2026-10-27T16:15:41.029Z","updatedAt":"2026-10-27T16:15:41.047Z","isAnonymous":false,"role":"admin","banned":false,"banReason":null,"banExpires":null,"locale":null,"id":"DWV4ls5Iqeaw1nOcABrbVeKARJd4jpW3"}}
返回的 token 可直接作为 Bearer 值使用。注意:会话令牌不受 API Key 的限流约束,脚本压测时用会话令牌更稳,但会话会过期、不适合长期集成。
2.4 限流规则
| 凭据类型 | 限额 | 窗口 |
|---|---|---|
| API Key | 100 次 / 60 秒 | 以最近一次成功请求重新计时 |
| 会话令牌 / 设备授权令牌 | 不计入限额 | — |
窗口是「滚动」的:只要持续有成功请求,60 秒窗口一直往后推。实测超限响应头与正文:
{"message":"Rate limit exceeded","code":"RATE_LIMITED"}
HTTP 状态码 429。若脚本以 1 秒间隔长期运行,会稳定在 100 次后被卡住——这是滚动窗口的典型表现,正确做法是降频或改用会话令牌。
三、基础探测:先确认「谁在这、我能干什么」
3.1 实例状态(无需认证)
curl -s http://192.168.1.71:8142/api/instance/status
实测回显:
{"hasUsers":true,"hasAdmin":true}
HTTP 200
hasUsers/hasAdmin 用于首次部署后判断「是否需要创建管理员」,也是监控探活最轻量的端点。
3.2 健康检查
curl -s -o /dev/null -w '%{http_code}\n' http://192.168.1.71:8142/api/health
实测返回 200。编排里的 healthcheck 就是打这个端点(间隔 30 秒、超时 5 秒、启动宽限 60 秒);自建 systemd 或负载均衡探活建议用同一路径,避免「应用活着但数据库断了」被误判为健康。
3.3 能力开关
curl -s http://192.168.1.71:8142/api/config
实测回显(节选):
{"isCloud":false,"disableRegistration":true,"disablePasswordRegistration":true,"disableEmailOtpSignIn":true,"disableWorkspaceCreation":true,"isDemoMode":false,"hasSmtp":true,"hasImageUploads":true,"hasGithubSignIn":false,...}
HTTP 200
集成脚本应先用它决定「能不能自助注册」「能不能上传附件」,而不是硬编码假设。
3.4 当前身份与工作区权限
curl -s -H "Authorization: Bearer $KANEO_API_KEY" http://192.168.1.71:8142/api/workspace
curl -s -H "Authorization: Bearer $KANEO_API_KEY" \
http://192.168.1.71:8142/api/workspace/LhWKEttqzjppUFHLP6Wxe81KMCstUF5B/capabilities
实测回显:
[{"id":"LhWKEttqzjppUFHLP6Wxe81KMCstUF5B","name":"Kaneo Lab","slug":"kaneo-lab","logo":null,"description":null,"createdAt":"2026-10-27T16:16:50.673Z","role":"owner"}]
HTTP 200
{"manageProjects":true,"createProjects":true,"updateProjects":true,"shareProjects":true,"deleteProjects":true,"updateTasks":true,"createTasks":true,"deleteTasks":true,"assignTasks":true,"createLabels":true,"updateLabels":true,"deleteLabels":true,"manageWorkspace":true,"manageSettings":true,"deleteWorkspace":true,"inviteUsers":true,"manageTeam":true,"updateMembers":true,"removeMembers":true}
HTTP 200
role 与 capabilities 是两回事:role=owner 是成员角色,capabilities 是细粒度能力位。集成脚本做权限预检应读 capabilities,而不是只看 role。
四、项目与看板结构
4.1 列出工作区内的项目
curl -s -H "Authorization: Bearer $KANEO_API_KEY" \
'http://192.168.1.71:8142/api/project?workspaceId=LhWKEttqzjppUFHLP6Wxe81KMCstUF5B'
实测回显:
[{"id":"pc9c5fit4wxzjgk4kybyve6e","workspaceId":"LhWKEttqzjppUFHLP6Wxe81KMCstUF5B","slug":"website-redesign","icon":"rocket","name":"网站改版","description":null,"createdAt":"2026-10-27T16:17:08.210Z","isPublic":false,"archivedAt":null,"lastTaskNumber":1,"position":0,"backgroundVersion":null,"statistics":{"totalTasks":1,"completionPercentage":0,"dueDate":null},"archivedTasks":[],"plannedTasks":[],"columns":[]}]
HTTP 200
statistics.completionPercentage 可直接用于进度看板;columns 在此端点恒为空(官方响应代码里有注释说明「看板结构请用 GET /task/tasks/{id}」)。
4.2 创建项目
curl -s -X POST http://192.168.1.71:8142/api/project \
-H "Authorization: Bearer $KANEO_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"name":"API 实测项目","slug":"api-demo","icon":"zap","workspaceId":"LhWKEttqzjppUFHLP6Wxe81KMCstUF5B"}'
实测回显:
{"id":"axlf0q84fyh2cc2ifwp61o2i","workspaceId":"LhWKEttqzjppUFHLP6Wxe81KMCstUF5B","slug":"api-demo","icon":"zap","name":"API 实测项目","description":null,"createdAt":"2026-10-27T16:32:38.968Z","isPublic":false,"archivedAt":null,"lastTaskNumber":0,"position":1,"backgroundVersion":null}
HTTP 200
4.3 读取项目的列(看板阶段)
curl -s -H "Authorization: Bearer $KANEO_API_KEY" \
http://192.168.1.71:8142/api/column/pc9c5fit4wxzjgk4kybyve6e
实测回显:
[{"id":"l3xiaxeazt1gytkz5yot7z9a","projectId":"pc9c5fit4wxzjgk4kybyve6e","name":"To Do","slug":"to-do","position":0,"icon":null,"color":null,"isFinal":false,"createdAt":"2026-10-27T16:17:08.210Z","updatedAt":"2026-10-27T16:17:08.210Z"},{"id":"aggb08i0egsgmx4ttpmimu7n","projectId":"pc9c5fit4wxzjgk4kybyve6e","name":"In Progress","slug":"in-progress","position":1,...},{"id":"pfn3hrkwqr2lr2u4q9stw2u3","projectId":"pc9c5fit4wxzjgk4kybyve6e","name":"In Review","slug":"in-review","position":2,...},{"id":"tf7xc0qdbw1xqd9wmovn2wbd","projectId":"pc9c5fit4wxzjgk4kybyve6e","name":"Done","slug":"done","position":3,"isFinal":true,...}]
HTTP 200
isFinal:true 的列(Done)是「完成态」标记,脚本统计完成率时按它判定,而不是按列名硬匹配。
五、任务主链路
5.1 读取看板(任务按列分桶)
curl -s -H "Authorization: Bearer $KANEO_API_KEY" \
'http://192.168.1.71:8142/api/task/tasks/axlf0q84fyh2cc2ifwp61o2i?page=1&limit=50'
实测回显(结构节选):
{"data":{"id":"axlf0q84fyh2cc2ifwp61o2i","name":"API 实测项目","slug":"api-demo","columns":[{"id":"to-do","name":"To Do","position":0,"tasks":[]},{"id":"in-progress","name":"In Progress","position":1,"tasks":[{"id":"sl60h6tl8sags2wkd4rxc3ix","title":"API 文档编写","number":1,"priority":"urgent","status":"in-progress","labels":[{"id":"ycbfqauv5qk6n2t6bk1m6lvj","name":"API","color":"#2563eb"}],"subtaskCounts":{"completed":0,"total":0}}]},{"id":"in-review","name":"In Review","position":2,"tasks":[]},{"id":"done","name":"Done","position":3,"tasks":[]}],"archivedTasks":[],"plannedTasks":[]},"pagination":{"total":1,"page":1,"pageSize":1,"totalPages":1,"relatedPage":1,"relatedPageSize":100,"relatedTotalPages":1}}
HTTP 200
这个端点返回的是「看板结构」,不是扁平任务数组——分页依据是 pagination.totalPages。脚本若按扁平数组解析会直接报错,这是官方文档特别提示的坑。
5.2 创建任务
curl -s -X POST http://192.168.1.71:8142/api/task/axlf0q84fyh2cc2ifwp61o2i \
-H "Authorization: Bearer $KANEO_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"title":"API 文档编写","description":"通过 REST API 创建的任务","priority":"medium","status":"to-do"}'
实测回显:
{"id":"sl60h6tl8sags2wkd4rxc3ix","projectId":"axlf0q84fyh2cc2ifwp61o2i","position":1,"number":1,"userId":null,"title":"API 文档编写","description":"通过 REST API 创建的任务","status":"to-do","columnId":"bodw29z051gmz5vlnabhqnd5","priority":"medium","startDate":null,"dueDate":null,"recurrence":null,"createdAt":"2026-10-27T16:32:43.913Z","updatedAt":"2026-10-27T16:32:43.913Z"}
HTTP 200
number:1 是项目内的任务编号(用于 WEB-1 这类短 ID),由服务端递增维护,不要自己算。
5.3 读取单个任务
curl -s -H "Authorization: Bearer $KANEO_API_KEY" \
http://192.168.1.71:8142/api/task/sl60h6tl8sags2wkd4rxc3ix
实测回显:
{"id":"sl60h6tl8sags2wkd4rxc3ix","title":"API 文档编写","number":1,"description":"通过 REST API 创建的任务","status":"to-do","columnId":"bodw29z051gmz5vlnabhqnd5","priority":"medium","startDate":null,"dueDate":null,"recurrence":null,"position":1,"createdAt":"2026-10-27T16:32:43.913Z","userId":null,"assigneeName":null,"assigneeId":null,"projectId":"axlf0q84fyh2cc2ifwp61o2i","workspaceId":"LhWKEttqzjppUFHLP6Wxe81KMCstUF5B"}
HTTP 200
列表接口会把长描述「延迟加载」(descriptionDeferred),需要完整正文时按此端点单取。
5.4 局部更新:优先用专用端点
通用 PUT /api/task/{id} 是全量更新,缺字段直接 400。实测漏传 title/projectId/position 的回显:
{"message":"title: Invalid input: expected string, received undefined","code":"VALIDATION_ERROR","issues":[{"path":"body.title","message":"Invalid input: expected string, received undefined"},{"path":"body.projectId","message":"Invalid input: expected string, received undefined"},{"path":"body.position","message":"Invalid input: expected number, received undefined"}]}
HTTP 400
正确姿势是用只改一个属性的专用端点:
curl -s -X PUT http://192.168.1.71:8142/api/task/status/sl60h6tl8sags2wkd4rxc3ix \
-H "Authorization: Bearer $KANEO_API_KEY" -H 'Content-Type: application/json' \
-d '{"status":"in-progress"}'
curl -s -X PUT http://192.168.1.71:8142/api/task/priority/sl60h6tl8sags2wkd4rxc3ix \
-H "Authorization: Bearer $KANEO_API_KEY" -H 'Content-Type: application/json' \
-d '{"priority":"urgent"}'
两次调用都在活动流里留下记录(见 5.6),说明状态与优先级变更会被审计。
5.5 删除任务
curl -s -X DELETE http://192.168.1.71:8142/api/task/<taskId> \
-H "Authorization: Bearer $KANEO_API_KEY"
实测返回 200 且任务从看板消失。删除是软删(活动流保留历史),恢复需管理员在数据库侧处理,脚本删除前建议先导出。
5.6 评论与活动流
curl -s -X POST http://192.168.1.71:8142/api/activity/comment \
-H "Authorization: Bearer $KANEO_API_KEY" -H 'Content-Type: application/json' \
-d '{"taskId":"sl60h6tl8sags2wkd4rxc3ix","content":"这是一条通过 API 写入的评论"}'
实测回显:
{"id":"x556o60t5e8qst5xmjj04l8l","taskId":"sl60h6tl8sags2wkd4rxc3ix","type":"comment","createdAt":"2026-10-27T16:32:50.351Z","updatedAt":"2026-10-27T16:32:50.351Z","userId":"DWV4ls5Iqeaw1nOcABrbVeKARJd4jpW3","content":"这是一条通过 API 写入的评论","eventData":null,"externalUserName":null,"externalUserAvatar":null,"externalSource":null,"externalUrl":null}
HTTP 200
curl -s -H "Authorization: Bearer $KANEO_API_KEY" \
http://192.168.1.71:8142/api/activity/sl60h6tl8sags2wkd4rxc3ix
实测回显(四条按时间倒序):
[{"id":"tf5c80mme5aqtnq8zhym8o0f","taskId":"sl60h6tl8sags2wkd4rxc3ix","type":"priority_changed","createdAt":"2026-10-27T16:32:57.130Z",...,"eventData":{"newPriority":"urgent","oldPriority":"medium"}},{"id":"mh6w586hb9bxfd1vopm0a5yx","type":"status_changed",...,"eventData":{"newStatus":"in-progress","oldStatus":"to-do"}},{"id":"x556o60t5e8qst5xmjj04l8l","type":"comment",...,"content":"这是一条通过 API 写入的评论"},{"id":"ujxo2w9msdrjsg0gnsdnjjw7","type":"created",...,"eventData":{}}]
HTTP 200
活动流的 type 字段(created/status_changed/priority_changed/comment)是做自动化触发的抓手:轮询该端点 + 比对 createdAt 即可实现「状态变更通知」。
六、标签与工时
6.1 标签:先建再挂
curl -s -X POST http://192.168.1.71:8142/api/label \
-H "Authorization: Bearer $KANEO_API_KEY" -H 'Content-Type: application/json' \
-d '{"name":"API","color":"#2563eb","workspaceId":"LhWKEttqzjppUFHLP6Wxe81KMCstUF5B"}'
实测回显:
{"id":"tj6e04hlkbu6jbs0mwh49mbf","name":"API","color":"#2563eb","createdAt":"2026-10-27T16:35:13.030Z","updatedAt":"2026-10-27T16:35:13.030Z","deletionStartedAt":null,"taskId":null,"workspaceId":"LhWKEttqzjppUFHLP6Wxe81KMCstUF5B"}
HTTP 200
挂到任务上(注意:PUT /api/label/{labelId}/task,标签 ID 在路径、任务 ID 在体):
curl -s -X PUT http://192.168.1.71:8142/api/label/tj6e04hlkbu6jbs0mwh49mbf/task \
-H "Authorization: Bearer $KANEO_API_KEY" -H 'Content-Type: application/json' \
-d '{"taskId":"sl60h6tl8sags2wkd4rxc3ix"}'
实测回显中 taskId 已绑定,并生成了一条新的标签记录:
{"id":"ycbfqauv5qk6n2t6bk1m6lvj","name":"API","color":"#2563eb",...,"taskId":"sl60h6tl8sags2wkd4rxc3ix","workspaceId":"LhWKEttqzjppUFHLP6Wxe81KMCstUF5B"}
HTTP 200
这里有个容易误解的语义:挂标签会产生「任务级副本」(新 id),不是把工作区标签对象直接引用过来。查询某任务的标签用 GET /api/label/task/{taskId},实测返回该副本:
[{"id":"ycbfqauv5qk6n2t6bk1m6lvj","name":"API","color":"#2563eb",...,"taskId":"sl60h6tl8sags2wkd4rxc3ix"}]
HTTP 200
6.2 工时记录
curl -s -X POST http://192.168.1.71:8142/api/time-entry \
-H "Authorization: Bearer $KANEO_API_KEY" -H 'Content-Type: application/json' \
-d '{"taskId":"sl60h6tl8sags2wkd4rxc3ix","description":"API 文档实测","startTime":"2026-10-27T09:00:00.000Z","endTime":"2026-10-27T10:30:00.000Z"}'
实测回显:
{"id":"hp4qfchr4onfo379izqnn8kv","taskId":"sl60h6tl8sags2wkd4rxc3ix","userId":"DWV4ls5Iqeaw1nOcABrbVeKARJd4jpW3","description":"API 文档实测","startTime":"2026-10-27T09:00:00.000Z","endTime":"2026-10-27T10:30:00.000Z","duration":5400,"createdAt":"2026-10-27T16:35:13.056Z","updatedAt":"2026-10-27T16:35:13.056Z"}
HTTP 200
duration:5400 是服务端按起止时间算出的秒数(1.5 小时),不需要客户端传。endTime 省略即开启一个「进行中」的计时条目。时间必须是合法 ISO 8601(服务端会校验日历合法性,2026-02-31 这类日期会被拒)。
七、全局搜索
curl -s -H "Authorization: Bearer $KANEO_API_KEY" \
'http://192.168.1.71:8142/api/search?q=API&workspaceId=LhWKEttqzjppUFHLP6Wxe81KMCstUF5B'
实测回显(截取前两条 + 统计):
{"results":[{"id":"sl60h6tl8sags2wkd4rxc3ix","type":"task","title":"API 文档编写","relevanceScore":3,"taskNumber":1,"priority":"urgent","status":"in-progress"},{"id":"axlf0q84fyh2cc2ifwp61o2i","type":"project","title":"API 实测项目","relevanceScore":3},{"id":"x556o60t5e8qst5xmjj04l8l","type":"comment","title":"Comment on API 文档编写","relevanceScore":2},{"id":"tf5c80mme5aqtnq8zhym8o0f","type":"activity","title":"priority_changed on API 文档编写","relevanceScore":1},{"id":"mh6w586hb9bxfd1vopm0a5yx","type":"activity","title":"status_changed ...","relevanceScore":1},{"id":"ujxo2w9msdrjsg0gnsdnjjw7","type":"activity","title":"created on API 文档编写","relevanceScore":1}],"totalCount":6,"searchQuery":"API"}
HTTP 200
可传 q、type(限定任务/项目/评论/活动)、workspaceId、projectId、limit。结果按 relevanceScore 降序,type 字段决定后续该用哪个端点取详情。
💡 技术拓展:REST 轮询 vs Webhook vs MCP
集成方式 实时性 复杂度 典型用途 REST 轮询(本文) 秒级,受限于轮询间隔 低 定时同步、报表生成 集成 Webhook(GitHub/Slack/Gitea) 准实时 中 代码提交联动任务状态 MCP 服务( /api/mcp)调用即时 中 让 AI 助手直接读写任务 Kaneo 同时提供三者。批处理与报表走 REST;事件驱动走 Webhook;对话式操作走 MCP。三者共用同一套权限模型,能力边界一致。
八、错误码与排障
| HTTP | code | 语义 | 处置 |
|---|---|---|---|
| 400 | VALIDATION_ERROR | 请求体字段缺失或类型错(issues 数组给出行路径) | 按 issues[].path 逐项补齐 |
| 400 | — | 搜索参数非法或工作区无法确定 | 带上 workspaceId |
| 403 | — | 缺少该资源类型的读权限 | 核对 capabilities 与项目访问权 |
| 404 | — | 工作区/项目/任务不存在 | 核对 ID(不要用 slug 代替 ID) |
| 429 | RATE_LIMITED | API Key 超出 100 次/60 秒 | 降频或换会话令牌 |
8.1 排查清单
401全无响应体:检查Authorization头是否带Bearer前缀(漏空格是最常见错误)。400 VALIDATION_ERROR:直接读issues[].path,它精确到body.title这种字段级。403:先用GET /api/workspace/{id}/capabilities确认自己的位,再看是否该资源在「项目访问限制」名单里。429:确认是否用的是 API Key;连续成功的请求会滚动延长窗口。
九、日常运维命令
9.1 服务状态与资源占用
curl -s -o /dev/null -w '%{http_code} %{time_total}s\n' http://192.168.1.71:8142/api/health
systemctl is-active kaneo
ps -eo pid,rss,etime,comm --sort=-rss | head -4
实测回显:
200 0.0012s
active
PID RSS ELAPSED COMMAND
3009 203876 15:57 MainThread
1 984 15:59 kaneo-entrypoin
3034 6464 15:54 nginx
判读要点:健康检查在 1 毫秒量级返回 200 说明应用层正常;Node.js 主进程 RSS 约 200 MB 是 2.48.0 的常态水位,若持续上涨到 500 MB 以上要怀疑内存泄漏(多为自定义插件持有大对象);数据库主进程 postgres 约 26 MB,随连接数增长。
9.2 日志
journalctl -u kaneo -n 12 --no-pager
启动完成段的实测回显:
✓ Registered plugin: Slack
✓ Registered plugin: Mattermost
✓ Registered plugin: Discord
✓ Registered plugin: Generic Webhook
✓ Registered plugin: Telegram
GitHub App not configured, skipping webhook handlers
✓ Plugin event subscriptions initialized
✅ Plugins initialized
⏰ Scheduler started (deferred integration edits every minute, reminders every 5 minutes, seat reconciliation and trial reminders hourly)
📡 WebSockets Initialized using: "InMemoryBroadcastAdapter"
⚡ API is running at http://192.168.1.71:8142/api
API is ready
排障顺序:先看应用日志有无 500 栈,再看数据库日志(/var/log/postgresql/postgresql-16-main.log)有无连接拒绝。InMemoryBroadcastAdapter 说明当前是单机内存广播,若日志里出现 too many connections,对应调小 DATABASE_POOL_MAX。
9.3 备份
PGPASSWORD=q1w2e3r4 pg_dump -h 127.0.0.1 -p 5432 -U kaneo -d kaneo \
--no-owner --clean > /opt/backup/kaneo-$(date +%F-%H%M).sql
ls -lh /opt/backup/ | tail -2
实测产物为纯 SQL 文本,初始数据量下约 105 KB:
-rw-r--r-- 1 root root 105K Oct 28 00:56 kaneo-2026-10-28-0056.sql
备份必须与 AUTH_SECRET 一起保存:只恢复数据库而不恢复原密钥,会全员登出(见同专栏配置篇的 8.2)。
9.4 恢复
psql -h 127.0.0.1 -p 5432 -U kaneo -d kaneo < /opt/backup/kaneo-2026-10-28-0056.sql
curl -s -o /dev/null -w '%{http_code}\n' http://192.168.1.71:8142/api/health
先恢复、后探活。恢复后建议抽查一个任务 ID 是否可读(GET /api/task/{id}),确认数据真的回来了,而不是只看 psql 无报错。--clean 生成的脚本会先 DROP 再 CREATE,恢复期间应用应停写。
9.5 版本核对
curl -s http://192.168.1.71:8142/api/instance/status
node -v
实测回显:
{"hasUsers":true,"hasAdmin":true}
v24.22.1
/api/instance/status 只回答「实例是否已完成初始化」,不返回版本号;版本以部署目录里的 package.json 或前端页脚为准,再与官方发布标签交叉核对,避免「文档写 2.48 而实际跑的是旧版本」这种静默偏差。
十、参考链接
- Kaneo API 参考(官方):
https://docs.kaneo.app/api-reference/introduction - Kaneo 认证与限流(官方):
https://docs.kaneo.app/api-reference/authentication - 同专栏:《Kaneo 2.48.0 介绍与选型指南》
- 同专栏:《Kaneo 2.48.0 部署指南》
- 同专栏:《Kaneo 2.48.0 配置参数详解》