Meetable 介绍与选型指南

Meetable(aaronpk/Meetable,latest=main@7d2d22ab 2026-10-16,MIT)自托管事件聚合站认知篇:Laravel 12/PHP 8.2 + MariaDB + Redis 四容器架构、RSVP/webmention/iCal/Discord 能力面、GitHub API 实查 172 星社区数据,与 Gancio/Bitpoll/Framadate 量化选型对比(联网+部署实查,查询日期 2026-11-02)

MeetableMeetable自托管活动管理活动签到PHPLaravel2026/11/02

Meetable 介绍与选型指南

目标:回答「Meetable 是什么、架构长什么样、能干什么、社区健康度如何、和同类活动/日程工具怎么选」。本文事实来自 GitHub API 联网实查与 2026-11-02 本地 Docker 部署实测(查询日期均为 2026-11-02,北京时间),部署与配置细节见本专栏其余篇目。

⚠️ 批次计划文档将 Meetable 预设为「Rails 应用、SQLite/PG、participort/meetable 仓库、带签到二维码」——以上四点经实查全部不成立,本文以实测为准:Meetable 是 Laravel(PHP) 应用、MariaDB + Redis 存储、仓库为 aaronpk/Meetable、到场登记形态是 RSVP 而非二维码签到。详见 §2.4 与 §5。

一、环境信息(信息源与查询日期)

  • 官方仓库:https://github.com/aaronpk/Meetable(GitHub API 实查,repo id 228271344)
  • 官网:https://meetable.org;生产实例:https://events.indieweb.org、https://events.oauth.net、https://meet.modelcontextprotocol.io(README 自述)
  • 版本来源:GitHub tags/releases(均为空)、ghcr.io 镜像 tag 清单、composer.json、容器内 php artisan about
  • 社区数据:GitHub API(stars/forks/issues/contributors,查询 2026-11-02);对比项 star 数沿用站内各专栏 2026-11-01 实查值
  • 本地实测环境:Docker + docker compose v2,ghcr.io/aaronpk/meetable:latest(image created 2026-10-16T22:21:49Z),Web 端口 8158

二、定位:公开事件聚合站,而非签到系统

2.1 一句话定位

Meetable 是 IndieWeb 社区核心开发者 Aaron Parecki(aaronpk)编写的极简事件聚合网站(README 原话 "a minimal events aggregator website"):把某圈子(社区、协议组织、公司内团队)的公开活动集中列在一块日历墙上,支持订阅、报名(RSVP)、回帖(webmention)与 Discord 联动。events.indieweb.org 就是它的官方生产实例。

2.2 核心能力面(routes 全量实查,107 条 web 路由 + ics 路由)

能力实现实测证据
事件列表/归档首页按日期分组,/archive 归档页,/{年}/{月} 视图GET /archive → 200 Past Events | Meetable
标签体系/tags、/tag/{tag}、按年标签页GET /tag/test → 200
iCal 订阅/ics/events.ics、/ics/tag/{tag}.ics、单事件 .ics实测返回 VCALENDAR,DTSTART:20261110T110000Z(19:00 Asia/Shanghai 正确换算 UTC)
Add to Calendar/add-to-google/{event} 与 .ics 导出路由实查存在
事件详情页封面图、时间地点、官网/购票链接、Markdown 描述、时区换算器 /local-timeGET /2026/11/quzuo-demo-event-quzuo1demo01 → 200
RSVP 报名POST /event/{id}/rsvp(登录用户 yes/if-needed/no),响应可带照片、可审核(/moderate)事件页未登录时不显示 RSVP 按钮(实测行为,符合设计)
Proposed Events无固定日期的提案事件,用户投票选期(/proposed、POST /event/{id}/vote)未启用站点设置时 GET /proposed → 404
周期事件/模板is_template、recurrence_interval 字段 + recurring:schedule 定时任务schedule:list 实测列出
WebmentionPOST /webmention,外部站点可在自己博客"回帖"到事件页event:list 实测 WebmentionReceived ⇂ Listener (ShouldQueue)
Discord 集成机器人预告事件、同步服务器事件列表(discord:notify/discord:sync-events)schedule:list 实测列出
MCP 服务端POST /mcp(throttle:60,1),AI 代理可接入GET /mcp → 405(仅 POST,实测)
事件 JSON APIGET /event/{key}.json 返回会议链接状态实测 {"meeting_url":false,"meeting_state":"none"}
其他事件历史版本对比、克隆、私密导出 URL(export_secret)、unlisted 事件、自定义 CSS、多语言、PWA manifest路由/manifest.json 实测

2.3 认证与权限模型

AUTH_METHOD 五选一(.env 实查):session(内置 Passkey/WebAuthn,首个登录者成为管理员)、github(OAuth + GITHUB_ALLOWED_USERS/GITHUB_ADMIN_USERS 白名单)、oidc(OIDC_* 端点 + sub 白名单)、vouch(网关 REMOTE_USER 头)、heroku。权限两开关:ALLOW_MANAGE_EVENTS、ALLOW_MANAGE_SITE(users/admins)。实测 AUTH_METHOD=session 时 /login 呈现 "Create Admin User" passkey 注册表单。

2.4 与"签到工具"预期的差距

任务书预设的「签到二维码/QR check-in」在代码层不存在:全量路由 grep qr|checkin 无匹配。Meetable 的"到场"表达是 RSVP 应答 + 会后照片/webmention,面向的是活动发布与聚合而非现场核销。若需求是扫码核销入场,应看票务系统(如 Hi.Events),不在本文范围。

三、架构与技术栈(部署实测)

┌────────────── docker compose 栈(实测 4 容器)──────────────┐
│ app      ghcr.io/aaronpk/meetable:latest  Apache 2.4.68+PHP │
│          8.2.34(mod 方式内嵌),entrypoint 自动 migrate +   │
│          storage:link,端口 127.0.0.1:8080→80               │
│ worker   同镜像,php artisan queue:work(队列消费者)        │
│ db       mariadb:11.8(MARIADB_AUTO_UPGRADE=1)             │
│ redis    redis:8-alpine(cache/queue/session 三用)          │
│ 卷:meetable_storage / meetable_db / meetable_redis          │
└─────────────────────────────────────────────────────────────┘
  • 框架:Laravel Framework 12.69.1(容器内 php artisan about 实测),PHP ^8.2,Composer 2.10.3
  • 存储:MySQL/MariaDB(DB_CONNECTION=mysql);缓存/队列/会话默认走 Redis(compose 的 x-app-config 锚点强制覆盖 .env 中这五项,实测 about 显示 Cache=redis、Queue=redis)
  • 前端为 Laravel Blade 服务端渲染(无独立 SPA),PWA manifest 提供"添加到主屏"
  • 无 semver 发布:GitHub tags/releases 均为空,ghcr 仅 main/latest 两个滚动 tag;版本锚点取 main 最新 commit 7d2d22ab7f85(2026-10-16)与镜像 created 时间
  • 运维缺口(实测发现):compose 栈内没有任何进程跑 php artisan schedule:run(README 手动安装要求每分钟 cron),因此会议提醒、Discord 同步、周期事件生成四类定时任务在纯 compose 部署下不会自动触发,需自建 scheduler 容器或宿主机 cron 补位(详见部署指南篇)

四、社区数据实查(GitHub API,2026-11-02)

指标值说明
Stars / Forks172 / 14小型项目
Open Issues18含 PR
Watchers3
贡献者10 人,aaronpk 占 598/633 提交(≈94%)单维护者结构,bus factor=1
创建 / 最近推送2019-12-16 / 2026-10-16持续活跃(查询当日往前 17 天)
许可证MIT商用/闭源修改无障碍
语言PHP(Laravel 12)
生产实例events.indieweb.org、events.oauth.net、meet.modelcontextprotocol.ioIndieWeb/OAuth/MCP 三个协议社区在用

五、选型对比(量化)

对比对象取站内已收官的三个活动类专栏 + Meetable 本次实测(star 数查询日期 2026-11-01/02,来源见各专栏文档):

维度MeetableGancioBitpollFramadate
仓库aaronpk/Meetable(GitHub)les/gancio(Framagit,GitHub 镜像 lesion/gancio)fsinfuhh/Bitpollframasoft/framadate
定位公开事件聚合墙+RSVP活动发布日历+Fediverse 联邦会议时间投票Doodle 式日程投票
技术栈PHP 8.2 / Laravel 12Node.js(Express+Nuxt)Python / DjangoPHP
数据库MariaDB + Redis(强制)SQLite/PG/MSSQLSQLite/PGMariaDB/MySQL
许可证MITAGPL-3.0GPL-3.0CeCILL-B(随包 LICENSE 实测)
Stars17266318103
认证Passkey/GitHub/OIDC/Vouch/Heroku/Discord本地账户可匿名/可选账户可匿名
日历订阅✅ iCal(全站/标签/单事件)✅❌❌
现场签到/QR❌(RSVP 代替)❌❌❌
联邦/社交集成Webmention + Discord 机器人ActivityPub(Mastodon 可见)❌❌
周期事件✅(模板+间隔)✅❌❌
部署形态官方 compose 四容器官方 compose 双容器单容器源码+PHP 环境

决策建议:

  • 要一个「社区/组织公开活动日历」,成员用 GitHub/OIDC 登录报名、活动可被 iCal 订阅和 webmention 回帖 → Meetable(MIT 许可、认证面最宽、协议社区背书)。
  • 要活动信息广播到 Fediverse、面向不特定公众报名 → Gancio(ActivityPub 原生)。
  • 只是「凑会议时间」的轻量投票 → Bitpoll(功能最贴合)或 Framadate(匿名可用、法语生态)。
  • 需要扫码核销/票务 → 四者皆非,另寻票务系统(见 §2.4)。

风险提示:单维护者(94% 提交)+ 无版本发布 + compose 栈缺 scheduler,三者叠加意味着升级即 docker compose pull 滚动 main 分支,需自测后上生产。

六、快速上手(30 秒版)

curl -O https://raw.githubusercontent.com/aaronpk/Meetable/main/docker-compose.yml
curl -o .env https://raw.githubusercontent.com/aaronpk/Meetable/main/.env.example
# 至少填 APP_KEY(openssl rand -hex 16)、APP_URL、DB_PASSWORD、DB_ROOT_PASSWORD
docker compose up -d

完整逐段实测、管理员创建与 iCal/RSVP 闭环验收见 《Meetable Docker Compose 部署指南》。

七、关联文档

八、取证与参考来源

  • GitHub API:/repos/aaronpk/Meetable、/contributors、/commits、/tags(2026-11-02)
  • ghcr.io token API:/v2/aaronpk/meetable/tags/list → ["main","latest"]
  • 官方 README.md(main 分支 420 行全文)、.env.example(154 行)、docker-compose.yml、routes/web.php、routes/ics.php、app/Http/Controllers/Controller.php、app/Event.php(raw.githubusercontent.com 下载实查)
  • 本地部署实测:/opt/data/quzuo/tmp/meetable/evidence.md(compose 输出、容器日志、HTTP 状态码/标题、tinker 建数据、iCal/JSON 闭环、参数改验、artisan 命令回显)
Meetable 介绍与选型指南 - Quzuo