Gryt

Deployment Guide

Deploy Gryt locally or in production

Deployment options

Production requirements

These apply to all deployment methods.

  • HTTPS/WSS required — browsers require a secure context for WebRTC microphone access.
  • UDP media ports — the SFU needs a dedicated UDP port range reachable from the internet (default 10000-10019/udp).
  • JWT_SECRET — used by the signaling server for session tokens. Generate with openssl rand -base64 48.

Quick comparison

MethodBest forTLSNeeds open ports?
Embedded (desktop app)LAN parties, quick hosting, zero setupN/A (local)No (LAN only)
Docker ComposeSelf-hosting on a VPS or bare metalAdd Caddy/NginxYes (443 TCP + UDP)
Windows (no Docker)LAN parties, local teams, Windows PCsManual / reverse proxyYes
Cloudflare TunnelHosting behind NAT / no static IPAutomaticUDP only
Kubernetes (Helm)Scaled / multi-node clusterscert-managerYes

Download two files, edit .env, and run docker compose up -d — no repo clone needed:

mkdir gryt && cd gryt
curl -Lo docker-compose.yml https://raw.githubusercontent.com/Gryt-chat/gryt/main/ops/deploy/compose/prod.yml
curl -Lo .env https://raw.githubusercontent.com/Gryt-chat/gryt/main/ops/deploy/compose/.env.example
# Edit .env — at minimum set a real JWT_SECRET:
#   openssl rand -base64 48
docker compose up -d

See the full Docker Compose guide for configuration, TLS, upgrades, and production hardening.

Kubernetes (Helm)

helm install gryt ./ops/helm/gryt -f ops/helm/gryt/examples/production-values.yaml

All images are pulled from ghcr.io/gryt-chat/*.

Docker images

All services are published to GitHub Container Registry under the gryt-chat org:

ServiceImage
Web Clientghcr.io/gryt-chat/client
Signaling Serverghcr.io/gryt-chat/server
SFU (Media)ghcr.io/gryt-chat/sfu
Landing Siteghcr.io/gryt-chat/site
Documentationghcr.io/gryt-chat/docs

Each image is tagged with latest and semver tags (e.g. 1.2.3, 1.2, 1). Multi-arch builds (amd64 + arm64).

Ports

PortProtoService
443TCPTLS termination (proxy / tunnel edge)
443UDPSFU WebRTC media (if using ICE_UDP_MUX_PORT=443)
3666TCPWeb client (dev / direct access)
5000TCPSignaling server
5005TCPSFU WebSocket
10000-10019UDPSFU WebRTC media (if not using UDP mux; must be public)

Health checks

All services expose a health endpoint:

curl http://localhost:5000/health   # server
curl http://localhost:5005/health   # sfu
curl http://localhost:3666/health   # client

Monitoring

Both Server and SFU expose Prometheus metrics at /metrics. An optional Prometheus + Grafana stack is included — see the Monitoring guide.

Interested in offering Gryt hosting?

We're looking to partner with hosting and infrastructure providers who want to offer managed Gryt instances to their customers. If you're a server provider interested in adding Gryt to your platform, reach out at [email protected].

On this page