Developing and administering WordPress can be painful, especially when requirements include the ability to have a team of developers, the ability for a developer to run the site (including content) on their system (so they can reproduce issues caused by content or configuration), multiple content authors, multiple environments (such as staging and production), and the ability to roll back any problematic changes (content, code, or configuration) with ease.
To solve this problem, I developed a solution to make things easier: VersionPress on AWS. It uses Docker to allow developers to run the site locally and an assortment of AWS services to host the site. Check it out and I think you’ll find that life becomes a little bit easier.
VersionPress on AWS is Free Software under the GPLv3 hosted at gitlab. Contribution in the forms of issue reports and pull request are very much welcome.
What is VersionPress?
VersionPress stores content (posts, media, etc) as well as code (themes, plugins, configuration, etc) in source control (git).
- By looking at the git log, it’s quick and easy to see who changed what and when.
- All code (plugins, themes, WordPress core itself) and content (pages, posts, comments, configuration) are stored in git. This approach allows content changes as well as code changes can be reverted if there’s a problem and merged between branches for different environments.
- Wipe out and recreate the environment at any time without data loss – everything is in git. No need to worry about the AWS RDS server. Migrate between RDS for MariaDB and Aurora at any time.
- Need a staging site, or a new site to test work in progress? Create a new branch and launch a new stack, be up and running in minutes
- Run the exact same site with the same content locally so you can reproduce issues in production effortlessly – no more “works on my machine” situations
Hosting with AWS
Need a small, cheap staging site, but also a full fledged scalable production site with a CDN? Use the same stack for both – simply specify different parameter values. Change parameter values whenever you want without downtime or data loss. For example, when starting out, leave the CloudFront CDN off to save money. When the site becomes popular, add the CloudFront CDN to better handle the load and improve performance for end users.
AWS features leveraged include:
- Elastic Beanstalk for dynamic scalability, self healing, and rolling deployments
- Multiple available zones within a region for high availability
- Amazon RDS for MariaDB as a low maintenance, high performance, highly scalable database
- Elastic File System for file storage shared among any number of servers as scaling demands
- Route 53 for DNS management
- AWS Certificate Manager for HTTPS certificate management
- CloudFormation for deployment and updating of the stack
- Optional CloudFront CDN
Docker is used to run WordPress in AWS Elastic Beanstalk as well as for developers running the site locally. This consistency reduces the occurrences of “it works on my machine” situations and gets new developers on-boarded quicker.
When not to use VersionPress on AWS
Since VersionPress commits all content changes to git, content changes are a bit slower. Therefore, if the site is very content change heavy, such as if it’s a forum with many frequent comments being made, VersionPress on AWS may not be the right solution.
However, the vast majority of WordPress sites have very infrequent content changes, so the slightly slower writes are rarely an issue.
Check out the VersionPress on AWS documentation to get started.