The current NGX Ramblers architecture deploys a single Docker image to multiple independent Fly.io apps. Each app connects to its own MongoDB database and S3 bucket, providing complete data isolation.
flowchart TD
IMG@{ icon: "logos:docker-icon", label: "Single Docker Image", pos: "b", h: 48 }
IMG --> APP1@{ icon: "logos:fly-icon", label: "Group A (512MB)", pos: "b", h: 48 }
IMG --> APP2@{ icon: "logos:fly-icon", label: "Group B (512MB)", pos: "b", h: 48 }
IMG --> APP3@{ icon: "logos:fly-icon", label: "Group C (512MB)", pos: "b", h: 48 }
IMG --> APPN["... x 13 apps"]
APP1 --> DB1@{ icon: "ngx:mongodb", label: "Group A DB", pos: "b", h: 48 }
APP2 --> DB2@{ icon: "ngx:mongodb", label: "Group B DB", pos: "b", h: 48 }
APP3 --> DB3@{ icon: "ngx:mongodb", label: "Group C DB", pos: "b", h: 48 }
APP1 --> S31@{ icon: "ngx:aws", label: "Group A bucket", pos: "b", h: 48 }
APP2 --> S32@{ icon: "ngx:aws", label: "Group B bucket", pos: "b", h: 48 }
APP3 --> S33@{ icon: "ngx:aws", label: "Group C bucket", pos: "b", h: 48 }
group-a.ngx-ramblers.org.uk)group-a-ramblers.org.uk)| Capability | Status |
|---|---|
| Single codebase | One repo, one team |
| Single build artifact | One Docker image for all sites |
| Automated group provisioning | CLI tool creates new groups end-to-end |
| Per-group custom domains | Each group has its own domain and branding |
| Complete data isolation | Physically separate databases — no cross-group leakage possible |