@startuml
!include C4/C4_Deployment.puml
title infrastructure
header Deployment diagram \nInfrastucture architecture \n AllMyData Project \n(partial)
LAYOUT_WITH_LEGEND()


Node("client", "Client", "Desktop / mobile") {
  Node("nav1", "Web browser", "Chrome / Firefox / Safari") {
    Container("spa", "AllMyData SPA application", "React.js")
  }
}

Node("dc", "Datacenter", "Paris") {
    Node("r2", "Firewall", "Cisco Firepower 4100")
    Node("lb1", "LB Debian lb1", "<<active>>")
    Node("lb2", "LB Debian lb2", "<<passive>>")

    Node("rp1", "Reverse Proxy", "x2 Debian Buster <<active/active>>") {
      Container("ha1", "Reverse Proxy", "HaProxy")
    }

    Node("server_gui", "HMI HMI server", "x2 Debian Buster") {
      Node("sw1", "Web server", "Nginx") {
        Container("guis1", "SPA Web Application", "React.js", "Expose static resources \n (.js, .html, images ...)")
      }
      Node("tomcat_batchs1", "JEE Server", "Tomcat 10") {
        Container("batch1", "batch-process-requests", "Java", "Process requests")
      }
    }

    Node("API_server", "API Server", "x3, RHEL") {
      Node("wilfly1", "JEE Server", "Wildfly") {
        Container("api1", "API service-allmydata", "Java")
      }
    }

    Node("bdd1", "BDD Server", "RHEL") {
      ContainerDb("pg1", "PostgreSQL", "PostgreSQL 12")
      ContainerDb("mq1", "Message queue", "RabbitMQ")
      Container("mail1", "MTA", "Postfix")
    }

    Node("sup1_server", "Supervision Server", "x1 Debian Stretch") {
      Container("sup1", "Supervision tool", "Centreon")
    }

    Node("ech1", "Exchange Server", "x1 Windows Server") {
      Container("gw1", "API Gateway", "Axway API Gateway")
    }

    ContainerDb("bay1", "SAN EMC", "bay 1")
    Node("all_servers", "<all servers>", "Supervision")
}

spa -> r2 : HTTPS on the Internet
r2 --> lb1 : HTTPS
lb2 -> lb1 : Heartbeat VRRP
lb1 -> ha1
ha1 --> guis1 : HTTP
api1 -> mq1 : product \n JMS / RabbitMQ
batch1 --> mq1 : consume \n JMS / RabbitMQ
api1 --> pg1: JDBC / PG
batch1 --> mail1 : SMTP / sending mails
api1 --> gw1 : SOAP / HTTPS
ha1 --> api1 : REST / HTTP
sup1 --> all_servers : SNMP

Rel_Left("bdd1", "bay1", "FC")

@enduml