Files
public/docs/architecture-overview.md
T
thesabear 20f39f3b6d docs: add architecture, IaC pipeline, and disaster recovery write-ups
Completes the docs/ set - all 16 systems now have a full deep-dive
page in the diagram+callout+table style. Architecture overview covers
the 4 trust boundaries and 2 traffic planes; IaC pipeline is a fresh
Packer->Terraform->Ansible writeup replacing the stale old-content/
snapshot; disaster recovery covers the 3 independent backup layers
and the deliberately decoupled OS/app upgrade systems.
2026-08-22 07:38:06 +03:00

3.8 KiB

📐 Architecture Overview

Note

The stable, directional laws governing how traffic moves through the fleet — re-verified against live infrastructure, not assumed from older documentation. Two real corrections were caught and fixed the last time this was checked, which is exactly the point of re-verifying rather than trusting a prior write-up forever.

Dependency graph

flowchart TD
    Internet(["Internet"]) --> Edge["Edge Firewall<br/>NAT · public reverse proxy · NTP · DHCP"]
    Edge --> LAN["LAN"]

    LAN --> DNS["Internal DNS"]
    LAN --> Vault["Vault"]
    DNS --> Vault

    Vault --> Apps["App Host<br/>~40 stacks"]
    LAN --> FileServer["File Server"]
    DNS --> FileServer
    Vault --> Automation["Automation Host"]
    LAN --> Automation

    Apps --> InternalProxy["Internal reverse-proxy zone"]
    Apps --> SSO["SSO"]

    Automation --> Gitea["Git hosting<br/>internal + public mirror"]

    Vault --> EdgeProxy["User-facing reverse proxy<br/>mTLS"]
    DNS --> EdgeProxy
    Apps -.proxied by.-> EdgeProxy
    SSO -.auth gate via.-> EdgeProxy

    Apps -.reports to.-> Monitoring["Monitoring"]
    Automation -.reports to.-> Monitoring
    FileServer -.reports to.-> Monitoring
    EdgeProxy -.reports to.-> Monitoring
    Vault -.reports to.-> Monitoring
    DNS -.reports to.-> Monitoring

    Apps -.reports to.-> Wazuh["Security Monitoring"]
    Automation -.reports to.-> Wazuh
    FileServer -.reports to.-> Wazuh
    EdgeProxy -.reports to.-> Wazuh
    Vault -.reports to.-> Wazuh
    DNS -.reports to.-> Wazuh

Four trust boundaries, not two

flowchart LR
    WAN["WAN"] -->|public application boundary| EdgeFW["Edge Firewall / public proxy"]
    Browser["LAN browsers"] -->|mTLS + SSO| UserProxy["User-facing proxy"]
    Service["App-to-app"] -->|IP-allowlist + SSO| InternalProxy["Internal proxy"]
    Infra["LAN infra-to-infra"] -->|explicit per-flow rules| HostFW["Host firewall rules"]

Backend services trust proxy headers, not raw client IP, on every path.

Two structurally independent traffic planes

Plane Path
Ingress — public Client → edge firewall/proxy → backend
Ingress — LAN-facing Client → user-facing proxy (mTLS) → backend
East-west — app-to-app Service → internal proxy zone → service
East-west — infra-to-infra Service → firewall rule → service, direct, no proxy

Important

Observability sits outside every request path on purpose. Logs and metrics push asynchronously to monitoring infrastructure; nothing in that pipeline is inline with application traffic, and application services don't depend on monitoring availability. If monitoring goes down, collection stops — nothing else does.

Caught by re-verification, not assumed

Warning

The last full re-check against live infrastructure found two real corrections to what was previously documented: the public reverse-proxy layer had actually moved from running as its own dedicated VM to running as a package directly on the edge firewall — and an older "flat mesh network, no mutual TLS" model for internal service traffic had been fully replaced by the two-zone split described in docs/dns-naming.md, without the architecture documentation being updated to match at the time. Both were caught by running real commands against the live fleet, not by re-reading the previous version and assuming it still held.

What this map deliberately excludes

Not a firewall rule listing, not a port inventory, not a service configuration reference — those live in their own docs (docs/firewall-and-network.md and elsewhere). This is strictly the stable, directional shape of how trust and traffic actually move.


Related: docs/firewall-and-network.md, docs/dns-naming.md