Configuración de desarrollo de Magento

23

Esta pregunta está dirigida a establecer el entorno de desarrollo. Tengo algunos requisitos específicos:

  1. Quiero poder usar mi solución en Linux, Windows y Mac OS, ya que las personas de nuestro equipo usan todos estos sistemas operativos (por ejemplo, los desarrolladores front-end usan Windows / Mac, los desarrolladores back-end usan principalmente Linux)
  2. Necesito usar modman
  3. Necesito usar compositor
  4. Necesito usar Github y mis repositorios privados de Git
  5. Necesito un IDE adecuado como Netbeans o PHP Storm
  6. Quiero muy buen rendimiento

Mi configuración actual es una imagen virtualizada de Ubuntu dentro de Virtualbox. Los tres SO pueden ejecutar Virtualbox, por lo que los puntos 1) - 5) están todos satisfechos.

Sin embargo, actualmente, no estoy completamente satisfecho con 6). Esto es especialmente cierto cuando se ejecuta la solución desde Ubuntu 12.04. Virtualbox parece mucho más estable y sensible en Windows 7. Sin embargo, muchas personas de nuestro equipo están usando Linux, por lo que me gustaría mejorar la solución.

¿Alguien tiene una configuración comparable en VMWare o tal vez incluso docker.io y puede informar si se ejecuta más estable? ¿O alguien tiene otras soluciones / ideas comparables?

mpaepper
fuente
¡buena pregunta! También hemos estado trabajando en una configuración similar pero aún no la hemos incluido en nuestro flujo de trabajo habitual. esperando las respuestas.
Anna Völkl
solo una idea rápida: ¿no sería posible trabajar sin la VM en Linux e instalar directamente todo lo que se ejecuta en la VM? o usas una VM para un proyecto?
Anna Völkl
¿Está ejecutando la máquina virtual sin cabeza o con una GUI? ¿Y cómo está sincronizando el sistema de archivos VM Image con el sistema host? ¿Carpetas compartidas? ¿Samba? (Asumo que el IDE se está ejecutando en el host, no en la VM). Eso puede hacer una gran diferencia.
Vinai
@ AnnaVölkl sí, sería posible, pero destruiría algunas de las ventajas. Por ejemplo, cada vez que actualice la imagen base, todos los usuarios de Linux tendrían que actualizar manualmente los cambios. Además, si desea llevar su caja de una computadora a otra (por ejemplo, trabajar en casa o en otro lugar), las cosas son mucho más difíciles.
mpaepper el
1
Como dijo Anna: también estamos trabajando en algo como esto. Estamos utilizando Vagrant para construir las imágenes de VM y esto está funcionando bastante bien. Como usted dice, el rendimiento (con respecto a la velocidad de E / S de archivo en carpetas compartidas) es lo principal en lo que tenemos que trabajar antes de cambiar. Para sistemas host Linux, los recursos compartidos NFS pueden ayudar. Nuestro gran problema es que la mayoría de nuestros desarrolladores usan sistemas host de Windows y, al contrario del enlace, el rendimiento de Windows no es bueno en absoluto. He escuchado esto de diferentes personas ahora, no somos solo nosotros.
Matthias Zeis

Respuestas:

8

Uso vagabundo, git y algún script de compilación en phing. La máquina vagabunda ejecuta la base de datos y el servidor web, git se usa localmente para rastrear los cambios en mis extensiones y el script de compilación utilizado para actualizar el /var/wwwdirectorio en mi máquina vagabunda (bueno, en realidad se usa en todas partes donde necesito construir un entorno).

Phing

Probablemente la parte más interesante es phing, que funciona como modman + composer para mí. Tiene pocos objetivos definidos, incluyendo compilación, configuración e instalación.

El destino de compilación descarga cierta versión de magento (especificada en la configuración de compilación) del servidor web interno y la extrae en el directorio de compilación. Luego ejecute otros objetivos que configuran permisos para archivos y limpie la memoria caché. Luego crea enlaces simbólicos a todos los archivos en el directorio fuente. Como resultado, obtengo todos los archivos listos para usar en mi directorio de compilación. Si los archivos principales de magento ya están en el directorio de compilación, omite la descarga y simplemente actualiza los enlaces simbólicos, por lo que uso este objetivo para reconstruir el entorno cada vez que necesito actualizar enlaces simbólicos. El directorio fuente de la máquina vagabunda está en /vagrant/src(carpeta compartida) y el directorio de compilación está /var/www.

El destino de instalación descarga e importa el volcado de la base de datos para ciertas versiones de magento. Luego ejecute el objetivo de configuración.

El objetivo de configuración simplemente crea un archivo local.xml con todas las configuraciones.

En mi empresa utilizamos herramientas de CI y pruebas unitarias, por lo que esta forma de crear un entorno de magento nos permite probar nuestras extensiones en diferentes versiones de magento y ejecutarlo con y sin instalación.

He creado un "acceso directo" en una máquina vagabunda que simplifica el acceso a la compilación. Por ejemplo, para reconstruir el proyecto, solo necesito escribir vagrant ssh -c magebuildy ejecutar automáticamente phing en el /vagrantdirectorio.

Luego he asignado este comando a cierta combinación de teclas en mi PHPStorm IDE y ahora puedo reconstruir el proyecto simplemente presionando Alt + B en mi IDE. Pero como uso enlaces simbólicos, no es muy frecuente su funcionamiento.

Vagabundo

Un cuadro para vagabundo es mi propio cuadro con Ubuntu 12.04 a bordo, en realidad es solo 12.04 estándar preciso con todo el software preinstalado + acceso directo y alguna configuración. En el archivo vagabundo pongo solo la configuración de reenvío de puertos, red privada para poder usar xDebug y poner acceso directo de compilación a las disposiciones.

GIT

En git solo rastreo mis archivos de extensión, build.xmlpara phing y Vagrantfile. Por lo tanto, todos los que quieran crear un entorno pueden simplemente clonar el repositorio y ejecutar vagabundo. Luego, pondrá la VM en funcionamiento lista para trabajar. Todo este proceso lleva 1-2 minutos. Si desea construir un proyecto localmente (sin usar VM) puede ejecutarlo phing build install.

Sergey Kolodyazhnyy
fuente
2

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.

B00MER
fuente