Excalidraw with real-time collaboration support in a single Docker container. Includes frontend, collaboration server (room), and Nginx as reverse proxy.
Container (port 6001)
├── Nginx (reverse proxy)
├── Excalidraw Frontend (static files)
└── Excalidraw Room Server (WebSocket on internal port 3002)
| Variable | Description | Default |
|---|---|---|
EXCALIDRAW_URL |
Public URL where Excalidraw will be accessed. Used to configure the collaboration WebSocket. | http://localhost |
The WebSocket URL is derived automatically:
https://example.com→wss://example.comhttp://example.com→ws://example.com
docker build -t excalidraw-unified .
docker run -d \
-p 6001:6001 \
-e EXCALIDRAW_URL=https://draw.example.com \
excalidraw-unifiedThe Docker build uses Node.js 24 LTS and resolves Excalidraw's latest v* release tag at build time. To pin a specific version or test another ref, pass build args explicitly:
docker build \
--build-arg EXCALIDRAW_REF=<commit-or-tag> \
--build-arg EXCALIDRAW_ROOM_REF=<commit-or-tag> \
-t excalidraw-unified .- Create a new application of type Dockerfile
- Configure the Git repository or upload the Dockerfile
- In Environment Variables, add:
EXCALIDRAW_URL=https://your-domain.com - Configure the domain pointing to port
6001 - Deploy
services:
excalidraw:
build: .
ports:
- "6001:6001"
environment:
- EXCALIDRAW_URL=https://draw.example.com
restart: unless-stoppedThe container exposes a health check endpoint at /health on port 6001.
This project only packages the official projects: