Some checks failed
Test / test (push) Has been cancelled
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>
49 lines
1.4 KiB
Markdown
49 lines
1.4 KiB
Markdown
# 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
|
|
|
|
```bash
|
|
# 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`:
|
|
|
|
```bash
|
|
# 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:
|
|
|
|
```bash
|
|
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.
|