Etherpad:一个用于网络的实时协作编辑器
关于
Etherpad是一个实时协作编辑器,可扩展至同时支持数千名实时用户。它提供完整的数据导出功能,并在您的服务器上运行,由您控制。
试用
维基媒体提供了一个公共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}
# 目前,环境变量DEFAULT_PAD_TEXT不能为空或未设置;在最新版本的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
# 除非您想从主机访问此数据库实例,否则不需要暴露端口。
# 当其他postgres docker容器在同一端口上运行时要小心
# ports:
# - "5432:5432"
volumes:
- postgres_data:/var/lib/postgresql/data/pgdata
volumes:
postgres_data:
plugins:
etherpad-var:
要求
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文件夹中运行以下命令,以获得上面演示gif中可见的所有功能:
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 用于确保每个用户选择的颜色、显示名称、评论所有权等与其账户紧密关联。
后续步骤
调整设置
您可以在 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 插件 可以帮助您将 Pads 嵌入到您的网站中。
插件框架
Etherpad 提供了一个插件框架,允许您轻松添加自己的功能。默认情况下,您的 Etherpad 非常轻量级,由您自定义体验。安装 Etherpad 后,您应该 访问插件页面 并进行控制。
翻译/本地化(i18n / l10n)
Etherpad 通过 TranslateWiki 团队的努力,提供了所有语言的翻译。
如果您需要 插件 的翻译,请向每个插件单独发送拉取请求。
常见问题
访问 FAQ。
联系我们
联系开发团队的官方渠道是通过 GitHub issues。
对于负责任的漏洞披露,请给维护者发送邮件(a.mux@inwind.it 和 contact@etherpad.org)。
加入官方 Etherpad Discord 频道。