Read live from Azure Ring n Bring · production only
The flow diagram shows how an order moves. This one shows
where it runs — the real machines, databases and regions behind
qrbring.com, read straight out of the Azure subscription rather than from a design doc.
The short version: production is two virtual machines, and one of them is doing
almost all of the work.
qrbring.com is hosted on DigitalOcean and points at two fixed Azure IPs.
172.164.224.29 — a single burstable VM in UAE North.
us-central1, in Iowa.
That last box is the thing most people are surprised by. The platform is two clouds at once: Azure holds the compute and the supporting databases in the UAE, while the database that actually coordinates every order lives on the other side of the world in Google Cloud. Every order write makes that trip.
Production, drawn to the resource names you'd see in the Azure portal
Drawn the way you'd lay it out in draw.io: every box is a real resource, and the nesting is real — subscription, then resource group, then virtual network, then subnet, the same containment you click through in the portal. Red means a security problem, not just a warning.
Two virtual machines carry all of production. Everything to their right and below is something one of them calls — the data services in the same resource group, Google Cloud across the ocean, and the POS, payment and messaging providers. The console you are reading this in is the small box on the right, deliberately scoped to dev and QA only.
Every production resource in the subscription, with what it costs you in blast radius
Resource group ring-n-bring-prod, plus the Service Bus namespace that lives in
defaultrnb. Read from the Ringnbring Subscription with list-only calls.
| Resource | Type | Size / tier | Region | Redundancy | Reachable from |
|---|---|---|---|---|---|
| rnb-backend-prod | Virtual machine | Standard_B4ms | UAE North | single instance | the internet, every port |
| rnb-frontend--prod | Virtual machine | Standard_B2ms | UAE North | single instance | 80, 443, 4201, 9100, 22 |
| rnb-infrasys-db-prod | MySQL Flexible Server | Standard_B2s · 20 GB | UAE North | HA disabled | public + all Azure IPs |
| rnb-engage-mongodb-prod | Mongo cluster | M10 · v6.0 · 32 GB | UAE North | HA disabled | public |
| mongodb-wearos-db-logs-prod | Mongo cluster | M10 · v7.0 · 32 GB | UAE North | HA disabled | public |
| do-redis-prod-ringnbring | Azure Cache for Redis | Standard C1 · v6.0 | UAE North | replicated pair | TLS 1.2 only, :6380 |
| ringnbring | Service Bus namespace | Standard | UAE North | — | SAS |
| Vault-Prod-Env | Key Vault | — | UAE North | — | — |
| prod-backup-vault | Recovery Services vault | — | UAE North | VM backup | — |
| rnb-ai-foundary | Azure AI Foundry | — | East US | — | — |
| rnb-analytics-prod-ip | Public IP | Standard · static | East US | orphaned | attached to nothing |
| monitoring-server-production165_z1 | Network interface | holds 172.164.241.208 | UAE North | orphaned | no VM behind it |
Amber marks something that would hurt during an incident — no second instance, no failover, or a wider network exposure than the service needs. The Redis configuration is the one that is set up the way you'd want the others to be.
How this was produced. The Azure figures come from list-only calls against the
Ringnbring Subscription — az vm list, az resource list,
az mysql/redis/servicebus … list, az network nsg rule list — on the date stamped at the top
of this page. Nothing was created, modified or deleted. Service names, ports, Node versions and deployment
behaviour come from bitbucket-pipelines.yml and the service sources in the monorepo at the commit
linked above. The Google Cloud side is read from .firebaserc, firebase.json and
global-options.ts rather than from a live GCP query, so treat the region and project facts as
“what the repository configures” — they are worth confirming in the Firebase console.