1.6 DNS and TLS
Outcome
All required DNS records and TLS certificates are in place so traffic flows correctly:
admin.rcm.medsuite.com→ platform admin UI (apps/rcm-appadmin variant or shared SWA)*.rcm.medsuite.com→ tenant UIs (one subdomain per tenant)api.rcm.medsuite.com→ backend gateway (apps/rcm-core)edi.medsuite.com→ EDI appadmin-docs.millinmedical.app,docs.millinmedical.app,edi-docs.millinmedical.app→ doc sites
Prerequisites
- 1.5 First platform admin complete.
- Access to the DNS provider for
medsuite.com(Azure DNS, Cloudflare, GoDaddy, etc.).
Topology
Steps
Provision a wildcard certificate
Two options:
- Azure-managed cert (recommended for SWA): each Static Web App can be issued a managed cert per custom domain — no manual cert handling. Wildcards are not supported here, so each tenant subdomain needs its own cert.
- Bring-your-own wildcard: a
*.rcm.medsuite.comcert from your CA, uploaded to Azure Front Door. Use this if you want one cert covering all tenant subdomains.
Most installations use Front Door + a wildcard cert because tenant subdomains are provisioned dynamically.
Add the canonical CNAME / A records
In your DNS provider:
Hostname Type Target api.rcm.medsuite.comCNAME <container-app-name>.azurecontainerapps.ioedi.medsuite.comCNAME <edi-container-app>.azurecontainerapps.ioadmin.rcm.medsuite.comCNAME <admin-swa>.azurestaticapps.net*.rcm.medsuite.comCNAME Front Door endpoint admin-docs.millinmedical.appCNAME <docs-admin-swa>.azurestaticapps.netdocs.millinmedical.appCNAME <docs-tenant-swa>.azurestaticapps.netedi-docs.millinmedical.appCNAME <docs-edi-swa>.azurestaticapps.netBind custom domains to Static Web Apps
for swa in swa-rcm-admin-docs-prod swa-rcm-docs-prod swa-rcm-edi-docs-prod; doaz staticwebapp hostname set \--resource-group rg-rcm-prod-eastus2 \--name "$swa" \--hostname "$(echo $swa | sed -e 's/swa-rcm-//' -e 's/-prod$//').medsuite.com"doneConfigure Front Door routing for
*.rcm.medsuite.comThe wildcard route inspects the
Hostheader and forwards to:api.rcm.*→ backend container app*.rcm.*(any other) → tenant SWA bundle (the sameapps/rcm-appbuild serves all tenants; the app readswindow.location.hostto pick the tenant slug).
az afd route create \--resource-group rg-rcm-prod-eastus2 \--profile-name fd-rcm-prod \--endpoint-name rcm-prod \--route-name tenant-wildcard \--custom-domains "*.rcm.medsuite.com" \--origin-group og-rcm-app \--supported-protocols Https \--link-to-default-domain Disabled \--https-redirect EnabledValidate certificates
for h in admin.rcm api edi admin-docs docs edi-docs; doecho | openssl s_client -connect "$h.medsuite.com:443" -servername "$h.medsuite.com" 2>/dev/null \| openssl x509 -noout -subject -enddatedoneEach line should show a non-expired cert with the right
subjectCN/SAN.
Validation
| Check | Expected |
|---|---|
dig admin.rcm.medsuite.com | Resolves to SWA hostname |
dig api.rcm.medsuite.com | Resolves to Container App hostname |
dig +short '*.rcm.medsuite.com' | Resolves to Front Door |
curl -fsSL https://admin.rcm.medsuite.com | Returns the SPA login page |
curl -fsSL https://admin-docs.millinmedical.app | Returns this docs site |
Troubleshooting
| Symptom | Likely cause | Fix |
|---|---|---|
| Cert error in browser | Custom domain still validating | Wait up to 30 min after binding; check az staticwebapp hostname show. |
*.rcm resolves but returns 404 | Front Door route missing or origin not added | Re-check step 4. |
api.rcm returns 502 | Container app probe failing | Check az containerapp logs show for the backend. |