Files
Sterister 75008b623a
Some checks failed
Test / test (push) Has been cancelled
docs: M-Hard 9-11 — README, examples, CI, benchmarks, migration guide
M-Hard 9: Documentation + examples
- README.md, SECURITY.md, THREAT-MODEL.md
- 5 runnable examples: basic conversation, prekey server,
  WebSocket tunnel, identity verification, Dokploy deployment

M-Hard 10: CI + publishing + benchmarks
- GitHub Actions: test workflow with PostgreSQL service container
- GitHub Actions: publish workflow for npm releases on git tags
- Benchmark suite (bench/run.ts) with markdown output
- LICENSE (MIT), CHANGELOG.md, CONTRIBUTING.md

M-Hard 11: Migration guide
- MIGRATION.md with three-phase rollout strategy
- Concrete examples for replacing static AES tunnels
- Concrete examples for per-device push notification migration
- Sections for Orchestrator and Nova migrations

Benchmark highlights:
- AES-256-GCM: ~100K ops/sec
- Encrypt+decrypt roundtrip: ~17K ops/sec
- X3DH handshake: ~165 ops/sec (hardware acceleration limited)
- Compute fingerprint: ~76K ops/sec

All 11 M-Hard milestones complete. 193 tests passing, 0 failures.
Shade is production-ready.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-10 17:58:30 +02:00

1.4 KiB

Example 05: Dokploy / Docker Deployment

Production-ready docker-compose configuration for deploying the Shade Prekey Server to Dokploy or any Docker host.

What's here

  • docker-compose.yml — single-service deployment with persistent SQLite
  • docker-compose.postgres.yml — alternative with PostgreSQL backend
  • Persistent volume for the SQLite database
  • Health checks, restart policy, structured logging

Deploy

# SQLite (zero-config, recommended for small deployments)
docker compose up -d

# PostgreSQL (for shared databases or HA)
docker compose -f docker-compose.postgres.yml up -d

After deployment, the prekey server is reachable at http://localhost:3900:

# Health check
curl http://localhost:3900/health

# Metrics
curl http://localhost:3900/metrics

# Anonymous bundle fetch (works without auth)
curl http://localhost:3900/v1/keys/bundle/some-address

Reverse proxy

For TLS termination, put the prekey server behind a reverse proxy like Caddy or Traefik. Dokploy handles this automatically when you set the domain in the project settings.

Backups

The persistent volume shade-data contains the SQLite database. Back it up with:

docker run --rm -v shade-data:/data -v $(pwd):/backup alpine \
  tar czf /backup/shade-data-$(date +%Y%m%d).tar.gz /data

For PostgreSQL, use standard pg_dump against the postgres service.