Etherpad
Etherpad: A modern really-real-time collaborative document editor.
Alternative to: google docs, hackmd, quip
Etherpad is a real-time collaborative editor for documents that matter. Every keystroke is attributed to its author, every revision is preserved, and a timeslider lets you scrub through a document's entire history. It runs entirely on your own server, with no telemetry, and supports hundreds of plugins.
Etherpad Docker Compose example
Self-host Etherpad on your own server, homelab, or VPS starting from this Docker Compose example.
It runs Etherpad in Docker containers using the official etherpad/etherpad:latest, postgres:15-alpine images, with persistent volumes and automatic restarts preconfigured.
Review the environment variables and adjust them to your setup, save the file as compose.yml (or docker-compose.yml), and start the stack with docker compose up -d.
services:
app:
image: etherpad/etherpad:latest
user: "5001:0"
tty: true
stdin_open: true
restart: unless-stopped
depends_on:
- postgres
volumes:
- plugins:/opt/etherpad-lite/src/plugin_packages
- etherpad-var:/opt/etherpad-lite/var
environment:
NODE_ENV: "production"
# Password for the built-in admin panel at /admin (username: admin).
ADMIN_PASSWORD: "changeme"
DB_TYPE: "postgres"
DB_HOST: "postgres"
DB_PORT: "5432"
DB_NAME: "etherpad"
DB_USER: "admin"
# Password for the PostgreSQL database (must match POSTGRES_PASSWORD).
DB_PASS: "changeme"
DB_CHARSET: "utf8mb4"
# Initial text of a newly created pad. Must be non-empty in current Etherpad.
DEFAULT_PAD_TEXT: "Welcome to Etherpad!"
# Set to true to stop recording client IP addresses in the logs.
DISABLE_IP_LOGGING: "false"
SOFFICE: "null"
# Set to true when running behind a trusted reverse proxy that sets X-Forwarded-* headers.
TRUST_PROXY: "true"
postgres:
image: postgres:15-alpine
restart: unless-stopped
volumes:
- postgres_data:/var/lib/postgresql/data
environment:
POSTGRES_DB: "etherpad"
POSTGRES_USER: "admin"
# Password for the PostgreSQL database (must match DB_PASS).
POSTGRES_PASSWORD: "changeme"
PGDATA: "/var/lib/postgresql/data/pgdata"
volumes:
plugins:
etherpad-var:
postgres_data:
Values set to changeme are required — replace them with your own
values before starting Etherpad.
Prefer a managed setup? WinterFlow installs, configures, and updates Etherpad for you using this same Docker Compose configuration.