Databag 0.1.18 配置参数详解
Databag 服务端 0.1.18 全部配置入口逐项详解:启动旗标、SQLite configs 表、管理 API,含全量覆盖与开放注册两大版本坑。
Databag 0.1.18 配置参数详解
目标:把 Databag 0.1.18 服务端的全部配置入口(启动旗标、SQLite 配置表、管理 API)讲清并逐项实测。所有命令与回显来自 2026-10-25 在 Ubuntu 22.04 真实服务器上的实测(源码编译安装,路径按真实服务器惯例)。
一、环境信息
- 操作系统:Ubuntu 22.04 LTS(amd64)
- 组件版本:Databag 服务端 0.1.18(源码编译,二进制
/opt/databag/bin/databag) - 数据目录:
/var/lib/databag(databag.db+ 账号附件) - 配置载体:SQLite
databag.db的configs表(运行参数)+ 启动旗标(部署参数) - 服务管理:systemd(
databag.service,监听 7000)
二、前置条件
- 已按《Ubuntu 22.04 安装 Databag 0.1.18 指南》完成安装并能正常启动
- 已预置管理员口令(本文演示用
q1w2e3r4) - 服务器安装
sqlite3、curl(验证与直接改库用)
三、参数查看与修改方式
Databag 的配置分两层,先认清层再动手:
| 层 | 内容 | 修改方式 | 生效时机 |
|---|---|---|---|
| 启动旗标 | 端口/目录/TLS 证书/转码脚本 | 改 systemd unit 的 ExecStart 后重启 | 重启进程 |
SQLite configs 表 | 域名/配额/开关/MFA 等业务配置 | ①管理台界面 ②PUT /admin/config ③sqlite3 直改 | 实时(每次请求读库) |
业务配置的三种改法,实测对比:
- 管理台:浏览器 → 右上角齿轮 → 输口令 → 设置弹窗,适合日常维护;
- 管理 API:
PUT /admin/config,适合自动化(注意是全量覆盖语义,见 5.1 实测); - sqlite3 直改:
configs表键值对,适合应急恢复与 API 覆盖不到的项(如 0.1.18 的开放注册开关,见常见问题 Q2)。改库前建议systemctl stop databag避免写竞争。
四、参数总览
4.1 启动旗标(进程级,来自 main.go 实测)
| 旗标 | 默认值 | 说明 |
|---|---|---|
-p | 443 | 监听端口。社区部署惯例用 7000 |
-s | /var/lib/databag | 数据目录(SQLite 库 + 附件) |
-w | /opt/databag/ | Web 前端静态文件目录 |
-t | (空) | 媒体转码脚本目录;为空则 transformSupported=false,图片/视频附件不可生成缩略与转码 |
-c | (空) | TLS 证书路径(与 -k 成对,给了就走 HTTPS) |
-k | (空) | TLS 私钥路径 |
启动日志会原样回显生效旗标,实测:
2026/10/25 04:37:01 using args: -s /var/lib/databag -w /opt/databag/web -p 7000 -t /opt/databag/transform
⚠️ 注意:旗标解析是「两两成对」读取(
-p 7000这种),每个旗标都必须带值,写-p不带值会导致后面的参数错位。
4.2 SQLite configs 表(业务级,实测 select 全量)
sqlite3 /var/lib/databag/databag.db "select config_id, str_value, num_value, bool_value from configs;"
实测回显(一台配好域名与配额的节点):
asset_path|/var/lib/databag|0|0
script_path|/opt/databag/transform|0|0
web_public_key|BEOMscZ1qsU5uD_z2tEGhzvsBbN_gcGYsglha66S7yparcdFPVkAHdBluxxTVjulXHK5rRGWsWcmoktNZ3ibTQg|0|0
web_private_key|9bfi_6tzeNQ3DUwcVXs1UrMjJDXWqGm74WZydalDvbU|0|0
domain|databag.example.com|0|0
storage||1073741824|0
enable_image||0|1
enable_audio||0|1
enable_video||0|1
enable_binary||0|1
allow_unsealed||0|1
push_notifications||0|0
key_type|RSA2048|0|0
enable_ice||0|0
ice_service||0|0
ice_url||0|0
ice_username||0|0
ice_password||0|0
token|q1w2e3r4||
configured|||1
表中每行是 config_id | str_value | num_value | bool_value,值落在哪个列取决于参数类型。
五、核心参数分类详解
5.1 节点身份与联邦
domain(字符串,默认空)——节点对外域名,联邦通信与账号发现的前提。管理 API 实测设置:
SESSION=$(curl -s -X PUT "http://127.0.0.1:7000/admin/access?token=q1w2e3r4" | tr -d '"')
curl -s -X PUT "http://127.0.0.1:7000/admin/config?token=$SESSION" \
-H 'Content-Type: application/json' \
-d '{"domain":"databag.example.com","accountStorage":1073741824,"allowUnsealed":true,"enableImage":true,"enableAudio":true,"enableVideo":true,"enableBinary":true,"keyType":"RSA2048","enableIce":false,"iceService":"","iceUrl":"","iceUsername":"","icePassword":""}'
curl -s "http://127.0.0.1:7000/admin/config?token=$SESSION"
回读实测:
{"domain":"databag.example.com","enableImage":true,"enableAudio":true,"enableVideo":true,"enableBinary":true,"enableIce":false,"iceService":"","iceUrl":"","iceUsername":"","icePassword":"","keyType":"RSA2048","accountStorage":1073741824,"transformSupported":true,"allowUnsealed":true,"pushSupported":false}
⚠️ 实测坑(全量覆盖语义):
PUT /admin/config会把请求体里没带的字段全部重置为零值。实测只发{"enableOpenAccess":true,"openAccessLimit":3}后回读,domain变空串、enableImage等全变 false——等于一次配置清空。用 API 改配置必须带全量字段,管理台无此问题(它总是提交全量)。
key_type(字符串,默认 RSA2048)——新建账号身份密钥算法。
💡 技术拓展:账号身份密钥可选算法对比——
算法 密钥长度 特点 RSA2048 2048 位 生成快(实测秒级),安全性满足常规场景 RSA4096 4096 位 更抗暴力破解,生成明显更慢,低功耗设备慎选 该参数只影响新创建的账号;已存在账号的密钥不变。默认 RSA2048。
token / configured(系统项)——管理员口令与「已完成初始化」标记,即安装期预置的两行;口令重置见常见问题 Q1。
5.2 存储与配额
storage(整数,默认 0)——每个账号的存储配额(字节),0 = 不限。管理台显示为 GB 单位换算;API 里 accountStorage 字段直接传字节(如 1GiB = 1073741824)。
asset_path(字符串,默认 -s 目录)——账号附件存储根路径,一般不动;要把附件放大盘时可改并迁移既有子目录。
5.3 媒体类型开关
enable_image / enable_audio / enable_video / enable_binary(布尔,默认全 true)——控制账号可收发哪些类型的附件。关掉某类后,客户端上传该类附件会被拒。低配置节点(无 ffmpeg 环境)建议关 enable_video。
5.4 加密与隐私
allow_unsealed(布尔,默认 true)——是否允许创建「未密封」(非端到端加密)频道。纯私密节点建议设 false,强制全部频道 E2E。
💡 技术拓展:Databag 频道加密两种形态——
形态 内容加密 节点管理员可见性 适用 密封(sealed) 频道对称密钥 + 各账号 sealing 公钥包裹 不可见内容 私密通信默认 未密封(unsealed) 不加密 可见 公告/公开频道类场景 本文示例节点保持默认
allow_unsealed=true(兼容官方客户端全部功能),隐私优先节点建议关闭。
5.5 推送
push_notifications(布尔,默认 true)——WebPush 推送总开关。web_public_key/web_private_key 是 VAPID 密钥对,首次启动自动生成,不要手工改;移动端推送还涉及 UnifiedPush/FCM/APN,在客户端侧选择通道。
5.6 音视频通话(WebRTC / ICE)
enable_ice(布尔,默认 false)+ ice_service/ice_url/ice_username/ice_password——TURN 中继配置。音视频通话靠 WebRTC,NAT 穿透必须有中继。
💡 技术拓展:ICE 中继常见选项——
选项 形态 特点 coturn 自建 开源自建 完全自控,需一台有公网 IP 的机器 Cloudflare TURN 云服务 免运维,按量计费 公共 STUN 免费服务 只打洞不中继,对称 NAT 下失败 官方 README 提供过一个演示 TURN(
turn:34.210.172.114:3478用户 user/pass),仅供测试,生产用前两者之一。
5.7 开放注册(open_access)
open_access(布尔,默认 false)+ account_limit(整数,默认 0 = 不限)——开启后任何人访问节点地址即可自助注册,无需管理员发创建链接。名额判定:当前账号数 < 限额(或限额为 0)即可注册,GET /account/available 返回剩余名额。
# 查询剩余可注册名额(无需令牌)
curl -s "http://127.0.0.1:7000/account/available"
1
⚠️ 0.1.18 实测坑:
PUT /admin/config接受enableOpenAccess/openAccessLimit字段但不落库(main 分支源码已接入该逻辑,0.1.18 发布版未含)。0.1.18 上开启开放注册的实测可行做法(停服后改库):systemctl stop databag sqlite3 /var/lib/databag/databag.db "insert into configs (config_id,bool_value) values ('open_access',1);" sqlite3 /var/lib/databag/databag.db "insert into configs (config_id,num_value) values ('account_limit',10);" systemctl start databag实测改库后
/account/available立即返回名额、免令牌注册成功。关闭同理把bool_value改 0。
5.8 管理员 MFA
mfa_enabled/mfa_confirmed(布尔)+ mfa_secret/mfa_algorithm(SHA1/SHA256,默认 SHA256)——管理台 TOTP 双因素认证。在管理台设置弹窗中开启并扫码绑定;开启后 PUT /admin/access 需额外带 code 参数(TOTP 六位码),连续失败会临时锁定(mfa_failed_time/mfa_failed_count 计数)。
5.9 会话与系统项(只读类)
admin_session(当前管理会话令牌,登录时刷新)、configured、web_public_key/web_private_key——系统自维护,不要手工修改。
六、生产配置模板
6.1 家庭私有节点(树莓派/NAS 级,2GB 内存)
{
"domain": "im.home.example.com",
"accountStorage": 536870912,
"allowUnsealed": false,
"enableImage": true,
"enableAudio": true,
"enableVideo": false,
"enableBinary": false,
"keyType": "RSA2048",
"enableIce": false,
"iceService": "",
"iceUrl": "",
"iceUsername": "",
"icePassword": ""
}
要点:未密封频道关闭、视频附件关闭省转码开销、每账号 512MB 配额、不开音视频通话。
6.2 小团队节点(4GB VPS,含音视频)
{
"domain": "chat.team.example.com",
"accountStorage": 2147483648,
"allowUnsealed": true,
"enableImage": true,
"enableAudio": true,
"enableVideo": true,
"enableBinary": true,
"keyType": "RSA2048",
"enableIce": true,
"iceService": "turn",
"iceUrl": "turn:turn.team.example.com:3478?transport=udp",
"iceUsername": "databag",
"icePassword": "q1w2e3r4"
}
要点:配额 2GB/账号、接自建 coturn 中继;管理员侧务必开启 MFA(5.8),并把管理台入口放在反向代理后用访问控制收敛。
七、常见问题
Q1:管理员口令忘了 / 要重置? 停服 → 改库 → 起服:
systemctl stop databag
sqlite3 /var/lib/databag/databag.db "delete from configs where config_id='token'; delete from configs where config_id='configured';"
sqlite3 /var/lib/databag/databag.db "insert into configs (config_id, str_value) values ('token', 'q1w2e3r4');"
sqlite3 /var/lib/databag/databag.db "insert into configs (config_id, bool_value) values ('configured', true);"
systemctl start databag
Q2:PUT /admin/config 后配置全丢了?
该接口是全量覆盖不是局部补丁(5.1 实测)。恢复:按 5.1 的全量 JSON 重发一遍;日常改配置优先用管理台,用 API 必先 GET 回读、改字段后整体 PUT 回写。
Q3:改 configs 表需要重启吗?
业务参数每次请求实时读库,不重启即生效;但 sqlite 直改与运行中服务并发写有概率冲突,稳妥做法是先 systemctl stop 再改。
Q4:-t 转码目录是什么、不挂会怎样?
-t 指向一组 shell 脚本(transform_ithumb.sh 图片缩略、transform_vhd.sh 视频转码等),调用 imagemagick/ffmpeg。不配置时 transformSupported=false,附件只能原样存取,无缩略图与转码。
八、参考链接
- GitHub 仓库(net/server 源码):https://github.com/balzack/databag/tree/main/net/server
- 设计总览:https://github.com/balzack/databag/blob/main/doc/design_overview.md