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
| Tag | Description |
|---|---|
latest | Latest stable release |
x.y.z | Specific 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.
Docker Compose (Recommended)
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
| Resource | Minimum | Recommended |
|---|---|---|
| CPU | 1 core | 2+ cores |
| Memory | 256 MB | 512 MB+ |
| Disk | 1 GB | 10+ GB (with recordings) |
Security Notes
- Gatwy runs as a non-root user inside the container (drops to
nodeviagosu) - Set
GATWY_ENCRYPTION_KEYin 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