Before 2 days ago I used Heroku for everything.
PS. Rails.
Definitely worth a look
I have experimented with EC2 Beanstalk and AWS OpsWorks. Both are horrible, and I do not recommend them. The documentation is incredibly obscure, with gaping holes for even basic use cases and I found the deployments themselves to be slow to complete, and unreliable, frequently having issues that were extremely hard to diagnose because of hard to access logs and cryptic error messages.
Git is by far the best deployment system in my opinion, especially if you can automate the code to get each server instance to automatically pull when needed.
But for beginners Beanstalk (http://beanstalkapp.com) is the absolute best. It is dead simple to set up a Git repo on the service, and then Beanstalk's servers will automatically deploy via SFTP to servers (or even directly to Amazon S3 for static content, even invalidating CloudFront caches), and you instantly have a secure deployment mechanism out of the box with no fiddling required.
With Node.js code if you are running your server through Forever you can easily configure it to watch the code directory for changes and restart the server when needed. End to end setup is extremely quick, and it is incredibly reliable.
Unfortunately at work we're still on svn...
If it helps, I'm an iOS developer, so git isn't realy an option for deployment.
Edit: I guess if I put a different perspective on it, I deploy my open source tools through GitHub and a good commit system. GitHub is pivotal for getting those tools in front of the largest amount of programmers as possible.
We're working on a deployment manager based on Substack's fleet.
https://github.com/substack/fleet https://github.com/PinionTech/rear-admiral
2. Apache ANT for the build script
3. Then back out to a production/tarball git repo
4. Every load balanced server image has a cron job to poll the production git for changes
This way all I( or my team members) have to do is push to git.
Everything else is automated. All servers load balancing will keep themselves up to date.
If QA passes, then we just merge the changes to master, push and deploy to production servers.
Bamboo has a nice variety of test suites you can run too.
I really like that git(via bitbucket) and bamboo notify hipchat of any build failures/updates so we can respond immediately if something serious actually goes wrong.
1. Stash pushes git change notification to bamboo 2. Bamboo checkout git and run cucumber tests on ec2 3. Green tests means puppet changes are pushed to puppet master under staging env 4. Manual build step to push to prod env 5. All affected infra will pickup puppet changes on next run
Chef - because it's so easy to write cookbooks
Caterer - because the push model is clean, and it has a similar workflow to Vagrant.
Couldn't give it a try yet, but seems rather interesting
Shouldn't Heroku be on this?
Beanstalk has components that I can figure out on my own and the command line tools are easy enough...I'm currently stuck on figuring out when the hell it decides to set the DB user and password, despite what I've explicitly set it...so I know what's going wrong, but the whole settings part is much more annoying than it was on Heroku (even without trying to do anything too complicated). But EC2 has the full suite of services I need so I'll stick with it for now. I expect that once I'm comfortable with BeanStalk, it won't be hard to just migrate to old fashioned EC2 and capistrano.
BeanStalk's support for Rails is relatively recent so the lack of questions on StackOverflow is probably why I'm struggling
Please read http://en.wikipedia.org/wiki/Software_deployment