Etherpad: A modern really-real-time collaborative document editor.
Etherpad:一款面向网络的实时协作编辑器

关于
Etherpad 是一款可扩展至数千名实时用户的实时协作编辑器。它提供完整的数据导出功能,并在您自己的服务器上运行,受您自己的控制。
体验一下
Wikimedia 提供了一个公共的 Etherpad 实例供您试用,或者您可以使用另一个公共 Etherpad 实例来查看其他功能
项目状态
我们正在寻找维护者,并有一些资金可供使用。如果您能够提供帮助,请联系 John McLear。
代码质量
测试
参与度
安装
Docker-Compose
services:
app:
user: "0:0"
image: etherpad/etherpad:latest
tty: true
stdin_open: true
volumes:
- plugins:/opt/etherpad-lite/src/plugin_packages
- etherpad-var:/opt/etherpad-lite/var
depends_on:
- postgres
environment:
NODE_ENV: production
ADMIN_PASSWORD: ${DOCKER_COMPOSE_APP_ADMIN_PASSWORD:-admin}
DB_CHARSET: ${DOCKER_COMPOSE_APP_DB_CHARSET:-utf8mb4}
DB_HOST: postgres
DB_NAME: ${DOCKER_COMPOSE_POSTGRES_DATABASE:-etherpad}
DB_PASS: ${DOCKER_COMPOSE_POSTGRES_PASSWORD:-admin}
DB_PORT: ${DOCKER_COMPOSE_POSTGRES_PORT:-5432}
DB_TYPE: "postgres"
DB_USER: ${DOCKER_COMPOSE_POSTGRES_USER:-admin}
# For now, the env var DEFAULT_PAD_TEXT cannot be unset or empty; it seems to be mandatory in the latest version of etherpad
DEFAULT_PAD_TEXT: ${DOCKER_COMPOSE_APP_DEFAULT_PAD_TEXT:- }
DISABLE_IP_LOGGING: ${DOCKER_COMPOSE_APP_DISABLE_IP_LOGGING:-false}
SOFFICE: ${DOCKER_COMPOSE_APP_SOFFICE:-null}
TRUST_PROXY: ${DOCKER_COMPOSE_APP_TRUST_PROXY:-true}
restart: always
ports:
- "${DOCKER_COMPOSE_APP_PORT_PUBLISHED:-9001}:${DOCKER_COMPOSE_APP_PORT_TARGET:-9001}"
postgres:
image: postgres:15-alpine
environment:
POSTGRES_DB: ${DOCKER_COMPOSE_POSTGRES_DATABASE:-etherpad}
POSTGRES_PASSWORD: ${DOCKER_COMPOSE_POSTGRES_PASSWORD:-admin}
POSTGRES_PORT: ${DOCKER_COMPOSE_POSTGRES_PORT:-5432}
POSTGRES_USER: ${DOCKER_COMPOSE_POSTGRES_USER:-admin}
PGDATA: /var/lib/postgresql/data/pgdata
restart: always
# Exposing the port is not needed unless you want to access this database instance from the host.
# Be careful when other postgres docker container are running on the same port
# ports:
# - "5432:5432"
volumes:
- postgres_data:/var/lib/postgresql/data/pgdata
volumes:
postgres_data:
plugins:
etherpad-var:
Requirements
Node.js 版本需不低于 18.18.2。
Windows、macOS、Linux 系统要求
- 从 nodejs.org 下载最新的 Node.js 运行环境。
- 安装 pnpm:执行
npm install -g pnpm(可能需要管理员权限)。 - 克隆仓库:执行
git clone -b master。 - 执行
pnpm i安装依赖。 - 执行
pnpm run build:etherpad进行构建。 - 执行
pnpm run prod启动服务。 - 在浏览器中访问
http://localhost:9001。
Docker 容器
有关在容器中运行 Etherpad 的信息,请查阅 此处。
插件
通过插件,您可以高度定制化 Etherpad。


可用插件
有关可用插件的列表,请访问 插件网站。
插件安装
您可以通过管理员网页界面安装插件(例如,访问 http://127.0.0.1:9001/admin/plugins)。
或者,您也可以通过命令行安装插件:
cd /path/to/etherpad-lite
pnpm run plugins i ep_${plugin_name}
另请参阅插件维基文章。
推荐插件
在您的Etherpad文件夹中运行以下命令,以获取上方演示动图中展示的所有功能:
pnpm run plugins i \
ep_align \
ep_comments_page \
ep_embedded_hyperlinks2 \
ep_font_color \
ep_headings2 \
ep_markdown \
ep_webrtc
为了用户身份验证,建议您运行一个OpenID Connect身份提供者(OP)并安装以下插件:
- 使用ep_openid_connect插件进行身份验证,以对接您的OP。
- 使用ep_guest插件创建一个具有受限权限(例如,只读权限)的“访客”账户。
- 使用ep_user_displayname插件自动从您的OP填充每位用户的显示名称。
- 使用ep_stable_authorid插件,确保每位用户选择的颜色、显示名称、评论归属等与他们的账户紧密关联。
升级 Etherpad
在您的Etherpad文件夹中运行以下命令进行升级:
- 停止正在运行的所有Etherpad实例(手动、systemd...)
- 获取当前版本
git -P tag --contains
- 列出可用的版本
git -P tag --list "v*" --merged
- 选择版本
git checkout v2.2.5
git switch -c v2.2.5
- 升级 Etherpad 功能
./bin/run.sh
- 使用 [CTRL-C] 停止程序
- 重新启动你的 Etherpad 服务
下一步操作
调整设置
你可以在 settings.json 文件中修改设置。如果你需要处理多个设置文件,你可以通过 -s|--settings 选项向 bin/run.sh 传递设置文件的路径,这样你就可以从同一个安装中运行多个 Etherpad 实例。类似地,--credentials 可以用来指定一个设置覆盖文件,--apikey 用来指定不同的 APIKEY.txt 文件,--sessionkey 用来指定非默认的 SESSIONKEY.txt。每个配置参数也可以通过环境变量设置,使用语法 ${ENV_VAR} 或 ${ENV_VAR:default_value}。详细信息请参考 settings.json.template。一旦你可以访问 /admin 部分,你就可以通过网页浏览器修改设置。
如果你计划在生成环境中使用 Etherpad,你应该使用像 mysql 这样的专用数据库,因为 dirtyDB 数据库驱动仅用于测试和/或开发目的。
保护你的安装
如果你在 settings.json 的 users 部分启用了认证,那么将明文密码存储为哈希值是一个良好的安全实践。如果你正在运行一个生产环境,这一点尤为重要。
请安装 ep_hash_auth 插件 并进行配置。如果你愿意,ep_hash_auth 也允许你将用户存储在文件系统的自定义目录中,而无需每次编辑 settings.json 并重启 Etherpad。
使用皮肤变体自定义样式
在浏览器中打开 http://127.0.0.1:9001/p/test#skinvariantsbuilder 并开始尝试!

有用的资源
wiki 是你获取教程和操作指南的一站式资源。
文档可以在 doc/ 目录中找到。
开发
你应该知道的事情
你可以使用 bin/debugRun.sh 来调试 Etherpad。
你可以通过启动 bin/fastRun.sh 快速运行 Etherpad。这对开发者和管理员来说很方便。请注意,它会跳过依赖项更新,所以记得在安装新依赖项或升级版本后运行 bin/installDeps.sh。
如果你想了解 Etherpad 的 Easysync 是如何工作的(这个库使它真正实现实时性),可以从这个 PDF 开始(内容复杂,但值得一读)。
贡献
请阅读我们的 开发者指南
HTTP API
Etherpad 被设计为易于嵌入,并提供一个 HTTP API,允许你的 Web 应用程序管理便签、用户和群组。建议使用 可用的客户端实现 来与这个 API 交互。
API 的 OpenAPI(之前为 swagger)定义在 /api/openapi.json 下暴露。
jQuery 插件
有一个 jQuery 插件 帮助你将便签嵌入到你的网站中。
插件框架
Etherpad 提供了一个插件框架,让你可以轻松添加自己的功能。默认情况下,你的 Etherpad 非常轻量级,你可以根据自己的需求进行自定义。一旦安装了 Etherpad,你应该 访问插件页面 并开始控制。
翻译/本地化(i18n / l10n)
Etherpad 提供了所有语言的翻译,感谢 TranslateWiki 团队的贡献。
如果你需要 插件 的翻译,请单独向每个插件发送 pull request。
常见问题
访问 FAQ。
联系我们
联系开发团队的官方渠道是通过 GitHub issues。
对于 漏洞的负责披露,请给维护者发送邮件(a.mux@inwind.it 和 contact@etherpad.org)。
加入官方的 Etherpad Discord 频道。