- 5 minutes to read

Deployment Diagram Example

The Deployment diagram shows where containers are hosted and what infrastructure they run on — servers, cloud services, load balancers, network zones, and deployment environments.

See Example C4 Diagrams for an overview of all diagram types and when to use each.

To use this example in Nodinite, copy the Mermaid markup below and follow the Creating Your First C4 Diagram import walkthrough to create a Diagram Set, import the markup, and bind nodes to your Repository.

When to Use

  • Documenting production infrastructure for operations and DevOps teams
  • Planning cloud migrations or hybrid architecture changes
  • Security reviews — identifying network boundaries and data flows across zones
  • Does not show internal container logic — that is in L2 and L3

Full structural support: Infrastructure groupings (Deployment_Node boundaries) are persisted with their boundary type and round-trip correctly through the Mermaid generator — imported Deployment diagrams produce identical output when regenerated.

No Person shapes in Deployment diagrams: Person and Person_Ext must not appear in C4Deployment diagrams. Deployment diagrams describe infrastructure — human actors are a concern of L1 Context and Dynamic diagrams. Adding a Person here will produce a render error.

Example: O2C Production Deployment (Azure + On-Premises)

This example deploys the O2C containers from the L2 Container Diagram onto their real production infrastructure. It exercises:

  • Nested Deployment_Node — Azure Region > App Service Plan, Azure Region > Data Tier, On-Premises > ERP Zone
  • Container (replica annotation) — scaled-out ERP Integration Worker replicas noted inline in the description (×3); Container_Instance is a C4-PlantUML macro not yet supported by Mermaid
  • ContainerDb — Order Database (Azure SQL) in the data tier
  • ContainerQueue — Planning Event Bus (Azure Service Bus) in the integration tier
  • Rel_D — top-to-bottom cross-zone flows (cloud → on-premises VPN)
  • Rel_R — same-tier lateral flows (API → database peer in the data tier)
  • No Person shapes — infrastructure-only view by design
Preview Mermaid Code
C4Deployment title O2C Platform — Production Deployment (Azure + On-Premises) Deployment_Node(azure_region, "Azure West Europe", "Azure Region") { Deployment_Node(app_service, "App Service Plan (P3v3)", "Azure App Service") { Container(portal_app, "Portal", "React.js + ASP.NET Core", "Customer-facing order submission and confirmation portal") Container(rcv_order_svc, "INT1337-RCV-Order-Incoming", "ASP.NET Core Worker", "Receives and validates inbound order files") Container(snd_confirm_svc, "INT1337-SND-Confirm-Outgoing", "ASP.NET Core Worker", "Dispatches CSV order confirmations to customers") Container(erp_worker, "ERP Integration Worker (×3)", "ASP.NET Core Worker", "Three auto-scaled worker replicas forwarding orders to ERP") } Deployment_Node(data_tier, "Data Tier", "Azure Virtual Network / Private Endpoints") { ContainerDb(order_db, "Order Database", "Azure SQL (Business Critical)", "Primary order and confirmation records store") ContainerDb(order_store_db, "Order Store", "Azure SQL", "Deduplication and retry store for inbound orders") } Deployment_Node(integration_tier, "Integration Tier", "Managed Services") { ContainerQueue(planning_bus, "Planning Event Bus", "Azure Service Bus Premium", "Reliable async queue for production schedule notifications across zones") } } Deployment_Node(on_prem, "On-Premises — Company Data Centre", "Fortinet VPN Gateway") { Deployment_Node(erp_zone, "ERP Zone", "Internal Network / VLAN 10") { Container(erp_app, "ERP", "SAP ERP (on-premises)", "Order entry, inventory management, and production scheduling engine") Container(ent_order_svc, "INT1337-ENT-Order-Entry", "BizTalk Server", "Receives XML order entries and writes to ERP API") Container(pln_scheduled_svc, "INT1337-PLN-Order-Scheduled", "BizTalk Server", "Emits production schedule events back to Azure Service Bus") } Deployment_Node(wms_zone, "WMS Zone", "Internal Network / VLAN 20") { Container(wms_app, "WMS", "Legacy WMS (on-premises)", "Warehouse packing and delivery operations") Container(pkg_svc, "INT1337-PKG-Order-Packed", "BizTalk Server", "Records packing completion and triggers logistics handover") Container(dlv_svc, "INT1337-RCV-Order-Delivered", "BizTalk Server", "Ingests delivery confirmation from logistics partner") } Deployment_Node(finance_zone, "Finance Zone", "Internal Network / VLAN 30") { Container(erp_finance_app, "ERP-Finance", "SAP FI Module", "Invoice generation and revenue recognition") Container(inv_svc, "INT1337-INV-Order-Invoiced", "BizTalk Server", "Creates invoice record in ERP-Finance upon delivery confirmation") } } Rel_D(portal_app, planning_bus, "Publishes order events", "AMQP / TLS") Rel_R(portal_app, order_db, "Reads and writes order state", "TDS / Private Endpoint") Rel_R(rcv_order_svc, order_store_db, "Deduplication lookups and inserts", "TDS / Private Endpoint") Rel_D(erp_worker, ent_order_svc, "Forwards validated order XML via VPN", "HTTPS / mTLS") Rel_D(planning_bus, pln_scheduled_svc, "Delivers schedule events to on-premises", "AMQP / VPN") Rel_R(pln_scheduled_svc, erp_app, "Writes scheduled order to ERP", "ERP API") Rel_R(ent_order_svc, erp_app, "Creates ERP order entry", "ERP API") Rel_D(erp_app, planning_bus, "Emits production schedule event", "AMQP / VPN") Rel_R(pkg_svc, wms_app, "Updates WMS packing state", "WMS API") Rel_R(dlv_svc, wms_app, "Records final delivery confirmation", "WMS API") Rel_D(dlv_svc, planning_bus, "Publishes delivery event", "AMQP / VPN") Rel_R(inv_svc, erp_finance_app, "Creates invoice record", "ERP-Finance API")
C4Deployment
    title O2C Platform — Production Deployment (Azure + On-Premises)

    Deployment_Node(azure_region, "Azure West Europe", "Azure Region") {

        Deployment_Node(app_service, "App Service Plan (P3v3)", "Azure App Service") {
            Container(portal_app, "Portal", "React.js + ASP.NET Core", "Customer-facing order submission and confirmation portal")
            Container(rcv_order_svc, "INT1337-RCV-Order-Incoming", "ASP.NET Core Worker", "Receives and validates inbound order files")
            Container(snd_confirm_svc, "INT1337-SND-Confirm-Outgoing", "ASP.NET Core Worker", "Dispatches CSV order confirmations to customers")
            Container(erp_worker, "ERP Integration Worker (×3)", "ASP.NET Core Worker", "Three auto-scaled worker replicas forwarding orders to ERP")
        }

        Deployment_Node(data_tier, "Data Tier", "Azure Virtual Network / Private Endpoints") {
            ContainerDb(order_db, "Order Database", "Azure SQL (Business Critical)", "Primary order and confirmation records store")
            ContainerDb(order_store_db, "Order Store", "Azure SQL", "Deduplication and retry store for inbound orders")
        }

        Deployment_Node(integration_tier, "Integration Tier", "Managed Services") {
            ContainerQueue(planning_bus, "Planning Event Bus", "Azure Service Bus Premium", "Reliable async queue for production schedule notifications across zones")
        }

    }

    Deployment_Node(on_prem, "On-Premises — Company Data Centre", "Fortinet VPN Gateway") {

        Deployment_Node(erp_zone, "ERP Zone", "Internal Network / VLAN 10") {
            Container(erp_app, "ERP", "SAP ERP (on-premises)", "Order entry, inventory management, and production scheduling engine")
            Container(ent_order_svc, "INT1337-ENT-Order-Entry", "BizTalk Server", "Receives XML order entries and writes to ERP API")
            Container(pln_scheduled_svc, "INT1337-PLN-Order-Scheduled", "BizTalk Server", "Emits production schedule events back to Azure Service Bus")
        }

        Deployment_Node(wms_zone, "WMS Zone", "Internal Network / VLAN 20") {
            Container(wms_app, "WMS", "Legacy WMS (on-premises)", "Warehouse packing and delivery operations")
            Container(pkg_svc, "INT1337-PKG-Order-Packed", "BizTalk Server", "Records packing completion and triggers logistics handover")
            Container(dlv_svc, "INT1337-RCV-Order-Delivered", "BizTalk Server", "Ingests delivery confirmation from logistics partner")
        }

        Deployment_Node(finance_zone, "Finance Zone", "Internal Network / VLAN 30") {
            Container(erp_finance_app, "ERP-Finance", "SAP FI Module", "Invoice generation and revenue recognition")
            Container(inv_svc, "INT1337-INV-Order-Invoiced", "BizTalk Server", "Creates invoice record in ERP-Finance upon delivery confirmation")
        }

    }

    Rel_D(portal_app, planning_bus, "Publishes order events", "AMQP / TLS")
    Rel_R(portal_app, order_db, "Reads and writes order state", "TDS / Private Endpoint")
    Rel_R(rcv_order_svc, order_store_db, "Deduplication lookups and inserts", "TDS / Private Endpoint")
    Rel_D(erp_worker, ent_order_svc, "Forwards validated order XML via VPN", "HTTPS / mTLS")
    Rel_D(planning_bus, pln_scheduled_svc, "Delivers schedule events to on-premises", "AMQP / VPN")
    Rel_R(pln_scheduled_svc, erp_app, "Writes scheduled order to ERP", "ERP API")
    Rel_R(ent_order_svc, erp_app, "Creates ERP order entry", "ERP API")
    Rel_D(erp_app, planning_bus, "Emits production schedule event", "AMQP / VPN")
    Rel_R(pkg_svc, wms_app, "Updates WMS packing state", "WMS API")
    Rel_R(dlv_svc, wms_app, "Records final delivery confirmation", "WMS API")
    Rel_D(dlv_svc, planning_bus, "Publishes delivery event", "AMQP / VPN")
    Rel_R(inv_svc, erp_finance_app, "Creates invoice record", "ERP-Finance API")

Shape Coverage

This example exercises the following Deployment diagram shape vocabulary:

Shape used Macro Notes
Infrastructure node Deployment_Node Azure Region, App Service Plan, Data Tier, Integration Tier, On-Premises, ERP/WMS/Finance zones — 3 levels deep
Container (generic) Container Portal, integration services, ERP, WMS, ERP-Finance
Container Database ContainerDb Order Database, Order Store (both Azure SQL)
Container Queue ContainerQueue Planning Event Bus (Azure Service Bus Premium)
Container (replica annotation) Container ERP Integration Worker — replica count (×3) carried in the description; Container_Instance is C4-PlantUML only and not supported by Mermaid
Downward connector Rel_D Cross-tier flows — cloud App Service → Service Bus, Service Bus → on-premises
Rightward connector Rel_R Same-tier lateral flows — API → database peers, service → ERP API
No Person shapes (intentional) Person and Person_Ext must not appear in Deployment diagrams

Next Step

Ready to use these diagrams in Nodinite? Creating Your First C4 Diagram walks through creating a Diagram Set, importing Mermaid markup, and binding nodes to your Repository.