I use a lot of these tools daily. The short answer is you want to start using
Ansible. The longer
Which features do you need?
Since you're just starting you will want to focus on simple cases, i.e. setting up a single node LAMP server for instance. However as you get comfortable with the basic idea, you may want to define your needs more specifically:
- Do you want the tools to do the machine provisioning for you? Do you need a virtual machine locally? A Cloud instance? A physical server? And more importantly do you need your configuration management tool to be in charge of this?
- Do you need an orchestrator? All of these tools present ways to manage orchestration, i.e. managing the order in which your configuration is applied. This is always useful for multi node deployments
Obviously you'll find different tools for different jobs. Vagrant is used for local VM provisioning, Puppet uses MCollective for orchestration and cloud providers provide APIs you can plug into every one of these tools.
Pick your file format
Assuming you have no particular needs, you want to focus on the format/DSL used to manage your configuration. Here are the ones I've worked with:
- Puppet: Puppet uses a specific DSL to describe your configuration.
- Chef: Very similar to Puppet, its DSL is very familiar to Ruby developers
- Ansible: My current favorite, uses Yaml files for description. I find their format to be the easiest to reason with
I'm not familiar with Salt, but from what I've seen it looks like a pretty complete system.
Quick note about masterless deployment
Last time I played with Puppet and Chef, they required a single node to act as master, which is a major pain in the butt. Salt and Ansible quickly grew in popularity because they do not require a master at all. This shouldn't affect you too much if you deploy everything on a single node.