title: How is deployment to Production done from local VirtualBox / Vagrant development environment?
body: <p>Recently I started to read about building development environments with virtualization software (I am a beginner) and it seems that 'infrastructure as a code' is a really powerful concept.</p>
  
  <p>I really like the workflow structure described <a href="http://blog.csanchez.org/2014/02/20/security-testing-using-infrastructure-as-code/">here</a>:</p>
  
  <ol>
  <li>The same base VirtualBox image is used around the team</li>
  <li>Vagrant is used to quickly 'build up' and 'provision' such an image to a needed configuration with the help of</li>
  <li>Chef (or Puppet) recipes which is the only piece of code needed to be put under version control.</li>
  </ol>
  
  <p>However, I still do not quite understand how the code is transferred and deployed on Production servers.</p>
  
  <p>As I understand, the common way of keeping DEV and PROD environments identical is to manage the Production server instance as just another virtual image to be provisioned with Chef. I can have exactly the same OS installed on the Production server as I (and the team) use daily with VirtualBox-Vagrant-Chef. </p>
  
  <p>But the Production server can have hardware which differs from that in the virtual guest OS and this might lead to inconsistencies again.</p>
  
  <p><strong>So, here is the question:</strong></p>
  
  <p>What is the known and common best practice to transfer and deploy code to a Production server from a development environment which is managed with the VirtualBox-Vagrant-Chef toolchain? Does this practice allow any continuous deployment?</p>
  
  <p>[Edit]: Note: Is there any practice of running the same VM instance provisioned with Chef/Vagrant on the Production server, like it is depicted on this <a href="http://thebpmfreak.wordpress.com/2012/10/20/introduction-to-vagrant/">diagram</a>?</p>