Example AWS Deployments documentation for the dotCMS Content Management System

Non-dockerized

Single Node

This is the simplest recommended deployment on AWS infrastructure. It consists of:

  • An optional instance for a HTTP Proxy / SSL terminator
  • A single dedicated instance running a single dotCMS instance. This embeds elasticsearch, hazelcast and file storage on the dotCMS instance.
  • A database or RDS instance.

Single Node Recipe

single-node:
  data:
    subnets:
      - db-A
    rds:
      - single AZ
      - t2.medium
      - postgresql 10 (latest)
      - db-A subnet
      storage:
          - 100+ GB (General Purpose SSD)

  application:
    subnets:
      - cms-A
    ec2 (cms):
      - qty 1+
      - m5.large
      - AWS Linux 2 AMI
      - cms-A subnet
      storage:
        - '/opt/dotcms': 20 GB (General Purpose SSD)
        - '/opt/dotcms/data': 250+ GB (General Purpose SSD)
        - '/opt/dotcms/logs': 20+ GB (General Purpose SSD)

  http:
    subnets:
      - http-A
    ec2 (http proxy):
      - qty 1
      - t3.medium
      - AWS Linux 2 AMI
      - http-A subnet
    storage:
          - '/opt/dotcms/logs': 20+ GB (General Purpose SSD)

Single Zone High Availability

This deployment runs dotCMS in a clustered configuration, which requires a proxy or load balancer that support sticky sessions. This configuration is horizontally scalable as additional dotCMS nodes can be added and removed from the cluster as needed.

  • An optional instance for a HTTP Proxy / SSL terminator
  • A load balancer if the proxy does not already do load balancing
  • Two more more dedicated instances running a dotCMS. This embeds elasticsearch, hazelcast on the dotCMS instance.
  • An NFS file share that is mounted on both dotCMS instances for shared file storage
  • A database or RDS instance.

Single Availability Zone High Availability Recipe

single-az-ha:
  data:
    subnets:
      - db-A
    rds:
      - single AZ
      - m4.large
      - postgresql 10 (latest)
      - db-A subnet
      storage:
          - 100+ GB (General Purpose SSD)
    ec2 (nfs):
          - qty 1
          - m5.large
          - AWS Linux 2 AMI
          - nfs-A subnet
        storage:
              - '/opt/dotcms/data': 500+ GB (General Purpose SSD)
  application:
    subnets:
      - cms-A
    ec2 (cms):
      - qty 1+
      - m5.xlarge
      - AWS Linux 2 AMI
      - cms-A subnet
      storage:
        - '/opt/dotcms': 20 GB (General Purpose SSD)
        - '/opt/dotcms/data': 100+ GB (General Purpose SSD)
        - '/opt/dotcms/logs': 20+ GB (General Purpose SSD)
  http:
    subnets:
      - http-A
    ec2 (http proxy):
      - qty 1
      - t3.medium
      - AWS Linux 2 AMI
      - http-A subnet
    storage:
          - '/opt/dotcms/logs': 20+ GB (General Purpose SSD)

Multi-Zone High Availability

This deployment runs the components that underlie dotCMS in clustered configurations across availability zones.

Two instances of a HTTP Proxy / SSL terminator A load balancer if the proxy does not already do load balancing Two more more dedicated instances running a dotCMS. This embeds elasticsearch, hazelcast on the dotCMS instance. Each dotCMS instance can be run in separate availability zones. An NFS file share that is mounted on both dotCMS instances for shared file storage A database or RDS instance. A cold slave database for failover An NFS file share that is mounted on both dotCMS instances for shared file storage - can be mirrored for fault tolerance.

Multi-Zone High Availability Recipe

multi-az:
  data:
    subnets:
      - db-A
      - db-B
      - nfs-A
    rds:
      - multi AZ
      - m4.large
      - postgresql 10 (latest)
      - db-A, db-B subnets
      storage:
          - 100+ GB (General Purpose SSD)
    ec2 (nfs):
          - qty 1
          - m5.large
          - AWS Linux 2 AMI
          - nfs-A subnet
        storage:
              - '/opt/dotcms/data': 500+ GB (General Purpose SSD)
  application:
    subnets:
      - cms-A
      - cms-B
    ec2 (cms):
      - qty 2+ (>=1 per AZ)
      - m5.xlarge
      - AWS Linux 2 AMI
      - cms-A,cms-B subnets
      storage:
        - '/opt/dotcms': 20 GB (General Purpose SSD)
        - '/opt/dotcms/data': 100+ GB (General Purpose SSD)
        - '/opt/dotcms/logs': 20+ GB (General Purpose SSD)
  http:
    subnets:
      - http-A
      - http-B
    ec2 (proxy):
      - qty 2 (>=1 per AZ)
      - c5.large
      - AWS Linux 2 AMI
      - http-A,http-B subnets
    storage:
          - '/opt/dotcms/logs' :20+ GB (General Purpose SSD)

Enterprise dotCMS Environment

When designing a large scale dotCMS installation, the above configurations can be considered building blocks which can be rolled out to perform various functions in your deployment strategy. The diagram below shows 3 environments, DEV, AUTH and DELIVERY each with different degrees of fault tolerance.