ryot v10.5.6 配置参数详解
以运行实例 /backend/config 实测输出为默认值依据,逐项讲解 ryot v10.5.6 全部环境变量:服务核心、用户认证、OIDC/SMTP、前端、调度、S3 存储与 19 个数据源密钥,含生产模板与 FAQ。
ryot v10.5.6 配置参数详解
目标:逐项讲清 ryot v10.5.6 的全部环境变量体系(服务核心、用户认证、OIDC/SMTP、前端、调度、S3 文件存储、19 个外部数据源密钥),并以运行中实例的免认证端点
/backend/config实测输出为默认值依据。本文参数与默认值均取自http://127.0.0.1:8141的真实服务与官方文档 docs.ryot.io/configuration(2026-10-25 更新版)。
一、环境信息
- 操作系统:Ubuntu 24.04.5 LTS(x86_64)
- ryot 版本:v10.5.6(
coreDetails.version实测回显见 3.2 节) - 依赖数据库:PostgreSQL 18(官方要求 ≥ 15)
- 服务地址:
http://127.0.0.1:8141(内部由反向代理统一入口,GraphQL 后端进程监听 5000、前端进程监听 3000) - 部署方式:环境变量注入,无外部配置文件;部署步骤见 《ryot Docker Compose 部署指南》
二、前置条件
- ryot 服务已启动并可访问:
curl -s -o /dev/null -w "HTTP %{http_code}\n" http://127.0.0.1:8141/health
# HTTP 200
- 具备 curl 与 JSON 工具(本文用
python3 -m json.tool格式化输出)。 - 需要调用 GraphQL 的章节已持有 API 令牌(获取方式见 3.2 节与 API 使用篇)。
三、参数查看与修改方式
3.1 修改方式:环境变量注入
ryot 的所有配置均为 @env 风格环境变量,在服务的启动环境中注入(如 Compose 编排的 environment: 段)。修改后需重启服务进程生效——配置在进程启动时一次性读取。
3.2 查看方式一:免认证配置端点 /backend/config
curl -s http://127.0.0.1:8141/backend/config | python3 -m json.tool
实测返回全量配置 JSON(共 121 行,节选首尾):
{
"books": {
"hardcover": {
"api_key": "<empty>"
},
"openlibrary": {
"cover_image_size": "M"
},
...(输出节选,实测首尾)
},
"server": {
"pro_key": "<empty>",
"oidc": { "client_id": "<empty>", "issuer_url": "", "client_secret": "<empty>" },
"smtp": { "user": "<empty>", "server": "", "password": "<empty>", "mailbox": "Ryot <no-reply@ryot.io>" },
"backend_port": 5000,
"backend_host": "0.0.0.0",
"is_demo_instance": false,
"max_file_size_mb": 70,
"importer": { "trakt_client_id": "<empty>" },
"cors_origins": [],
"admin_access_token": "****",
"disable_background_jobs": false,
"progress_update_threshold": 2,
"graphql_playground_enabled": true,
"sleep_before_startup_seconds": 0
},
...(输出节选,实测首尾)
"tz": "Etc/GMT",
"disable_telemetry": false
}
要点:敏感值统一掩码——未设置的显示 <empty>,已设置的显示 ****,因此该端点可安全开放给内网排障使用。
3.3 查看方式二:GraphQL coreDetails
curl -s http://127.0.0.1:8141/backend/graphql -H 'Content-Type: application/json' \
-d '{"query":"query { coreDetails { version pageSize docsLink repositoryLink signupAllowed disableTelemetry } }"}'
# {"data":{"coreDetails":{"version":"v10.5.6","pageSize":20,"docsLink":"https://docs.ryot.io","repositoryLink":"https://github.com/ignisda/ryot","signupAllowed":true,"disableTelemetry":false}}}
coreDetails 免认证可查,返回前端渲染所需的公开配置(版本号、分页大小、注册开关等 24 个字段)。
四、参数总览
按配置域分组(与 /backend/config 的 JSON 结构一一对应):
| 配置域 | 环境变量前缀 | 数量 | 说明 |
|---|---|---|---|
| 服务核心 | SERVER_、DATABASE_URL、TZ、DISABLE_TELEMETRY | 14 | 端口、管理令牌、限额、遥测 |
| 用户与认证 | USERS_ | 3 | 注册开关、本地认证、令牌有效期 |
| OIDC 单点登录 | SERVER_OIDC_ | 3 | 第三方身份提供方 |
| 邮件 | SERVER_SMTP_ | 4 | 通知邮件 |
| 前端 | FRONTEND_ | 5 | 站点地址、公告、Umami 遥测 |
| 调度 | SCHEDULER_ | 2 | 后台定时任务 cron 表达式 |
| 文件存储 | FILE_STORAGE_S3_ | 5 | S3 兼容对象存储 |
| 数据源密钥 | 按媒体类型前缀 | 17+ | TMDB/TVDB/Twitch/IGDB/MAL/Google Books 等 |
五、核心参数分类详解
5.1 服务核心(server 域)
| 环境变量 | 默认值(实测) | 说明 |
|---|---|---|
DATABASE_URL | 必填 | PostgreSQL 连接串,如 postgres://ryot:密码@ryot-db:5432/ryot |
SERVER_ADMIN_ACCESS_TOKEN | 必填 | 创建首个管理员的凭证;/backend/config 中显示 **** |
SERVER_BACKEND_HOST | 0.0.0.0 | GraphQL 后端监听地址 |
SERVER_BACKEND_PORT | 5000 | GraphQL 后端监听端口(对外入口由反向代理统一承担) |
SERVER_GRAPHQL_PLAYGROUND_ENABLED | true | GraphQL 交互查询页开关,生产建议关闭 |
SERVER_MAX_FILE_SIZE_MB | 70 | 上传请求体大小上限 |
SERVER_PROGRESS_UPDATE_THRESHOLD | 2 | 观看进度合并阈值(集数差达到该值才落一条新记录) |
SERVER_SLEEP_BEFORE_STARTUP_SECONDS | 0 | 启动前等待秒数(等待数据库就绪场景) |
SERVER_IS_DEMO_INSTANCE | false | 演示实例模式 |
SERVER_DISABLE_BACKGROUND_JOBS | false | 关闭后台任务(调度、导入导出作业) |
SERVER_CORS_ORIGINS | [] | 跨域白名单,空数组表示不开放跨域 |
SERVER_PRO_KEY | 空 | Pro 授权密钥(可选增值功能) |
TZ | Etc/GMT | 时区;影响日历事件与调度任务时间,建议 Asia/Shanghai |
DISABLE_TELEMETRY | false | 置 true 关闭 Umami 匿名使用统计(默认上报 https://umami.diptesh.me/script.js) |
💡 技术拓展:
TZ取值体系有两种常见写法——IANA 时区名(Asia/Shanghai,自动处理闰秒与历史变更)与 POSIX 形式(Etc/GMT-8,注意符号相反)。本文采用 IANA 名,与官方文档示例一致。
5.2 用户与认证(users 域)
| 环境变量 | 默认值(实测) | 说明 |
|---|---|---|
USERS_ALLOW_REGISTRATION | true | 是否允许自助注册(coreDetails.signupAllowed 即此值) |
USERS_DISABLE_LOCAL_AUTH | false | 启用 OIDC 后可关闭用户名密码登录 |
USERS_TOKEN_VALID_FOR_DAYS | 90 | API 令牌有效天数 |
另实测:validate_password: true(默认启用密码强度校验)。注意 ryot 没有 SERVER_ADMIN_USERNAME/PASSWORD 类环境变量,管理员账号必须通过 GraphQL registerUser 携带 SERVER_ADMIN_ACCESS_TOKEN 创建。
5.3 OIDC 与 SMTP
| 环境变量 | 说明 |
|---|---|
SERVER_OIDC_ISSUER_URL | OIDC 提供方地址(实测默认空串,oidcEnabled: false) |
SERVER_OIDC_CLIENT_ID / SERVER_OIDC_CLIENT_SECRET | OIDC 客户端凭证(默认 <empty>) |
SERVER_SMTP_HOST / SERVER_SMTP_PORT | 邮件服务器(实测 server: "") |
SERVER_SMTP_USER / SERVER_SMTP_PASSWORD | 邮件账号(默认 <empty>) |
SERVER_SMTP_MAILBOX | 发件人显示,默认 Ryot <no-reply@ryot.io> |
5.4 前端(frontend 域)
| 环境变量 | 默认值(实测) | 说明 |
|---|---|---|
FRONTEND_URL | https://app.ryot.io | 站点对外地址,用于通知链接与回调,自建必改 |
FRONTEND_DASHBOARD_MESSAGE | "" | 仪表盘公告横幅 |
FRONTEND_OIDC_BUTTON_LABEL | Continue with OpenID Connect | 登录页 OIDC 按钮文案 |
FRONTEND_UMAMI_SCRIPT_URL | https://umami.diptesh.me/script.js | Umami 统计脚本 |
FRONTEND_UMAMI_WEBSITE_ID | 5ecd6915-d542-4fda-aa5f-70f09f04e2e0 | Umami 站点 ID(作者自建实例) |
5.5 调度与文件存储
| 环境变量 | 默认值(实测) | 说明 |
|---|---|---|
SCHEDULER_FREQUENT_CRON_JOBS_SCHEDULE | every 5 minutes | 高频任务(集成推送、导入导出作业轮询) |
SCHEDULER_INFREQUENT_CRON_JOBS_SCHEDULE | every midnight | 低频任务(元数据刷新、清理、摘要) |
FILE_STORAGE_S3_URL / FILE_STORAGE_S3_REGION | "" / us-east-1 | S3 端点与区域(未配置则 fileStorageEnabled: false) |
FILE_STORAGE_S3_BUCKET_NAME | "" | 存储桶 |
FILE_STORAGE_S3_ACCESS_KEY_ID / FILE_STORAGE_S3_SECRET_ACCESS_KEY | 空 | 桶凭证 |
5.6 数据源密钥(按媒体类型)
不配置密钥时对应数据源不可搜索,但已入库数据仍可追踪;ANILIST 等少数源免密钥可用(实测)。
| 媒体域 | 环境变量 | 实测默认 |
|---|---|---|
| 影视 | MOVIES_AND_SHOWS_TMDB_ACCESS_TOKEN / MOVIES_AND_SHOWS_TVDB_API_KEY | <empty> |
| 游戏 | VIDEO_GAMES_TWITCH_CLIENT_ID / VIDEO_GAMES_TWITCH_CLIENT_SECRET / VIDEO_GAMES_IGDB_IMAGE_SIZE / VIDEO_GAMES_GIANT_BOMB_API_KEY | t_original(IGDB 图尺寸) |
| 动漫 | ANIME_AND_MANGA_MAL_CLIENT_ID(MyAnimeList) | <empty> |
| 图书 | BOOKS_GOOGLE_BOOKS_API_KEY / BOOKS_HARDCOVER_API_KEY / BOOKS_OPENLIBRARY_COVER_IMAGE_SIZE | M(OpenLibrary 封面尺寸) |
| 漫画书 | COMIC_BOOK_METRON_USERNAME / COMIC_BOOK_METRON_PASSWORD | <empty> |
| 音乐 | MUSIC_SPOTIFY_CLIENT_ID / MUSIC_SPOTIFY_CLIENT_SECRET | <empty> |
| 播客 | PODCASTS_LISTENNOTES_API_TOKEN | <empty> |
| 导入器 | SERVER_IMPORTER_TRAKT_CLIENT_ID | <empty>(Trakt 历史导入所需) |
六、生产配置模板
适用场景:2 vCPU / 4GB 内存 / 50GB SSD,家庭自托管 ≤5 用户,影视+动漫追踪。以 Compose environment: 段呈现(部署流程见 《ryot Docker Compose 部署指南》):
environment:
- DATABASE_URL=postgres://ryot:强密码替换此值@ryot-db:5432/ryot
- SERVER_ADMIN_ACCESS_TOKEN=强随机串替换此值
- TZ=Asia/Shanghai
- DISABLE_TELEMETRY=true
- FRONTEND_URL=https://ryot.example.com
- SERVER_GRAPHQL_PLAYGROUND_ENABLED=false
- USERS_ALLOW_REGISTRATION=false
- SERVER_SMTP_HOST=smtp.example.com
- SERVER_SMTP_USER=notify@example.com
- SERVER_SMTP_PASSWORD=邮箱密码替换此值
- MOVIES_AND_SHOWS_TMDB_ACCESS_TOKEN=TMDB令牌替换此值
逐项要点:时区保证日历与追番提醒正确;关闭遥测与 Playground 收敛信息面;关闭自助注册后由管理员建号;SMTP 用于到期提醒;TMDB 令牌覆盖影视搜索主源。
七、常见问题(FAQ)
Q1:改了环境变量为什么不生效?
配置仅在进程启动时读取,修改后必须重启服务进程;随后用免认证端点核对实际生效值:
curl -s http://127.0.0.1:8141/backend/config | python3 -m json.tool | grep -A1 '"tz"'
# "tz": "Etc/GMT",
上例说明当前进程仍是默认时区,重启注入 TZ 后此处应变为 Asia/Shanghai。
Q2:/backend/config 会泄露密码吗?
敏感项统一掩码:未设置显示 <empty>、已设置显示 ****(实测 admin_access_token、database.url 均为 ****),可放心用于内网排障;但仍建议不暴露到公网。
Q3:想彻底关闭对作者实例的统计上报?
设 DISABLE_TELEMETRY=true。实测默认值 disable_telemetry: false,且 frontend.umami.script_url 指向作者自建 Umami 实例(见 5.4 节),关闭后前端不再加载该脚本。
Q4:GraphQL 查询页被扫描器发现?
SERVER_GRAPHQL_PLAYGROUND_ENABLED 默认 true(实测),生产置 false 后仅保留 POST /backend/graphql 程序化入口。