Elgg 介绍与选型指南
Elgg 开源社交网络引擎 7.1.2 认知篇:实体数据模型与插件体系、30 个内置功能、CLI 安装最小路径与两处实测坑,并用 GitHub API 实查的 star/版本/发布节奏与 Mastodon、Discourse、NodeBB、HumHub 量化选型对比。
Elgg 介绍与选型指南
目标:建立对 Elgg 开源社交网络引擎的整体认知——它是什么、内部怎么组织、自带什么能力、适合什么场景,并用量化维度与同类自托管社交产品做选型对比。本文版本与架构信息以 7.1.2 真实安装验证环境实测与官方仓库实查为准。
一、环境信息
本文认知与验证所依托的实测环境基线:
- 验证版本:Elgg 7.1.2(GitHub Releases 实查最新稳定版,2026-10-21 发布)
- 运行栈:PHP 8.3 + MariaDB 11.8.9(官方要求 MariaDB 10.6+/MySQL 8.4+)
- Web 服务:Apache 2.4(启用 URL 重写)
- 发行形态:官方 elgg/starter-project 完整项目包(内置 vendor 依赖,共 56,891 个文件,96,625,150 字节,SHA256
2544600e7abdcafb311bcb085a98d023ec93fd9c8ff5298ed6fe970ca59f4746) - 验证站点:安装向导全程实测,数据库 17 张表、内置插件 30 个(
plugins:list实测输出) - 演示账号:站点管理员 admin(示例口令 q1w2e3r4q1w2e3r4,见"六、适用场景与限制"中密码策略说明)
二、软件概述
Elgg 是一款开源社交网络引擎(social networking engine),2005 年发布首个版本,由 Elgg Foundation 与核心社区维护,许可证 GPL-2.0,代码仓库 github.com/Elgg/Elgg(GitHub 实查 1.7k star,2026-11-02)。
它不是论坛、不是微博客户端、也不是即时通讯,而是一个"社交应用平台底座":安装完成即获得一个可用的社交网站骨架——用户注册与档案、好友关系、群组、动态流(river)、博客、文件分享、页面(wiki 式)、站内信、讨论区、书签、点赞、标签、全文检索等能力开箱即用;所有内容由统一的实体(entity)模型承载,站点行为通过**插件(plugin)与钩子/事件(hooks/events)**扩展。
技术定位关键词:PHP 单体应用、MySQL/MariaDB 存储、LAMP 即可托管、无强制外部中间件(不需要 Redis/消息队列也能跑)、自带 REST API(web_services 插件)。
典型使用方:企业内部协作社区、高校校友站、主题兴趣社区、需要完全自主数据主权的社交站点。Elgg 官方站点 elgg.org,文档站 doc.elgg.org。
三、核心架构
3.1 项目目录结构
Elgg 7 以 composer 项目形态分发(官方 starter-project 即完整骨架),关键目录:
项目根(即 Web 站点根目录 docroot)
├── index.php # 入口
├── mod/ # 插件目录,每个子目录一个插件
├── engine/ # 核心引擎(vendor/elgg/elgg 下)
├── vendor/ # composer 依赖(发行包已内置)
├── elgg-config/settings.php # 站点配置:数据库连接、数据目录、wwwroot 等
└── data/(可外置) # 数据目录:缓存、上传文件、会话 cron 状态
安装向导或 vendor/bin/elgg-cli install 会生成 elgg-config/settings.php 并写入数据库配置;数据目录独立于代码目录,上传文件以 <owner_guid>/<guid>/file 形式落盘(实测上传文件位于 data/1/51/file)。
3.2 数据模型
Elgg 把一切内容抽象为实体,实测全新安装后数据库共 17 张表,核心为:
elgg_entities:所有对象/用户/群组/站点的统一主表(GUID、owner、subtype、访问级别、启用/删除标记)elgg_metadata/elgg_annotations:实体的键值元数据与评论式注解elgg_entity_relationships:关系边(好友 member_of 等)elgg_river:全站活动流elgg_queue/elgg_users_apisessions/elgg_hmac_keys等:通知队列、API 会话等
属性访问走 PHP 对象(ElggUser、ElggObject、ElggGroup),无需手写 SQL;检索用 elgg_get_entities() 系列 API。
3.3 插件体系
每个插件是 mod/<插件id>/ 目录,核心是返回配置数组的 elgg-plugin.php(注册路由、动作、事件钩子、菜单、REST 方法等)。Elgg 7 起插件目录必须包含 composer.json,且其 name 的项目段必须与目录名一致(实测缺失时报 Missing composer.json for plugin ID ...,详见运维篇排障实录)。
全新站点实测内置 30 个插件(activity、blog、bookmarks、ckeditor、file、groups、messages、pages、profile、search、thewire、web_services、system_log 等),activate_on_install 控制默认激活;启停可用管理后台或 elgg-cli plugins:activate/deactivate。
3.4 命令行与运维接口
发行包自带 vendor/bin/elgg-cli,实测可用子命令包括:install、upgrade/upgrade:list、cache:clear/cache:invalidate/cache:purge、cron、plugins:list/activate/deactivate、database:seed 等,支持 -u/--as 以指定用户身份执行,是无人值守部署与日常运维的主入口。
四、功能特性
以 7.1.2 实装站点验证到的能力:
- 社交基础:用户注册(支持邮箱验证插件)、资料页、好友、群组(群组内内容可独立访问域)、动态流 river
- 内容类型:博客、文件(含版本与下载)、页面、讨论区、书签、thewire(短动态)、站内信 messageboard
- 互动:点赞、评论(annotations)、标签、提及通知
- 通知系统:订阅-事件-队列模型,
cron驱动投递(实测日志可见Elgg\Notifications\Events\Enqueue与dequeue:notifications动作) - 访问控制:public/logged_in/private/ACCESS_* 分级 + 自定义访问集合
- REST API:web_services 插件提供
/services/api/rest/{view}端点,支持 api_key 与 HMAC 两种 API 认证及 auth_token 用户认证(本专栏 API 篇有全链路实测) - 系统日志:system_log 插件记录实体级动作(实测 logbrowser 页面可见 login:user、create:after:relationship 等条目)
- 多语言:内置数十种语言包,默认英文,安装时可设定
- 主题:view 层覆盖机制实现换肤(内置 theme_sandbox 开发者主题)
五、快速开始(最小可用示例)
在无 Composer 网络环境时,官方 starter-project 发行包(vendor 内置)是最短路径。最小流程(详细排障与逐条回显见《部署篇》):
# 1. 准备 PHP 8.3(需 gd/intl/pdo_mysql 扩展)与 MariaDB,建库 elgg 并授权
# 2. 解压发行包到站点目录,建独立数据目录并授予 Web 用户写权限
chown -R www-data:www-data <数据目录> <站点目录>/elgg-config
# 3. CLI 安装向导(13 个交互问题:数据库、站点名、管理员账号等)
php vendor/bin/elgg-cli install
# 4. 按向导提示完成后,访问站点根路径,admin 登录即见 Activity 首页
实测安装成功标志:upgrade:list 输出 Completed upgrades,plugins:list 列出 30 个内置插件,站点标题 All Site Activity : Elgg Community。
注意两点(实测踩坑):Elgg 7 默认密码策略要求至少 16 字符,短口令会在向导最后一步被拒;向导失败一次会残留 elgg-config/settings.php,重装前必须删除,否则报 Table 'elgg.elgg_config' doesn't exist。
六、适用场景与限制
适合:
- 需要数据完全自有的中小型社区(数百至数万活跃用户量级)
- PHP 运维团队熟悉 LAMP,希望"一个目录 + 一个库"即可托管
- 需要深度定制内容模型与流程(实体/元数据/钩子体系成熟,插件 API 稳定)
- 企业内网社交/知识协作(配合群组私有访问域)
限制与代价:
- PHP 单体架构,高并发场景需要自行做 OPcache/反向代理/数据库层优化
- 官方不提供现成安装镜像,编排化部署需自建 PHP+Apache 组合(本专栏《部署篇》给出完整自建方案)
- 无 ActivityPub 联邦能力,不能与 Mastodon 网络互通
- 安全基线较严:管理员密码默认最少 16 字符(实测 q1w2e3r4 被拒,示例环境改用 16 位口令)
- 升级需执行升级程序并逐版本跟进(
elgg-cli upgrade),跨大版本前需读迁移说明 - 插件生态总量小于 WordPress 量级,部分老插件停留在 Elgg 3/4 时代
七、同类选型对比
对比对象均为"自托管社交/社区平台",数据为 2026-11-02 经 GitHub API 实查(star 为整数原值):
| 维度 | Elgg | Mastodon | Discourse | NodeBB | HumHub |
|---|---|---|---|---|---|
| 产品定位 | 社交网络引擎(全站骨架) | 去中心化微博/联邦网络 | 现代论坛 | 论坛(Node 栈) | 社交企业内网/空间 |
| 语言/栈 | PHP 8.3 + MySQL/MariaDB | Ruby + PostgreSQL + Redis | Ruby + PostgreSQL + Redis | JavaScript/Node.js + MongoDB | PHP + MySQL/MariaDB |
| 许可证 | GPL-2.0 | AGPL-3.0 | GPL-2.0 | GPL-3.0 | AGPL-3.0 |
| GitHub star | 1,676 | 50,463 | 48,046 | 15,245 | 6,770 |
| 最新稳定版 | 7.1.2(2026-10-21) | v4.7.4(2026-10-29) | 未以 GitHub Releases 发布(按月 stable 节奏) | v4.16.7(2026-10-31) | v1.19.3(2026-10-27) |
| 版本节奏(实测样本) | 7.1.x 补丁版 2026-07 至 2026-10 间 5 次发布,约 1-3 周一版 | 月度级 | 月度级 | 高频补丁 | 季度级 |
| 内容模型 | 统一实体+元数据,全类型可定制 | 状态/转发/媒体 | 话题/帖子 | 话题/帖子 | 空间+模块 |
| 开放 API | REST(api_key/HMAC/auth_token,实测全链路) | REST+OAuth2 | REST+API Key | REST | REST |
| 联邦 | 无 | ActivityPub | 无(可插件桥接) | 无 | 无 |
| 最低外部依赖 | 仅数据库 | Redis+PostgreSQL | Redis+PostgreSQL | MongoDB | 仅数据库 |
选择建议:
- 要"自建一个功能完整的社交网站(档案+群组+文件+博客+站内信)且只要 PHP/MySQL" → Elgg 是同类中模型最完整的
- 要接入联邦宇宙、以短内容广播为主 → Mastodon
- 要论坛形态(话题树、长帖) → Discourse/NodeBB
- 要企业内部门户型社交、模块化拼装 → HumHub
- 需要数据主权 + 内容类型深度定制(非纯帖子流) → 在 Elgg 与 HumHub 之间,Elgg 实体模型更"引擎化",HumHub 更"成品化"
八、参考链接
- 官网:https://elgg.org/
- 文档:https://doc.elgg.org/
- 代码仓库:https://github.com/Elgg/Elgg
- 发行包(starter-project):https://github.com/Elgg/starter-project
- 本专栏配套篇:《部署篇》、《运维篇》、《API 篇》