Plainwire Self-Hosting2.0

Troubleshooting

Docker build fails with cmake: command not found#

Plainwire 2.0 builds erlcass. Add CMake and native dependencies to the builder stage:

build-essential cmake pkg-config git ca-certificates libssl-dev libuv1-dev zlib1g-dev

Scylla itself does not need to be running for the driver to compile.

Plainwire boots but Redis appears unused#

Check:

docker compose ps redis
grep '^PLAINWIRE_REDIS_ENABLED=' plainwire.env
docker compose logs app | grep -i redis

Redis is optional, so the app can boot while Redis is unavailable.

Messages work but calls fail between networks#

Test TURN. Force PLAINWIRE_ICE_TRANSPORT_POLICY=relay, verify relay candidates, then restore all.

Same-LAN calls work, remote calls fail#

That strongly suggests NAT/TURN/firewall trouble rather than Plainwire messaging trouble.

Upload returns 413#

The reverse proxy body limit is smaller than Plainwire's upload limit. Fix the proxy route limit.

Public URL works but WebSocket fails#

Check reverse-proxy WebSocket support, origin configuration, forwarded headers, and TLS. Verify the backend is not directly exposed with conflicting proxy-trust settings.

Scylla enabled but messages still use PostgreSQL#

PLAINWIRE_SCYLLA_ENABLED=true only enables Scylla connectivity. PLAINWIRE_MESSAGE_BACKEND decides authority. postgres still uses PostgreSQL for messages.

Scylla migration is behind#

Inspect:

./scripts/storage-migrate status
./scripts/storage-migrate flush-outbox
./scripts/storage-migrate shadow 500

Do not switch to scylla until backfill and verification are clean.

Database password changed and app fails#

Update the application secret and database role together, then restart. Confirm no stale container/environment file is still being used.

Plainwire Self-Hosting Handbook · verified against Plainwire 2.0.0 · 2026-09-17