In this post you will learn about the easiest way to deploy a fault tolerant and scalable WordPress on AWS.
To get started, setup a Swarm cluster on AWS by following this tutorial Setup Docker Swarm on AWS using Ansible & Terraform:
Now your cluster is ready to use. You are ready to go !
WordPress stores some files on disk (plugins, themes, images …) which causes a problem if you want to use a fleet of EC2 instances to run your blog in case of high traffic:
That’s where AWS EFS (Elastic File System) comes into the play. The idea is to mount shared volumes using the NFS protocol in each host to synchronize files between all nodes in the cluster.
So create an Elastic File System, make sure to deploy it in the same VPC on which your Swarm cluster is created:
Once created, note the DNS name:
Now, mount Amazon EFS file systems via the NFSv4.1 protocol on each node:
sudo mount -t nfs4 -o nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2 EFS_DNS_NAME.efs.us-east-1.amazonaws.com:/ wp
We can verify the mount with a plain df -h command:
WordPress requires a relational database. Create an Amazon Aurora database:
Wait couple of minutes, then the database should be ready, copy the endpoint of database:
To deploy the stack, I’m using the following Docker Compose file:
command: --web --docker --docker.swarmmode --docker.watch
- node.role == manager
In addition to wordpress container, Im using Traefik as reverse proxy to be able to scale out my blog easily with docker service scale command.
In your Manager node run the following command to deploy the stack:
docker stack deploy --compose-file docker-compose.yml blog
At this point, you should have a clean install of WordPress running.
Fire up your browser and point it to manager public IP address, you will be greeted with the familiar WordPress setup page:
If you’re expecting a high traffic, you can easily scale the WP service using the command:
Verify Traefik Dashboard:
That’s how to build a scalable WordPress blog with no single points of failure.