mirror of
https://github.com/ether/etherpad-lite.git
synced 2026-07-18 00:57:55 +00:00
* docs: migrate useful wiki content into the VitePress manual (#7990) The GitHub wiki is being retired; documentation should ship with the software. This migrates the still-accurate, non-duplicate wiki pages into the published VitePress site (doc/**/*.md + the sidebar in doc/.vitepress/config.mts) so they are versioned, searchable and portable: - deployment.md: reverse-proxy configs (Nginx/Apache/Caddy/Traefik/ HAProxy) with the WebSocket-upgrade rules, subdirectory hosting via X-Proxy-Path, native HTTPS via the ssl block, a systemd unit, and the Istio manifest (with the Redis-adapter multi-replica caveat). - accessibility.md: editor keyboard shortcuts (verified against ace2_inner.ts / broadcast_slider.ts / pad_editbar.ts), toolbar navigation, NVDA notes. - faq.md: install methods, URL-path reference, listing/deleting pads (API-first), backup/restore, and history pruning. - development.md: source-tree tour, the pad<->format conversion pipeline, the internal DB API, and the Fontello toolbar-icon workflow. - database.md: the key/value schema plus connecting MySQL/PostgreSQL/Redis backends and a pgloader MySQL->PostgreSQL migration (database docs were previously absent from the VitePress site). Every page was checked against the current source before inclusion: corrected the apt instructions to the live signed repo (stable/main, signed-by key), dropped the unpublished snap, fixed the Redis dbSettings (flat host/port/password or url, not the obsolete client_options), dropped charset from the PostgreSQL example, and removed a phantom getEtherpad API reference. The VitePress site builds cleanly (pnpm run docs:build) with the dead-link checker enabled. Closes #7990 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * docs: add verified hands-on changeset/atext walkthrough (#7990) Migrate the practical Changeset-library tutorial from the wiki into changeset_library.md, rewritten against the current API: unpack(), deserializeOps() (replacing the deprecated opIterator) and new AttributePool() (replacing the removed AttributePoolFactory). Every example output was produced by running the code against the current Changeset.ts / AttributePool.ts, not copied from the wiki. Also fixes a stale ether/etherpad-lite source link. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
204 lines
6.9 KiB
Markdown
204 lines
6.9 KiB
Markdown
# FAQ
|
|
|
|
This page answers common operational questions about running and maintaining
|
|
an Etherpad instance. It collects material previously kept on the project wiki.
|
|
|
|
## How do I install Etherpad?
|
|
|
|
There are several supported ways to install Etherpad. Pick whichever suits your
|
|
environment.
|
|
|
|
### Docker
|
|
|
|
The official image is published to Docker Hub (`etherpad/etherpad`) and to the
|
|
GitHub Container Registry (`ghcr.io/ether/etherpad`) with identical tags.
|
|
|
|
```bash
|
|
docker pull etherpad/etherpad
|
|
docker run -p 9001:9001 etherpad/etherpad
|
|
```
|
|
|
|
See the [Docker chapter](./docker.md) for building personalized images, enabling plugins, and
|
|
configuring office-format import/export.
|
|
|
|
### One-line installer (macOS / Linux / WSL)
|
|
|
|
```bash
|
|
curl -fsSL https://raw.githubusercontent.com/ether/etherpad/master/bin/installer.sh | sh
|
|
```
|
|
|
|
On Windows (PowerShell):
|
|
|
|
```powershell
|
|
irm https://raw.githubusercontent.com/ether/etherpad/master/bin/installer.ps1 | iex
|
|
```
|
|
|
|
The installer clones Etherpad, installs dependencies and builds the frontend.
|
|
Set `ETHERPAD_RUN=1` to also start it once the install finishes.
|
|
|
|
### apt repository (Debian / Ubuntu)
|
|
|
|
Etherpad publishes a signed APT repository (`stable` channel). Import the signing
|
|
key, add the repository and install:
|
|
|
|
```bash
|
|
curl -fsSL https://etherpad.org/key.asc \
|
|
| sudo gpg --dearmor -o /usr/share/keyrings/etherpad.gpg
|
|
|
|
echo "deb [signed-by=/usr/share/keyrings/etherpad.gpg] https://etherpad.org/apt stable main" \
|
|
| sudo tee /etc/apt/sources.list.d/etherpad.list
|
|
|
|
sudo apt-get update
|
|
sudo apt-get install etherpad
|
|
```
|
|
|
|
The repository provides `amd64` and `arm64` builds. Etherpad depends on
|
|
Node.js >= 24, so on older distributions you may also need NodeSource's apt
|
|
repository to satisfy that dependency.
|
|
|
|
### From source
|
|
|
|
Etherpad requires [Node.js](https://nodejs.org/) >= 24 and `pnpm`.
|
|
|
|
```bash
|
|
git clone -b master https://github.com/ether/etherpad
|
|
cd etherpad
|
|
pnpm i
|
|
pnpm run build:etherpad
|
|
pnpm run prod
|
|
```
|
|
|
|
Then open `http://localhost:9001`.
|
|
|
|
## What URL paths does Etherpad serve?
|
|
|
|
| Path | Description |
|
|
|------|-------------|
|
|
| `/admin` | Administration dashboard (requires admin login). |
|
|
| `/admin/plugins` | Install, update and remove plugins from the web UI. |
|
|
| `/admin/settings` | Edit `settings.json` from the web UI. |
|
|
| `/p/:padID` | Open (or create) the pad with the given `padID`, e.g. `/p/foo`. |
|
|
| `/p/:padID/timeslider` | Open the pad's history/timeslider view. Append `#N` to jump to a specific revision, e.g. `/p/foo/timeslider#5`. |
|
|
| `/p/:padID/export/:type` | Export the pad in the given format, e.g. `/p/foo/export/html`. Append `?revs=N` to export a specific revision. |
|
|
|
|
Supported export types:
|
|
|
|
- **Native (no extra dependencies):** `txt`, `html`, `etherpad`, `docx`, `pdf`.
|
|
- **Via LibreOffice:** `odt`, `doc`, `rtf` — these require the `soffice` setting
|
|
to point at a LibreOffice executable. See the office-format notes in the
|
|
[Docker chapter](./docker.md).
|
|
|
|
## How do I list all pads?
|
|
|
|
The recommended way is the HTTP API method `listAllPads`, combined with `jq`:
|
|
|
|
```bash
|
|
ETHERPAD_HOST='https://pad.example.com'
|
|
ETHERPAD_API_KEY='...' # the APIKEY.txt file in the Etherpad root
|
|
ETHERPAD_API_VERSION='...' # see https://pad.example.com/api
|
|
|
|
curl -s "${ETHERPAD_HOST}/api/${ETHERPAD_API_VERSION}/listAllPads?apikey=${ETHERPAD_API_KEY}" \
|
|
| jq -r '.data.padIDs[]'
|
|
```
|
|
|
|
For an interactive list with management actions, install the `ep_adminpads2`
|
|
plugin and browse to `/admin/pads`.
|
|
|
|
As a last resort you can query the database directly. The exact query depends on
|
|
your configured backend; pad records use keys of the form `pad:<padID>` and
|
|
`pad:<padID>:revs:<n>`. For example, with SQLite:
|
|
|
|
```bash
|
|
sqlite3 ./var/sqlite.db "select key from store where key like 'pad:%'" \
|
|
| grep -Eo '^pad:[^:]+' \
|
|
| sed -e 's/pad://' \
|
|
| sort -u
|
|
```
|
|
|
|
Prefer the API or admin plugin over direct SQL: the schema is an implementation
|
|
detail and may change.
|
|
|
|
## How do I delete or manage pads?
|
|
|
|
Use the HTTP API `deletePad` method:
|
|
|
|
```bash
|
|
curl -s "${ETHERPAD_HOST}/api/${ETHERPAD_API_VERSION}/deletePad?apikey=${ETHERPAD_API_KEY}&padID=foo"
|
|
```
|
|
|
|
The API also offers `copyPad`, `movePad`, `getRevisionsCount` and more — see the
|
|
[HTTP API chapter](./api/http_api.md).
|
|
|
|
For a web UI, install the `ep_adminpads2` plugin and manage pads from
|
|
`/admin/pads`, where you can search, view and delete pads.
|
|
|
|
The `deletePad` CLI tool is also available for operators:
|
|
|
|
```bash
|
|
pnpm run --filter bin deletePad <padID>
|
|
```
|
|
|
|
## How do I back up and restore pads?
|
|
|
|
### Back up the whole instance
|
|
|
|
All pad data lives in the configured database. Back it up using the tool
|
|
appropriate to your backend (for example `mysqldump` for MySQL/MariaDB,
|
|
`pg_dump` for PostgreSQL, or a file copy of `var/*.db` for the file-based
|
|
`dirty`/`rusty` engines while Etherpad is stopped). A regular, automated dump of
|
|
the database is the canonical backup for a production instance.
|
|
|
|
### Back up a single pad
|
|
|
|
Export the pad over HTTP by appending `/export/<type>` to its URL. Plain text,
|
|
HTML and the round-trippable `etherpad` format are most useful for backups:
|
|
|
|
```bash
|
|
curl -o mypad.txt https://pad.example.com/p/foo/export/txt
|
|
curl -o mypad.html https://pad.example.com/p/foo/export/html
|
|
curl -o mypad.etherpad https://pad.example.com/p/foo/export/etherpad
|
|
```
|
|
|
|
The `etherpad` export preserves the pad's full history and can be re-imported,
|
|
making it the best choice for migrating or archiving an individual pad.
|
|
|
|
### Restore or inspect an old revision
|
|
|
|
Every state the pad has been in is stored in the database, so you can retrieve
|
|
an earlier revision without a separate backup:
|
|
|
|
- Open `/p/:padID/timeslider` to browse the history and find the revision
|
|
number you want.
|
|
- Export a specific revision directly with the `?revs=N` query parameter, e.g.
|
|
`https://pad.example.com/p/foo/export/html?revs=1000`.
|
|
|
|
### Repairing a damaged pad
|
|
|
|
If a pad is corrupt, use the CLI repair tools (`checkPad`, `repairPad`,
|
|
`rebuildPad`) documented in the [CLI chapter](./cli.md). Always back up the database before
|
|
running write operations.
|
|
|
|
## How do I limit history or prune revisions?
|
|
|
|
Etherpad keeps the full revision history of every pad, so the database grows
|
|
over time. To reclaim space, use the pad-compaction CLI tools, which collapse or
|
|
trim revision history for one pad, every pad, or only stale pads:
|
|
|
|
```bash
|
|
# Collapse all history of one pad
|
|
pnpm run --filter bin compactPad <padID>
|
|
|
|
# Keep only the last 50 revisions of one pad
|
|
pnpm run --filter bin compactPad <padID> --keep 50
|
|
|
|
# Compact every pad on the instance
|
|
pnpm run --filter bin compactAllPads
|
|
|
|
# Compact only pads not edited in the last 90 days, keeping the last 50 revisions
|
|
pnpm run --filter bin compactStalePads --older-than 90 --keep 50
|
|
```
|
|
|
|
These tools require `cleanup.enabled = true` in `settings.json` and are
|
|
**destructive** — history is collapsed or trimmed. Export anything you can't
|
|
afford to lose via the pad's `/export/etherpad` route first. The same primitive
|
|
is available over the wire as the `compactPad` HTTP API method. See the [CLI chapter](./cli.md) for full details.
|