Atsumeru 1.1 配置参数详解
Atsumeru 1.1(官方 Docker 镜像形态)配置参数详解:atsumeru.properties 六键逐项实测、folders.properties 导入目录注册表字段语义、users.db 权限模型(角色/细粒度权限/分类白名单/流派黑名单)、JVM 与端口参数、生产配置模板与常见问题(2026-11-01 实测)。
Atsumeru 1.1 配置参数详解
目标:把 Atsumeru 1.1 服务的全部可调配置讲透——
/app/config下两个属性文件(atsumeru.properties运行设置、folders.properties导入目录注册表)、users.db里的用户权限模型、JVM 堆与端口参数,每项给出查看/修改方式、默认值与实测回显。环境为本专栏部署篇的 Compose 栈(2026-11-01 实测);部署过程见 《Atsumeru Docker Compose 部署指南》,组件背景见 《Atsumeru 介绍与选型指南》。
一、环境信息
- 软件版本:Atsumeru v1.1(
/api/server/info实测返回"version":"1.1","version_name":"Bohrium") - 运行形态:Docker Compose 栈
atsumeru-11-stack,服务端口 31337、宿主映射 8138,JVM-Xms256m -Xmx512m - 配置目录:容器
/app/config(宿主 bind 于tmp/atsumeru/config),含atsumeru.properties、folders.properties - 数据目录:容器
/app/database(library.db书库 +users.db用户库,SQLite) - 演示账号:
Admin / q1w2e3r4(管理员)、root / q1w2e3r4(普通用户,本篇 5.3 实测创建) - 取证方式:配置值一律经
/api/v1/settings/get、/api/v1/importer/list、/api/v1/users/*实测回显 + 宿主侧cat属性文件 + 源码(jsDelivr 镜像Atsumeru-xyz/Atsumeru@1.1)交叉核对
二、前置条件
- 服务已按部署篇拉起且健康(
docker compose -p atsumeru-11-stack ps显示(healthy)); - 具备管理员凭据(
Admin / q1w2e3r4),API 认证为 HTTP Basic(1.1 无 token 端点,见部署篇 4.3 排障实录); - 本篇所有 curl 均针对
http://localhost:8138,远程管理时替换为宿主地址。
三、参数查看与修改方式
Atsumeru 1.1 的配置有三条通路,优先级与生效方式不同:
| 通路 | 覆盖配置 | 生效方式 | 依据 |
|---|---|---|---|
| REST API(推荐) | 运行设置、导入目录、用户权限 | 即时生效并自动落盘 | 本篇实测 |
手编 /app/config/*.properties | 同上两类文件 | 需重启服务(docker compose restart) | 源码 Settings/ImportFolders 启动时加载 |
| 桌面端 Atsumeru Manager | 全部(图形化) | 即时生效 | 官方 README(1.x 无 WebUI) |
运行设置的 API 读写实测(先读默认值):
curl -s -u 'Admin:q1w2e3r4' http://localhost:8138/api/v1/settings/get
{"allow_loading_list_with_volumes":true,"allow_loading_list_with_chapters":true,"disable_request_logging_into_console":false,"disable_file_watcher":false,"disable_watch_for_modified_files":false,"disable_chapters":true}
修改经 POST /api/v1/settings/update 提交全量 JSON(非增量,缺字段会被置 false),实测:
curl -s -X POST -u 'Admin:q1w2e3r4' -H 'Content-Type: application/json' \
-d '{"allow_loading_list_with_volumes":true,"allow_loading_list_with_chapters":false,"disable_request_logging_into_console":true,"disable_file_watcher":false,"disable_watch_for_modified_files":false,"disable_chapters":true}' \
http://localhost:8138/api/v1/settings/update
{"code":200,"message":"Settings updated successfully"}
curl -s -u 'Admin:q1w2e3r4' http://localhost:8138/api/v1/settings/get
{"allow_loading_list_with_volumes":true,"allow_loading_list_with_chapters":false,"disable_request_logging_into_console":true,"disable_file_watcher":false,"disable_watch_for_modified_files":false,"disable_chapters":true}
两处改动(allow_loading_list_with_chapters true→false、disable_request_logging_into_console false→true)读回一致。
⚠️ 注意:源码
SettingsApiController显示,当导入/元数据更新/封面缓存任务任一在跑时,settings/get|update会返回 406Unable to edit server settings;批量导入期间改配置需等importer/status的import_active归 false。
四、atsumeru.properties 六键详解
修改生效后宿主侧文件同步落盘(实测 cat):
#Auto save properties: Sun Nov 01 11:18:52 UTC 2026
#Sun Nov 01 11:18:52 UTC 2026
allow_loading_list_with_volumes=true
allow_loading_list_with_chapters=false
disable_chapters=true
disable_file_watcher=false
disable_watch_for_modified_files=false
disable_request_logging_into_console=true
💡 技术拓展:Atsumeru 的属性持久化不止"文件即时写"一种策略。
策略 特点 代表 变更即写 properties 文件 简单可靠、崩溃不丢;文件带时间戳头 Atsumeru(本文) 仅关闭时落盘 减少 IO;崩溃丢配置 早期 Java 服务常见 配置入数据库 集中管理、可审计 Kavita 的 settings 表 Atsumeru 每次
settings/update立即properties.store()(源码Settings.saveProperties),所以宿主 bind 目录里总能cat到最新值。
4.1 allow_loading_list_with_volumes(默认 true)
控制列表接口 GET /api/v1/books?with_volumes=true 是否真的内联返回卷清单。关掉后列表请求强制不带卷,客户端需逐册调 /books/{hash}/volumes——大书库下能显著降低列表响应体积。实测本环境保持 true 时列表请求直接返回系列条目(卷需另取,行为与源码 Settings.isAllowListLoadingWithVolumes() && withVolumesAndHistory 的与逻辑一致)。
4.2 allow_loading_list_with_chapters(默认 true)
同上,控制 with_chapters=true 是否生效。与 disable_chapters(4.6)联动:章节体系关闭时此键无实际意义。
4.3 disable_request_logging_into_console(默认 false)
true 后请求日志不再刷控制台(docker logs 变干净),但文件日志 logs/requests.log 照常记录。实测置 true 后:
head -3 /opt/data/quzuo/tmp/atsumeru/logs/requests.log
INFO:[Sun Nov 01 11:13:58 UTC 2026] [10.89.57.1@Admin] Requested /server/info
INFO:[Sun Nov 01 11:17:36 UTC 2026] [10.89.57.1@Admin] Requested /api/server/ping
INFO:[Sun Nov 01 11:17:37 UTC 2026] [10.89.57.1@Admin] Requested /api/server/info
(首行 /server/info 即部署篇 4.5 排障实录中 404 的那次请求,日志按请求路径原样记录。)
4.4 disable_file_watcher(默认 false)
true 后关闭导入文件系统监听,新文件只有手动 GET /api/v1/importer/scan 才入库。适合批量拷书期间避免边写边导;部署篇 4.7 的"注册目录即完成首轮导入"正是监听器在工作。
4.5 disable_watch_for_modified_files(默认 false)
监听开启时是否忽略"被修改的既有文件"。NAS 上用外部工具改压缩包(如补页)后若不重导,就是此键为 true 所致;默认 false 会触发重导入。
4.6 disable_chapters(默认 true)
1.1 起章节功能默认关闭(changelog 明示 "chapters are disabled by default"),书库按 系列→卷 两级组织。实测默认值回显即 true(见第三章)。改动此键会触发服务器延迟自动重启(源码 restartServerDelayed:等待导入/元数据任务空闲后 AtsumeruApplication.restart()),本篇未实测翻转以避免打断栈状态,生产上翻转前先排空导入任务。
五、folders.properties 与用户权限模型
5.1 导入目录注册表字段语义
folders.properties 是单行 JSON 数组(实测 cat 见部署篇第七章),每个目录对象字段(源码 ImportFolder 模型 + API 实测):
| 字段 | 默认 | 语义 |
|---|---|---|
path | 必填 | 服务视角路径(容器内挂载点,如 /library/manga) |
hash | 自动 | md5(path),remove/rescan 定位用(实测 63fe8498b2a1b0edec7c2efdc8fd3296) |
singles | false | 目录内压缩包按"单本"导入而非系列 |
singles_in_root | false | 根目录散包直接算单本 |
singles_if_in_root_with_folders | false | 根目录既有子目录又有散包时,散包按单本处理 |
ignore_volume_numbers_detection | false | 关闭从文件名猜卷号(如 v001) |
series_count/singles_count/archives_count/chapters_count | 只读 | importer/list 回填的统计 |
注册/移除/重扫 API 用法见部署篇 4.6–4.7;单目录重扫 GET /api/v1/importer/rescan/{hash}(源码实测端点,全量参数 fully、封面刷新参数 update_covers)。
5.2 用户库权限字段
users.db 的 USERS 表结构(宿主侧 strings 实测取证):
CREATE TABLE `USERS` (`id` INTEGER PRIMARY KEY AUTOINCREMENT , `USERNAME` VARCHAR , `PASSWORD` VARCHAR , `ROLES` VARCHAR , `AUTHORITIES` VARCHAR , `ALLOWED_CATEGORIES` VARCHAR , `DISALLOWED_GENRES` VARCHAR , `DISALLOWED_TAGS` VARCHAR )
口令为 BCrypt 存储(实测 users/list 返回 $2a$10$... 哈希,非明文)。权限三层的可选值经 API 实查:
curl -s -u 'Admin:q1w2e3r4' http://localhost:8138/api/v1/users/constants
{"roles":["ADMIN","USER"],"authorities":["IMPORTER","UPLOADER","METADATA_UPDATER","DOWNLOAD_FILES"],"categories":[{"id":"atsumeru-category966faeabbc679ba4457e2d75e031d487","name":"Unsorted","content_type":"UNKNOWN","order":0}],"genres":[...33 项,Action/Adult/Adventure/Comedy/Doujinshi/Drama...],"tags":[]}
💡 技术拓展:内容服务器的访问控制模型不止本文这一种。
模型 机制 代表 角色(RBAC) ADMIN/USER 粗粒度 Atsumeru roles、Kavita roles细粒度权限位 按动作授权(导入/上传/改元数据/下载) Atsumeru authorities内容白名单 仅允许指定分类可见 Atsumeru ALLOWED_CATEGORIES内容黑名单 屏蔽指定流派/标签 Atsumeru DISALLOWED_GENRES/DISALLOWED_TAGSAtsumeru 四层并用:角色定 API 面(如 ADMIN 才能进
/api/v1/settings),权限位定动作,白名单+黑名单定内容可见性——家庭共享按"分类白名单 + Adult 流派黑名单"给孩子开号即可。
5.3 建受限用户实测
curl -s -X PUT -u 'Admin:q1w2e3r4' -H 'Content-Type: application/json' \
-d '{"user_name":"root","password":"q1w2e3r4","roles":["USER"],"authorities":["ROLE_USER"]}' \
http://localhost:8138/api/v1/users/create
{"code":201,"message":"2"}
返回体 message 为新用户 id(2)。用户表实测:
curl -s -u 'Admin:q1w2e3r4' http://localhost:8138/api/v1/users/list
[{"id":1,"user_name":"Admin","password":"$2a$10$ne7i/OgxDu6S0HnSUmVlBuZX/XE.l5L93adFeGMOLIPMFEPV.mc26","roles":["ADMIN"],"authorities":["ROLE_ADMIN"]},{"id":2,"user_name":"root","password":"$2a$10$acVoMoHHYm6ft0h6FnHrRenRVgKlTIbtNZinu2BOTMYGVwuDi04.u","roles":["USER"],"authorities":["ROLE_USER"]}]
越权验证(root 访问管理员端点应被拒):
curl -s -u 'root:q1w2e3r4' -o /dev/null -w 'HTTP %{http_code}\n' http://localhost:8138/api/v1/settings/get
HTTP 403
口令策略实测:创建时密码少于 6 位会被拒(源码校验 Password must be at least 6 characters long!),用户名/角色为空同样 400 报错。
六、JVM 与端口参数
| 参数 | 位置 | 实测值 | 说明 |
|---|---|---|---|
堆 -Xms/-Xmx | Compose environment: JAVA_OPT_XMX;jar 形态写命令行 | -Xms256m -Xmx512m | 镜像入口 sh -c "java -Dserver.port=31337 ${JAVA_OPT_XMX} -jar Atsumeru.jar";生效验证 ps -ef 见部署篇 4.4(JRE 镜像无 jps) |
| 服务端口 | 入口脚本硬编码 -Dserver.port=31337 | 31337(宿主映射 8138) | 改宿主侧映射即可;真改容器端口需覆盖入口命令 |
| Spring profile | 镜像内置 | production | 启动日志实测 The following 1 profile is active: "production" |
| 内存预期 | — | 官方明示大书库也 "consume not much RAM" | jar.html;无必要勿调大堆 |
七、生产配置模板
适用场景:16GB 内存 NAS、amd64、单管理员 + 若干家庭子用户、书库 ≤ 数万册(本实测环境的放大版):
# /app/config/atsumeru.properties
allow_loading_list_with_volumes=true
allow_loading_list_with_chapters=false
disable_request_logging_into_console=true
disable_file_watcher=false
disable_watch_for_modified_files=false
disable_chapters=true
- 列表默认带卷、不带章节:兼顾阅读器翻页体验与响应体积;
- 控制台请求日志关闭(排障看
logs/requests.log文件即可); - 保持监听导入(NAS 拷书即入库);章节体系维持默认关闭。
Compose 侧固定 JAVA_OPT_XMX=-Xms256m -Xmx512m 与 1.1 版本号 tag;子用户按 5.3 模板创建并配 ALLOWED_CATEGORIES 白名单 + DISALLOWED_GENRES 含 Adult。
八、常见问题
Q1:settings/update 返回 406? 导入/元数据/封面任务在跑(importer/status 看 import_active),等空闲再改(见第三章注意)。
Q2:手改 properties 文件不生效? 属性只在启动时加载、API 写时落盘;手改后 docker compose -p atsumeru-11-stack restart。
Q3:改了 disable_chapters 服务自己重启了? 源码内置行为(4.6),非故障。
Q4:新用户看不到任何书? 其 ALLOWED_CATEGORIES 为空且书库分类未授权,或分类被 DISALLOWED_GENRES 命中;用 users/update 调整(全量 JSON,同 4.5 改密格式带 id)。
Q5:GET /api/v1/books/categories 列表比库里实际少? 实测行为:列表按"该分类下有内容"过滤(源码 countForCategory > 0),空分类不展示;新建未挂内容的分类调 create 后需再查列表可见性。
九、参考链接
- 源码(配置与安全模型取证):https://github.com/Atsumeru-xyz/Atsumeru (tag 1.1,经 jsDelivr 镜像,查询日期 2026-11-01)
- 官方 jar 指南(内存与恢复):https://atsumeru.xyz/installation/jar.html (查询日期 2026-11-01)
- 同站相关:《Atsumeru 介绍与选型指南》、《Atsumeru Docker Compose 部署指南》、《Kavita 0.9.1.4 配置参数详解》