I understand the advantages of using Chef and puppet in a multiserver environment. Its fantastic for enforcing and describing configuration across many servers.
But lets say you have a single server, what advantage does chef-solo
give you over simply manually configuring the server? I love chef, but I can't think of a reason why taking the time to setup chef-solo is worth the hassle on a single or even 2 server architecture, but apparently people do it.
Disclaimer: I am one of the developers of Puppet, another tool in the space.
The advantages of using Chef on a single node are the same as using it on multiple nodes: you declare how the system should be, in a form that is easy to version control, backup, audit, and change.
Chef will then go ahead and make sure your system stays that way: if something breaks, it fixes it. If something changes, it reverts it. You end up solving problems once, not every time they crop up.
You also end up with a single place to look to understand the server. You don't need to go investigate the details of the HTTP configuration, you can just look in Chef.
The cross-machine value of tools like Chef is there, but you get the vast majority of the benefits from getting them in place at all - even on a single machine.
I went on about in a blog post from January. Eventually, you'll have to migrate that machine, replace it, setup a new one, run a test build, etc. Also, everything is documented in one place, so anybody else who has to look at the machine can tell what is going on without having to hunt around the system.
Like it says above: Every time I get another machine, I have to add a user account, copy ssh keys, install the packages I am familiar with, etc. It gets old. You do it once, do it in one place, and know it's going to perform that action every time. If you ever get a second machine or need to make a new build of the current one, you'll be almost there the moment you start.