Skip to content

Deployment

Formation is deployed to Azure Container Apps using Bicep for infrastructure-as-code and GitHub Actions for CI/CD.

graph TD
subgraph Azure
subgraph "Container Apps Environment"
INGRS[Nginx Ingress]
API[API Container]
WEB[Web Container]
DOCS[Docs Container]
end
ACR[Container Registry]
SQL[(Azure SQL)]
KV[Key Vault]
BLOB[(Blob Storage)]
AI[Application Insights]
end
ACR --> INGRS
ACR --> API
ACR --> WEB
ACR --> DOCS
INGRS --> WEB
INGRS --> API
API --> SQL
API --> KV
DOCS --> BLOB
API --> AI
WEB --> AI
EnvironmentDomainResource Group
Devformdev.pma.co.ukfrmpmauks-dev-rg-01
UATformuat.pma.co.ukfrmpmauks-uat-rg-01
Prodform.pma.co.ukfrmpmauks-prod-rg-01
Terminal window
# From infrastructure/deploy/
./new-deployment.ps1 -environment dev

This deploys all Bicep modules including:

  • Virtual network and subnets
  • SQL Server and database
  • Key Vault and secrets
  • Container Apps environment
  • Container Apps (API, Web, Ingress, Docs)
  • Storage accounts
  • Application Insights

Each service has separate validate (PR) and deploy (main) workflows:

ServiceValidateDeploy
APIdotnet-service-validate.ymldotnet-service-deploy.yml
Webweb-service-validate.ymlweb-service-deploy.yml
Docsdocs-service-validate.ymldocs-service-deploy.yml
SQLsql-validate.ymlsql-deploy.yml
Ingressingress-validate.ymlingress-deploy.yml
Infrainfrastructure-validate.ymlinfrastructure-deploy.yml

All images are pushed to the shared ACR: frmpmaukscommonacr01.azurecr.io

ImageSource
app.apisrc/services/api/app/app.api/
app.websrc/services/web/
app.docssrc/services/docs/
app.ingrssrc/services/ingrs/
job.loadsrc/services/job/load/