To summarize the deployment options for AEM, I've created a simple comparison table which is attached at the bottom of the post - you can jump right there to get the overview. Of course, there might be other, less standard deployment options but the four presented here are the most common and would suit most of the applications.
The first level of choice is related to who is managing the infrastructure underpinning the AEM deployment:
- Infrastructure managed by Adobe
- Infrastructure managed in house (or by another company, like Cognifide)
Adobe currently offers two types of setup. Since both are deployed in a cloud, they may be confusing at first glance. Here's a brief explanation of the key differences:
- AEM as a Cloud Service - self-scaling infrastructure in which you don't have access to machines running AEM instances. It's a modern, fully containerized system. However as a user of it, you won't work with Docker images - you need to use Cloud Manager to build your code and deploy it. This is currently the preferred offering by Adobe, although it's still quite new. Also, this option runs a dedicated version of AEM which is currently slightly less function-rich than a regular one, but on the other hand offers features not available anywhere else (like promised automated updates).
- AEM Managed Service - it's a model which has been offered for several years now. You basically get a set of dedicated virtual machines running in a chosen cloud (AWS or Azure) and which host AEM instances (and Dispatchers). All of the infrastructure is managed by Adobe Managed Services team. You can use Cloud Manager to deploy your code or rely on customer success engineers to do manual deployments.
If a company doesn't want to use any of Adobe's options (or simply can't because of security or other policies), they can still host AEM on their own. Two most common deployment models are as follow:
- Hosted in a cloud - this is conceptually the same model as "AEM Managed Service" offered by Adobe - you have to run a set of virtual machines in a cloud (e.g. EC2 instances in AWS, or virtual machines in Azure) and deploy AEM there. The management aspect can be done in-house, by the company's IT department, or by an external company providing this kind of managed services. To continuously deploy new versions of the code, you need to set up additional tools. At Cognifide, we usually use tools like Chef, Terraform, Jenkins/Bamboo, Gradle AEM Plugin to support the management and deployments. Please note, that you can't use Cloud Manager, as this is the tool available only when using Adobe's hosting.
- Dedicated hosting - this is less and less popular option these days. If a company owns a data center (usually applicable to financial institutions), they may prefer to spin up some virtual machines there and host AEM on premise. There are still dedicated hosting options provided by companies like Rackspace but I haven't seen a setup like this for a number of years now.