etherpad-lite:基于 Web 技术的实时协作编辑器项目

Etherpad: A modern really-real-time collaborative document editor.

分支1Tags0
文件最后提交记录最后更新时间
Feat/frontend vitest (#6469)1 年前
bump version1 年前
bump version1 年前
Bump the dev-dependencies group across 1 directory with 22 updates (#6725)1 年前
bump version1 年前
feat(pad-settings): added possibility to delete pad by the creator (#6730)1 年前
Added new database rustydb (#6632)1 年前
Added new command to setup etherpad. Fixed Dockerfile1 年前
Added editorconfig configuration (#6347)2 年前
Fixed docker compose (#6337)2 年前
Fixed docker compose (#6337)2 年前
tests: Microsoft Windows Server CI (#4791)5 年前
Feat/oauth2 (#6281): Added oauth to API paths2 年前
Rename lgtm.yml to .lgtm.yml5 年前
Added pnpm (#6148)2 年前
cleanup after workspace refactoring (#6174)2 年前
chore(changelog): Added changelog for version 2.2.61 年前
Update CONTRIBUTING.md4 年前
fix github plugin installation (#6584)1 年前
Update LICENSE12 年前
Simple Readme documentation (#6729)1 年前
Create SECURITY.md5 年前
Update docker-compose.dev.yml (#6654)1 年前
Update docker-compose.yml (#6655)1 年前
bump version1 年前
feat(pad-settings): added possibility to delete pad by the creator (#6730)1 年前
Feat/oauth2 (#6281): Added oauth to API paths2 年前
Add code for revision cleanup (#6442)1 年前
Add code for revision cleanup (#6442)1 年前
Added pnpm (#6148)2 年前
restructure: move bin/ and tests/ to src/5 年前

Etherpad:一款面向网络的实时协作编辑器

Etherpad 动画演示

关于

Etherpad 是一款可扩展至数千名实时用户的实时协作编辑器。它提供完整的数据导出功能,并在您自己的服务器上运行,受您自己的控制。

体验一下

Wikimedia 提供了一个公共的 Etherpad 实例供您试用,或者您可以使用另一个公共 Etherpad 实例来查看其他功能

项目状态

我们正在寻找维护者,并有一些资金可供使用。如果您能够提供帮助,请联系 John McLear。

代码质量

代码质量

测试

后端测试 模拟负载 速率限制 Docker 文件 前端管理员测试,由 Sauce Labs 提供支持 前端测试,由 Sauce Labs 提供支持 Sauce 测试状态 Windows 构建

参与度

Docker Pulls Discord Etherpad 插件 语言 翻译覆盖率

安装

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 系统要求

  1. nodejs.org 下载最新的 Node.js 运行环境。
  2. 安装 pnpm:执行 npm install -g pnpm(可能需要管理员权限)。
  3. 克隆仓库:执行 git clone -b master
  4. 执行 pnpm i 安装依赖。
  5. 执行 pnpm run build:etherpad 进行构建。
  6. 执行 pnpm run prod 启动服务。
  7. 在浏览器中访问 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文件夹中运行以下命令进行升级:

  1. 停止正在运行的所有Etherpad实例(手动、systemd...)
  2. 获取当前版本
git -P tag --contains
  1. 列出可用的版本
git -P tag --list "v*" --merged
  1. 选择版本
git checkout v2.2.5 
git switch -c v2.2.5
  1. 升级 Etherpad 功能
./bin/run.sh
  1. 使用 [CTRL-C] 停止程序
  2. 重新启动你的 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.jsonusers 部分启用了认证,那么将明文密码存储为哈希值是一个良好的安全实践。如果你正在运行一个生产环境,这一点尤为重要。

请安装 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 频道

许可

Apache License v2

项目介绍

Etherpad: A modern really-real-time collaborative document editor.

定制我的领域