Actualmente mi entorno de desarrollo es Ubuntu v12.04 con VMWare. Trabajo completamente dentro de la VM, con GUI completa y solo uso el intercambio de archivos samba dentro de Ubuntu si necesito acceder a los archivos desde mi sistema operativo host que es Windows 7. Normalmente accedo y mapeo una unidad de red a través de la IP interna del VM a través de NAT para redes a la VM. El uso de otras soluciones demostró ser mucho más lento como las carpetas compartidas de VMWare. Tengo esto deshabilitado en la configuración de mi imagen VMWare. Sin embargo, instalo herramientas VMWare para permitir copiar / pegar fácilmente en mi máquina host y viceversa.
Como señaló Matthias Zeis, tenga cuidado en su selección de redes / carpetas compartidas con su VM, ya que algunas resultarán problemáticas.
Fui usuario anterior de VirtualBox pero descubrí que VMWare es más estable y funciona de manera aceptable (al menos para mí). Sin embargo, realizaría sus propias pruebas para satisfacer mejor sus necesidades y requisitos, es decir. Vagrant usa VirtualBox.
IDE:
Estaba usando Netbeans ampliamente como mi IDE de elección, pero desde entonces me mudé a una solución más liviana como Sublime Text 2 . Raramente abriré Netbeans principalmente para propósitos de X-Debug y Refactorización más fácil. Netbeans, PHPStorm, Eclipse, etc. son todos IDE basados en Java y pueden consumir muchos recursos.
HARDWARE:
para agregar más, el hardware siempre será un papel clave en el rendimiento (obviamente). Si sus desarrolladores todavía usan HDD en bandeja, buscaría invertir en SSD para ellos. Dado que Magento tiene una gran cantidad de archivos / carpetas, acelerará enormemente el rendimiento de los desarrolladores. Durante el desarrollo: con todo el almacenamiento en caché apagado, y mientras recorre simplemente el árbol de carpetas en SVN / GIT o su IDE. Darle a su VM suficiente RAM también es igual de importante.
Mi máquina host: Samsung SSD 512GB de espacio en disco, Win7 (64bit), 8GB RAM, i7 2.4GHz (8 núcleos)
Mi máquina VM: Samsung SSD, 30GB de espacio en disco, Ubuntu 12.04 (32bit), 3GB RAM, i7 (4 núcleos asignados).
PREGUNTAS PARA HACER:
La pregunta más importante es crear una imagen de VM de desarrollador que sea liviana y reutilizable en múltiples proyectos, o crear una imagen por proyecto. Anteriormente estaba tratando de hacer máquinas virtuales más pequeñas por proyecto, sin embargo, la reconfiguración constante para ir con mi flujo de trabajo de desarrollo se convirtió en una tarea demasiado pesada, y ahora uso una máquina virtual más grande y hago todo lo posible para mantener cada proyecto lo más aislado posible.
Mantener OS, IDE, LAMP Stack, actualizaciones / configuraciones, etc. puede convertirse en una tarea rutinaria si se seleccionan varias VM por proyecto. En última instancia, conduce a un mayor tiempo de desarrollo (y peor aún al tiempo no facturable para configuraciones de entorno local).
Esto también ha resultado útil, ya que pude acceder rápidamente a otros archivos de proyecto sin la necesidad de abrir una nueva VM y cortar aún más mi hardware Host. La desventaja es que idealmente desearía que cada proyecto se separase de otros proyectos para evitar problemas imprevistos con el medio ambiente (es decir, php.ini, my.cnf, httpd.conf, etc.). Hasta ahora, la compensación de tener todos los proyectos fácilmente accesibles ha resultado ser más ingeniosa.
Nuevamente, esto depende de sus requisitos y necesidades, así que evalúelos de antemano.
COMENTARIOS: lo
que lleva a la retroalimentación. Obtenga tanta información de sus desarrolladores como sea posible. En última instancia, se deben cumplir sus requisitos y comprender sus problemas antes de que se pueda establecer y poner en práctica una solución adecuada. Todos tienen flujos de trabajo diferentes, y no todos se sienten cómodos trabajando en el sistema operativo que puede elegir para el desarrollo. Mi regla general es dejar que el desarrollador elija su sistema operativo e IDE con el que se sienta más cómodo y con el que se desempeñará mejor. Por lo tanto, incluso una máquina virtual Linux sin cabeza ligera puede resultar útil para sus necesidades, pero obviamente puede encontrarse con el problema de compartir las carpetas en la red local entre el Host y la VM.
PORTABILIDAD:
También he jugado con la idea de mantener mi imagen de VM en algo como Dropbox para poder acceder fácilmente en cualquier momento que lo necesite. Como los servicios como Dropbox se comparan poco a poco con lo que está almacenado, parece lógico que solo se sincronicen los bits que he cambiado. Sin embargo, este no resultó ser el caso, ya que creo que tiene que ver con lo interno de cómo se guarda el archivo de imagen, y estaría esperando todo el día / noche solo para que mi VM se sincronice.
NOTAS:
Cuanto mayor sea el espacio de disco asignado a la VM, mayor será la imagen, tenga esto en cuenta al distribuir la imagen a sus desarrolladores. La carga frontal de sus archivos de proyecto por proyecto puede ser exagerada y dejaría esto a cada desarrollador para configurar después de que tengan la imagen creada.
Ashley Schroder tiene un artículo relacionado algo antiguo que es una buena lectura, así como algunos de los comentarios de Fooman y Colin.
Esperemos que esto ayude con una idea de su elemento de problema enumerado, # 6.