I've got a fun challenge for you all. A company I'm working with is setting up its development/release workflow and environments. The eventual production environment is a VPS hosted with a popular host running CentOS within a Virtuozzo virtualization environment.
We'd like to install a virtualized instance of the production environment (or something close to it) to each developer's local system. This will allow each developer to test changes locally on his/her own system without tainting anyone else's system when things go wrong.
Clearly, there are many ways to do this, but I imagine there's a specific approach that is superior. This is where I need your help.
So far, the best options seem to be as follows.
Export/Back up the Virtuozzo VM. Download it to a local system and install it into a Virtuozzo Container.
This is the cleanest/purest solution, but it may not work. The cloned VM would still have all of the network configuration from the VPS' network, for example. Would it be hard to write a script to update these (and any other old configuration values) so they are more appropriate for the local VM?
Deploy the codebase to a similarly configured VM created in an arbitrary virtualization product.
This approach isn't as clean, but I know it can work (I've done it before). For example, we could install the same version of CentOS, Apache, MySQL, etc. to a local VMWare VM. The environment wouldn't be identical to the production environment, but it might be close enough to make this workflow feasible.
Another option?
What other options do you think there may be? Or, is one of these options the best? I'd love to hear your thoughts! :)
Edit:
Multiple cPanel/user accounts on the production server
I contacted our VPS' customer support to see if I could obtain access to the Virtuozzo backups; he denied our request but suggested that we might try creating a separate cPanel/user account for each developer. This would allow the environment to be identical to that of the server, but would be a little more inconvenient since the environment would still be running remotely instead of locally. Still, a decent option.
This will work perfectly for you ...
On the source VM instance ...
On the target machine (dedicated or VPS)
And make sure any dirs excluded are re-created
You could just create a nice Microsoft VirtualPC Linux image and hand it out to everyone