Self-Hosting
Run Sylo on your own infrastructure. One command, fully self-contained.
Requirements
Section titled “Requirements”- A server with Docker installed (any cloud provider or bare metal)
- A domain name pointed to your server (for automatic TLS)
Quick start
Section titled “Quick start”git clone https://github.com/runplex/sylo.gitcd sylo/deploycp .env.example .env # edit with your valuesdocker compose up -dYour Sylo instance is now running at https://your-domain.com.
Configuration
Section titled “Configuration”Edit .env:
# Your domain — Caddy auto-provisions TLS via Let's EncryptDOMAIN=sylo.example.com
# Generate: node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"ENCRYPTION_KEY=your-64-char-hex-key
# Generate: node -e "console.log(require('crypto').randomBytes(32).toString('base64'))"BETTER_AUTH_SECRET=your-base64-secret
# Optional: Google OAuth for dashboard loginGOOGLE_CLIENT_ID=GOOGLE_CLIENT_SECRET=What’s inside
Section titled “What’s inside”docker compose up -d ├── caddy — reverse proxy + auto TLS (Let's Encrypt) ├── sylo — platform API + tunnel server + mitmproxy ├── postgres — session store + audit log └── redis — session cache (fast reads)| Port | Service | Purpose |
|---|---|---|
| 80 | Caddy | HTTP → HTTPS redirect |
| 443 | Caddy | Dashboard + API (TLS) |
| 8443 | Tunnel server | Tunnel connections (own TLS) |
Port 8443 is exposed directly (not through Caddy) for the tunnel server.
Google OAuth setup
Section titled “Google OAuth setup”- Go to Google Cloud Console
- Create an OAuth 2.0 Client ID
- Add
https://your-domain.com/auth/callback/googleas a redirect URI - Set
GOOGLE_CLIENT_IDandGOOGLE_CLIENT_SECRETin.env
Data persistence
Section titled “Data persistence”| Volume | Stores |
|---|---|
postgres-data | Sessions, audit logs, credentials, workspaces |
redis-data | Session cache (rebuilds from Postgres on restart) |
sylo-data | mitmproxy CA certificate |
caddy-data | TLS certificates (Let’s Encrypt) |
Updating
Section titled “Updating”cd sylogit pulldocker compose -f deploy/docker-compose.yml build sylodocker compose -f deploy/docker-compose.yml up -d syloBackup & restore
Section titled “Backup & restore”# Backupdocker compose exec postgres pg_dump -U postgres sylo > backup.sql
# Restoredocker compose exec -T postgres psql -U postgres sylo < backup.sqlUsing your instance
Section titled “Using your instance”Point the SDK at your domain:
const sylo = new SyloClient({ apiUrl: "https://sylo.example.com", developerSecret: "sylo_sk_...",});Sandboxes connect to sylo.example.com:8443 for tunnel mode.