I'm looking for a solid foundation for a development infrastructure that utilizes CI/CD tools in accordance to today's best practices (dated end-of-year 2016). I want to have a setup for a solo development environment, but would appreciate tips on extending it for higher throughput and higher availability eventually; **if I were to start a company, what is the best foundation to do this at this moment in time to allow for dynamic growth?**

I understand that this is a broad question, and there are different ways to do this for different work flows across different stacks. I want to keep things fully open sourced and virtualized, though I don't mind answers that aren't as well. As long as it's fairly modular in terms of tooling, where I could kill a server and redeploy a different one with relative ease (e.g. if I wanted to switch from Puppet to Chef, I'd just kill the Puppet server and provision a Chef one).

Some tools that I'm familiar with (that I'm currently studying) that fulfills a role in the devOps architecture:

* Configuration Management: Puppet, Ansible
* CI: Jenkins, Travis CI
* Packaging/Deployment: Docker, LXC
* Version Control:Git, Github
* Logging: ELK Stack
* Virtualization/Provisioning: Vagrant, Virtualbox
* Cloud resources: DigitalOcean, AWS, Azure, OpenStack

I know I'm missing multiple components here (like security or storage), and I'd gladly take suggestions regarding that as well but I'm mostly concerned with these for the moment.

Some good resources of development [roles](https://mattkopala.com/blog/2012/01/08/building-a-development-infrastructure/) and [tooling](https://github.com/kahun/awesome-sysadmin) that I've looked at.