Network: Internet β Cloudflare β Pi-1 (LB Only) β Tailscale Mesh β Pi-2 & Pi-3 (Mixed)
Pi-1:
- Cloudflare tunnel
- Caddy Load Balancer (Routes traffic)
Pi-2 thru N:
- Run applications
graph TB
%% External traffic
Users[π₯ Users]
DevUsers[π¨βπ» Dev Users]
%% Cloudflare layer
CF[βοΈ Cloudflare Edge<br/>β’ WAF + DDoS Protection<br/>β’ SSL Termination<br/>β’ Load Balancing]
%% DNS routing
ProdDNS[π api.yourdomain.com]
DevDNS[π dev-api.yourdomain.com]
%% Pi-1 (Edge + Load Balancer)
Pi1[π§ Pi-1 - Edge Node<br/>Location A<br/>β’ Cloudflare Tunnel<br/>β’ Caddy Load Balancer<br/>β’ Tailscale: 100.64.1.1]
%% Tailscale mesh network
subgraph Tailnet[π Tailscale Mesh Network - Encrypted WireGuard]
direction TB
TailscaleNode1[100.64.1.1<br/>Pi-1]
TailscaleNode2[100.64.1.2<br/>Pi-2]
TailscaleNode3[100.64.1.3<br/>Pi-3]
TailscaleNode1 -.-> TailscaleNode2
TailscaleNode1 -.-> TailscaleNode3
TailscaleNode2 -.-> TailscaleNode3
end
%% Pi-2 (Worker)
Pi2[πΌ Pi-2 - Worker Node<br/>Location A<br/>β’ Prod App :8000<br/>β’ Dev App :8001<br/>β’ Tailscale: 100.64.1.2]
%% Pi-3 (Worker)
Pi3[πΌ Pi-3 - Worker Node<br/>Location B<br/>β’ Prod App :8000<br/>β’ Dev App :8001<br/>β’ Tailscale: 100.64.1.3]
%% Application containers
subgraph Pi2Apps[Pi-2 Applications]
Pi2Prod[π¦ Prod Container<br/>Port 8000<br/>NODE_ENV=production]
Pi2Dev[π¦ Dev Container<br/>Port 8001<br/>NODE_ENV=development]
end
subgraph Pi3Apps[Pi-3 Applications]
Pi3Prod[π¦ Prod Container<br/>Port 8000<br/>NODE_ENV=production]
Pi3Dev[π¦ Dev Container<br/>Port 8001<br/>NODE_ENV=development]
end
%% Traffic flow
Users --> ProdDNS
DevUsers --> DevDNS
ProdDNS --> CF
DevDNS --> CF
CF -->|Encrypted Tunnel| Pi1
%% Load balancer routing
Pi1 -->|api.yourdomain.com<br/>β :8000| TailscaleNode2
Pi1 -->|api.yourdomain.com<br/>β :8000| TailscaleNode3
Pi1 -->|dev-api.yourdomain.com<br/>β :8001| TailscaleNode2
Pi1 -->|dev-api.yourdomain.com<br/>β :8001| TailscaleNode3
%% Tailscale to Pi connections
TailscaleNode2 --> Pi2
TailscaleNode3 --> Pi3
%% Pi to container connections
Pi2 --> Pi2Apps
Pi3 --> Pi3Apps
%% Styling
classDef cloudflare fill:#f96,stroke:#333,stroke-width:2px,color:#fff
classDef pi fill:#9f9,stroke:#333,stroke-width:2px
classDef worker fill:#bbf,stroke:#333,stroke-width:2px
classDef app fill:#ffd,stroke:#333,stroke-width:2px
classDef tailscale fill:#e1f5fe,stroke:#01579b,stroke-width:2px
classDef dns fill:#fff3e0,stroke:#ef6c00,stroke-width:2px
class CF cloudflare
class Pi1 pi
class Pi2,Pi3 worker
class Pi2Prod,Pi2Dev,Pi3Prod,Pi3Dev app
class Tailnet,TailscaleNode1,TailscaleNode2,TailscaleNode3 tailscale
class ProdDNS,DevDNS dns