WordPress AWS Environment

Contact

Amazon Web ServicesFor the past month I’ve been working on a project based on WordPress and the goal is to get a WordPress AWS environment up and running. WordPress AWS environment is an idea I’ve been thinking about for a long time, and as WordPress has evolved, my plan is to use WP as a framework for a web application which could potentially turn into a company if everything goes right and the site gets some traction. As this project is something that could potentially get big and it’s quite resource intensive we need to be able to scale as the time goes by and the number of members increase.

As this is a bootstrapped project, the goal is to spend as little as possible in the beginning but have the potential to scale as the site grows. That’s where cloud computing gets into the game. It lets anyone without a huge investments in hardware infrastructure upfront build scaleable web applications and as the popularity hopefully grows you just add additional resources. If it doesn’t turn out as you planned, you switch it off without loosing money as you’re basically renting resources from the huge pool of resources Amazon is offering on a time basis.

Amazon Web Services

I’ve set everything up WordPress and with AWS which is basically pay only for what you use service with potential to adding additional hardware resources (also called nodes) for additional performance once the site hopefully takes off. The beauty is you pay only for hardware based on time used which is usually measured in hours. It’s important to note while AWS is a service where you can easily deploy additional or remove certain resources you still need to know your way around server stuff and proper architecture while setting up the environments your web application will be using. I’ve written an article about web hosting requirements for WordPress previously if you’re interested. I’ll describe the services I’m using for my WordPress AWS environment in little bit more details below.

WordPress server

Setting up the environment for WordPress was fairly simple and all I had to install on an Ubuntu OS was basically PHP, outgoing email and Nginx as the web server, database is on an RDS instance and storage is on S3 for WP-uploads and I also store theme and other stuff in S3 buckets which is then displayed through Amazon Cloudfront. I won’t go into how to setup PHP and Nginx as this is not the scope of this article.

Database server

RDS is a basically a MYSQL database instance where the dynamic content will reside. I’ll start with a simple small instance and can grow as the traffic goes up in the future.

Storage/Backup

Resources and static content used by the web application are stored on Amazon Simple Storage Service (S3), a highly durable storage infrastructure designed for mission-critical and primary data storage. From S3 buckets I create I have set up Amazon Cloudfront which is a content delivery network for faster loading of S3 content. I also use S3 for backup in case something goes wrong.

Putting it all together

As previously noted, the goal is to start small, with the possibility to grow in the future and I’m basically starting with an EC2 instance, RDS instance for MySQL, S3 for storage and Amazon Cloudfront (CDN or content delivery network) for displaying S3 content. I also use Amazon Route 53 for DNS stuff which is a reliable service. With all of this I am basically able to get quite a sophisticated setup for about $150 per month. If the site takes of I am able to increase resources and even add a load balancer and for some resource intensive processes I plan on assigning EC2 instance for specific processes only which in the end enables me to take the load of presentation layer which are web servers. When it comes to backups I made specific S3 buckets in different regions/data centers.

Conclusion

Setting up WordPress on AWS is a great idea if you want to be able to scale and be prepared for the future and while I do agree this is overkill for most websites I’ve had a lot of fun playing with AWS and server configuration. I have so many ideas and am basically setup in a way I don’t foresee problems a lot of startups experience not being able to handle growth as I’m already setup in the right order. I just need to to add additional resources and services Amazon provides already as the site grows. Load balancers and Autoscaling are services Amazon provides which I plan on adding and I also plan on using Varnish once I grow and add additional EC2 instances for faster displaying as well as having separate EC2 instances for specific resource intensive tasks. I’m still playing around with my AWS setup and if you have any ideas or suggestions I’m all ears. Let me know in the comments below.