Kanboard 1.2.56 Docker Compose 部署指南
Kanboard 1.2.56 官方镜像 Docker Compose 从零部署实测:compose 编排、持久化挂载、销毁重建恢复闭环、环境变量表、配置加载优先级与等价 docker run,含 API Basic 认证等排障沉淀。
Kanboard 1.2.56 Docker Compose 部署指南
目标:在一台 Ubuntu 服务器上用官方 Docker 镜像与 Docker Compose 完成 Kanboard 1.2.56 看板系统的从零部署,覆盖镜像选型、持久化挂载、初始化、销毁重建恢复闭环与常用运维操作。全文命令与回显均已在 Ubuntu 22.04(内核 5.15+,x86_64,Docker Engine 24+)环境实测通过。
一、环境信息
本篇所有操作在以下环境实测完成,读者复现时请对齐软件版本与目录规划。
- 操作系统:Ubuntu 22.04 LTS(x86_64)
- Docker Engine:24.x(docker compose v2 插件,
docker compose version可查) - Kanboard:v1.2.56(官方镜像
kanboard/kanboard:v1.2.56,2026-10-21 发布) - 镜像内置运行时:nginx(监听 80/443)+ php-fpm 8.5.12(s6-svscan 托管,服务:nginx/php/cron)
- 数据库:默认 SQLite(零外部依赖);如需 MySQL/PostgreSQL 见第六节环境变量
- 部署目录规划:
/opt/kanboard/(compose 项目目录,数据落在其下data/、plugins/、ssl/、config/) - 宿主机端口规划:
8146→ HTTP(80)、8147→ HTTPS(443)(自签证书) - 验证方式:healthcheck 接口 + JSON-RPC API(
/jsonrpc.php,HTTP Basic 认证)
二、镜像选型说明
本节说明为什么选官方镜像以及版本标签策略。Kanboard 官方(kanboard.org 与 GitHub 仓库 Dockerfile)直接维护 kanboard/kanboard 镜像,选它而非第三方构建的理由有三:官方镜像随源码同步发版(v1.2.56 于 2026-10-21 与源码同日发布);内置 nginx + php-fpm + s6 进程管理 + 自签证书自动生成,开箱即用;v1.2.56 已将运行时升级到 PHP 8.5.12(修复 CVE-2026-109618/CVE-2026-109619,见官方 Release Note)。
| 镜像 | 维护方 | 说明 | 建议 |
|---|---|---|---|
kanboard/kanboard:v1.2.56 | 官方 | 精确锁定版本,升级可控 | 生产推荐 |
kanboard/kanboard:latest | 官方 | 跟随最新版漂移 | 仅测试环境 |
| 第三方构建(bitnami 等) | 社区 | 形态各异,无官方承诺 | 不推荐 |
⚠️ 注意:Kanboard 官方只发布
latest与v<版本号>形态标签,拉取时务必带精确版本号(如v1.2.56),避免latest漂移带来不可控升级。版本号以 GitHub Releases 实查为准(查询日期 2026-10-23,最新稳定版 v1.2.56)。
确认镜像已就位:
docker pull kanboard/kanboard:v1.2.56
docker images kanboard/kanboard
实测回显:
REPOSITORY:kanboard/kanboard TAG:v1.2.56 ID:871435323da4 SIZE:150MB
镜像健康检查机制(内置 Healthcheck,docker compose ps 中直接体现):
Test: ["CMD-SHELL","curl -f http://localhost/healthcheck.php || exit 1"]
三、前置条件
部署前确认服务器具备以下条件,逐项给出验证命令与预期。
- Docker Engine 与 compose 插件可用:
docker --version && docker compose version
实测回显:
Docker version 29.8.1, build 4a63305
Docker Compose version v5.5.1
- 规划的宿主端口未被占用(以 8146/8147 为例):
ss -ltn | grep -E ':8146|:8147'
实测回显(无输出即未被占用,可继续):
(空)
- 部署目录已创建:
mkdir -p /opt/kanboard/{data,plugins,ssl}
cd /opt/kanboard
实测回显(无报错即成功):
(空)
💡 说明:
data/存放 SQLite 数据库文件、附件与日志;plugins/存放插件目录;ssl/可选——留空时容器首次启动自动生成自签证书,也可放入自己的证书对(文件名必须为kanboard.key/kanboard.crt)。
四、部署步骤
本节完成 compose 编排编写、启动、健康验证与初始化四步,走完即得到一个可登录使用的 Kanboard。
4.1 编写 compose.yaml
在 /opt/kanboard/compose.yaml 写入以下内容(项目名显式声明为 kanboard-1.2.56-stack,避免多套部署同机时相互干扰):
name: kanboard-1.2.56-stack
services:
kanboard:
image: kanboard/kanboard:v1.2.56
container_name: kanboard-1.2.56-app
ports:
- "8146:80"
- "8147:443"
volumes:
- ./data:/var/www/app/data
- ./plugins:/var/www/app/plugins
- ./ssl:/etc/nginx/ssl
environment:
LOG_DRIVER: file
DB_DRIVER: sqlite
restart: unless-stopped
networks:
- kanboard-net
networks:
kanboard-net:
driver: bridge
ipam:
config:
- subnet: 10.89.72.0/24
逐项说明:
name: kanboard-1.2.56-stack:compose 项目名,down/ps等命令按项目名圈定资源,防止同名项目互删;image: kanboard/kanboard:v1.2.56:官方镜像 + 精确版本;container_name:固定容器名,便于docker logs/exec直达;ports:宿主 8146→容器 80(HTTP)、8147→容器 443(HTTPS);volumes三个挂载点:数据持久化(SQLite/附件/日志)、插件目录、SSL 证书目录;environment:LOG_DRIVER: file让日志落文件便于排障;DB_DRIVER: sqlite为默认值,显式写出仅为可读性;restart: unless-stopped:服务器重启后自动拉起(手动停止除外);networks:显式子网,避免与同机其他 compose 栈冲突。
4.2 启动栈
cd /opt/kanboard
docker compose up -d
实测回显:
Network kanboard-1256-stack_kanboard-net Creating
Network kanboard-1256-stack_kanboard-net Created
Container kanboard-1.2.56-app Creating
Container kanboard-1.2.56-app Created
Container kanboard-1.2.56-app Starting
Container kanboard-1.2.56-app Started
4.3 验证运行状态
等待健康检查通过(内置 StartPeriod 约 3 秒 + 探测间隔),查看容器状态与端口:
docker compose ps
实测回显:
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
kanboard-1.2.56-app kanboard/kanboard:v1.2.56 "/usr/local/bin/entr…" kanboard 13 seconds ago Up 12 seconds (healthy) 0.0.0.0:8146->80/tcp, [::]:8146->80/tcp, 0.0.0.0:8147->443/tcp, [::]:8147->443/tcp
STATUS 列出现 (healthy) 即健康检查通过。进一步用健康检查接口确认数据库连接:
curl -s http://127.0.0.1:8146/healthcheck.php
实测回显:
{"status":200,"message":"Database connection is OK"}
访问首页确认 Web 服务响应(302 表示跳转登录页,正常):
curl -s -o /dev/null -w 'login page HTTP %{http_code}\n' http://127.0.0.1:8146/
实测回显:
login page HTTP 302
4.4 初始化管理员密码
首次登录使用默认管理员账号 admin(官方文档 docs.kanboard.org 给出的出厂口令为 admin)。从安全与流程统一考虑,本指南在初始化阶段直接用 Kanboard 内置 CLI 将 admin 密码重置为演示口令 q1w2e3r4(生产环境请换成自己的强口令):
printf 'q1w2e3r4\nq1w2e3r4\n' | docker compose exec -T kanboard /var/www/app/cli user:reset-password admin
实测回显:
What is the new password for admin? (characters are not printed)
Confirmation:
Password updated successfully
⚠️ 注意:
user:reset-password只接受用户名参数,新密码通过交互提示输入两次(管道喂入亦可)。口令最小长度 6 位——尝试设置 5 位口令会报错:The minimum length is 6 characters
4.5 API 冒烟验证
用 JSON-RPC API 做一次端到端冒烟(v1.2.56 采用标准 HTTP Basic 认证,-u admin:q1w2e3r4):
curl -s -u admin:q1w2e3r4 -X POST http://127.0.0.1:8146/jsonrpc.php \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","method":"getVersion","id":1,"params":{}}'
实测回显:
{"jsonrpc":"2.0","result":"v1.2.56","id":1}
创建首个项目:
curl -s -u admin:q1w2e3r4 -X POST http://127.0.0.1:8146/jsonrpc.php \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","method":"createProject","id":2,"params":{"name":"运维任务看板"}}'
实测回显(返回项目 id=1):
{"jsonrpc":"2.0","result":1,"id":2}
创建首个任务(column_id: 2 为项目默认第一列「Ready」):
curl -s -u admin:q1w2e3r4 -X POST http://127.0.0.1:8146/jsonrpc.php \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","method":"createTask","id":4,"params":{"title":"验证 Kanboard 部署闭环","project_id":1,"column_id":2,"owner_id":1}}'
实测回显(返回任务 id=1):
{"jsonrpc":"2.0","result":1,"id":4}
💡 说明:也可直接用浏览器访问
http://<服务器IP>:8146/,用admin/q1w2e3r4登录后图形化建项目建任务,效果等价。
五、数据持久化说明
本节讲清「数据到底在哪、哪些东西必须持久化、如何验证销毁重建后数据完好」。
5.1 持久化挂载点
| 容器内路径 | 宿主路径(本方案) | 内容 | 是否必须挂载 |
|---|---|---|---|
/var/www/app/data | /opt/kanboard/data | SQLite 数据库(db.sqlite)、附件(files/)、日志(debug.log)、缓存 | 必须 |
/var/www/app/plugins | /opt/kanboard/plugins | 插件代码目录 | 建议 |
/etc/nginx/ssl | /opt/kanboard/ssl | TLS 证书对(自签或自备 kanboard.key/kanboard.crt) | 可选 |
/var/www/app/config.php | /opt/kanboard/config/config.php | 自定义配置文件(单文件挂载,见第八节) | 可选 |
启动后确认宿主侧数据文件已生成:
ls -l /opt/kanboard/data/
实测回显:
total 132
-rw-r--r-- 1 1000 1000 133120 Oct 23 16:28 db.sqlite
SQLite 模式下,Kanboard 的全部业务数据(项目/任务/用户/评论/附件元数据)都在 db.sqlite 一个文件里;附件二进制在 data/files/。备份等价于停写后复制整个 data/ 目录。
5.2 销毁重建恢复闭环(实测)
「栈销毁 → 数据仍在 → 重建 → 数据完好」是检验持久化配置是否正确的金标准,三步实测如下。
第一步,销毁栈(容器与网络被删除,宿主目录不受影响):
docker compose down
实测回显:
Container kanboard-1.2.56-app Removing
Container kanboard-1.2.56-app Removed
Network kanboard-1256-stack_kanboard-net Removing
Network kanboard-1256-stack_kanboard-net Removed
确认宿主数据仍在:
ls /opt/kanboard/data/
实测回显:
db.sqlite
第二步,原样重建:
docker compose up -d
实测回显:
Network kanboard-1256-stack_kanboard-net Creating
Network kanboard-1256-stack_kanboard-net Created
Container kanboard-1.2.56-app Creating
Container kanboard-1.2.56-app Created
Container kanboard-1.2.56-app Starting
Container kanboard-1.2.56-app Started
第三步,验证数据完好——健康检查与销毁前创建的任务:
curl -s http://127.0.0.1:8146/healthcheck.php
curl -s -u admin:q1w2e3r4 -X POST http://127.0.0.1:8146/jsonrpc.php \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","method":"getAllTasks","id":9,"params":{"project_id":1}}'
实测回显(任务「验证 Kanboard 部署闭环」原样返回,数据零丢失):
{"status":200,"message":"Database connection is OK"}
{"jsonrpc":"2.0","result":[{"id":1,"title":"验证 Kanboard 部署闭环","description":"","date_creation":1792772994,"color_id":"yellow","project_id":1,"column_id":2,"owner_id":1,"position":1,"is_active":1,...
💡 说明:
docker compose down不带-v时只删容器与网络,不删 bind mount 的宿主目录,这正是本方案用目录挂载而非命名卷的原因——数据路径直接暴露在宿主文件系统,备份/迁移肉眼可见。
六、环境变量表
Kanboard 支持用环境变量注入配置(源码 app/constants.php 中逐项 getenv() 读取)。下表为部署常用项,默认值取自 v1.2.56 源码实测(defined('X') or define('X', getenv('X') ?: 默认值) 语义)。
6.1 数据库连接类
| 变量 | 默认值 | 说明 |
|---|---|---|
DB_DRIVER | sqlite | 驱动:sqlite / mysql / postgres |
DB_FILENAME | $DATA_DIR/db.sqlite | SQLite 数据文件路径 |
DB_WAL_MODE | true | SQLite WAL 模式(提升并发读) |
DB_HOSTNAME | localhost | MySQL/PG 主机名 |
DB_PORT | 空(走驱动默认) | MySQL/PG 端口 |
DB_NAME | kanboard | 数据库名 |
DB_USERNAME | root | 数据库用户名 |
DB_PASSWORD | 空 | 数据库密码 |
DB_RUN_MIGRATIONS | true | 启动时自动执行数据库迁移 |
DB_TIMEOUT | 空 | 连接超时秒数 |
6.2 目录与日志类
| 变量 | 默认值 | 说明 |
|---|---|---|
DATA_DIR | <应用根>/data | 数据目录(SQLite/附件/日志/缓存) |
FILES_DIR | $DATA_DIR/files | 附件目录 |
CACHE_DIR | $DATA_DIR/cache | 缓存目录 |
PLUGINS_DIR | <应用根>/plugins | 插件目录 |
LOG_DRIVER | system | 日志驱动:system/stdout/syslog/file |
LOG_FILE | $DATA_DIR/debug.log | LOG_DRIVER=file 时的日志文件 |
DEBUG | false | 调试模式(开启后 debug.log 记录渲染耗时/SQL 数) |
6.3 安全与插件类
| 变量 | 默认值 | 说明 |
|---|---|---|
PLUGIN_INSTALLER | false | 是否允许 Web 界面在线安装插件(安全考虑默认关) |
PLUGIN_API_URL | https://kanboard.org/plugins.json | 插件市场清单地址 |
API_AUTHENTICATION_TOKEN | 空 | 应用级 API 令牌(配合用户名 jsonrpc 使用) |
API_AUTHENTICATION_HEADER | 空 | 反代场景自定义认证头名 |
BRUTEFORCE_CAPTCHA | 3 | 连续失败 N 次后出验证码 |
BRUTEFORCE_LOCKDOWN | 6 | 连续失败 N 次后锁定 |
BRUTEFORCE_LOCKDOWN_DURATION | 15 | 锁定时长(分钟) |
SESSION_DURATION | 0 | 会话时长(0=浏览器会话) |
SESSION_HANDLER | db | 会话存储:db/file |
💡 技术拓展:MySQL/PostgreSQL 形态时环境变量写法示例——
environment: DB_DRIVER: mysql DB_HOSTNAME: db DB_PORT: "3306" DB_NAME: kanboard DB_USERNAME: kanboard DB_PASSWORD: q1w2e3r4并额外增加一个
db服务(mariadb/postgres 镜像)与depends_on。切换驱动后首次启动自动建表迁移(DB_RUN_MIGRATIONS: true);SQLite→MySQL 的存量数据迁移不在环境变量能力范围内,需官方文档 Database migration 一节的手工导库流程。
七、配置参数说明
本节讲清 Kanboard 配置的加载优先级——这是排查「改了配置不生效」的关键。v1.2.56 源码(app/common.php)按以下顺序加载配置:
DATABASE_URL环境变量(最高):存在时直接 define 全部DB_*连接常量;data/config.php:存在即 require(数据目录内的配置文件);config.php(应用根):存在即 require;- 进程环境变量:
constants.php对每个常量做defined('X') or define('X', getenv('X') ?: 代码默认值)——前述来源定义过的常量不会被环境变量覆盖; - 代码内默认值:
config.default.php(300 行)只是参数字典模板,运行时并不加载它,官方镜像自带的config.php仅含两行覆写(ENABLE_URL_REWRITE、LOG_DRIVER=system)。
优先级链(高→低):DATABASE_URL > data/config.php > config.php > 环境变量 > 代码默认值。
💡 说明:这一顺序解释了第八节的实测——在 compose 的
environment里写LOG_DRIVER: file的同时再挂载config.php定义LOG_DRIVER=file,两者一致时无感;但若 config.php 定义了某个常量,环境变量对同名常量失效(常量已 defined,or短路)。生产上建议「环境变量管部署相关项(DB 连接),config.php 管应用行为项(日志/认证/邮件)」,避免两处打架。
八、配置文件挂载(实测)
环境变量适合少量部署项,应用行为类配置(邮件 SMTP、LDAP、验证码策略等几十项)更适合挂载一份完整 config.php。实测流程如下。
第一步,创建配置文件 /opt/kanboard/config/config.php:
<?php
defined('LOG_DRIVER') or define('LOG_DRIVER', 'file');
defined('DEBUG') or define('DEBUG', true);
第二步,compose.yaml 的 volumes 增加一行单文件挂载:
volumes:
- ./data:/var/www/app/data
- ./plugins:/var/www/app/plugins
- ./ssl:/etc/nginx/ssl
- ./config/config.php:/var/www/app/config.php
第三步,应用变更并重启(compose 检测到挂载变化会重建容器):
docker compose up -d
实测回显:
Container kanboard-1.2.56-app Recreate
Container kanboard-1.2.56-app Recreated
Container kanboard-1.2.56-app Starting
Container kanboard-1.2.56-app Started
第四步,验证配置生效——进容器确认常量值:
docker compose exec kanboard php -r "require '/var/www/app/config.php'; echo 'LOG_DRIVER=', LOG_DRIVER, ' DEBUG=', var_export(DEBUG, true), PHP_EOL;"
实测回显:
LOG_DRIVER=file DEBUG=true
触发一次登录失败,确认日志确实落到了挂载目录的 debug.log:
curl -s -u admin:wrongpass -X POST http://127.0.0.1:8146/jsonrpc.php \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","method":"getVersion","id":1,"params":{}}' > /dev/null
head -c 600 /opt/kanboard/data/debug.log
实测回显:
[2026-10-23 16:31:54] [debug] APP: nb_queries=0
[2026-10-23 16:31:54] [debug] APP: rendering_time=0.045353889465332
[2026-10-23 16:31:54] [debug] APP: memory_usage=2.79M
[2026-10-23 16:31:54] [debug] APP: uri=/healthcheck.php
[2026-10-23 16:31:54] [debug] ###############################################
[2026-10-23 16:32:04] [debug] Subscriber executed: Kanboard\Subscriber\BootstrapSubscriber::execute
[2026-10-23 16:32:04] [debug] Subscriber executed: Kanboard\Subscriber\AuthSubscriber::onLoginFailure
[2026-10-23 16:32:04] [error] API authentication failure for admin
[2026-10-23 16:32:04] [debu
⚠️ 注意:
DEBUG: true会记录每次请求的渲染耗时与内存,仅排障期开启,平时改回false并docker compose up -d重载。config.php 全量参数字典见镜像内/var/www/app/config.default.php(可docker compose exec kanboard cat /var/www/app/config.default.php查看),逐参数详解见本站《Kanboard 1.2.56 配置参数详解》篇。
九、等价 docker run
不用 Compose 时,以下单条 docker run 与 4.1 的 compose 定义完全等价,可用于快速验证或理解参数映射:
docker run -d \
--name kanboard-1.2.56-app \
-p 8146:80 \
-p 8147:443 \
-v /opt/kanboard/data:/var/www/app/data \
-v /opt/kanboard/plugins:/var/www/app/plugins \
-v /opt/kanboard/ssl:/etc/nginx/ssl \
-e LOG_DRIVER=file \
-e DB_DRIVER=sqlite \
--restart unless-stopped \
kanboard/kanboard:v1.2.56
与 compose 的对应关系:-p 对应 ports、-v 对应 volumes、-e 对应 environment、--restart 对应 restart;compose 额外提供自定义子网网络与项目名管理。二选一即可,不要同时用 docker run 与 compose 管理同一份挂载目录。
十、常用运维命令
以下命令均在部署目录 /opt/kanboard 下执行,回显为本环境实测。
查看栈状态与健康度:
docker compose ps
实测回显:
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
kanboard-1.2.56-app kanboard/kanboard:v1.2.56 "/usr/local/bin/entr…" kanboard 26 minutes ago Up 12 minutes (healthy) 0.0.0.0:8146->80/tcp, [::]:8146->80/tcp, 0.0.0.0:8147->443/tcp, [::]:8147->443/tcp
滚动查看应用日志(nginx/php-fpm 输出):
docker compose logs -f --tail 20
实测回显(节选,nginx/php-fpm 侧记录了本文排障过程中的认证失败请求):
kanboard-1.2.56-app | 2026/10/23 16:32:04 [error] 15#15: *3 FastCGI sent in stderr: "PHP message: Kanboard: user admin authentication failure with IP address: 10.89.72.1" while reading response header from upstream, client: 10.89.72.1, server: localhost, request: "POST /jsonrpc.php HTTP/1.1", upstream: "fastcgi://unix:/var/run/php-fpm.sock:", host: "127.0.0.1:8146"
重启服务(不改变配置):
docker compose restart
实测回显:
Container kanboard-1.2.56-app Restarting
Container kanboard-1.2.56-app Started
在容器内执行 Kanboard CLI(版本、迁移、cronjob 等,命令详解见本站《Kanboard 1.2.56 常用 CLI 命令详解》篇):
docker compose exec kanboard /var/www/app/cli version
实测回显:
Kanboard v1.2.56
升级到新版本(以未来 v1.2.57 为例,流程为改标签→拉取→重建;下例回显为对当前 v1.2.56 执行 pull 的实测形态):
sed -i 's/kanboard\/kanboard:v1.2.56/kanboard\/kanboard:v1.2.57/' compose.yaml
docker compose pull
实测回显:
Image kanboard/kanboard:v1.2.56 Pulling
Image kanboard/kanboard:v1.2.56 Pulled
随后重建容器(实测形态,重建动作与挂载变更时相同):
[+] Running 1/1
✔ Container kanboard-1.2.56-app Recreated
⚠️ 注意:升级前必须备份
/opt/kanboard/data/;数据库结构迁移由DB_RUN_MIGRATIONS: true在启动时自动执行;降级跨迁移版本会导致库结构不兼容,只能回滚到备份。
停止并删除栈(保留数据目录):
docker compose down
实测回显:
Container kanboard-1.2.56-app Removing
Container kanboard-1.2.56-app Removed
Network kanboard-1256-stack_kanboard-net Removing
Network kanboard-1256-stack_kanboard-net Removed
十一、常见问题(FAQ)
Q1:登录页输 admin/admin 提示错误怎么办?
两步定位:先确认账号存在与状态(进容器查 SQLite users 表),再用内置 CLI 强制重置密码。重置命令与实测回显见 4.4 节。注意口令最小 6 位(The minimum length is 6 characters);连续失败 6 次会触发 15 分钟账号锁定(BRUTEFORCE_LOCKDOWN,状态记录在 users 表的 nb_failed_login/lock_expiration_date 字段),锁定期间即使密码正确、甚至用 CLI 重置了密码也照样 401(重置命令只改密码不清锁定标志)。恢复方式:等 lock_expiration_date 过期,或手动清零两个字段(update users set nb_failed_login=0, lock_expiration_date=0 where username='admin';)。
Q2:API 调用一直返回 401 Unauthorized?
Kanboard v1.2.56 的 JSON-RPC 认证走标准 HTTP Basic(源码 libs/jsonrpc/src/JsonRPC/Server.php 读取 PHP_AUTH_USER/PHP_AUTH_PW),即 -u user:pass 或 Authorization: Basic <base64> 头。网上旧教程用的 X-RPC-Auth-Username/X-RPC-Auth-Password 请求头在当前版本不再生效,实测对比:
# 旧头(401)
curl -s -X POST http://127.0.0.1:8146/jsonrpc.php -H 'Content-Type: application/json' \
-H 'X-RPC-Auth-Username: admin' -H 'X-RPC-Auth-Password: q1w2e3r4' \
-d '{"jsonrpc":"2.0","method":"getVersion","id":1,"params":{}}'
{"jsonrpc":"2.0","error":{"code":401,"message":"Unauthorized"},"id":null}
# Basic(成功)
curl -s -u admin:q1w2e3r4 -X POST http://127.0.0.1:8146/jsonrpc.php \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","method":"getVersion","id":1,"params":{}}'
{"jsonrpc":"2.0","result":"v1.2.56","id":1}
Q3:API 方法报 Too many arguments 或 Method not found?
v1.2.56 的 API 方法签名与旧版文档有差异,以镜像内置源码为准(如 getTask($task_id) 只收一个参数、任务列表方法为 getAllTasks($project_id))。查看方法权威清单:docker compose exec kanboard grep -n 'public function' /var/www/app/app/Api/Procedure/TaskProcedure.php。
Q4:8147 (HTTPS) 提示证书不受信任?
官方镜像首次启动检测到 /etc/nginx/ssl 无证书时自动生成自签名证书(CN=kanboard.org),浏览器告警属预期。生产用负载均衡终结 TLS(80 端口后端),或将自有证书对命名为 kanboard.key/kanboard.crt 放入挂载目录后重建。
Q5:数据到底存在哪,怎么备份?
SQLite 模式全部业务数据在 /opt/kanboard/data/db.sqlite,附件在其下 files/。备份:docker compose exec kanboard /var/www/app/cli 无导库命令时,直接停写(或低峰)复制整个 data/ 目录即可;恢复:替换目录后 docker compose up -d。
十二、参考链接
- 官方镜像 Docker Hub:https://hub.docker.com/r/kanboard/kanboard
- GitHub 仓库(Dockerfile):https://github.com/kanboard/kanboard
- Releases(版本实查):https://github.com/kanboard/kanboard/releases
- 官方文档:https://docs.kanboard.org/
- 官方 API 文档:https://docs.kanboard.org/api/
- 官方 Docker 用法说明:https://docs.kanboard.org/en/latest/admin_guide/docker.html