🆕 Video Course Out Now: Rapid Docker on AWS

WordPress on AWS: smooth and pain free

Andreas Wittig – 31 Oct 2016

I’m not a fan of WordPress, as it is neither cloud-ready nor serverless. That’s why this blog runs on CloudFront and S3 and is built by Hexo. But 25% of all websites are proudly published with WordPress. You will learn about the easiest way to run WordPress on AWS . Including fault tolerance and scalability.

The following figure shows the architecture of a fault tolerant and scalable WordPress environment on AWS.

WordPress on AWS

Read on to learn more!

The problem

WordPress is a PHP application using two different data storages: a MySQL database and files on disk. Storing files on disk is a problem if you want to make use of a fleet of EC2 instances to run WordPress in a fault tolerant and scalable fashion.

The following example and figure are illustrating the problem.

  1. Mary is uploading a new image for her blog post. The image file is stored on EC2 instance number 1.
  2. Mary is reading through her article. EC2 instance number 1 is answering her HTTP request to get the image.
  3. Bob is reading Mary’s article. EC2 instance number 2 is answering his HTTP request with a 404 Not Found error, as the image is stored only on EC2 instance number 1.

WordPress stateful server

Tricky, you need to find a way to either synchronize files between all EC2 instances or outsource the files to a managed service.

The solution, 1st try

I tried to solve the problem of running WordPress on AWS before. WordPress on AWS: you are holding it wrong describes the solution in detail.

To summarize it briefly:

  • Using a WordPress plugin to store user uploads like images on S3 instead of storing them on disk.
  • Disabling all other WordPress features that are writing files to disk: install and update plugins or themes, the auto-updater, and writing a .htaccess file.
  • Automating the process of installing WordPress with all of its plugins and themes during the boot process of each EC2 instance.

But not being able to install plugins and themes and to use the auto-updater is inconvenient.

The solution, 2nd try

The Elastic File System service (EFS) joined the AWS family in January 2016. EFS is a highly available and scalable network file system that you can connect to your EC2 instances by using the NFS protocol. The perfect place to outsource files.

Cover of Amazon Web Services in Action

Level up, strengthen your AWS skills.

Our book Amazon Web Services in Action is a comprehensive introduction to computing, storing, and networking in the AWS cloud. You'll find clear, relevant coverage of all the essential AWS services, emphasizing best practices for security, high availability, and scalability. Get the first chapter for free!

The following figure shows how each EC2 instance running WordPress is connecting to EFS to read and write files. You don’t need to distinguish between user uploads and files belonging to WordPress itself.

WordPress with EFS

The diagram was created with Cloudcraft - Visualize your cloud architecture like a pro.

As a network call is necessary every time your EC2 instances want to read a file from EFS, it is important to have file caching in place.

Especially for .php files, as WordPress needs to access a lot of .php files for each incoming request. Something you can solve with opcache quickly.

Caching static files is necessary as well. Because each visitor of your WordPress blog will need to load the same .css and .js files a CDN like CloudFront is a perfect fit.

The following figure shows the complete architecture of WordPress on AWS based on these services:

  • CloudFront: CDN for dynamic and static content
  • ELB (Elastic Load Balancer): load balancer forwarding requests to EC2 instances and terminating SSL
  • EC2 (Elastic Compute Cloud): virtual machines running the web servers
  • EFS (Elastic File System): storage for WordPress files (WordPress core, plugins, themes, and user uploads)
  • RDS (Relational Database Service): MySQL database

WordPress on AWS

The diagram was created with Cloudcraft - Visualize your cloud architecture like a pro.

The deployment

Do you want to run WordPress on AWS by using EFS as described above? I have created a CloudFormation template that you can use to create the needed cloud infrastructure within minutes including the following features:

  • Reliable: Fault tolerant and scalable due to multi-AZ usage
  • Secure: HTTPS only
  • Fast: CDN caching static content
  • Growing: scalable file storage for endless user uploads

Learn more about the CloudFormation template for running WordPress on AWS and launch your stack within minutes.

This blog post has been translated into German: WordPress reibungslos und schmerzfrei auf AWS betreiben.

Tags: aws wordpress
Andreas Wittig

Andreas Wittig

I’m an independent consultant, technical writer, and programming founder. All these activities have to do with AWS. I’m writing this blog and all other projects together with my brother Michael.

In 2009, we joined the same company as software developers. Three years later, we were looking for a way to deploy our software—an online banking platform—in an agile way. We got excited about the possibilities in the cloud and the DevOps movement. It’s no wonder we ended up migrating the whole infrastructure of Tullius Walden Bank to AWS. This was a first in the finance industry, at least in Germany! Since 2015, we have accelerated the cloud journeys of startups, mid-sized companies, and enterprises. We have penned books like Amazon Web Services in Action and Rapid Docker on AWS, we regularly update our blog, and we are contributing to the Open Source community. Besides running a 2-headed consultancy, we are entrepreneurs building Software-as-a-Service products.

We are available for projects.

You can contact me via Email, Twitter, and LinkedIn.

Briefcase icon
Hire me