I'm not a web developer but I have a side-project that runs on a cobbled together EC2 instance. The server state is in theory documented in a set of of shell scripts and virtualenv requirements files. I know that I should be doing this in a more robust way but whenever I try and read up on configuration management tools like Puppet and Chef, they're all described in comparative terms - Puppet does X better than Vagra…
When you want to change the state, you edit the file - say, to add a package.
At any point you can set up an entirely new server from scratch using that same code.
You can't do that easily with bash scripts.
(you could if they worked like virtualenv requirements files but that only works for python's virtualenv...)