LibreBooking 7.1.0 配置参数详解
LibreBooking 7.1.0 config.php 配置体系详解:15 个配置组全量清点、LB_* 环境变量映射与优先级、密码策略/API/时区实测验证与生产配置模板。
LibreBooking 7.1.0 配置参数详解
目标:以实测运行的 LibreBooking 7.1.0 为样本,逐组讲清 config.php 配置体系的查看方法、参数语义、修改生效方式与生产推荐组合。本文全部参数清单与默认值导出自实测环境的应用配置文件(801 行、15 个配置组),关键行为均经实测验证(API 开关、密码策略、时区、日志)。部署与版本背景见《LibreBooking 7.1.0 Docker Compose 部署指南》。
一、环境信息
| 项目 | 内容 |
|---|---|
| 实测版本 | LibreBooking v7.1.0-27-g1bcf4c7aa(页脚实显) |
| 运行形态 | 官方镜像 + MariaDB 11.8,入口 http://localhost:8135 |
| 配置文件 | /config/config.php(实测 27953 字节、801 行,安装向导生成) |
| 配置体系 | return ['settings' => [...]] 分组数组,PHP 语法 |
| 服务端 | Apache/2.4.69 (Debian) PHP/8.5.12(响应头实测) |
二、前置条件
- 已完成部署与安装向导(config.php 已生成),见本站部署篇;
- 具备应用侧文件读写能力:
docker compose exec app bash进入应用,配置目录为 /config(命名卷 lb_config); - 演示账号:admin + q1w2e3r4。
三、参数查看与修改方式
3.1 查看当前生效配置
docker compose exec app cat /config/config.php # 查看全部生效配置(在编排目录执行)
配置为标准 PHP 返回数组,点号键名(如 'api.enabled' 风格的语义)对应嵌套路径 settings['api']['enabled']。管理后台另有可视化配置页(管理员登录 → 系统配置),由 pages.configuration.enabled 控制(默认 true)。
3.2 两条修改通道与生效方式
| 通道 | 做法 | 生效方式 | 适用场景 |
|---|---|---|---|
| config.php | 直接编辑 /config/config.php | docker compose restart app | 运行期精细调参 |
| 环境变量 | compose 中加 LB_* 变量 | docker compose up -d(重建容器) | 部署期/配置即代码 |
环境变量映射规则(源码 lib/Config/ConfigKeysMeta.php):LB_ + 配置键大写、. 换 _,实测样本:script.url→LB_SCRIPT_URL、api.enabled→LB_API_ENABLED、install.password→LB_INSTALL_PASSWORD、database.hostspec→LB_DATABASE_HOSTSPEC、password.upper.and.lower→LB_PASSWORD_UPPER_AND_LOWER、logging.folder→LB_LOGGING_FOLDER。
⚠️ 注意:同一键两处都设置时,环境变量随每次
up -d重建重新写入 config.php,会覆盖手工编辑结果——同一键不要混用两条通道。
3.3 修改生效实测
以 API 开关为例:默认 api.enabled => false 时接口返回 503(实测报错 "LibreBooking API is disabled");改为 LB_API_ENABLED=true 并 up -d 重建后,POST /Web/Services/index.php/Authentication/Authenticate 返回 200 与 "isAuthenticated":true(实测回显)。
四、参数总览
config.php 顶层为一个 settings 数组,含以下 15 个配置组(实测全量清点):
| 配置组 | 键数(约) | 管辖内容 |
|---|---|---|
| 应用基础(settings 顶层) | 12 | 站名、调试、管理员邮箱、公司信息 |
| 语言与时区(顶层) | 3 | default.timezone、default.language、enabled.languages |
| 前端(顶层) | 12 | script.url、install.password、主题、缓存、会话超时 |
| pages / database / phpmailer / email | 1+5+10+4 | 配置页开关、数据库、发信 SMTP、通知邮件 |
| logging / uploads | 3+5 | 日志目录与级别、图片与预约附件 |
| reservation.notify / schedule / reservation | 12+9+13 | 预约通知分发、排程显示、预约行为约束 |
| reservation.labels / reports | 6+1 | 日历与 ICS/RSS 标签模板、报表权限 |
| registration / resource / tablet.view | 10+1+3 | 自注册表单、资源联系人、大屏模式 |
| ics / cleanup / password | 4+4+4 | ICS 订阅、数据清理、密码策略 |
| privacy / recaptcha / security / credits | 6+4+5+2 | 隐私可见性、人机验证、安全响应头、积分 |
| authentication / plugins / api | 27+8+14 | OAuth 登录源、插件挂载、REST API |
五、核心参数分类详解
5.1 应用基础
| 键 | 默认值 | 说明 |
|---|---|---|
| app.title | LibreBooking | 页面标题与应用名 |
| app.debug | false | 调试模式(开启 display_errors),生产必须 false |
| admin.email | admin@example.com | 系统管理员邮箱(通知收件人) |
| admin.email.name | LB Administrator | 管理员发信显示名 |
| company.name / company.url | 空 | 页头公司信息 |
5.2 语言与时区
| 键 | 默认值 | 说明 |
|---|---|---|
| default.timezone | Europe/London | PHP 时区名(本栈实测设 Asia/Shanghai) |
| default.language | en_us | 默认界面语言,可选值见 lang/ 目录(实测 41 种,含 zh_cn/zh_tw) |
| enabled.languages | 空(全部) | 逗号分隔白名单并控制排序 |
⚠️ 注意:default.timezone 只影响新排程与显示换算;每个排程自带时区。实测教训:导入示例数据自带的默认排程时区为 America/New_York,跨夏令时边界(2026-11-01)后同一每周周期预约的实例 UTC 时间偏移 1 小时(10-31 实例 06:00Z、11-03 实例 07:00Z)——改 default.timezone 不会修正既有排程,需重建排程。
5.3 前端与访问
| 键 | 默认值 | 说明 |
|---|---|---|
| script.url | 空(自动探测) | 对外访问地址(含 /Web),实测取 http://localhost:8135/Web;与实际不符时页面会提示 |
| install.password | 空 | 安装向导口令;留空 = 禁用向导(安装完成后置空可封死 Web/install 入口) |
| cache.templates | true | Smarty 模板编译缓存,生产保持 true |
| use.local.js.libs | true | 使用本地打包的前端资源(离线内网必开) |
| inactivity.timeout | 30 | 会话不活动超时(分钟) |
| home.url / logout.url | 空 | Logo 链接与登出跳转 |
| default.homepage | 1 | 新用户默认首页(1 仪表盘/2 排程/3 我的日历/4 资源日历) |
| default.page.size | 50 | 列表分页大小 |
| css.theme | default | 主题配色,实测可选 7 种:default、dimgray、dark_red、dark_green、french_blue、cake_blue、orange |
| css.extension.file | 空 | 自定义 CSS 追加文件路径 |
| name.format | {first} {last} | 姓名显示格式 |
5.4 数据库(database 组)
| 键 | 默认值 | 说明 |
|---|---|---|
| type | mysql | 仅支持 MySQL 协议(MySQL/MariaDB) |
| hostspec | 127.0.0.1 | 主机地址(容器部署为服务名 db) |
| name / user / password | librebooking / lb_user / password | 库名与凭据(本栈实测 librebooking/q1w2e3r4) |
5.5 邮件(phpmailer + email 组)
发信通道:phpmailer.mailer 可选 mail/smtp/sendmail(默认 smtp);SMTP 常规五件套 host/port/secure(tls/ssl)/auth/username/password,smtp.autotls 默认 true。通知行为由 email 组控制:enabled(默认 true,不发信场景设 false 可避免报错)、default.from.address/name、enforce.custom.template。预约提醒(reservation.reminders.enabled)依赖邮件通道与计划任务(/config/lb-jobs-cron)同时工作。
5.6 日志(logging 组)
| 键 | 默认值 | 说明 |
|---|---|---|
| folder | /var/log/librebooking/log | 日志目录,需写权限(本栈实测 /var/log/librebooking) |
| level | error | 可选 none/error/debug(本栈实测设 none) |
| sql | false | SQL 语句日志,排障时临时开启 |
5.7 上传与附件(uploads 组)
图片目录 image.upload.directory/url(Web/uploads/images);预约附件默认关闭(reservation.attachments.enabled=false),开启后落盘 reservation.attachment.path(uploads/reservation),扩展名白名单实测默认 csv,doc,docx,gif,jpeg,jpg,pdf,png,ppt,pptx,txt,xls,xlsx——内网部署建议保持白名单收紧。
5.8 预约策略(reservation + schedule + reservation.notify 组)
预约行为(reservation)——实测核心开关:
| 键 | 默认值 | 说明 |
|---|---|---|
| prevent.recurrence | false | 禁用周期预约;保持 false 才能用每周/每月规则(本团队实测周期预约 201) |
| prevent.participation | false | 禁用参与人/邀请人机制 |
| allow.guest.participation | false | 允许游客参与 |
| allow.wait.list | false | 满员候补队列(选型篇所述候补能力的开关) |
| start.time.constraint | future | 允许的开始时间(none/current/future;管理员有豁免) |
| updates.require.approval | false | 修改已有预约需重新审批 |
| title.required / description.required | false / false | 预约标题/描述必填 |
| checkin.minutes.prior | 5 | 开始前多少分钟可签到 |
| checkin.admin.only / checkout.admin.only | false | 签到/签出仅限管理员 |
| reminders.enabled | false | 预约提醒开关(需邮件+计划任务) |
| default.start.reminder / default.end.reminder | 空 | 默认提醒提前量(如 '15 minutes') |
排程显示(schedule):auto.scroll.today(默认 true)、show.week.numbers、hide.blocked.periods、show.inaccessible.resources(默认 true,无权限资源也显示置灰)、reservation.label(默认 {name},可嵌 {title}/{resourcename}/{att1} 等占位符)、use.per.user.colors、update.highlight.minutes、fast.reservation.load、load.mobile.views。
通知分发(reservation.notify):12 个开关,按「应用管理员/群组管理员/资源管理员」×「创建/修改/删除/待审批」矩阵独立控制,全部默认 false——上生产按需打开 add 与 approval 两组。
标签模板(reservation.labels):ics.summary/ics.my.summary、rss.description、my.calendar、resource.calendar、reservation.popup 六个模板键,支持 {name}/{title}/{startdate} 等占位符。
5.9 注册与隐私(registration + privacy 组)
自注册 allow.self.registration 默认 true(内部部署建议关闭,改为管理员建号);表单可要求/隐藏 phone/position/organization;captcha.enabled 默认 true(注册验证码);require.email.activation 默认 false;notify.admin 注册通知。隐私组:privacy.view.schedules 默认 true(未登录可看排程框架)、view.reservations 默认 false(未登录只见时段被占不可见详情)、hide.user.details、allow.guest.reservations 默认 false、public.future.days=30。大屏模式 tablet.view.allow.reservations 默认 true。
5.10 密码策略(password 组)
| 键 | 默认值 | 说明 |
|---|---|---|
| disable.reset | false | 关闭「忘记密码」 |
| minimum.length | 8 | 最短长度 |
| minimum.numbers | 1 | 最少数字 |
| upper.and.lower | true | 必须大小写混合 |
| minimum.specialchar | 1 | 最少特殊字符 |
默认策略即报错原文对应的规则,实测改密 q1w2e3r4(无大写、无特殊字符)被拒:Password must contain a combination of at least 8 upper and lower case letters, 1 numbers, and 1 special characters.;设 LB_PASSWORD_UPPER_AND_LOWER=false + LB_PASSWORD_MINIMUM_SPECIALCHAR=0 重建后改密成功(实测 200)。生产建议保留默认策略,仅演示环境放宽。
5.11 安全(recaptcha + security 组)
reCAPTCHA v3 四键(enabled 默认 false + public/private.key + request.method=curl)。安全响应头组默认整体关闭(security.headers=false),开启后下发:strict-transport(max-age=31536000)、x-frame(deny)、x-content-type(nosniff)、content-security-policy(可自定义)——上 HTTPS 后建议打开。
5.12 认证源(authentication + plugins 组)
内置 OAuth 登录源五套,均默认关闭:Google、Microsoft(tenant 默认 common)、Facebook、Keycloak、自定义 OAuth2(authorize/token/userinfo 三端点 + client 凭据),回调路径约定 /Web/{provider}-auth.php。另有 captcha.on.login、required.email.domains(限定注册邮箱域)。
插件挂载(plugins 组,8 个键)——authentication 可选 12 种:ActiveDirectory、Apache、CAS、Drupal、Krb5、Ldap、Mellon、Moodle、MoodleAdv、Saml、Shibboleth、WordPress(实测 /config 下 10 个对应插件配置文件就绪,命名如 Ldap.config.php、Saml.config.php);其余挂载点:authorization、export、permission、postregistration、prereservation(AdminCheckOnly/PreReservationExample)、postreservation(PostReservationExample)、styling。
5.13 ICS、积分与数据清理(ics + credits + cleanup 组)
ICS 订阅:enabled 默认 true、subscription.key(订阅密钥)、future.days=30/past.days=0。积分系统:credits.enabled 默认 false(配套 allow.purchase)。数据清理 cleanup:years.old.data=3,delete.old.announcements/blackouts/reservations 均默认 false——注意注释明确需要 deleteolddata.php 跑计划任务才会生效。
5.14 REST API(api 组)
| 键 | 默认值 | 说明 |
|---|---|---|
| enabled | false | API 总开关(实测关闭时 503) |
| registration.allow.self | false | 允许经 API 自注册 |
| authentication.group | 空 | 限定可经 API 认证的群组(管理员豁免) |
| 各资源 ro/rw 组(accessories/accounts/attributes/groups/reservations/resources/schedules/users) | 空 | 按资源域限定只读/读写群组,粒度到每类资源 |
💡 技术拓展:api 组的 ro/rw group 设计把「谁能调哪些接口」下沉到群组维度,相当于内置的 API 网关级授权;只需要报表对接时只开 reservations.ro.group 即可,避免整库暴露。API 端点与鉴权头(X-Booked-SessionToken/X-Booked-UserId)的调用实录见本站运维篇。
六、生产配置模板
适用场景:约 4 核 8 GB、200 名内部员工、20 间会议室的会议室预约(内网/VPN 访问)。环境变量保持部署篇最小集,config.php 推荐基线:
return [
'settings' => [
'app.title' => '公司会议室预约',
'app.debug' => false, // 生产必须关
'default.timezone' => 'Asia/Shanghai',
'default.language' => 'zh_cn',
'script.url' => 'https://meeting.example.com/Web',
'install.password' => '', // 安装完成后留空 = 禁用向导
'cache.templates' => true,
'use.local.js.libs' => true,
'inactivity.timeout' => 30,
'css.theme' => 'default',
'database' => [
'type' => 'mysql',
'hostspec' => 'db',
'name' => 'librebooking',
'user' => 'librebooking',
'password' => 'q1w2e3r4', // 演示值,生产换成强口令
],
'email' => [
'enabled' => true,
'default.from.address' => 'meeting@example.com',
'default.from.name' => '会议室预约',
],
'phpmailer' => [
'mailer' => 'smtp',
'smtp.host' => 'smtp.example.com',
'smtp.port' => 587,
'smtp.secure' => 'tls',
'smtp.auth' => true,
'smtp.username' => 'meeting@example.com',
'smtp.password' => 'q1w2e3r4', // 演示值,生产换成强口令
],
'logging' => [
'folder' => '/var/log/librebooking',
'level' => 'error',
'sql' => false,
],
'reservation' => [
'reminders.enabled' => true, // 需同时配置计划任务
'start.time.constraint' => 'future',
'title.required' => true,
],
'reservation.notify' => [
'application.admin.add' => true,
'application.admin.approval' => true,
],
'registration' => [
'allow.self.registration' => false, // 内部系统关闭自注册
'captcha.enabled' => false,
],
'privacy' => [
'view.schedules' => false, // 未登录不可见
'view.reservations' => false,
],
'security' => [
'headers' => true, // 已上 HTTPS 时开启
'x-frame' => 'deny',
'x-content-type' => 'nosniff',
],
'api' => [
'enabled' => false, // 无对接需求保持关闭
],
],
];
配套纪律:安装完成后 install.password 置空;管理员口令走默认强策略;数据库密码独立强口令并定期备份(备份流程见本站运维篇)。
七、常见问题(FAQ)
Q1:改了 config.php 不生效?
改文件后要 docker compose restart app;改的是环境变量则要 docker compose up -d(重建容器)。注意环境变量在重建时会重写 config.php,手工改动会被覆盖(见 3.2 优先级说明)。
Q2:接口 503 "LibreBooking API is disabled"?
api.enabled 默认 false。设 LB_API_ENABLED=true 重建生效(实测 503 → 200);只读对接可再配合 reservations.ro.group 限定群组。
Q3:改密报密码策略错误? 默认策略 8 位 + 大小写 + 数字 + 特殊字符(password 组四键)。演示环境可放宽 upper.and.lower 与 minimum.specialchar(实测报错与解法见 5.10),生产保留默认。
Q4:default.timezone 改了,老预约时间还是不对? 排程自带时区,default.timezone 不回溯既有排程。示例数据排程时区为 America/New_York,跨夏令时边界周期预约偏移 1 小时(实测),需重建本地时区排程。
Q5:安装向导还能被别人访问吗? install.password 留空即禁用 Web/install 入口(参数注释原文:Leave empty to disable the installation wizard)。安装完成后建议置空并辅以 Web 层封锁。
Q6:预约提醒没发出去? 三个条件缺一不可:reservation.reminders.enabled=true、邮件通道(phpmailer 组)可用、计划任务在跑(/config/lb-jobs-cron 定义了 lb-jobs 计划任务,容器内需其常驻)。
八、参考链接
- 配置文档 CONFIGURATION.rst:https://github.com/LibreBooking/librebooking/blob/develop/docs/source/CONFIGURATION.rst
- GitHub 仓库(lib/Config/ConfigKeysMeta.php 环境变量映射源码):https://github.com/LibreBooking/librebooking
- 时区取值列表(PHP 官方):https://www.php.net/manual/en/timezones.php
- 官方文档站:https://librebooking.readthedocs.io/en/latest/
站内延伸阅读:版本背景与选型见《LibreBooking 7.1.0 介绍与选型指南》;部署与环境变量入门见《LibreBooking 7.1.0 Docker Compose 部署指南》;巡检备份与排障见《LibreBooking 7.1.0 管理与运维实战》。