DOCS/hub/Installation
Docker & Portainer Stack
The recommended way to run Dylaris Hub is via Docker Compose. This is perfect for Portainer stacks.
Standard Stack (SQLite + Auto-TLS)
This setup is perfect for single-node deployments. The Hub uses a local SQLite database file.
version: '3.8'
services:
hub:
image: ghcr.io/callmebartis/dylaris-hub:latest
container_name: dylaris-hub
restart: always
ports:
- "4000:4000" # Dashboard / API
- "9001:9001" # Internal Link Port
environment:
- PORT=:4000
- INTERNAL_LINK_PORT=:9001
- DB_TYPE=sqlite
- DB_FILE=/data/hub.db
- LICENSE=YOUR_LICENSE_KEY_HERE
# Optional: Set a fixed JWT Secret for stateless setups (restarts won't logout users)
# - JWT_SECRET=your-very-long-secure-random-hex-string
volumes:
- ./hub-data:/data
gate:
image: ghcr.io/callmebartis/dylaris-gate:latest
container_name: dylaris-gate
restart: always
ports:
- "80:80" # HTTP
- "443:443" # HTTPS
- "25565:25565" # Minecraft
- "8080:8080" # Tunnel Ingress (TCP)
- "8081:8081" # API / Health
environment:
- TUNNEL_PORT=:8080
- HEALTH_PORT=:8081
- LICENSE_KEY=YOUR_LICENSE_KEY_HERE
# Gate automatically generates a secure self-signed cert for the tunnel if none provided.
# To use custom certs, mount them and set TLS_CERT_FILE / TLS_KEY_FILE.
# Optional: Standalone Link (if you need to route traffic from this host to the Gate)
link:
image: ghcr.io/callmebartis/dylaris-link:latest
container_name: dylaris-link
restart: always
network_mode: host # Recommended for accessing local services (127.0.0.1) easily
environment:
- LINK_SECRET=YOUR_SECRET_FROM_HUB_INFRASTRUCTURE_TAB
- LOCAL_HOST=127.0.0.1
Enterprise / Stateless Setup (PostgreSQL)
For High Availability (HA) or Cloud-Native deployments (Kubernetes, Docker Swarm), use an external Database and Redis.
version: '3.8'
services:
hub:
image: ghcr.io/callmebartis/dylaris-hub:latest
restart: always
ports:
- "4000:4000"
environment:
- PORT=:4000
# Database Configuration
- DB_TYPE=postgres
- DB_DSN=host=postgres user=dylaris password=secure dbname=hub port=5432 sslmode=disable
# Redis Configuration (Required for Clustering)
- REDIS_ADDR=redis:6379
- REDIS_PASS=redis-secure-pass
# Secrets (Required for Stateless Mode)
- JWT_SECRET=long-hex-string-generated-via-openssl
- LICENSE=YOUR_LICENSE_KEY
depends_on:
- postgres
- redis
postgres:
image: postgres:15-alpine
environment:
POSTGRES_USER: dylaris
POSTGRES_PASSWORD: secure
POSTGRES_DB: hub
volumes:
- pg-data:/var/lib/postgresql/data
redis:
image: redis:alpine
command: redis-server --requirepass redis-secure-pass
volumes:
- redis-data:/data
volumes:
pg-data:
redis-data:
ID: 9LAST UPDATED: 3/1/2026