When we started developing web solutions with eZ Publish in 2004, the architecture was simple. We had a Linux operating system, an Apache web server, a MySQL database, and PHP runtime as an Apache module. You know this architecture by its LAMP acronym.
Over the years, things got a bit more complicated due to performance reasons and because some other tools were suitable for some specific features. The situation exploded with the new stack and eZ Platform. We are now on LNMpPf7VHMS as our default architecture with the possibility of adding a few more letters in the near future.
A long, long time ago we used only one tool for syncing development instances with production environments - FTP. Over the years, we at Netgen improved slowly but are still not where we want to be. The main problem is that we have many projects and clients with different infrastructure in type and size. It is very hard to consolidate the process in that situation. Here is what we have managed so far using Vagrant, Ansible, and PhpStorm.