Elgg 介绍与选型指南

Elgg 开源社交网络引擎 7.1.2 认知篇:实体数据模型与插件体系、30 个内置功能、CLI 安装最小路径与两处实测坑,并用 GitHub API 实查的 star/版本/发布节奏与 Mastodon、Discourse、NodeBB、HumHub 量化选型对比。

ElggElggPHP 应用MySQL2026/11/02

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 为整数原值):

维度ElggMastodonDiscourseNodeBBHumHub
产品定位社交网络引擎(全站骨架)去中心化微博/联邦网络现代论坛论坛(Node 栈)社交企业内网/空间
语言/栈PHP 8.3 + MySQL/MariaDBRuby + PostgreSQL + RedisRuby + PostgreSQL + RedisJavaScript/Node.js + MongoDBPHP + MySQL/MariaDB
许可证GPL-2.0AGPL-3.0GPL-2.0GPL-3.0AGPL-3.0
GitHub star1,67650,46348,04615,2456,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 周一版月度级月度级高频补丁季度级
内容模型统一实体+元数据,全类型可定制状态/转发/媒体话题/帖子话题/帖子空间+模块
开放 APIREST(api_key/HMAC/auth_token,实测全链路)REST+OAuth2REST+API KeyRESTREST
联邦无ActivityPub无(可插件桥接)无无
最低外部依赖仅数据库Redis+PostgreSQLRedis+PostgreSQLMongoDB仅数据库

选择建议:

  • 要"自建一个功能完整的社交网站(档案+群组+文件+博客+站内信)且只要 PHP/MySQL" → Elgg 是同类中模型最完整的
  • 要接入联邦宇宙、以短内容广播为主 → Mastodon
  • 要论坛形态(话题树、长帖) → Discourse/NodeBB
  • 要企业内部门户型社交、模块化拼装 → HumHub
  • 需要数据主权 + 内容类型深度定制(非纯帖子流) → 在 Elgg 与 HumHub 之间,Elgg 实体模型更"引擎化",HumHub 更"成品化"

八、参考链接

Elgg 介绍与选型指南 - Quzuo