Update multi-server deployment docs for simplified architecture

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.
This commit is contained in:
Kelin
2026-02-08 15:13:44 -05:00
parent 9e71d202cb
commit 63b2ae8fe0

View File

@@ -4,11 +4,11 @@
This guide explains the **current multi-server architecture** where:
- **Core Server**: Handles external traffic (ports 80/443); runs DuckDNS, Traefik (multi-provider), Authelia
- **Remote Servers**: Run their own Traefik (local-only) and Sablier (local containers)
- **No Docker API**: Servers communicate via HTTP/HTTPS; no TLS Docker API connections needed
- **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. For the legacy centralized Sablier approach, see the git history.
> **Note**: This document describes the current simplified architecture. Additional servers are "headless" - they expose ports directly without local reverse proxy.
## Architecture Diagram
@@ -31,12 +31,16 @@ This guide explains the **current multi-server architecture** where:
80/443 │ │ │
▼ ▼ ▼
┌─────────────────────────────────────────┐
REMOTE SERVER (e.g., Pi)
│ ┌──────────┐ ┌──────────┐ ┌───────┐ │
│ │ Traefik │ │ Sablier │ │ Media │ │
│ │ (local) │ │ (local) │ │ Apps │ │
└──────────┘ └──────────┘ └───────┘
└─────────────────────────────────────────┘
ADDITIONAL SERVER (e.g., Pi) │
│ ┌──────────┐ ┌───────┐ ┌──────────┐ │
│ │ Sablier │ │ Media │ │ Exposed │
│ │ (lazy │ │ Apps │ │ Ports │ │
│ loading) │ │ │ │ 5001, │
│ └──────────┘ └───────┘ │ 8085... │ │
└────────────────────────────┼──────────┘
Direct port access
(no local reverse proxy)
```
# Deployment Process
@@ -44,7 +48,7 @@ This guide explains the **current multi-server architecture** where:
## Step 1: Deploy Core Server
On the core server, run `ez-homelab.sh`
* Use Option 1 to Install Prerequesites
* Use Option 1 to Install Prerequisites
* Then Option 2 to Deploy Core Server
This deploys: DuckDNS, Traefik(core), Authelia, Dashboards & Infrastructure
@@ -55,16 +59,20 @@ From Dockge you can start/stop any of the stacks or containers.
- Forward ports 80 & 443 from your router
- Only this server requires port forwarding
## Step 2: Deploy Remote Server
## Step 2: Deploy Additional Server
On the remote server, run `ez-homelab.sh`
* Use Option 1 to Install Prerequesites
* Then Option 3 to Deploy Remote Server
On the additional server, run `ez-homelab.sh`
* Use Option 1 to Install Prerequisites
* Then Option 3 to Deploy Additional Server
This deploys: Traefik(local), Dashboards & Infrastructure
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
@@ -72,27 +80,34 @@ From Dockge you can start/stop any of the stacks or containers.
1. **User accesses** `https://sonarr.yourdomain.duckdns.org`
2. **Core Traefik** receives request:
- Checks Authelia for authentication (SSO)
- Routes to remote server: `http://192.168.1.100:8989`
3. **Remote Traefik** receives forwarded request:
- Discovers service is stopped (lazy loaded)
- Forwards to local Sablier
4. **Remote Sablier**:
- Starts Sonarr container
- Shows loading page
- Redirects to service when ready
5. **Service responds** through the chain back to user
- Routes to additional server: `http://192.168.1.100:8989` (via YAML config)
3. **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
4. **Service responds** directly back to core Traefik, then to user
### Service Registration
When you deploy an additional server:
1. Services are deployed with exposed ports (no Traefik labels)
2. Core server creates YAML route files pointing to IP:PORT
3. Core Traefik loads routes automatically
4. Services become accessible at `https://servicename.hostname.yourdomain.duckdns.org`
### Key Benefits
- **Independent Management**: Each server controls its own containers
- **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 the same server
- **Local Lazy Loading**: Sablier manages containers on each server independently
## Performance Considerations
- **Latency**: One additional hop (core → remote) adds minimal latency
- **Resource Usage**: Each server runs lightweight Traefik + Sablier (~100MB combined)
- **Scalability**: Can add unlimited remote servers without complexity
- **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)