ezbookkeeping 2.1.0 配置参数详解
目标:面向已完成 ezBookkeeping v2.1.0 安装或 Docker Compose 部署、需要精细化调整运行参数的读者,逐节详解官方配置文件 ezbookkeeping.ini 的全部 23 个配置节:默认值、取值范围、生效方式与实测验证结果。所有默认值均取自 v2.1.0 官方发布包内 conf/ezbookkeeping.ini 原文,所有验证性操作均在 Ubuntu 22.04.4 LTS 实测采集。
ezbookkeeping 2.1.0 配置参数详解
目标:面向已完成 ezBookkeeping v2.1.0 安装或 Docker Compose 部署、需要精细化调整运行参数的读者,逐节详解官方配置文件 ezbookkeeping.ini 的全部 23 个配置节:默认值、取值范围、生效方式与实测验证结果。所有默认值均取自 v2.1.0 官方发布包内 conf/ezbookkeeping.ini 原文,所有验证性操作均在 Ubuntu 22.04.4 LTS 实测采集。
一、环境信息
| 项目 | 值 |
|---|---|
| 软件版本 | ezBookkeeping v2.1.0(2026-10-15 发布,commit ff168cf) |
| 配置文件来源 | 官方发布包 ezbookkeeping_2.1.0_linux_amd64.tar.gz 内 conf/ezbookkeeping.ini,共 807 行 |
| 实测环境 | Ubuntu 22.04.4 LTS(内核 6.8.0-138-generic) |
| 配置加载方式 | 启动时从默认路径 conf/ezbookkeeping.ini 加载,支持 EBK_ 前缀环境变量覆写 |
| 关联文档 | 《ezbookkeeping 2.1.0 介绍与选型指南》、《ezbookkeeping 2.1.0 Docker Compose 部署指南》 |
v2.1.0 相比 1.x 的配置结构性变化(升级前必读):原 [llm] 及其子节已更名为 [ai] + 三个独立的 LLM 配置节([llm_text_recognition]、[llm_image_recognition]、[llm_coding_assistant]),新增 MCP 服务配置节 [mcp]。从 1.x 升级后沿用旧配置会导致 AI 与 MCP 功能配置静默失效,需按新结构重写。
二、前置条件
- 已按 B1 安装指南或 B2 Compose 部署指南完成 ezBookkeeping 部署并能正常访问;
- 明确自己的部署形态:裸机/systemd 安装的配置文件位于安装目录
conf/ezbookkeeping.ini;Docker 部署时为挂载进容器的 ini 文件; - 若使用环境变量方式管理配置,了解所选编排工具(systemd EnvironmentFile 或 compose environment);
- 修改前备份原配置文件(
cp conf/ezbookkeeping.ini conf/ezbookkeeping.ini.bak)。
三、参数查看与修改方式
3.1 修改通道一:ini 配置文件
主通道。编辑后重启服务生效(systemd 形态 systemctl restart ezbookkeeping;Compose 形态 docker compose restart)。文件为标准 INI 格式:方括号为节名,# 开头行为注释。
3.2 修改通道二:EBK_ 环境变量覆写
任意配置项都可用 EBK_<节名>_<配置项名> 环境变量覆写(全大写),无需改 ini 文件。实测验证(B2 部署中同时挂载 ini 并设置环境变量):
environment:
- "EBK_SERVER_DOMAIN=book.example.com"
- "EBK_SECURITY_SECRET_KEY=q8Zw7HmTsP5nVcXeR2uYbK4jL6fD0aG1"
启动日志实测输出(节选):"Domain":"book.example.com","RootUrl":"http://book.example.com:8080/",且 "SecretKeyNoSet":false,"SecretKey":"****"——两项均按环境变量值生效,优先级高于 ini 文件。三个通道的优先级为:环境变量 > ini 文件 > 程序内置默认值。
3.3 验证手段:启动日志配置快照
ezBookkeeping 启动时会把最终生效的全部配置以 JSON 形式打印到日志(敏感项脱敏为 ****),这是核对配置是否生效的第一入口:
docker compose logs | grep "has loaded configuration"
# 或 systemd 形态:
journalctl -u ezbookkeeping | grep "has loaded configuration"
实测输出为一段完整 JSON,字段名即配置项的驼峰形式(如 EnableAPIToken、TokenExpiredTime),逐一对照即可确认。
四、参数总览
v2.1.0 官方配置文件共 23 个配置节:
| 配置节 | 职责 | 关键配置项 | 默认值 |
|---|---|---|---|
| [global] | 运行模式 | mode | production |
| [server] | Web 服务与站点标识 | protocol / http_addr / http_port / domain | http / 0.0.0.0 / 8080 / localhost |
| [mcp] | MCP(AI 协议)服务 | enable_mcp | false |
| [database] | 数据库连接与行为 | type / auto_update_database | sqlite3 / true |
| [mail] | SMTP 邮件发送 | enable_smtp | false |
| [log] | 日志输出 | mode / level | console file / info |
| [storage] | 附件对象存储 | type | local_filesystem |
| [ai] | AI 识别总开关 | transaction_from_ai_text/image_recognition | false / false |
| [llm_text_recognition] | 文本识别 LLM | llm_provider | 空(未启用) |
| [llm_image_recognition] | 票据图片识别 LLM | llm_provider | 空(未启用) |
| [llm_coding_assistant] | 图表脚本助手 LLM | llm_provider | 空(未启用) |
| [uuid] | UUID 生成器 | generator_type / server_id | internal / 0 |
| [duplicate_checker] | 防重复提交 | duplicate_submissions_interval | 300 |
| [cron] | 定时任务开关 | enable_remove_expired_tokens 等 | true / true |
| [security] | 密钥与会话安全 | secret_key / token_expired_time | 空 / 2592000 |
| [auth] | 认证方式与 OAuth2 | enable_internal_auth / enable_two_factor | true / true |
| [user] | 注册与用户能力限制 | enable_register / avatar_provider | true / internal |
| [data] | 导入导出 | enable_export / enable_import | true / true |
| [tip] | 登录页提示 | enable_tips_in_login_page | false |
| [notification] | 站内通知文案 | enable_notification_after_* | false |
| [map] | 地图服务 | map_provider | openstreetmap |
| [exchange_rates] | 汇率数据源 | data_source | euro_central_bank |
| [developer] | 开发者选项 | enable_language_preview | false |
五、核心参数分类详解
5.1 全局与 Web 服务([global]、[server])
| 配置项 | 默认值 | 说明 |
|---|---|---|
| mode | production | 可选 production / development |
| protocol | http | 可选 http / https / socket;https 需同时配 cert_file 与 cert_key_file |
| http_addr | 0.0.0.0 | 监听地址;置于反向代理之后可改 127.0.0.1 |
| http_port | 8080 | 监听端口 |
| domain | localhost | 站点域名,影响 RootUrl、邮件中的链接;实测经 EBK_SERVER_DOMAIN 覆写为 book.example.com 后启动日志确认生效 |
| root_url | %(protocol)s://%(domain)s:%(http_port)s/ | 浏览器访问完整地址,支持占位符;走反向代理且端口非 8080 时必须显式设置 |
| cert_file / cert_key_file | 空 | HTTPS 证书与私钥路径 |
| unix_socket | 空 | 仅 socket 协议使用 |
| static_root_path | public | 前端静态资源目录 |
| enable_gzip | false | GZip 压缩;通常交由反向代理处理 |
| log_request | true | 记录每个请求及耗时 |
| request_id_header | true | 响应头携带 X-Request-Id,排障时可用于服务端日志检索 |
secret_key 特殊说明(在 [security] 节,部署第一步就会遇到):用于密码哈希与会话令牌签名,官方注释明确要求首次运行前必须修改。ini 默认值为空,此时启动日志中 SecretKeyNoSet 会显示为 true(实测字段存在),功能可用但属于官方明示的不安全状态。secret_key 一旦有用户数据后不可更换,否则所有已有用户的密码与会话全部失效。推荐用 ezbookkeeping security gen-secret-key -l 32 生成(实测输出形如 EHzJgpPK6TnvXcR2uYbK4jL6fD0aG1q8Zw7HmTsP5n=)。
5.2 数据库([database])
| 配置项 | 默认值 | 说明 |
|---|---|---|
| type | sqlite3 | 可选 sqlite3 / mysql / postgres |
| host | 127.0.0.1:3306 | 仅 mysql/postgres 使用,格式 host:port |
| name | ezbookkeeping | 数据库名 |
| user / passwd | root / 空 | 数据库凭据 |
| ssl_mode | disable | 仅 postgres,可选 disable / require / verify-full |
| db_path | data/ezbookkeeping.db | 仅 sqlite3,相对安装目录或绝对路径 |
| max_idle_conn | 2 | 最大空闲连接数 |
| max_open_conn | 0 | 最大打开连接数,0 不限 |
| conn_max_lifetime | 14400 | 连接最长存活秒数,默认 4 小时 |
| log_query | false | 记录每条 SQL 及耗时(排障时临时开启) |
| auto_update_database | true | 启动时自动更新表结构;实测启动日志逐表打印 xxx table maintained successfully |
实测启动日志(SQLite 形态,节选):
[INFO] [database.updateAllDatabaseTablesStructure] user table maintained successfully
[INFO] [database.updateAllDatabaseTablesStructure] account table maintained successfully
[INFO] [database.updateAllDatabaseTablesStructure] transaction table maintained successfully
生产建议:个人/小团队自托管 SQLite 完全够用(单文件备份方便);多人共享或多实例部署换 MySQL/PostgreSQL,此时修改 type/host/name/user/passwd 五项即可。
5.3 邮件([mail])
| 配置项 | 默认值 | 说明 |
|---|---|---|
| enable_smtp | false | SMTP 总开关;关闭时所有依赖邮件的功能直接报错 |
| smtp_host | 127.0.0.1:25 | SMTP 服务器地址:端口 |
| smtp_user / smtp_passwd | 空 | SMTP 认证凭据 |
| smtp_skip_tls_verify | false | 跳过 TLS 校验(自签证书场景) |
| from_address | 空 | 发件人地址,支持 Name <user@domain.com> 格式 |
实测排障实录:enable_smtp=false 时执行邮件测试命令,实测报错为 SMTP server is not enabled——该报错是配置门拦截,并非网络问题;改为 enable_smtp=true 后(SMTP 服务器故意未启动),报错变为 dial tcp 127.0.0.1:25: connect: connection refused,证明配置门已通过、问题转移为网络连通性。两段报错的差异可用于快速定位"没配置"还是"连不上"。
5.4 日志([log])
| 配置项 | 默认值 | 说明 |
|---|---|---|
| mode | console file | 空格分隔多模式:console / file |
| level | info | 可选 debug / info / warn / error |
| log_path | log/ezbookkeeping.log | file 模式日志路径 |
| request_log_path / query_log_path | 空 | 请求/SQL 日志独立文件路径,空则并入主日志 |
| log_file_rotate | false | 是否轮转 |
| log_file_max_size | 104857600 | 轮转阈值 100MB |
| log_file_max_days | 7 | 保留天数,0 永久保留 |
5.5 附件对象存储([storage])
| 配置项 | 默认值 | 说明 |
|---|---|---|
| type | local_filesystem | 可选 local_filesystem / s3 / minio / webdav |
| local_filesystem_path | storage/ | 本地存储根路径,含 avatar/、icon/、transaction/ 三个子目录(实测自动创建) |
| s3_endpoint / s3_region / s3_access_key_id / s3_secret_access_key / s3_session_token | 空 | S3 兼容服务连接五件套 |
| s3_use_ssl / s3_skip_tls_verify / s3_use_path_style | false | S3 连接行为三项 |
| s3_bucket / s3_root_path | ezbookkeeping / / | S3 桶与根路径 |
| minio_endpoint / minio_location / minio_access_key_id / minio_secret_access_key | 空 | MinIO 专用连接四件套 |
| minio_use_ssl / minio_skip_tls_verify | false | MinIO 连接行为 |
| minio_bucket / minio_root_path | ezbookkeeping / / | MinIO 桶与根路径 |
| webdav_url / webdav_username / webdav_password / webdav_root_path | 空 | WebDAV 连接四件套 |
| webdav_request_timeout | 10000 | WebDAV 请求超时毫秒,0 禁用超时 |
| webdav_proxy | system | system / none / 具体代理 URL |
| webdav_skip_tls_verify | false | WebDAV 跳过 TLS 校验 |
5.6 AI 能力([ai] 与三个 LLM 节)
[ai] 是功能总开关,三个 LLM 节提供各能力的模型接入:
| 配置项 | 默认值 | 说明 |
|---|---|---|
| transaction_from_ai_text_recognition | false | 允许从文本识别结果创建交易,需 llm_text_recognition 节配置模型 |
| transaction_from_ai_image_recognition | false | 允许从票据图片识别创建交易,需 llm_image_recognition 节 |
| insights_explorer_coding_assistant | false | Insights Explorer 自定义图表脚本生成,需 llm_coding_assistant 节 |
| max_ai_recognition_picture_size | 10485760 | AI 识别图片大小上限 10MB |
三个 LLM 节结构完全一致,llm_provider 支持 9 种:openai、openai_compatible、openai_responses_compatible、anthropic、anthropic_compatible、openrouter、ollama、lm_studio、google_ai。每个 provider 有专属的 key/url/model_id 三件套,共用 enable_thinking(off/low/medium/high/xhigh/on 六档,按 provider 支持度不同)、request_timeout(默认 60000ms)、proxy(默认 system)、skip_tls_verify(默认 false)。不使用 AI 能力时保持全部默认(关闭)即可,无资源开销。
5.7 UUID 与防重复提交([uuid]、[duplicate_checker])
| 配置项 | 默认值 | 说明 |
|---|---|---|
| generator_type | internal | UUID 生成器类型,当前支持 internal |
| server_id | 0 | internal 生成器服务端唯一标识 0-255,多实例部署时必须各不相同(实测交易 ID 形如 3849861575464714240,首段即 server/instance 编码) |
| checker_type | in_memory | 防重复提交实现,当前支持 in_memory |
| cleanup_interval | 60 | 过期数据清理间隔秒数 |
| duplicate_submissions_interval | 300 | 同页面两次提交最小间隔秒数,0 关闭防重复检查 |
5.8 定时任务([cron])
| 配置项 | 默认值 | 说明 |
|---|---|---|
| enable_remove_expired_tokens | true | 定期清理过期会话令牌 |
| enable_create_scheduled_transaction | true | 按用户模板自动创建周期记账 |
实测启动日志可见对应任务注册:job "RemoveExpiredTokens" has been registered、job "CreateScheduledTransaction" has been registered。
5.9 安全与会话([security])
| 配置项 | 默认值 | 说明 |
|---|---|---|
| secret_key | 空 | 见 5.1 节特殊说明,最高优先级配置项 |
| trusted_proxy_ips | 10.0.0.0/8,169.254.0.0/16,127.0.0.0/8,172.16.0.0/12,192.168.0.0/16 | 可信代理 CIDR 列表;仅当来源 IP 在列表内才信任 X-Forwarded-For 等头。反向代理场景必须把代理 IP 加入,否则限流/日志记录到的都是代理地址 |
| token_expired_time | 2592000 | 会话令牌有效期 30 天 |
| token_min_refresh_interval | 86400 | 令牌最小刷新间隔 1 天,0 则前端每次刷新都换新令牌 |
| temporary_token_expired_time | 300 | 临时令牌 5 分钟 |
| email_verify_token_expired_time | 3600 | 邮箱验证令牌 1 小时 |
| password_reset_token_expired_time | 3600 | 密码重置令牌 1 小时 |
| enable_api_token | false | 是否允许用户生成个人访问令牌(供脚本/第三方调用 API) |
| api_token_allowed_remote_ips | 空 | API 令牌允许的来源 IP 列表,空不限制;支持 192.168.1.* 通配 |
| max_failures_per_ip_per_minute | 5 | 每 IP 每分钟密码/令牌校验失败上限,0 关闭限流 |
| max_failures_per_user_per_minute | 5 | 每用户每分钟失败上限 |
enable_api_token 实测排障实录:默认 false 时,已登录用户请求生成 API 令牌实测报错 api token is not enabled;将 enable_api_token 改为 true 并重启后,签发成功,且 GET /api/v1/tokens/list.json 返回的令牌记录中 tokenType: 8(API 令牌类型码)可查。生产开启时建议同时配置 api_token_allowed_remote_ips 收紧来源。
5.10 认证方式([auth])
| 配置项 | 默认值 | 说明 |
|---|---|---|
| enable_internal_auth | true | 内置用户名密码认证 |
| enable_oauth2_auth | false | OAuth2 登录总开关 |
| enable_two_factor | true | 允许用户启用两步验证(TOTP) |
| enable_forget_password | true | 允许自助找回密码(依赖 [mail] 开启) |
| forget_password_require_email_verify | false | 找回密码前是否必须已验证邮箱 |
| oauth2_provider | 空 | 可选 oidc / nextcloud / gitea / github |
| oauth2_client_id / oauth2_client_secret | 空 | OAuth2 客户端凭据 |
| oauth2_user_identifier | 以 email 或 username 作为用户标识 claim | |
| oauth2_use_pkce | false | 启用 PKCE |
| oauth2_auto_register | true | OAuth2 首登自动建号(需 enable_register=true) |
| oauth2_state_expired_time / oauth2_request_timeout | 300 / 10000 | state 有效期与 API 超时毫秒 |
| oauth2_proxy / oauth2_skip_tls_verify | system / false | 请求代理与 TLS 校验 |
| oidc_provider_base_url | 空 | OIDC issuer 地址,需保证 .well-known/openid-configuration 可访问 |
| oidc_provider_check_issuer_url | true | 校验发现响应中的 issuer 与配置一致 |
| enable_oidc_display_name / oidc_custom_display_name | false / 空 | 自定义登录按钮文案,支持 _zh_hans 等多语言后缀 |
| nextcloud_base_url / gitea_base_url | 空 | 对应 provider 的站点根地址 |
5.11 用户与注册([user])
| 配置项 | 默认值 | 说明 |
|---|---|---|
| enable_register | true | 官方默认 true,允许自助注册;家庭自用建议关闭、由管理员建号 |
| enable_email_verify | false | 允许邮箱验证(依赖 SMTP) |
| enable_force_email_verify | false | 登录强制要求已验证邮箱 |
| enable_custom_icon | true | 允许上传自定义图标 |
| max_user_custom_icon_size | 1048576 | 自定义图标上限 1MB |
| enable_transaction_picture | true | 允许上传交易图片 |
| max_transaction_picture_size | 10485760 | 交易图片上限 10MB |
| enable_scheduled_transaction | true | 允许创建周期记账 |
| avatar_provider | internal | internal(存到本站对象存储)/ gravatar / 空禁用 |
| max_user_avatar_size | 1048576 | 头像上限 1MB |
| default_feature_restrictions | 空 | 新注册用户默认能力限制,逗号分隔的数字组合,见下方 20 项编码 |
default_feature_restrictions 的 20 项能力编码(官方注释原文):1 更新密码、2 更新邮箱、3 更新基本资料、4 更新头像、5 登出其他会话、6 启用两步验证、7 关闭两步验证、8 找回密码、9 导入交易、10 导出交易、11 清空数据、12 同步应用设置、13 MCP 访问、14 AI 图片识别记账、15 OAuth2 登录、16 解绑三方登录、17 生成 API 令牌、18 AI 文本识别记账、19 上传自定义图标、20 AI 生成图表脚本。
实测验证(配合 CLI 工具对单用户设置限制 -t 17,13 后):该用户请求生成 API 令牌实测报错 you are not permitted to perform this action,限制即时生效。注意语义是"限制清单"——填 17 表示禁止该用户生成 API 令牌。
5.12 数据导入导出([data])
| 配置项 | 默认值 | 说明 |
|---|---|---|
| enable_export | true | 允许导出数据 |
| enable_import | true | 允许导入数据 |
| max_import_file_size | 10485760 | 导入文件上限 10MB |
5.13 提示与通知([tip]、[notification])
| 配置项 | 默认值 | 说明 |
|---|---|---|
| enable_tips_in_login_page | false | 登录页自定义提示 |
| login_page_tips_content | 空 | 提示内容,支持 _zh_hans 多语言后缀 |
| enable_notification_after_register / after_login / after_open | false | 注册后/登录后/打开应用后的首页通知三开关 |
| after_register_notification_content 等 | 空 | 对应通知文案,同样支持多语言后缀 |
5.14 地图服务([map])
交易可记录地理位置,地图服务用于展示:
| 配置项 | 默认值 | 说明 |
|---|---|---|
| map_provider | openstreetmap | 支持 openstreetmap / openstreetmap_humanitarian / opentopomap / opnvkarte / cyclosm / cartodb / tomtom / tianditu / googlemap / baidumap / amap / custom,空禁用 |
| map_data_fetch_proxy | false | 由 ezBookkeeping 服务端转发地图数据请求(前端无法直连地图源时开启) |
| proxy | system | 转发时使用的代理,system / none / 具体代理 URL |
| tomtom_map_api_key | 空 | TomTom 专用 |
| tianditu_map_app_key | 空 | 天地图专用 |
| google_map_api_key / baidu_map_ak | 空 | Google/百度地图专用 |
| amap_application_key | 空 | 高德地图 key |
| amap_security_verification_method | internal_proxy | 高德安全校验方式:internal_proxy / external_proxy / plain_text(明文不安全) |
| amap_application_secret / amap_api_external_proxy_url | 空 | 高德密钥与外部代理地址 |
| custom_map_tile_server_url | 空 | 自定义瓦片服务地址,支持 {z}/{x}/{y} 占位符 |
| custom_map_tile_server_annotation_url | 空 | 自定义注记图层地址(可选) |
| custom_map_tile_server_min/default/max_zoom_level | 1 / 14 / 18 | 自定义瓦片缩放级别范围与默认值 |
国内部署建议:map_provider = amap 并按需选择 internal_proxy 校验方式(密钥保留在服务端,前端不暴露)。
5.15 汇率数据源([exchange_rates])
| 配置项 | 默认值 | 说明 |
|---|---|---|
| data_source | euro_central_bank | 内置 20 个央行/官方源(阿根廷/白俄罗斯/加拿大/捷克/丹麦/欧洲央行/格鲁吉亚/匈牙利/以色列/意大利/哈萨克斯坦/马来西亚/缅甸/挪威/波兰/罗马尼亚/俄罗斯/瑞士/乌克兰/乌兹别克斯坦)+ user_custom(用户在界面自行维护) |
| request_timeout | 10000 | 拉取汇率超时毫秒 |
| proxy | system | 拉取代理 |
| skip_tls_verify | false | 跳过 TLS 校验 |
多币种记账且服务器无法直连欧洲央行时,改用 user_custom 或配置 proxy。
5.16 MCP 服务与开发者选项([mcp]、[developer])
| 配置项 | 默认值 | 说明 |
|---|---|---|
| enable_mcp | false | v2.1.0 新增:经 HTTP 暴露 MCP(Model Context Protocol)服务,供 AI 客户端接入记账能力 |
| mcp_allowed_remote_ips | 空 | MCP 来源 IP 白名单,* 通配,空全允许 |
| enable_language_preview | false | 桌面端开发者工具中预览语言配置 |
六、生产配置模板
6.1 模板一:个人/小团队 SQLite 单机(资源占用最低,实测空闲内存 8.8MB)
[global]
mode = production
[server]
protocol = http
http_addr = 0.0.0.0
http_port = 8080
domain = book.example.com
root_url = https://book.example.com/
[database]
type = sqlite3
db_path = data/ezbookkeeping.db
auto_update_database = true
[mail]
enable_smtp = true
smtp_host = smtp.example.com:465
smtp_user = no-reply@example.com
smtp_passwd = <SMTP密码>
from_address = ezBookkeeping <no-reply@example.com>
[log]
mode = console file
level = info
log_file_rotate = true
log_file_max_size = 104857600
log_file_max_days = 30
[storage]
type = local_filesystem
local_filesystem_path = storage/
[cron]
enable_remove_expired_tokens = true
enable_create_scheduled_transaction = true
[security]
secret_key = <gen-secret-key 生成,一旦确定不可更换>
trusted_proxy_ips = 10.0.0.0/8,127.0.0.0/8,192.168.0.0/16
enable_api_token = false
[auth]
enable_internal_auth = true
enable_two_factor = true
[user]
enable_register = false
avatar_provider = internal
[data]
enable_export = true
enable_import = true
[exchange_rates]
data_source = euro_central_bank
适用场景:1-10 人自用,磁盘占用为 SQLite 单文件(实测 21 万字节量级),无外部数据库依赖。
6.2 模板二:多人 MySQL/PostgreSQL 共享
在模板一基础上替换 [database] 节:
[database]
type = mysql
host = 10.89.71.2:3306
name = ezbookkeeping
user = ezbookkeeping
passwd = <数据库密码>
max_idle_conn = 2
max_open_conn = 20
conn_max_lifetime = 14400
auto_update_database = true
PostgreSQL 部署将 type 改为 postgres 并按需加 ssl_mode = require。多实例(如双机热备)时必须同步设置 [uuid] server_id 为不同值(0-255)。
七、常见问题
Q1:生成 API 令牌报 api token is not enabled
[security] enable_api_token 默认 false。改为 true 并重启服务后重新生成即可;若仍报 you are not permitted to perform this action,则是该用户被 default_feature_restrictions 或管理员单独设置了能力限制(编码 17),由管理员解除。
Q2:邮件相关功能报 SMTP server is not enabled
[mail] enable_smtp 默认 false 的配置门拦截。改为 true 后若报 dial tcp ...: connect: connection refused,则进入网络层排查(SMTP 地址/端口/防火墙)。两段报错差异是判断"未配置"与"连不上"的依据。
Q3:首次启动后登录用户全部失效 / 升级迁移后密码错误
secret_key 与建号时不一致所致。secret_key 确定后不可更换;迁移部署必须把旧实例的 secret_key 一并迁移(ini 或 EBK_SECURITY_SECRET_KEY 环境变量均可)。
Q4:反向代理后日志与限流记录到的全是代理 IP
[security] trusted_proxy_ips 未包含代理的来源地址。默认值仅覆盖常见私网段,若代理不在这些网段(如容器自定义网段),把代理 IP 所在 CIDR 加入并重启。
Q5:从 1.x 升级后 AI/MCP 配置不生效
v2.1.0 将 [llm] 配置节更名为 [ai] + 三个独立 LLM 节,并新增 [mcp] 节(Breaking Change)。旧节名会被忽略但不报错,需按第五章 5.6/5.16 节的新结构重写。
Q6:注册接口报 parameter "categories" is required
注册请求必须携带预置分类(网页端自动带上)。API/脚本注册时补上 categories 数组即可,每个分类组还需至少一个二级分类,原因见 B2 部署指南 Q2 的实测说明。
Q7:改了配置不生效
三种可能:① 改的是容器内路径而非挂载的宿主文件;② 用了环境变量覆写,其优先级高于 ini,ini 的修改被环境变量压住;③ 未重启服务。排查顺序:先看启动日志 has loaded configuration 的 JSON 快照,确认进程实际读到的值,再回溯两个通道。
八、参考链接
- 官方配置文档:https://ezbookkeeping.mayswind.net/configuration
- v2.1.0 官方默认配置文件(GitHub):https://github.com/mayswind/ezbookkeeping/blob/2.1.0/conf/ezbookkeeping.ini
- 站内关联阅读:《ezbookkeeping 2.1.0 介绍与选型指南》、《Ubuntu 22.04 安装 ezbookkeeping 2.1.0 指南》、《ezbookkeeping 2.1.0 Docker Compose 部署指南》、《ezbookkeeping 2.1.0 常用 CLI 命令与工具详解》
以上默认值逐项对照 v2.1.0 官方发布包内 conf/ezbookkeeping.ini 原文(807 行),验证性操作均在 Ubuntu 22.04.4 LTS 实测采集,实测日期 2026-10-23。