Changes: - Remove references to local Traefik on additional servers - Update architecture diagram to show direct port exposure - Clarify that additional servers are 'headless' (no local reverse proxy) - Update traffic flow to show direct routing from core to services - Update performance metrics (50MB vs 100MB, 2min vs 5-10min deployment) - Rename 'Remote Server' to 'Additional Server' for consistency The docs now accurately reflect the current simplified architecture where additional servers only run Sablier and expose ports directly.
5.7 KiB
5.7 KiB
Multi-Server Deployment with On-Demand Services
Overview
This guide explains the current multi-server architecture where:
- Core Server: Handles external traffic (ports 80/443); runs DuckDNS, Traefik (multi-provider), Authelia
- Additional Servers: Run Sablier (lazy loading) with direct port exposure; no local Traefik
- Manual Routing: Core Traefik routes to IP:PORT combinations via YAML configuration files
- Independent Management: Each server manages its own containers with lazy loading
Note
: This document describes the current simplified architecture. Additional servers are "headless" - they expose ports directly without local reverse proxy.
Architecture Diagram
┌─────────────────────────────────────────────────────────────────┐
│ CORE SERVER │
│ ┌────────────┐ ┌──────────┐ ┌──────────┐ ┌──────────────┐ │
│ │ DuckDNS │ │ Traefik │ │ Authelia │ │ Core Services │ │
│ │ (SSL DNS) │ │ (multi- │ │ (SSO) │ │ (local) │ │
│ │ │ │ provider)│ │ │ │ │ │
│ └────────────┘ └────┬─────┘ └──────────┘ └──────────────┘ │
│ │ │
│ ┌──────────────┼──────────────┐ │
│ │ Routes: │ │ │
│ │ • Local │ (labels) │ │
│ │ • Remote │ (YAML files)│ │
└──────────┼──────────────┼──────────────┼────────────────────────┘
│ │ │
Ports │ HTTP/HTTPS │ │
80/443 │ │ │
▼ ▼ ▼
┌─────────────────────────────────────────┐
│ ADDITIONAL SERVER (e.g., Pi) │
│ ┌──────────┐ ┌───────┐ ┌──────────┐ │
│ │ Sablier │ │ Media │ │ Exposed │ │
│ │ (lazy │ │ Apps │ │ Ports │ │
│ │ loading) │ │ │ │ 5001, │ │
│ └──────────┘ └───────┘ │ 8085... │ │
└────────────────────────────┼──────────┘
│
Direct port access
(no local reverse proxy)
Deployment Process
Step 1: Deploy Core Server
On the core server, run ez-homelab.sh
- Use Option 1 to Install Prerequisites
- Then Option 2 to Deploy Core Server
This deploys: DuckDNS, Traefik(core), Authelia, Dashboards & Infrastructure
From Dockge you can start/stop any of the stacks or containers.
Port Forwarding:
- Forward ports 80 & 443 from your router
- Only this server requires port forwarding
Step 2: Deploy Additional Server
On the additional server, run ez-homelab.sh
- Use Option 1 to Install Prerequisites
- Then Option 3 to Deploy Additional Server
This deploys: Sablier (lazy loading), Dashboards & Infrastructure
From Dockge you can start/stop any of the stacks or containers.
No Port Forwarding Required:
- Services are accessed through core server
- Additional servers are "headless" - no external ports needed
How It Works
Traffic Flow
- User accesses
https://sonarr.yourdomain.duckdns.org - Core Traefik receives request:
- Checks Authelia for authentication (SSO)
- Routes to additional server:
http://192.168.1.100:8989(via YAML config)
- Additional server receives direct HTTP request:
- Service container receives request on exposed port
- If stopped, Sablier starts the container
- Shows loading page while container starts
- Service responds directly back to core Traefik, then to user
Service Registration
When you deploy an additional server:
- Services are deployed with exposed ports (no Traefik labels)
- Core server creates YAML route files pointing to IP:PORT
- Core Traefik loads routes automatically
- Services become accessible at
https://servicename.hostname.yourdomain.duckdns.org
Key Benefits
- Simplified Architecture: No local Traefik on additional servers
- Direct Port Access: Services expose ports directly (no reverse proxy overhead)
- Centralized Access: All services accessed through one domain
- Unified SSO: Authelia on core server protects all services
- Local Lazy Loading: Sablier manages containers on each server independently
Performance Considerations
- Latency: Direct routing (core → service) minimizes hops
- Resource Usage: Additional servers run only Sablier (~50MB) - no Traefik needed
- Scalability: Can add unlimited additional servers without complexity
- Network: Internal 1Gbps+ recommended between servers
- Deployment Speed: Additional servers deploy in ~2 minutes (vs 5-10 with local Traefik)