Hosting Services
Aside from development in Ruby on Rails, I also offer a professional hosting service to my clients so their sites are well looked after. To keep the service easy to maintain, I stand by a few key principals:
- Simplicity, the setup must be simple and easy to reproduce. You might be able to get a speed improvement from a complicated system, but it takes a lot more time to keep on top of and fix if anything goes wrong.
- As few backups as possible, by design. Backups take a lot of time to perform and there is always uncertainty that you have everything you need if the worst happens. By designing the system to only require backups on certain sections easily and automatically, confidence is maintained.
- No manual configurations. A server should be replaceable quickly and easily, there are only two ways to achieve this; documentation of manual commands which can all too easily become out of sync with the real setup, or automated tools that configure and prepare a system exactly the same each time. Automation wins.
- Transparency. There is nothing worse than being locked in with a single provider, I try to make it as easy as possible to put your data where you want it. In fact, if your service is popular enough to warrant the expense, I would recommend using a larger company with greater resources for your Rails web application such as Engine Yard, or Brightbox.
To achieve these principals, I use a specific set of tools and services which through experience I’ve found to be very reliable and work extremely well:
- Virtual Private Servers (VPS) – unless you have specific demands, I find it much better to have a small part of a much larger more reliable server than a smaller dedicated machine. They’re also quite considerably faster to provision and control remotely. Currently I use Tagadab in the UK who provide a reliable and professional service with great support. Slicehost is another great service in the US which I use in some projects.
- Server configuration management – servers are managed by writing code as opposed to commands. Chef from Opscode is fantastic for this.
- Remote storage – part of the backup policy, no user uploaded files should be stored on the servers. Amazon’s S3 service is excellent for this.
- Central Database Server – A single optimised server for all databases. Easy to backup, and a single location to keep secure as opposed to each web application having their own server. After many years with MySQL, I now use PostgreSQL for its performance, durability and close adhesion to standards.
- Version Control – web application source should always be stored under a version control system. Again, this is in part for backups, but will already be used by any responsible programmer. I use git.
- Automatic application deployment – an administrator should not be required for simple application updates or changes. Capistrano is a great tool used by (but not limited to) Ruby on Rails applications.
- Down-time detection – it happens, things go wrong. By using an external service constantly monitoring the servers and sending notifications by SMS problems can be fixed as soon as possible. Pingdom offer a global service for monitoring services which I’ve found very effective.
Please get in touch if you think I can help with your server setup.