Magento 2 Programación

Entorno de desarrollo Magento 2 con Docker en menos de 10 minutos

single image

Configura tu entorno de desarrollo de Magento 2 con Docker en menos de 10 minutos.

Con esta publicación estreno sección Magento 2 dentro de la categoría Programación, y, voy a explicarte cómo configurar un entorno de desarrollo para Magento 2 con docker sin gran esfuerzo.

Desde que comencé a trabajar en Arcmedia programo a diario en Magento 2, pero ya con anterioridad había realizado implantaciones y desarrollos a medida en Magento 1 y 2.  Quizás una de las partes más tediosas siempre era crear el entorno de desarrollo local: montar el servidor web, bbdd, instalar y configurar magento,…

Por eso, para simplificar este proceso,  haces unos meses preparé un entorno de desarrollo Magento 2 dockerizado que despliega magento 2 en local en solo unos minutos.

Esta miniguía te ayudará a configurar tu entorno Magento 2 corriendo en tu máquina con:

  • Nginx y PHPFPM (servidor web)
  • Percona (servidor de base de datos)
  • Mailhog (herramienta para capturar los emails enviados por Magento)

Requisitos y preparación del entorno

Para poder utilizar este entorno de desarrollo de Magento 2 vamos a necesitar solo tres cosas:

  1. Docker instalado y ejecutándose en tu equipo
  2. Lo mismo con git (no es obligatorio pero es más que recomendable)
  3. Unas API Key de Magento para poder realizar la instalación

En el caso poco probable de que no tengas instalado docker o git, el proceso de instalación es muy sencillo, pero puede variar en función de tu sistema operativo. Te recomiendo que visites la página web de Docker, la página web de git y sigas sus indicaciones.

Para conseguir las API Key de Magento, tienes que crearte una cuenta en el Marketplace de Magento,  y generarlas desde tu perfil en la sección Access Keys:

Magento 2 API Keys

Instalación del entorno de desarrollo en Magento 2

Ahora sí, ¡comenzamos con la instalación del entorno!

En primer lugar, abrimos un terminal, vamos a la carpeta donde queremos guardar nuestro entorno, y clonamos el repositorio de github que contiene magento dockerizado con el comando:

$ git clone https://github.com/pablobae/dockerized-magento2-devel-environment.git

Si no tienes git instalado puedes descargárlo desde la web del entorno en github y descomprimirlo

Ahora nos metemos dentro de la carpeta del proyecto clonado

$ cd dockerized-magento2-devel-environment

Entre otros archivos, encontraremos el script de instalación create-project.sh. Este script permite pasarle tres parámetros:

  • –project, nombre del proyecto.Nos permite tener varios entornos magento2 en docker,  útil si trabajas en varios proyectos distintos
  • –domain, dominio o url local para acceder a la web local de magento
  • –version, release de Magento 2 que deseas instalar.  Las releases disponibles las puedes encontrar en el repo oficial de Magento

El entorno de desarrollo no soporta todavía releases Magento 2.4.x. Espero tenerlo disponible pronto, integrando Elasticsearch.

Este script se encargará de

  • desplegar los contenedores necesarios,
  • instalar la versión indicada de Magento y
  • configurar tu sistema operativo para poder acceder vía web a tu instancia local de Magento.

Es posible configurar la instalación de magento editando el archivo ./conf/setup_magento_config

ADMIN_FIRST_NAME=MyName
ADMIN_LAST_NAME=LastName
ADMIN_EMAIL=admin@admin.com
ADMIN_USER=admin
ADMIN_PASSWORD=password1234
ADMIN_URL=admin
CURRENCY=EUR
LANGUAGE=en_US

Ejecutamos:

$ bash create-project.sh --project=magento2 --domain=magento2.local --version=2.3.6-p1

A continuación comenzará el proceso de instalación del entorno.

Durante este proceso nos va a solicitar introducir las credenciales de administrador de tu equipo para añadir el dominio elegido en tu archivo /etc/hosts. De esta forma, podremos acceder a Magento a través de la url https://magento2.local una vez finalizada la instalación.

Windows WSL: si estás usando WSL en windows, no es posible editar el archivo hosts de Windows desde WSL, y lo haremos manualmente después de finalizar la instalación del entorno

Después comenzará la descarga de las distintas imágenes de los servidores utilizados, y una vez completadas, se levantará el entorno y veremos algo así en la pantalla:

entorno-desarrollo-magento-2-con-docker-step-3

A continuación se realiza la instalación de Magento, y es ahora cuando el instalador nos va a solicitar que introduzcamos las API Key de Magento:

magento-2-enter-api-keys

Introducimos nuestra public key como username, y nuestra private key como password.

En este momento comienza la instalación de todos los paquetes de Magento, y la generación de los certificados SSL para la web. Tras finalizar nos muestra la información de acceso a Magento:

entorno-desarrollo-magento2-docker-success

Y ya podremos acceder a nuestro recién instalado magento en la url indicada:

entorno-desarrollo-magento2-docker-success-web

Windows WSL: si estás usando WSL, justo antes de finalizar el script de instalación nos indicará que debemos realizar varios pasos manualmente

entorno-desarrollo-magento-2-con-docker-windows-wsl-steps

En este caso tendremos que seguir los pasos indicados, para poder acceder a nuestro Magento recién instalado.

Primero, editamos el archivo C:\Windows\System32\drivers\etc\hosts en Windows y agregamos al final del archivo nuestro nuevo host: 127.0.0.1 magento2.local.

Por último tenemos que importar  el certificado CA en windows para que cuando accedamos a la web local de magento los navegadores no nos indiquen que la web no es segura:

  • abrimos un terminal de PowerShell como administrador,
  • ejecutamos el comando mmc.exe,
  • vamos Certificados > Entidades de certificación raiz de confianza, e
  • importamos el certificado rootCA.pem que se ha generado durante la instalación del entorno y está en la carpeta del mismo.

Detalles del entorno de desarrollo en Magento 2

Código fuente y volumenes docker

Una vez instalado, tendemos todo el código de nuestro magento en la carpeta src:

$ ls -l src
-rw-r--r--  1 aradaen aradaen 775488 Mar 19 12:30 CHANGELOG.md
-rw-r--r--  1 aradaen aradaen    650 Mar 19 12:30 COPYING.txt
-rw-r--r--  1 aradaen aradaen   2994 Mar 19 12:30 Gruntfile.js.sample
-rw-r--r--  1 aradaen aradaen  10364 Mar 19 12:30 LICENSE.txt
-rw-r--r--  1 aradaen aradaen  10376 Mar 19 12:30 LICENSE_AFL.txt
-rw-r--r--  1 aradaen aradaen    700 Mar 19 12:30 SECURITY.md
drwxr-xr-x  4 aradaen aradaen   4096 Mar 19 12:30 app
-rw-r--r--  1 aradaen aradaen    150 Mar 19 12:30 auth.json.sample
drwxr-xr-x  2 aradaen aradaen   4096 Mar 19 12:30 bin
-rw-r--r--  1 aradaen aradaen   2635 Dec 18 22:26 composer.json
-rw-r--r--  1 aradaen aradaen 794852 Mar 19 12:30 composer.lock
drwxr-xr-x  5 aradaen aradaen   4096 Mar 19 12:30 dev
drwxr-xr-x  3 aradaen aradaen   4096 Mar 19 12:31 generated
-rw-r--r--  1 aradaen aradaen     57 Mar 19 12:30 grunt-config.json.sample
-rw-r--r--  1 aradaen aradaen   1370 Mar 19 12:30 index.php
drwxr-xr-x  4 aradaen aradaen   4096 Mar 19 12:30 lib
-rw-r--r--  1 aradaen aradaen   5814 Mar 19 12:30 nginx.conf.sample
-rw-r--r--  1 aradaen aradaen   1416 Mar 19 12:30 package.json.sample
drwxr-xr-x  2 aradaen aradaen   4096 Mar 19 12:30 phpserver
drwxr-xr-x  6 aradaen aradaen   4096 Mar 19 12:30 pub
drwxr-xr-x  7 aradaen aradaen   4096 Mar 19 12:30 setup
drwxr-xr-x  9 aradaen aradaen   4096 Mar 19 12:31 var
drwxr-xr-x 83 aradaen aradaen   4096 Mar 19 12:30 vendor

Estas carpetas se encuentran también en el contenedor de docker, pero para optimizar el rendimiento de docker en Mac y Windows WSL, solo algunas carpetas y archivos se encuentran montados y sincronizados con el contenedor:

  • app
  • vendor
  • composer.json
  • composer.lock

Cualquier cambio en alguno de estos archivos se reflejará en el contenedor (y al contrario, si cambia en el contenedor, cambiará para nosotros)

Es posible configurar qué archivos y carpetas se montan en docker editando el archivo docker-compose.yml y reiniciando el entorno.

Comandos útiles

En la carpeta bin del entorno se encuentran varios comandos que facilitan la interacción con el entorno entre los que destacan:

  • bin/start, levanta el entorno docker del proyecto
  • bin/restart, reinicia el entorno
  • bin/stop, detiene el entorno
  • bin/bash, abre un terminal dentro del contenedor en el documentroot de Magento
  • bin/magento, permite ejecutar comandos magento dentro del contenedor
  • bin/xdebug, permite habilitar y deshabilitar el modo debug de php

Puedes encontrar más información de los comandos disponibles en la página del repositorio.

Instalación Magento 2 sample data

Llegados a este punto ya tenemos nuestro entorno de desarrollo Magento 2 con docker configurado y listo para programar.

Opcionalmente, es posible instalar el paquete de datos de ejemplo de Magento 2, que incluye productos, clientes, etc. Vamos a ello. Ejecutamos el comando:

$ bin/magento sampledata:deploy

De nuevo Magento va a solicitarnos las credenciales API Key de Magento. Las introducimos y proseguimos.

A continuación actualizamos la base de datos

$ bin/magento setup:upgrade

Al finalizar este comando ya dispondremos los datos demo de Magento en nuestra instancia.

entorno-desarrollo-magento-2-con-docker-sample-data

Y hasta aquí la miniguía!

Si tienes cualquier pregunta, duda o sugerencia, te invito a que dejes un comentario!

¡Saludos!

2 Comentarios
  1. Manuel Castillo 5 meses ago
    Contestar

    Hola. Es posible usarlo desde un mac, pero corriendo docker desde otra máquina, por ejemplo una raspberry pi 4 con un disco ssd?

    • Pablo Baenas 5 meses ago
      Contestar

      Hola Manuel, no se hasta qué punto daría de si una raspberry pi para tener docker corriendo con Magento, pero en cualquier caso si montaras el entorno en otro equipo, y abrieras los puertos necesarios en la rbpi para dar acceso al servidor web, y modificaras en el mac el host para hacerle saber que el dominio web que utilices en el proyecto de docker está en la rbpi, creo que no habría problema en acceder a tu instancia de Magento de rbpi desde el Mac.

Escribir comentario

Tu email no será publicado.

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Otras noticias de interés