Private network for PHI. One public door.
Expose only IntakeService to the internet. Keep the API gateway and every PHI-bearing service — including SchedulingService — on the private network.
Portal, gateway, services, bus.
MudBlazor · staff tokens
private :5200
public · isolated
no shared PHI database
booking-requests topic
Conceptual. Exact ports and overlays live in the repository under infrastructure/k8s.
Public
- IntakeService, TLS, API key at the edge.
- Disabled by default (404 until PublicBooking:Enabled).
- Isolated durable inbox database only.
- Cannot read clinical, patient, or scheduling records.
Private
- Portal, YARP gateway, every other service.
- SchedulingService appointment APIs always require a signed staff token.
- Per-service PostgreSQL.
- Service Bus topic booking-requests / subscription scheduling.
Compose, Kubernetes, or services one at a time.
Each service defaults to SQLite for local development. Production is PostgreSQL.
Docker Compose
docker-compose up -d
Portal :5000. Gateway :5200. Swagger per service on 510x.
Local Kubernetes
./scripts/deploy-local-k8s.sh
Namespace clouddental. Helper generates the local database password and JWT key in-cluster. They are not in the repo.
Cloud
infrastructure/k8s · Bicep
Azure deployment runs after CI on main. Manifests for DOKS and cloud overlays are in the repository.
Read the manifests. Then talk about a deploy.
No borrowed cloud-provider badges. The topology is in source.