BARTIS.DEV
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