Atualmente, meu ambiente de desenvolvimento é o Ubuntu v12.04 com VMWare. Trabalho inteiramente dentro da VM, com GUI completa e só uso o compartilhamento de arquivos samba no Ubuntu se precisar acessar os arquivos do SO host que é o Windows 7. Normalmente, eu acesso e mapeio uma unidade de rede através do IP interno do VM via NAT para conexão em rede com a VM. O uso de outras soluções mostrou-se muito mais lento como as Pastas Compartilhadas do VMWare. Eu tenho isso desativado nas minhas configurações de imagem do VMWare. No entanto, instalo as ferramentas VMWare para facilitar a cópia / pasta na minha máquina host e vice-versa.
Como Matthias Zeis apontou, tenha cuidado na seleção de pastas de rede / compartilhadas com a sua VM, pois algumas se mostrarão problemáticas.
Eu era usuário anterior do VirtualBox, mas achei o VMWare mais estável e com um desempenho aceitável (pelo menos para mim). No entanto, eu faria seus próprios testes para melhor atender às suas necessidades e exigências, ou seja. O Vagrant usa o VirtualBox.
IDE:
Eu estava usando o Netbeans bastante como meu IDE preferido, mas desde então mudei para uma solução mais leve como o Sublime Text 2 . Eu raramente abrirei o Netbeans principalmente para fins de X-Debug e para refatoração mais fácil. Netbeans, PHPStorm, Eclipse, etc. são todos IDEs baseados em Java e podem consumir muito recursos.
HARDWARE:
Para adicionar mais, o hardware sempre será um papel fundamental no desempenho (obviamente). Se seus desenvolvedores ainda estiverem usando o disco rígido de prato, eu gostaria de investir em SSD para eles. Como o Magento possui uma quantidade muito grande de arquivos / pastas, ele acelerará bastante o desempenho dos desenvolvedores. Durante o desenvolvimento: Com todo o cache desativado, e Enquanto simplesmente percorre a árvore de pastas no SVN / GIT ou no seu IDE. Também é importante fornecer RAM suficiente à sua VM.
Minha máquina host: Samsung SSD de 512 GB de espaço em disco, Win7 (64 bits), 8 GB de RAM, i7 2,4 GHz (8 núcleos)
Minha máquina VM: SSD Samsung, 30 GB de espaço em disco, Ubuntu 12.04 (32 bits), 3 GB de RAM, i7 (4 núcleos alocados).
PERGUNTAS A SEREM FEITAS:
A maior pergunta é: criar uma imagem da VM do desenvolvedor que seja leve e reutilizável em vários projetos ou criar uma imagem por projeto. Anteriormente, eu estava tentando fazer VMs menores em uma base por projeto, no entanto, a reconfiguração constante para acompanhar o meu fluxo de trabalho de desenvolvimento tornou-se uma tarefa árdua, e agora use uma VM maior e faça o possível para manter cada projeto o mais isolado possível.
Manter o SO, IDE, LAMP Stack, atualizações / configurações etc. pode se tornar uma tarefa árdua se várias VMs por projeto forem a rota escolhida. Por fim, levando a um tempo de desenvolvimento mais longo (e ainda pior, não faturável, para configurações do ambiente local).
Isso também se mostrou útil, pois pude acessar rapidamente outros arquivos de projeto sem a necessidade de abrir uma nova VM e dividir ainda mais o hardware do meu host. A desvantagem é que, idealmente, eu gostaria que cada projeto fosse retirado de outros projetos para evitar problemas imprevistos no ambiente (por exemplo, php.ini, my.cnf, httpd.conf, etc.). Até agora, a troca de ter todos os projetos facilmente acessíveis se mostrou mais engenhosa.
Novamente, isso depende de seus requisitos e necessidades; portanto, avalie-os com antecedência.
FEEDBACK: O
que leva ao feedback. Obtenha o máximo de informações possível dos seus desenvolvedores. Por fim, seus requisitos precisam ser atendidos e seus problemas entendidos antes que uma solução adequada possa ser configurada e posta em prática. Todo mundo tem fluxos de trabalho diferentes e nem todos se sentem à vontade trabalhando no sistema operacional que você pode escolher para o desenvolvimento. Minha regra geral é permitir que o desenvolvedor escolha o SO e o IDE em que se sente mais confortável e com melhor desempenho. Portanto, mesmo uma VM linux sem cabeça leve pode ser útil para suas necessidades, mas obviamente pode ocorrer o compartilhamento de pastas na rede local entre o Host e a VM.
PORTABILIDADE:
Também brinquei com a idéia de manter minha imagem da VM em algo como o Dropbox para que eu pudesse acessá-la facilmente a qualquer momento que eu precisar. Como serviços como o Dropbox se comparam pouco a pouco do que é armazenado, parecia lógico que apenas os bits alterados seriam sincronizados. No entanto, isso não foi o caso, pois acredito que tenha a ver com os aspectos internos de como o arquivo de imagem é salvo, e eu ficaria esperando o dia / noite apenas para que minha VM fosse sincronizada.
OBSERVAÇÕES:
Quanto maior o espaço da unidade alocado para a VM, maior será a imagem, lembre-se disso ao distribuir a imagem aos desenvolvedores. O carregamento frontal dos arquivos do projeto por projeto pode ser um exagero e eu deixaria isso para cada desenvolvedor configurar depois que eles criarem a imagem.
Ashley Schroder tem um artigo relacionado um tanto antigo que é uma boa leitura, além de alguns comentários de Fooman e Colin
Esperemos que isso ajude a entender o item listado do problema, nº 6.