GIT y estrategia de implementación de proyectos Magento2

92

Con Magento 1 utilicé una herramienta de implementación que extrajo el repositorio GIT, ejecuté comandos como modman deploy-ally me aseguré de que el vardirectorio se pudiera escribir. Para el .gitignoreusé este que funcionó bastante bien.

¿Pero qué hay de Magento 2 ?

Qué gitignore funciona mejor, cómo implementa su proyecto y qué comando se debe ejecutar antes y después de la implementación. Esperamos escuchar algunas ideas de la comunidad.

La pregunta permanecerá abierta durante bastante tiempo.

Sander Mangel
fuente
Buena pregunta @sander Mangel
Amit Bera
1
Por definición, no puede haber una respuesta canónica a esto, por lo que es probable que sea demasiado amplio y que no sea adecuado para la naturaleza de preguntas y respuestas del sitio. Probablemente debería ser meta. Pero ya lo sabes. Dicho esto, lo permitiré hasta que expire la recompensa.
philwinkle
@philwinkle puede ser amplio pero aparentemente no demasiado amplio ya que se dieron 3 respuestas. Como se discutió aquí: meta.magento.stackexchange.com/questions/745/… Meta se utilizará para preguntas sobre MageSE, no para publicaciones / preguntas aleatorias. Si desea eliminarlo, no puedo detenerlo, pero parece que hay muchas la gente está interesada en la pregunta y, en mi opinión, es válida, aunque no sea demasiado específica.
Sander Mangel
Dos cosas: Primero, Sander tiene razón sobre Meta: solo debe usarse para preguntas sobre la plataforma SE en lo que se refiere a Magento SE (NB: tal vez no hemos vigilado a Meta lo suficiente como para reforzar esta regla). Segundo, "mucha gente [interesada] en" una pregunta no tiene nada que ver con si una pregunta puede ser respondida canónicamente o no (y, por lo tanto, con la idoneidad de una pregunta para el formato StackExchange). Es frustrante seguro (me he enfrentado a esto yo mismo). Me inclino a ver a dónde va este hilo de preguntas y respuestas. Tal vez una A pueda expresarse lo suficientemente bien como para ser exclusivamente "correcta" ...
Benmarks
@benmarks en ese caso Elegí la razón o el tema incorrecto para la recompensa, mi motivación fue recompensar a quien se tomó el tiempo para escribir una respuesta completa para esto. Si este hilo no pertenece aquí, lo copiaré y lo publicaré en algún lugar en línea acreditando a los autores, ya que siento que todavía tiene valor. Notifíqueme si antes de eliminar
Sander Mangel

Respuestas:

56

Los pasos a continuación describen cómo configurar el entorno para el desarrollo de módulos personalizados, no para la producción.

Inicializacion del proyecto

  1. Agregue credenciales repo.magento.com y token de acceso github a auth.json en el directorio de inicio del compositor
  2. Cree un proyecto con el siguiente comando:

    composer create-project --repository-url=https://repo.magento.com/ magento/project-community-edition .

  3. Tome este .gitignore y póngalo en la raíz de su proyecto. Casi todos los archivos / directorios principales ya están agregados a la raíz .gitignore, pero es mejor agregar también los siguientes 2 /updatey /phpserver(solo agregue estas 2 líneas a .gitignore)

  4. Inicializar nuevo repositorio git en la raíz del proyecto
  5. Agregue todos los archivos no rastreados a git y confírmelos
  6. Inicie el desarrollo de sus módulos como de costumbre (póngalos debajo app/code/VendorName/ModuleName), ahora solo tendrá su código personalizado en su repositorio git

Instalación de Magento

  1. Asegúrese de que todos los permisos del sistema de archivos estén configurados como se describe en la guía oficial
  2. Instale Magento usando la línea de comando, por ejemplo:

    ${project_root}/bin/magento setup:install \ --db-host=localhost \ --db-name=magento \ --db-user=root \ --backend-frontname=admin \ --base-url=http://base.url.goes.here/ \ --language=en_US \ --timezone=America/Chicago \ --currency=USD \ --admin-lastname=Admin \ --admin-firstname=Admin \ [email protected] \ --admin-user=admin \ --admin-password=123123q \ --cleanup-database \ --use-rewrites=1

  3. Habilitar indexadores cron trabajo, por ejemplo, en Ubuntu:

    echo "* * * * * php ${project_root}/bin/magento cron:run &" | crontab -u www-data -

  4. Magento se ejecutará en defaultmodo y todo el contenido faltante se generará automáticamente a la primera solicitud. Por lo tanto, no es necesario ejecutar el compilador o la implementación de contenido estático
  5. [opcional] Si usa PHP Storm, ejecute el siguiente comando para habilitar la compatibilidad con XSD:

    bin/magento dev:urn-catalog:generate .idea/misc.xml

Alex Paliarush
fuente
Hola Alex. Proyecto inicialización paso 3: ¿podría ampliarlo un poco? ¿Descubrió que tenía que copiar manualmente ese subdirectorio a la raíz? (Me pregunto si hay algo que no funciona correctamente, no esperaba ese paso)
Alan Kent
@AlanKent actualmente descarga todos los archivos relacionados con Magento vendor, incluido magento2-base, que es solo un esqueleto para un nuevo proyecto. No estoy seguro de por qué este paso no está configurado para ser realizado automáticamente por el compositor, intentaremos averiguarlo. Con respecto a la .gitignorecopia de otro repositorio, ya se está discutiendo cómo eliminar / simplificar este paso.
Alex Paliarush
El paso 3 no es obligatorio. La organización de los archivos / carpetas se realiza durante el paso 2.
Maddy
Gracias @ Maddy. @AlanKent, la copia magento2-basea la raíz ya no es necesaria (solo verificada), parece haberse solucionado recientemente. Se eliminó este paso de la respuesta.
Alex Paliarush
1) Puse todo mi código en el repositorio, ya sin instalar y todo, cuando saco de ese repositorio y solo cambio la configuración para el administrador pangel y las credenciales de db, ¿funcionará todo correctamente? 2) dado que olvidé excluir la carpeta var / y pub / durante la inserción, ¿puedo eliminarlos por completo, para que puedan eliminarse en el repositorio remoto, se regenerarán? Gracias.
Lachezar Raychev
25

Para la inicialización e instalación, siga los pasos de Alex, su respuesta para la mayoría de los pasos, solo las diferencias que recomendaría:

Configuración de Git

Solo almacene los siguientes archivos en su repositorio de Git:

  • composer.json
  • compositor.lock
  • app / etc / config.php

Para el código personalizado de su proyecto, también use módulos separados que incluya a través del compositor. Administrar este thru composer es más fácil, ya que puede bloquear una versión / lanzamiento específico que desea implementar. Esto también lo obliga a usar el mismo enfoque para los módulos internos y externos.

Despliegue

Durante el desarrollo, actualiza los módulos en su entorno (dev / test) con el comando:

composer update

Esto actualizará el archivo composer.lock con las versiones instaladas en esa instalación.

En la preparación / preproducción / producción puede crear / instalar la misma configuración con el comando:

git pull
composer install

Esto instalará todos los mismos módulos que se utilizan en dev / test para garantizar que las pruebas antes de publicar en producción se realicen con las mismas versiones de módulos con las que se desarrolla.

Después de la instalación para ejecutar los siguientes comandos:

bin/magento setup:upgrade
bin/magento setup:di:compile (or setup:di:compile-multi-tenant)
bin/magento setup:static-content:deploy

Esto actualizará la base de datos (esquema y actualización de datos), generará la configuración DI e implementará todos los archivos de vista estática.

Vladimir Kerkhoff
fuente
¿Quizás tenga sentido usar datos de muestra en lugar de generar accesorios? Los dispositivos fijan solo los módulos más críticos y parecen ser útiles solo para pruebas de rendimiento.
Alex Paliarush
Gracias, eliminó esa parte ya que no es necesaria cuando se usa un sitio en producción.
Vladimir Kerkhoff
Esto sigue muy de cerca el enfoque que estoy usando también. Esto también funciona bien con Magento 1 (con un proceso de compilación menos complejo). Deje que Composer haga su trabajo, funciona para implementaciones realmente bien en mi experiencia, y no hemos visto muchas desventajas que no sean complejidades con la estrategia .gitignore cuando no sigas la huella más pequeña en git.
Aepod
Esta instalación se parece a la forma de 'integrador'. Agrega los repositorios en vendor / magento / *. Ningún código estará en la aplicación / código / ... y otros directorios. ¿Cómo tendría Magento 2 core dirs como en el archivo .zip? ¿Es posible agregar a través del compositor un módulo (otro repositorio de git) y terminar en la aplicación / código / ... automáticamente?
oscuro
44
arriesgado, el compositor no es una herramienta de implementación. si algo falla en la instalación del compositor cuando se ejecuta en producción ...
Claudiu Creanga
3

Re .gitignore, 2.2 en adelante, la respuesta oficial de Magento será "config.php entra en git, env.php no".

Estamos buscando complementos de compositores como Mediawiki para acercar el desarrollo interno al desarrollo de extensiones y sitios de clientes. Todavía explorando, aún no final.

Me gustó mucho usar el tipo de repositorio "Path" de Composer con una ruta ../othergitrepo/app/code/*/*para recoger módulos, pero usa enlaces simbólicos que no funcionan tan bien con entornos de desarrollo que usan Unison o similar.

Alan Kent
fuente
3

ejecutamos un enfoque diferente que no involucra un proceso / servidor de compilación separado , lo desarrollamos localmente como si estuviera en producción

Luego confirmamos todos los archivos necesarios para la producción . entonces simplemente implementamos los conjuntos de cambios en el servidor y ejecutamos el comando de actualización.

llegar a una versión adecuada para el desarrollo pero que también se ejecuta en modo de producción fue la parte difícil y todavía no es perfecta, pero ahora tenemos una receta que funciona.

la razón es que queremos tener un control del 100% sobre qué código entra en producción. Como magento2 genera una tonelada de código, debemos ejecutarlo localmente para poder comprender todos los efectos y poder depurar como si estuviera en producción.

Soy consciente de que esto no es lo que muchas personas recomiendan hacer, pero para nosotros funciona mejor.

pasos de configuración de la interfaz

Para que estos scripts funcionen, configure su tienda en modo de producción en su env.php y configure su tema en dev/tools/grunt/configs/themes.js. (los siguientes pasos se pusieron en un libro de jugadas ansible)

  1. Eliminar var/cache
  2. Eliminar var/view_preprocessed
  3. eliminar pub/static/*(no elimine el .htaccess)
  4. Eliminar var/composer_home
  5. correr php bin/magento cache:flush
  6. correr php bin/magento setup:static-content:deploy %your_languages%
  7. borra todos los temas / idiomas que realmente no usas de pub / static / frontend
  8. eliminar copias impresas de menos archivos de pub/static/frontend
  9. correr php bin/magento dev:source-theme:deploy --locale="%your_language%" --theme="%your_theme%" css/styles-m css/styles-l css/email css/email-inline
  10. opcional: utilizamos un script bash para cambiar los enlaces simbólicos absolutos, creados en el paso 9, en unos relativos, lo que hace posible ejecutar gruñidos desde fuera del vm
  11. correr grunt less:your_theme

pasos de backend / di-setup

  1. Eliminar var/cache
  2. Eliminar var/generation
  3. Eliminar var/composer_home
  4. Eliminar var/di
  5. correr php bin/magento cache:flush
  6. correr php bin/magento setup:di:compile
greenone83
fuente
Gracias por este @ greenone83, este es el enfoque que básicamente he adoptado, aunque genero mi backend como parte del front-end. ¡NUNCA uso setup: di: compile porque encuentro que arruina las cosas! Una cosa que no entiendo es por qué setup: static-content: deploy crea archivos generados / código (la ubicación ha cambiado desde su publicación). Descubrí que si elimino todo el código generado, con mi sitio en modo de producción, estos archivos se crean automáticamente cuando navego por el sitio.
PedroKTFC
2

También debe ignorar estos archivos
/app/etc/config.php
/app/etc/env.php
/.idea/workspace.xml // phpstorm

mrtuvn
fuente
2
Si ignora el config.php, deberá habilitar nuevamente la nueva extensión después de pasar a otro entorno, por lo tanto, es mejor incluirlo en su repositorio.
Vladimir Kerkhoff