Gestión de Magento / Compositor / Implementación

18

Por lo tanto, disfruto usando el instalador de hackathon Magento Composer, pero me cuesta entender cómo otros lo usan en relación con un servicio de implementación. Actualmente estoy usando DeployHQ, y sí, puedo configurarlo para implementar y ejecutar Composer cuando hay una actualización del repositorio, pero esto no tiene sentido para mí ahora.

Mi repositorio principal de compositor, que contiene solo el archivo json de todos los paquetes que quiero incluir en mi compilación, solo se actualiza cuando agrego un nuevo paquete a la lista.

Cuando actualizo mi tema o extensión personalizada (a la que se hace referencia en el archivo json), no hay un "gancho" para actualizar mi servicio de implementación. Así que tengo que iniciar sesión en mi servidor y ejecutar manualmente Composer (que desactiva el sitio hasta que está terminado).

Entonces, ¿cómo manejan esto los demás? ¿Debo ejecutar el compositor solo localmente e incluir la carpeta del proveedor en mi repositorio?

Cualquier respuesta sería muy apreciada.

JamesAllwood
fuente
44
Estoy votando para cerrar esta pregunta como fuera de tema porque se trata de Composer.
mbalparda
1
Hola, específicamente, está relacionado con el uso de Magento con el compositor, y más específicamente con la funcionalidad de hackathon de Magento. ¡Así que creo que has sido algo prematuro al respecto!
JamesAllwood
Es realmente complejo de explicar, pero lo intentaré: dado que creo que esta pregunta no está relacionada con Magento y crees que sí, la marqué como fuera de tema. Si un moderador u otros 4 miembros deciden que debe cerrarse, lo hará. Si no, permanecerá abierto. El mensaje es automático cuando marca la pregunta como fuera de tema. Y ciertamente está fuera de tema porque el tema principal es el compositor, vinculado a Magento, pero puede aplicarse a cualquier otra instalación de software y, en mi opinión, podría pertenecer a un sitio sobre servidores / implementaciones y no a Magento SE.
mbalparda
1
Chicos, esta pregunta ha recibido 2 votos y un favorito. ¿Seguramente permitir que alguien responda esta pregunta no puede hacer daño? AYUDARÁ a otros en la comunidad
MAGENTO
@JamesAllwood, ¿cómo te fue con esto?
jharrison.au

Respuestas:

13

He establecido una estructura en nuestra agencia que nos permite usar Composer para implementar todos nuestros sitios de Magento. Esto podría ser un poco exagerado para la pregunta que hizo, pero de todos modos aquí hay una descripción básica de la estructura:

Estructura del repositorio

A continuación se muestra la estructura de carpetas del repositorio 'padre'. Contiene el compositor JSON y los archivos de bloqueo y otras configuraciones necesarias para la implementación.

- code
   - magento
- deployment
- environmental
   - local
       - local.xml
       - robots.txt
   - staging
       - local.xml
       - robots.txt
   - production
       - local.xml
       - robots.txt
- provisioning
- public
   - index.php
- vendor
- composer.json
- composer.lock
  • Todas las personalizaciones específicas del cliente se almacenan en un módulo separado de "personalizaciones" que se instala usando Composer
  • El núcleo de Magento se incluye como un submódulo Git ( code/magento)
  • Las index.phpcarpetas personalizadas y otras, como medios y errores, se encuentran dentro de una carpeta pública fuera de la raíz de Magento
  • Los archivos específicos del entorno (local.xml, robots.txt, etc.) se enlazan a la raíz de Magento durante el proceso de implementación
  • La carpeta del proveedor se excluye de Git, pero se incluye el archivo composer.lock.

Despliegue

  • Implementamos usando Capsitrano que permite múltiples servidores y entornos de aplicaciones (puesta en escena / producción)
  • Capistrano construye toda la base de código en el servidor en una nueva carpeta y luego intercambia el enlace simbólico de raíz web al final, lo que significa que no hay tiempo de inactividad para su sitio web.
  • Capistrano se ejecuta composer installdurante la compilación y despliega todos los módulos en el submódulo Magento.

Todavía no se trata de una configuración de integración continua, pero creo que funciona bien para los sitios de Magento. No dude en enviarme un mensaje si desea más consejos específicos para su configuración.

jharrison.au
fuente
1
Es una vieja respuesta, pero espero que puedas responderla. 1 ¿No es el almacenamiento de producción local.xml un problema de seguridad? 2 ¿En qué etapa y cómo importa la base de datos?
MployPor
5

Otro método es utilizar la estrategia de implementación de copia de hackathons de magento, que se parece a esto en su archivo composer.json:

"extra": {
    "magento-root-dir": "./",
    "magento-deploystrategy": "copy",
    "magento-force": true
}

El uso del método anterior copia los archivos instalados del proveedor a la instalación real, lo que permite que se confirme en Git y se implemente de forma normal, sin tener que realizar ninguna instalación del compositor.

No soy un gran admirador de extraer repositorios de terceros cuando está a punto de hacer una implementación en vivo, y depender de repositorios de terceros es un poco arriesgado, a menos que tenga algún tipo de caché proxy para su red .

Lea este artículo y le dará una perspectiva diferente: http://www.letscodejavascript.com/v3/blog/2014/03/the_npm_debacle

Básicamente, NPM dejó de funcionar (más o menos ...) y los sistemas de compilación de todos dejaron de funcionar (¡para implementaciones críticas!) Porque dependían directamente de NPM. (NPM es como Packagist para Javascript, excepto que NPM en realidad aloja el archivo y Packagist solo señala los repositorios de módulos de Github; corrígeme si me equivoco)

editar: solo la respuesta de fschmengler rojo .. Esta es una elaboración de su primer enfoque

Erfan
fuente
4

Es importante comprender que Composer no es una herramienta de implementación, sino una herramienta de desarrollo.

Existen diferentes enfoques para preparar una implementación con todas las dependencias:

  • comprometer el directorio de proveedores (o donde sea que el compositor instale las fuentes) en el repositorio del proyecto
  • use un servidor de compilación que se ejecute composer instally cree un archivo con el resultado, que puede implementar repetible en diferentes sistemas de destino
    • ejecutar composer installen el servidor y luego cambiar los enlaces simbólicos como sugiere @ jharrison.au es una variación de este

Aparte de eso, no recomiendo usar el compositor para cada módulo y solo mantenerlo composer.jsony composer.lock en el repositorio del proyecto. Esto es exagerado y hace que el desarrollo sea innecesariamente complicado. Tiene perfecto sentido para el código que se reutiliza en varios proyectos, pero ¿por qué colocaría el código específico del proyecto en repositorios separados?

La estructura de mi proyecto actual se ve así (usando los instaladores de compositores alternativos de AOE ):

  • srccontiene todos los módulos específicos del proyecto. Composer también instala cualquier otro módulo de Magento aquí
  • .modmanenlaces para srcque modman pueda manejar el enlace simbólico fácilmente
  • wwwes el webroot Composer instala el núcleo de Magento aquí

De esta manera incluyo módulos externos en el repositorio. Si prefiere no hacerlo, ajústelo así:

  • srccontiene todos los módulos específicos del proyecto. Para incluirlos de .modmanmodo que modman cree enlaces simbólicos, usemodman link
  • .modmanestá en .gitignore. Composer instala módulos de Magento aquí
  • wwwes el webroot Composer instala el núcleo de Magento aquí
Fabian Schmengler
fuente