Día 2 de mis aventuras en el mundo real con Shopware. (O 200… ya se hace difícil distinguir).

Retomando el post anterior, la dificultad con la instalación por Composer es que, a diferencia de lo que podemos arrastrar de costumbre los que venimos de Magento, aquí los templates son un conjunto de paquetes. Por ejemplo, para Production tenemos estas dependencias.

"php": "^7.4.3 || ^8.0",
"composer-runtime-api": "^2.0",
"shopware/administration": "~v6.4.0",
"shopware/core": "~v6.4.0",
"shopware/elasticsearch": "~v6.4.0",
"shopware/recovery": "~v6.4.0",
"shopware/storefront": "~v6.4.0"

Con este template (para el archivo Composer) ya deberíamos de poder instalar.

En el pasado lo usé de esa forma, y funcionó bien pero los upgrades fueron un dolor de cabeza.

Desde 6.4 volví a intentarlo sin tener que clonar o descargar. Estos son los pasos que seguí.

composer create-project shopware/production .

Una vez que terminó Composer, el siguiente comando ejecutado fue:

bin/console system:setup

Pero si, falló.

La forma de resolverlo fue/es teniendo la variable definida:

APP_URL=https://www.dominio.com.ar bin/console system:setup

Luego respondemos las preguntas y esto generará el archivo .env necesario para funcionar.

Ahora si, a instalar.

bin/console system:install --create-database --basic-setup

Como no indiqué ningún parámetro, antes de ingresar al backend necesité ejecutar:

bin/console user:change-password admin

Y ahora si, luego de definir mi nueva contraseña, ya pude ingresar para seguir el proceso de configuración inicial y y de activación de algún que otro módulo/plugin.

Ahora si, mi tienda con la data de ejemplo que provee la plataforma quedó funcionando.

Para despejar algunas dudas y practicar un poco, borré toda mi instalación (incluyendo base de datos). Cloné el repositorio que tenía la tienda anterior (sin los plugins, pero de esto hablaré más adelante).

Ejecuté entonces composer install y luego:

APP_URL=https://www.dominio.com.ar bin/console system:setup

Obtuve mi .env. Ahora a instalar eso que estaba versionado en mi composer.json.

Terminó sin problemas y por eso mi tienda está funcionando de la misma forma que vimos antes (este proceso fue hecho realmente, pero no tiene sentido duplicar los pasos).

Lo siguiente será poner la tienda en un servidor en internet (insisto, sin plugins).

Aquí abro un paréntesis.

He seguido estos mismos pasos con varias versiones (larga historia del motivo) y sigue funcionando, incluso con 6.4.7.0 (en las primeras capturas puede verse que la versión usada era 6.4.3.1)

Cierro ese primer paréntesis.

Lo siguiente fue instalar mi servidor con dos entornos/vhosts: uno para producción y otro para dev (para mostrarle por adelantado los cambios a la persona que lo va a usar).

Hice un clone del proyecto y luego cambié al branch dev (ya ampliaré sobre este tema porque es una pelea constante que tengo con mi neurosis).

Ajusté algunas configuraciones que me faltaron y volví al proceso más… ¿natural?.

Ejecuté entonces composer install, y falló (“no otra vez decía”). El .gitignore que viene por defecto no ignoró el contenido de vendor. A corregirlo.

Limpié todo lo que no iba y probé otra vez. No hubo error, así que procedí a instalar mi entorno de DEV por primera vez con el código que traje del repositorio.

El siguiente paso fue el de system:setup. Todo funcionó como se esperaba.

Al querer instalar y me encontré con otro problema.

// install.lock already exists. Delete it or pass --force to do it anyway.

Claro, el .gitignore tampoco excluyó ese archivo y como instalé en local, ahora parece que está instalado (pero la DB no existe). Aquí los caminos eran dos: importar la DB mi entorno local o quitar el lock para instalar de 0. Opté aquí por instalar de 0 en el entorno de DEV eliminado el install.lock y ejecutando:

bin/console system:install --create-database --basic-setup

Obtuve asi, finalmente, una instalación base sincronizada con mi entorno. Los próximos pasos incluyeron llevar esto a producción y validar el pase de feature a dev, y de ahí a producción/master.

Para este momento, esta prueba involucraba a tres tiendas distintas, con un total de 6 servidores, repartidos en dos pequeños servidores por tienda, uno para web y otro para base de datos.

Siguiente paso: instalar el entorno que sería Producción. Esta fue la prueba para confirmar que mis errores anteriores se habían resuelto correctamente.

Replicando los pasos usados para DEV, en segundos tuve una instalación limpia. Para este momento ya tenía la tienda 1 con un entorno local de trabajo, un entorno de DEV con su branch y vhost, y el entorno productivo con su branch y vhost también.

Una vez replicado todo lo anterior para las otras tiendas, estuvo todo sincronizado para dar el siguiente paso.

Abro el segundo paréntesis.

Mientras sigo escribiendo este eterno post (porque comenzó en octubre como un documento interno de instrucciones y aún sigue update tras update), se publicó la versión 6.4.8.0, lo cual me da otra buena excusa para probar el circuito y el upgrade. Veamos si lo escrito aquí sigue siendo válido.

Ejecuto mi update de composer.

composer update shopware/*

Nada cambió. Ejecuto entonces:

composer update shopware/administration:6.4.8.0 shopware/core:6.4.8.0 shopware/elasticsearch:6.4.8.0 shopware/recovery:6.4.8.0 shopware/storefront:6.4.8.0

No señor, problemas de dependencias. Lo he resuelto actualizando manualmente el composer.json y luego:

composer update mbezhanov/faker-provider-collection:~2.0.1 symfony/browser-kit:5.4

Y para finalizar:

composer update shopware/administration:6.4.8.0 shopware/core:6.4.8.0 shopware/elasticsearch:6.4.8.0 shopware/recovery:6.4.8.0 shopware/storefront:6.4.8.0 --with-all-dependencies

Ahora si, he actualizado con Composer.

(Estos problemas de dependencias con una versión vanilla son un poco incómodos, quizás por la mala costumbre que uno ya no lleva)

Cierro el segundo paréntesis y retomo entonces el hilo principal del post. Instalar (y mantener) con Composer y llevar a Producción.

Al momento de instalar en cada uno de los entornos, no opté siquiera por los paquetes de idioma, porque desde septiembre Shopware habilitó la instalación por Composer de estos plugins (cosa que antes no se podía y eran una verdadera patada en la ingle).

¿Cómo hago para instalar paquetes/modules/plugins por Composer?

Lo primero es tener cuenta en Shopware, ya que nos servirá para varias cuestiones (desde el perfil, hasta el marketplace pasando por cursos y partnership).

Vamos al marketplace y buscamos el paquete de idioma.

Agregamos al cart y procedemos a cerrar la compra (gratuita).

Ahora volvemos a nuestra cuenta, y en la lista de nuestros shops (hubo que crear el shop antes) podemos ver qué módulos se encuentran asociados.

Al hacer click sobre el nombre, veremos el detalle.

Y lo que nos va a interesar aquí es el botón de «Install via composer». Al presionarlo veremos esta ventana/modal.

Una vez que generemos el token (recuerden guardar antes de cerrar), y luego de haber copiado y pegado los comandos en nuestra consola, de seguro tenemos ya el código en nuestro proyecto; pero aún quedan algunos pasos manuales por hacer.

En esta oportunidad usé la consola:

bin/console plugin:install SwagLanguagePack 

Luego la activación:

Finalmente lo tuve disponible y aparecen las opciones y posibilidades que ofrece el plugin en cuestión.

Configurar el idioma correcto en el storefront no fue de lo más intuitivo. Tienen que seguirse algunos pasos y se configura por Sales Channel (ya volveré sobre esto pronto).

A los fines del objetivo actual, llegar a tener el paquete de idioma vía Composer lo podemos dar por resuelto.

Tener que repetir esto para cada tienda de forma prolija es bastante incómodo. La forma en que se compran (inclusive las gratis) extensiones no permiten hacer compras multitienda, sino que tenés que comprar una por una. Incluso repitiendo pero cambiando el dominio, porque no registrás una tienda con dominios de entornos, sino que cada tienda/entorno es única. (Por eso sólo adquirí los paquetes para el dominio de producción y luego uso el mismo token para instalar por composer en local y dev).

Algunas sensaciones hasta aquí.

  • La velocidad gusta, y mucho. Aunque empiezo a detectar cuál es el piso real de uso para, incluso, una muy pequeña tienda.
  • El manejo de los plugins vía marketplace y el cómo se activan, es molesto. Si sos un merchant, no es tan grave. Si mantenés más de una tienda, es un proceso muy engorroso si querés ser prolijo.
  • El apartado de i18n y l10n sigue siendo bastante limitados más allá de las opciones de Europa.
  • La forma de configurar idiomas no me resultó muy intuitiva. Posiblemente el problema esté de mi lado.