Easy!Appointments 1.6.1 介绍与选型指南

Easy!Appointments 1.6.1 开源在线预约系统介绍与选型:定位、架构、功能、快速开始与同类量化对比,全部数据于 2026-10-23 联网溯源。

Easy!AppointmentsEasy!Appointments预约调度自托管2026/10/23

Easy!Appointments 1.6.1 介绍与选型指南

目标:面向需要在自有服务器上搭建「在线预约/客户调度」系统的运维与开发者,系统介绍开源预约系统 Easy!Appointments 1.6.1 的定位、架构、功能与选型依据。本文所有版本、社区与生态数据均于查询日期 2026-10-23 从官方渠道(easyappointments.org、GitHub Releases、 shields.io 徽章、官方 Docker Hub)联网溯源核对,并已在本团队自托管环境(Ubuntu 22.04 + PHP 8.2 + MariaDB,Easy!Appointments 1.6.1)完成部署验证。

一、环境信息

本文为认知与选型篇,以下为溯源所用的信息源与被评估对象的关键事实,均标注来源与查询日期(2026-10-23)。

项目内容来源
软件名称Easy!Appointments(开源 Web 预约/日程调度系统)官网 easyappointments.org
当前稳定版1.6.1(发布日期 2026-10-12)GitHub Releases 页 + 软件包内 CHANGELOG.md
开源许可GPL-3.0composer.json license 字段
作者与维护方Alex Tselegidis(alextselegidis/easyappointments 仓库)composer.json authors 字段
GitHub 社区数据约 4.5k stars、1.6k forksshields.io GitHub 徽章,查询日期 2026-10-23
Docker 镜像拉取量约 140k 次(alextselegidis/easyappointments)shields.io Docker Hub 徽章,查询日期 2026-10-23
运行要求Apache 或 Nginx、PHP 8.2+、MySQL/MariaDB官方 README「Installation (Production) / Requirements」
界面语言42 种语言文件(含简体中文 chinese 与繁体中文 traditional-chinese)软件包 application/language/ 目录实数

💡 说明:表中星数/拉取量为查询时点的快照值,用于量级判断而非精确对账;GitHub 官方 API 存在匿名限流,星数取证按惯例走 shields.io 徽章接口。

二、软件概述

Easy!Appointments 是一个自托管(self-hosted)、开源的在线预约调度系统,解决的核心业务问题是:让客户通过一个公开的预约页面,按照服务提供者预先公布的可用时间自助选时段下单,免去邮件/电话来回确认的人工成本。它由希腊开发者 Alex Tselegidis 自 2014 年起持续维护(首个版本 1.0.0 发布于 2014-01-19),采用 GPL-3.0 许可证,项目主页为 easyappointments.org,代码托管在 GitHub alextselegidis/easyappointments 仓库。

从官方 README 的自我定位看,它强调三点:易于安装(一个 zip 包 + 安装向导即可跑起来)、对客户友好(响应式预约页面,手机可用)、对服务提供者友好(日历视图管理预约,支持与 Google Calendar、CalDAV 双向同步)。

其典型使用形态是「一家或多家门店/工作室/诊所/咨询机构」的预约入口:管理员在后台定义服务(如「60 分钟按摩」)、服务提供者(技师/顾问/医生)、工作时间计划(周一至周五 09:00–18:00、午休 14:30–15:00),客户打开预约页选择服务与提供者后,系统只展示真正空闲的时段,下单后自动给双方发邮件通知。

与「日历工具」的边界:Easy!Appointments 不是个人日历(那是 Radicale/Baïkal 一类 CalDAV 服务器的领域),也不是会议室预订(那是 LibreBooking 一类资源预订系统的领域),它的领域模型围绕「服务—提供者—客户—预约」四类实体构建,本质是面向服务型业务的轻量级客户预约 CRM。

三、核心架构

3.1 技术栈构成

依据软件包内 composer.json 与源码目录结构(1.6.1 版实查),Easy!Appointments 是一个经典的 PHP 单体 Web 应用:

层技术依据
语言运行时PHP ≥ 8.2(依赖 ext-curl/json/mbstring/gd/simplexml/fileinfo)composer.json require 字段
Web 框架CodeIgniter 3 风格目录(application/ + system/),MVC 结构源码目录 application/controllers、models、views
数据库MySQL/MariaDB(约 14 张业务表,ea_ 前缀)安装后数据库实查
邮件PHPMailer ^7.0(SMTP/mail/sendmail 协议)composer.json
日历同步google/apiclient ^2.18(Google Calendar)+ sabre/vobject ^4.5(CalDAV/ICS)composer.json
HTTP 客户端Guzzle ^7.10(Webhook 外呼、CalDAV 连接)composer.json
人机验证altcha-org/altcha ^1.0 + gregwar/captcha ^1.3composer.json
日志Monolog ^3.9composer.json

3.2 领域模型与同步架构

系统核心实体为四类:**服务(Service)**定义时长/价格/时段粒度/容纳人数;**服务提供者(Provider)**即技师、顾问等可被预约的人力资源,每个提供者绑定一份工作计划(Working Plan)与自己的日历;**客户(Customer)**是预约的下单方;**预约(Appointment)**将三方在某个时间点绑定。此外还有秘书(Secretary,可代管理多个提供者的前台角色)、服务分类、不可用时段(Unavailability)、封锁时段(Blocked Periods)、工作计划例外(Working Plan Exceptions)等支撑实体。

💡 技术拓展:「日历双向同步」在自托管预约系统里不止一种对接协议,常见选择对比——

协议/方式原理与特点适用场景
Google Calendar API专有云 API,OAuth2 授权,功能全(闲忙查询、事件增删改)团队已用 Google Workspace
CalDAVIETF 标准(RFC 4791),可对接自有 Nextcloud/Radicale 等数据不出内网、私有化日历
ICS 订阅(只读)拉取 .ics 文件导入,单向、延迟大只需展示他人日程
无同步(纯站内日历)预约只存本系统无外部日历依赖、最简单

Easy!Appointments 1.6.x 同时内置 Google Calendar API 与 CalDAV 两条同步通道,且自 1.6.1 起两者相互独立——一条通道故障不再拖累另一条(CHANGELOG 1.6.1「Google Calendar and CalDAV are now synchronized independently」)。本文评估的 1.6.1 实际同时采用「Google API + CalDAV」双通道方案。

同步方向上是双向的:站内创建的预约会写入提供者的外部日历;外部日历里的忙闲事件会拉回站内参与冲突检测,避免「客户约了一个技师其实正在外面开会」的时段冲突。

3.3 部署形态

官方提供两种主流部署形态,本团队均完成实测:

  1. 传统 LAMP 部署:下载 release zip 包(约 7 MB,1.6.1 起官方裁剪了样式源码与依赖开发文件以减小体积,见 CHANGELOG),解压到 Web 目录,浏览器打开触发安装向导(数据库初始化 + 管理员创建),全程无需 Composer——依赖 vendor 目录随发行包分发。
  2. Docker 容器部署:官方镜像 alextselegidis/easyappointments:1.6.1(Docker Hub 拉取量约 140k),入口脚本根据 BASE_URL/DB_HOST/DB_NAME 等环境变量自动生成 config.php 与 email.php 后启动 Apache;配套 MariaDB 容器组成一个 Compose 栈。

四、功能特性

以下功能清单依据 1.6.1 官方 README、CHANGELOG 与后台实际页面归纳:

预约核心

  • 公开预约页:客户选服务 → 选提供者 → 选日期时段 → 填写资料 → 确认,四步向导式流程;页面响应式,手机可操作;
  • 可用时段实时计算:结合服务时长、时段粒度(slot interval)、提供者工作计划、已有预约与不可用时段、休息间隔多重约束;
  • 预约管理后台:按日/周/月日历视图展示,拖拽调整,冲突检测与确认弹窗;
  • 邮件通知:预约创建/修改/删除时向客户与提供者发送通知邮件(PHPMailer,支持 SMTP);
  • 短信通知:通过 Twilio 集成(可选,需配置 Twilio 账号)。

日历与同步

  • Google Calendar 双向同步(每个提供者可绑定独立日历);
  • CalDAV 双向同步(1.5.x 引入、1.6.1 大幅增强:本地网络 CalDAV 主机白名单、同步失败原因明示、UTC 取期修正等);
  • 工作计划例外与封锁时段:节假日、临时休假精细化管控。

管理与扩展

  • REST API v1:appointments/customers/services/providers 等约 13 类资源的 CRUD 与可用时段查询,HTTP Basic 认证或 API Token 认证,可用于对接自有系统;
  • Webhooks:预约/客户等事件发生时向外部 URL 推送 JSON(1.6.1 起支持通过 API 配置 secret header);
  • 多角色权限:管理员/秘书/提供者/客户四级;
  • 多语言:42 种语言包,含简繁中文;
  • LDAP 目录集成:可对接企业 LDAP/AD 登录(1.5.x 引入);
  • 隐私合规:内置隐私政策与条款页面,预约时可要求客户勾选同意(GDPR 辅助);
  • 安全机制:登录限速、CAPTCHA/AltCHA 人机验证、会话防护(1.6.1 集中修复了一批越权与注入类安全问题)。

五、快速开始(最小可用示例)

以下为官方推荐的最小上手路径,摘自官方 README「Installation (Production)」章节与官方文档站(查询日期 2026-10-23);本团队按此路径在 Ubuntu 22.04 + PHP 8.2 + MariaDB 环境实测通过,完整命令级细节见站内《Ubuntu 22.04 安装 Easy!Appointments 1.6.1 指南》与《Easy!Appointments 1.6.1 Docker Compose 部署指南》两篇。

  1. 准备环境:一台装好 Apache/Nginx + PHP 8.2+(含 curl、json、mbstring、gd、simplexml、fileinfo 扩展)+ MySQL/MariaDB 的服务器。
  2. 下载发行包:从 GitHub Releases 下载 easyappointments-1.6.1.zip(约 7 MB),解压到 Web 根目录(如 /var/www/easyappointments)。
  3. 写配置文件:复制 config-sample.php 为 config.php,填四个关键值——BASE_URL(访问地址)、DB_HOST、DB_NAME、DB_USERNAME/DB_PASSWORD。
  4. 跑安装向导:浏览器打开 http://<服务器>/index.php/installation/setup,向导依次完成数据库表结构导入与管理员账号创建。
  5. 登录后台:访问 http://<服务器>/index.php/backend(1.6.x 为 /index.php/login 登录后进入日历),创建服务与提供者,预约页即对外可用。

官方同时给出 Docker 单行启动(镜像自 1.5.x 起随 release 构建):

docker run -p 8080:80 -e BASE_URL="http://localhost:8080" alextselegidis/easyappointments:1.6.1

来源:GitHub Releases 页 1.6.1 说明与官方文档,查询日期 2026-10-23。

六、适用场景与限制

6.1 适合的场景

场景契合点
诊所/理疗/美容/工作室提供者×服务×时段的经典模型,客户自助下单
咨询/顾问/法务秘书角色可代多位顾问管理预约,邮件通知闭环
教培/驾校/场地体验课服务容纳人数(attendantsNumber)支持小组课
内部资源预约(借调面试官等)轻量、无需暴露公网也能内网跑

6.2 已知限制

  • 单库单实例:无官方集群方案,横向扩展需自行在数据库与会话层处理;中小机构(日预约量数百至数千)完全够用,不适合超大流量平台直接套用;
  • 移动端只有 Web:官方无原生 App,移动端体验依赖响应式网页;
  • 短信/Twilio、Google 同步依赖外网:全离线内网部署时邮件走内网 SMTP、同步走 CalDAV 仍可闭环,但 Google 功能不可用;
  • GPL-3.0 传染性:二开对外分发需遵守 GPL;商业闭源集成需注意许可边界;
  • PHP 8.2 起步:老服务器(PHP 7.x)必须先升级运行时。

七、同类选型对比

7.1 量化对比

下表为 2026-10-23 经 shields.io 徽章与官方渠道溯源的同类开源预约/调度系统对比:

系统GitHub Stars定位技术栈许可特色
Easy!Appointments 1.6.1≈4.5k(2026-10-23 溯源)服务型业务预约(服务/提供者/客户模型)PHP 8.2 + CodeIgniter + MySQLGPL-3.042 语言、Google+CalDAV 双同步、REST API、超轻量(zip 约 7 MB)
Cal.com(Calendso)≈49k(2026-10-23 溯源)个人/团队会议预约(类 Calendly)TypeScript/Node + Prisma + PostgreSQLAGPL-3.0生态最大、集成丰富、团队调度/OAuth
官方 Docker 拉取量Easy!Appointments ≈140k pulls(2026-10-23 溯源)———反映容器化使用规模

关键差异解读:Cal.com 星级体量约为 Easy!Appointments 的 10 倍,是「个人会议链接」赛道(Calendly 开源替代)的事实标准;但若业务是「多个服务提供者 × 多种服务 × 固定工作计划」的门店型预约,Easy!Appointments 的领域模型更贴合,且 PHP+MySQL 的部署门槛显著低于 Node+PostgreSQL+构建链,资源占用与运维复杂度更低。两者并非直接竞争关系,选型应先看业务形态。

7.2 选型建议

  • 门店/机构型预约(客户按服务预约具体技师/医生,有固定营业时间)→ Easy!Appointments 更贴合,开箱即用;
  • 顾问/销售会议约时间(给客户发一个「选我的空闲时间」链接)→ Cal.com 的个人会议页模型更合适;
  • 会议室/设备等资源预约→ 二者都不是,考虑 LibreBooking 一类资源预订系统;
  • 纯个人日历自托管→ Radicale/Baïkal 等 CalDAV 服务器,与预约系统互补共存;
  • 技术约束:团队只会 PHP/想塞进现有 LAMP → Easy!Appointments;团队全栈 JS/要 API 优先深度二开 → Cal.com;
  • 版本节奏:Easy!Appointments 近三年(1.4.3→1.6.1,2022-03→2026-10)平均每年 1–2 个稳定版,节奏稳健不激进,1.6.1 为 2026-10-12 发布的安全修复集中版,生产可直接采用。

八、参考链接

  1. 官网:https://easyappointments.org
  2. 官方文档站:https://easyappointments.org/docs
  3. GitHub 仓库:https://github.com/alextselegidis/easyappointments
  4. GitHub Releases(1.6.1,2026-10-12):https://github.com/alextselegidis/easyappointments/releases
  5. Docker Hub 镜像:https://hub.docker.com/r/alextselegidis/easyappointments
  6. REST API 文档:https://easyappointments.org/docs.html#rest-api
  7. 社区论坛:https://groups.google.com/forum/#!forum/easy-appointments

站内延伸阅读:安装与部署实践见《Ubuntu 22.04 安装 Easy!Appointments 1.6.1 指南》《Easy!Appointments 1.6.1 Docker Compose 部署指南》;配置项逐项说明见《Easy!Appointments 1.6.1 配置参数详解》;接口调用见《Easy!Appointments 1.6.1 API 使用详解》。