I decided to take Cloud66 for a spin recently, after finding myself dissatisfied with the bespoke configuration management solutions I typically work with. I felt that there had to be something that gave me a Heroku/12-factor -like admin experience but atop hardware of my choosing. I have found this solution in Cloud66, and I am stunned that this tool doesn’t receive more attention. My impression is that, for applications of a certain shape, it is the solution that many companies are looking for but don’t know exists.
I say “applications of a certain shape” because I believe that Cloud66’s sweet spot is 12-factor-like Rails and node applications (Note: Cloud66 has a generalized container management product which I did not evaluate). If you haven’t read the 12-factor manifesto, it gives full context on the elements of a 12-factor architecture. An application of this shape typically has several stateless app servers, a functionally monolithic (though perhaps replicated) relational data store, and, most likely, a shared cache store (possibly consisting of several nodes). Environment configuration and logging are consolidated per-environment, and shared by all the nodes. You also likely have several staging servers of roughly the same arrangement and features (though these might be, for instance, consolidated on single hosts to save cost), and you want to easily be able to spin up more with ease.
If your app is of this shape, Cloud66 has a lot to offer. At a high-level, it delivers PaaS like ergonomics to hardware of your choosing. The specific service pairing I tried was the Rails/Rack stack with both Amazon Web Services and Linode.
The Cloud66 Rails offering works with an abstraction it calls “Stacks”. A stack is very directly comparable to a Heroku “app”, with a few small but noteworthy differences. Essentially a Stack represents a group of inter-dependent services. A typical Rails stack on Cloud66 could consist of 3 application servers (VPS instances running NGINX + Passenger), a load balancer, one database server, one cache server, and one job server. Cloud66 provides flexible administrative UIs for creating and modifying your stacks.
This administrative UI provides utilities for nearly every dimension of management and inspection that I can conceive: editing config file templates, running deployments, viewing aggregated logs, etc. There is also an official CLI called Cloud66 Toolbelt that provides simple SSH and log-viewing in terminal, in a addition to other utilities.
For each stack, you can create any number of environments. That is to say you can have a “production” environment, a “staging” environment, and any number of QA or per-developer environments.
One thing I noticed and was very impressed by is that Cloud66 integrates provider-specific solutions in a seamless way where possible. For instance, if the stack you are building must incorporate a load balancer, Cloud66 is able to seamlessly integrate Elastic Load Balancer if your provider is AWS, Linode’s NodeBalancer if your platform is Linode, DigitalOcean’s native Load Balancer product if your provider is DigitalOcean, etc.
You can clone a stack to use as a starting point for a new one. This is helpful if you, for instance, have specific service configurations (like Redis maxmemory policy, or non-standard NGINX configuration options) that you want to carry over to new projects.
Deployments with Cloud66 are straightforward. When you click the “deploy” button within your stack management screen, a deploy is kicked off with a deployment log streamed to your browser to review. Failures are as clear as with a Heroku deployment via git-push or a Capistrano deployment (I believe the Cloud66 Rails product is actually using Capistrano under the hood). There is also a “Deployments” tab in the UI where you can view a log of deployments (including who initiated and the status).
I have been extremely impressed with Cloud66 in the time I have spent evaluating it. I should note that Cloud66’s product line is more than just the Rails offering I evaluated. There is a container-management product called Mestro, a CI offering (Skycap), in addition to a Node.js-specific solution, all of which I did not evaluate. The Rails solution, however, I have been incredibly impressed by, and hope to have opportunities to try out at scale some time.