Skip to main content

Docker Deployment

Gatwy is designed as a Docker-first application. Everything — app server, SQLite database, and TLS — is included in a single ~150 MB container image.

Image

ghcr.io/kotoxie/gatwy:latest

Available on GitHub Container Registry.

Tags

TagDescription
latestLatest stable release
x.y.zSpecific version (e.g., 0.13.0)

Minimal Deployment

docker run -d \
--name gatwy \
--restart unless-stopped \
-p 7443:7443 \
-v ./data:/app/data \
-e GATWY_ENCRYPTION_KEY=$(openssl rand -hex 32) \
ghcr.io/kotoxie/gatwy:latest

Open https://<YOUR_IP>:7443 to complete setup.

services:
gatwy:
image: ghcr.io/kotoxie/gatwy:latest
container_name: gatwy
restart: unless-stopped
ports:
- '7443:7443'
volumes:
- ./data:/app/data
environment:
- GATWY_ENCRYPTION_KEY=your-64-char-hex-key # openssl rand -hex 32

Production Compose (Pinned Version)

services:
gatwy:
image: ghcr.io/kotoxie/gatwy:0.13.0
container_name: gatwy
restart: unless-stopped
ports:
- '7443:7443'
volumes:
- ./data:/app/data
- ./certs:/app/certs:ro
environment:
- GATWY_ENCRYPTION_KEY=your-64-char-hex-key
- TLS_CERT_PATH=/app/certs/cert.pem
- TLS_KEY_PATH=/app/certs/key.pem
healthcheck:
test: ["CMD", "curl", "-fk", "https://localhost:7443/health"]
interval: 30s
timeout: 5s
retries: 3

Resource Requirements

ResourceMinimumRecommended
CPU1 core2+ cores
Memory256 MB512 MB+
Disk1 GB10+ GB (with recordings)

Security Notes

  • Gatwy runs as a non-root user inside the container (drops to node via gosu)
  • Set GATWY_ENCRYPTION_KEY in production — without it, an auto-generated key file is used with a warning

Updating

docker compose pull && docker compose up -d

Data is preserved in the mounted ./data directory across updates.

Building from Source

git clone https://github.com/kotoxie/gatwy
cd Gatwy

# With Docker
docker compose up --build -d

# Without Docker (Node.js 20+ required)
npm install && npm run build && npm start