Meetable latest 配置参数详解
Meetable latest(main@7d2d22ab,Laravel 12.69.1)配置参数全量详解:.env 154 行逐项分类(必配/默认即可/条件)、compose 强制覆盖五项、Docker 下容器缺 .env 导致 DB 站点设置整体失效的重大陷阱与修复、auth_hide_login 双层配置实测闭环(2026-11-02 实测)
Meetable latest 配置参数详解
版本标识:Meetable 无 semver 发布(GitHub tags/releases 为空,ghcr 仅
main/latest),本文的 "latest" 指实测镜像ghcr.io/aaronpk/meetable:latest(created 2026-10-16T22:21:49Z,即 main@7d2d22ab7f85),应用栈 Laravel 12.69.1 / PHP 8.2.34 / MariaDB 11.8 / Redis 8。全部参数语义以容器内源码实查为准,实测日期 2026-11-02。
一、配置体系总览:三层结构
| 层 | 载体 | 生效方式 | 典型项 |
|---|---|---|---|
| ① 部署层 | 宿主机 .env(compose env_file 注入为容器环境变量) | 改后 docker compose up -d(compose 检测 env_file 变化自动重建容器) | APP_KEY、DB_PASSWORD、AUTH_METHOD |
| ② compose 强制层 | x-app-config.environment 五项 | 覆盖 .env 同名值,改 .env 无效 | DB_HOST、REDIS_HOST、CACHE/QUEUE/SESSION_DRIVER |
| ③ 站点设置层 | MariaDB settings 表(管理员 /settings 页或 App\Setting::set) | 写入即生效(进程内静态缓存需重启容器刷新,实测) | enable_rsvps、auth_hide_login、enable_proposed_events |
⚠️ ③ 层在 Docker 部署有一个官方 compose 不踩不知道的大坑(容器内缺 .env 文件导致全部站点设置短路),见 §五——这是本文最重要的一条实测结论。
二、.env 必配项(4 个,README 明示 + 实测)
| 参数 | 取值要求 | 实测说明 |
|---|---|---|
APP_KEY | 随机 32 字符,如 openssl rand -hex 16 输出 | 加密会话/签名 URL(passkey-link 等)的根密钥;丢失则全部会话与签名链接失效。php artisan key:generate --show 可生成不落盘 |
APP_URL | 站点基址,无结尾斜杠 | 直接决定事件 permalink、iCal 内 URL: 字段、OAuth 回调拼接;本实测 http://127.0.0.1:8158 |
DB_PASSWORD | 强密码 | compose 里无默认值,不设 mariadb 起不来 |
DB_ROOT_PASSWORD | 强密码 | 仅 compose 变量插值给 mariadb 用(默认 root,生产必改) |
三、.env 全量分类表(按 .env.example 154 行实查逐段)
3.1 SITE CUSTOMIZATION
| 参数 | 默认 | 分类 | 说明 |
|---|---|---|---|
APP_NAME | Meetable | 默认即可 | 站名,进 <title> 与 manifest。实测闭环:改 Quzuo Events 重建后首页 <title>Quzuo Events | Quzuo Events</title>,改回即恢复 |
APP_LOCALE | (注释=en) | 默认即可 | 界面语言,翻译在 resources/lang/{locale};另有 /language/{locale} 路由切换 |
3.2 SERVER SETTINGS
| 参数 | 默认 | 分类 | 说明 |
|---|---|---|---|
APP_ENV | example 注释 local | 必配 production | 实测 about 显示 production;local 会开调试页 |
APP_DEBUG | 注释 false | 条件 | 仅排障临时开,公网必关 |
DB_CONNECTION | mysql | 默认即可 | 仅支持 MySQL/MariaDB(compose 钉死 mariadb:11.8) |
DB_HOST | 127.0.0.1 | compose 覆盖 | compose 强制 db,.env 改动无效(§四) |
DB_PORT | 3306 | 默认即可 | |
DB_DATABASE/DB_USERNAME | laravel/meetable | 建议改 | 同时驱动 mariadb 建库建用户(compose 变量插值) |
ALLOW_PRIVATE_NETWORK_REQUESTS | false | 条件 | 允许向私网抓 webmention/头像/事件导入 URL;本机联调才开。生产若事件源在内网必须开,否则抓取静默失败 |
CACHE_DRIVER/QUEUE_CONNECTION/SESSION_DRIVER | (compose 强制 redis) | compose 覆盖 | 手动部署可选 database/file/cookie 等;compose 栈内改 .env 无效 |
SESSION_LIFETIME | (Laravel 默认 120 分钟) | 条件 | 注释示例 86400(天级登录态) |
REDIS_HOST/REDIS_PASSWORD/REDIS_PORT | 127.0.0.1/null/6379 | compose 覆盖 HOST | 手动部署 Redis 带密码时必配 |
FILESYSTEM_DRIVER | local | 默认即可 | 图片存储驱动;Laravel 12 已改名 FILESYSTEM_DISK,此项为旧键名(example 未更新,源码实查按旧键读取,勿改成新键名) |
AWS_ACCESS_KEY_ID 等 5 项 | 空 | 条件 | 仅 FILESYSTEM_DRIVER=s3 时需要 |
SQL_LOGGER_ALL_QUERIES_ENABLED | false | 条件 | 全 SQL 日志含密钥,仅排障开 |
LOG_CHANNEL | stack | 默认即可 | Heroku 用 stderr |
3.3 AUTHENTICATION(AUTH_METHOD 五选一,实测路由/源码实查)
| 参数 | 分类 | 说明 |
|---|---|---|
AUTH_METHOD | 必配(选路线) | session(内置 passkey,单人站首选)/ github / oidc / vouch / heroku / discord |
AUTH_SHOW_LOGIN / AUTH_SHOW_LOGOUT | 遗留无效项 | 实测:设 false 重建后首页仍显示 Log In。2020 迁移 show_login_link_flip 已翻转为 DB 设置 auth_hide_login/auth_hide_logout,.env 值不再被导航栏读取(layouts/main.blade.php:119 实查) |
GITHUB_CLIENT_ID/SECRET | 条件(github) | OAuth 应用回调 URL 注册 /auth/github |
GITHUB_ALLOWED_USERS/GITHUB_ADMIN_USERS | 条件 | 空格分隔白名单;不设则任何 GitHub 用户可登录 |
OIDC_AUTHORIZATION_ENDPOINT/TOKEN_ENDPOINT/CLIENT_ID/CLIENT_SECRET | 条件(oidc) | 回调 /auth/oidc,IdP 发起登录 /auth/oidc/initiate |
OIDC_ALLOWED_USERS/OIDC_ADMIN_USERS | 条件 | 按 sub 白名单 |
VOUCH_HOSTNAME | 条件(vouch) | 网关置 REMOTE_USER(HTTP 头 Remote-User 被忽略,防伪造,README 明示) |
HEROKU_CLIENT_ID/SECRET | 条件(heroku) | 首个登录者即管理员,之后只能改库加人 |
DISCORD_CLIENT_ID/DISCORD_CLIENT_SECRET/DISCORD_SERVER_ID/DISCORD_ROLE_ID/DISCORD_BOT_TOKEN | 条件 | 登录限制(server/role)与机器人预告;bot 可配合任意登录方式 |
ALLOW_MANAGE_EVENTS | 默认即可(example=users) | users 任何登录者可管事件 / admins 仅管理员;注意粒度粗:开 users 同时允许所有人删改他人事件与应答(example 注释实查) |
ALLOW_MANAGE_SITE | 默认即可(example=admins) | 站点文案/设置页权限 |
四、compose 强制覆盖层(实测)
x-app-config.environment 五行注释原文即说明意图("force the app to use the docker compose services"):DB_HOST=db、REDIS_HOST=redis、CACHE_DRIVER=redis、QUEUE_CONNECTION=redis、SESSION_DRIVER=redis。实测 .env 写 CACHE_DRIVER=file 不会生效;要改只能改 compose 文件本身。
五、Docker 重大陷阱:容器内缺 .env → 站点设置层整体失效(实测定位+修复)
现象:管理员在 /settings(或 tinker Setting::set)写入的站点开关"不生效"——如 enable_rsvps=1 已入库,事件页却不出现 RSVP 区。
根因(源码实查 app/Setting.php):
public static function value($id) {
if(!isset($_ENV['DYNO']) && !file_exists(__DIR__.'/../.env')) {
return null; // ← 容器内没有 .env 文件,全部站点设置恒 null
}
...
官方 compose 用 env_file: 只把变量注入容器环境变量,宿主机 .env 文件本身并不在容器 /var/www/html/.env(实测 ls 不存在、tinker file_exists=false)。该守卫本意是 Heroku 场景判断($_ENV['DYNO'] 为 Heroku dyno 标记),在 Docker 形态下误伤:settings 表所有键读出来都是 null,RSVP、Proposed Events、登录链接隐藏、webmention 应答等站点功能全部被短路。
修复(实测两种,推荐后者持久):
# 方案 A(临时验证):docker cp .env meetable-app-1:/var/www/html/.env
# 方案 B(推荐):compose 的 app 与 worker 服务 volumes 各追加一行
volumes:
- meetable_storage:/var/www/html/storage/app
- ./.env:/var/www/html/.env:ro
挂载后实测:Setting::value('enable_rsvps') 由 NULL 变 string(1) "1";Setting::set('auth_hide_login','1') + 重启容器后首页 Log In 计数从 1 变 0,改 '0' 复原——DB 设置层完整闭环打通。注意 Setting::$cached 为进程内静态缓存,直接改库需重启容器(或经 Web /settings 页保存,同进程写入即时生效)。
六、站点设置层(settings 表)参数清单(SettingsController 白名单实查)
| 类别 | 键 | 作用 |
|---|---|---|
| 开关(checkbox) | enable_rsvps | RSVP 总开关(事件页另受事件自身 rsvps_enabled 约束) |
enable_proposed_events | 提案事件投票定档(关时 /proposed 404,实测) | |
enable_unlisted_events / enable_registration | 不公开事件 / 报名链接功能 | |
enable_webmention_responses / enable_ticket_url | webmention 应答 / 购票链接 | |
show_rsvps_in_ics / show_meeting_url_in_ics / clone_meeting_url | iCal 内容策略 | |
auth_hide_login / auth_hide_logout | 导航登录/登出链接隐藏(取代 .env 旧项,语义相反) | |
| 文本/资源 | add_an_event(添加事件页文案)、photo_license、default_coc_url、logo_url/width/height、favicon_url、analytics、home_meta_description、home_social_image_url、event_page_embed、custom_global_css、manifest_logo_url | 站点品牌与嵌入 |
| 集成 | zoom_email/account_id/client_id、notification_endpoint/channel_primary/meta、mail_from_address、mailgun_domain | Zoom/推送/邮件 |
| 密钥 | googlemaps_api_key、zoom_client_secret、zoom_webhook_secret、notification_token、mailgun_secret | 回显 ******** 防误覆盖 |
七、参数变更生效方式速查
| 改动对象 | 生效操作 | 实测证据 |
|---|---|---|
.env 任意项 | docker compose up -d(compose 检测 env_file 哈希变化自动重建) | APP_NAME 改验闭环 §3.1 |
compose environment | docker compose up -d | — |
| settings 表(Web 页保存) | 即时(同进程写入) | — |
| settings 表(绕过应用直接改库) | docker restart meetable-app-1(清进程内静态缓存) | auth_hide_login 闭环 §五 |
| 认证方式 AUTH_METHOD 切换 | 改 .env + 重建;GitHub/OIDC 需先在 IdP 注册回调 URL | 路由实查 /auth/{method} |
八、推荐配置组合
- 单人社区站(最省事):
AUTH_METHOD=session+ passkey 首登建管理员 +ALLOW_MANAGE_EVENTS=admins;compose 加.env挂载(§五)+ scheduler 容器(B2 §八)。 - GitHub 圈子站:
AUTH_METHOD=github+GITHUB_ALLOWED_USERS收紧 +ALLOW_MANAGE_EVENTS=users(圈内互建)。 - 企业内网:
AUTH_METHOD=oidc(配 Keycloak/Authelia 等,站内已有专栏)+ALLOW_MANAGE_EVENTS=admins+ALLOW_PRIVATE_NETWORK_REQUESTS=true(若事件源在内网)。
九、关联文档
- 本专栏:《Meetable 介绍与选型指南》、《Meetable Docker Compose 部署指南》、《Meetable latest 常用 CLI 命令与工具详解》
- 参数取证:
/opt/data/quzuo/tmp/meetable/evidence.md§6、§10