Prestashop es una de las plataformas de e-commerce más populares, sobre todo en España, la instalación y pruebas del e-commerce, ya sea para probar plantillas, diferentes plugins o hacer desarrollos propios es muy habitual. Las necesidades de probar el software o plantillas en diferentes versiones de Prestashop será facilitado en gran medida con la instalación de Prestashop con Docker, es este caso explicaremos la instalación de Prestashop con Docker utilizando las imágenes oficiales que podemos consultar en el Docker Hub de Prestashop.

Además de la instalación que vamos a explicar en esta publicación para Prestashop con Docker directo, utilizando Docker Compose o también podemos instalar Prestashop creando un entorno con un servidor web ya sea Nginx o Apache y una base de datos, descargar directamente la versión en concreto de Prestashop que queremos probar de Prestashop, y configurar la ruta del servidor web hacia Prestashop, esto lo veremos en una nueva publicación. Esto es útil, por ejemplo, cuando no encontramos la versión o la combinación de Prestashop, servidor web, versión PHP que queremos probar en concreto.

Índice

  1. Creación de una red para la comunicacion entre contenedores
  2. Creación y lanzamiendo de una base de datos MySQL
  3. Lanzamiento del contenedor Docker de Prestashop
  4. Parámetros disponibles en la imagen de Docker de Prestashop
  5. Instalación básica de Prestashop en el contenedor Docker
  6. Documentación y referencias

Software utilizado

  • Linux (Ubuntu 20.04 LTS): sistema operativo Linux con la versión de Ubuntu 20.04 LTS
  • Docker (docker): Docker version 20.10.7, esta guía se ha generado utilizando esta versión de Docker.
  • PHP 5.6: en la instalación por defecto de Prestashop con Docker se hace con esta versión de Prestashop, te explicamos como crearla también con PHP 7.
  • Prestashop 1.7: instalamos la última versión disponible de Prestashop en las imagenes oficiales de Docker.
  • Mysql 5.7: versión recomendada para instalar Prestashop 1.7

En primer lugar explicaremos como lanzar directamente un proyecto con Prestashop directamente con Docker, después en la siguiente publicación veremos cómo hacerlo con Docker Compose y sus ventajas.

La imagen oficial de Prestashop en Docker Hub se lanza con la última versión de Apache del repositorio oficial de Prestashop, siguiendo las recomendaciones para la instalación de Prestashop para la versión 1.7 necesitaremos una base de datos MySQL con versión 5.7.

Instalación de Prestashop 1.7 con Docker, una red, una base de datos MySQL y la imagen de Prestashop con Apache, así de fácil.

Código Xules

Para poner en funcionamiento Prestashop necesitaremos una red para comunicar los contenedores, y dos contenedores, uno para la base de datos y otro para el servidor web que contendrá PrestaShop, veámoslo paso a paso.

1. Creación de una red para la comunicacion entre contenedores

Los contenedores para que no estén aislados necesitan establecer una red de comunicación que facilitará el acceso desde el servidor web a la base de datos.

Para crear una red usaremos el comando docker network create:

docker network create [OPTIONS] NETWORK

Entre las opciones de configuración tenemos de la red tenemos varios parámetros, algunos son (para más información puedes consultarlo aquí: Docker network create):

--driver , -dbridgeDriver to manage the Network
--gatewayIPv4 or IPv6 Gateway for the master subnet
--ingressAPI 1.29+
Create swarm routing-mesh network
--internalRestrict external access to the network
--ip-rangeAllocate container ip from a sub-range

Para lanzar una red para nuestro ejemplo sencillo en Docker utilizamos el comando network con el parámetro create, y a continuación el nombre de la red:

xules@xxxxx:~/Docker-Prestashop-CX$ docker network create cx-prestashop1.7-net
 4706eab25228eba84694b0c8bddbe4f4b387708d1985b94e936701df2abfc21f

Si todo va bien, recibiremos como respuesta un token como en el ejemplo.

2. Creación y lanzamiendo de una base de datos MySQL

Ahora necesitamos una base de datos para la instalación de Prestashop, como vamos a instalar Prestashop 1.7 en su versión más actual seguimos las recomendaciones e instalamos.

La estructura básica del comando docker para crear una base de datos MySQL es la siguiente:

docker run -ti --name some-mysql --network some-net -e MYSQL_ROOT_PASSWORD=some-password -p 3306:3306 -d mysql:5.7

En el Docker Hub oficial de MySQL puedes encontrar los diferentes parámetros que puedes utilizar para crear tu contenedor, esto son los más importantes:

En nuestro caso, utilizaremos los parámetros básicos, y lo único que haremos es definir un volumen externo para el almacenamiento de la base de datos MySQL que utilizaremos en Prestashop, para ello utilizamos el siguiente comando que explicamos a continuación:

$ docker run -ti --name cx-prestashop1.7-mysql--network cx-prestashop1.7-net -v /home/codigoxules/docker/cx-prestashop/var/lib/mysql/:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=xulescode -p 3307:3306 -d mysql:5.7

Explicamos los parámetros utilizados:

  • run: con este comando lanzamos la ejecución del contenedor Docker, si no existe la imagen esta se descargará automáticamente para su instalación.
  • -it: el parámetro le indica a Docker que asigne un pseudo-TTY conectado al stdin del contenedor; creando un shell bash interactivo en el contenedor. 
  • –name cx-prestashop1.7-mysql: especificamos el nombre que le asignamos a nuestro contenedor de la base de datos MySQL.
  • –network cx-prestashop1.7-net: indicamos que pertenece a la red que creamos anteriormente cx-prestashop1.7-net
  • -v /home/xules/docker/cx-prestashop/var/lib/mysql/:/var/lib/mysql: asignamos una ubiciación externa para la base de datos para tener persistencia de la misma aún cuando eliminemos el contenedor, al lanzar desde docker la ruta tiene que ser absoluta.
  • -e MYSQL_ROOT_PASSWORD=xulescode: parámetro de entorno de la imagen de MySQL, definimos la password de root.
  • -p 3307:3306: asignamos un puerto externo al puerto interno que utiliza el contenedor Docker MySQL, esto nos permitirá acceder a la base de datos desde fuera del contenedor en ese puerto con la IP local.
  • -d mysql:5.7: versión de la imagen que instalamos.

Para ver en detalle las diferentes opciones de variables de entorno que podemos utilizar en el Docker de MySQL puedes consultarlo en el Docker Hub oficial de MySQL, como ejemplo, algunas variables:

  • MYSQL_ROOT_PASSWORD:
    • Esta es la única variable que es obligatoria y especifica la password que se asignará a la cuenta de root como superusuario, en el ejemplo anterio veiamos como le asignabamos: xulescode.
  • MYSQL_DATABASE:
    • This variable is optional and allows you to specify the name of a database to be created on image startup. If a user/password was supplied (see below) then that user will be granted superuser access (corresponding to GRANT ALL) to this database.
  • MYSQL_USERMYSQL_PASSWORD:
    • These variables are optional, used in conjunction to create a new user and to set that user’s password. This user will be granted superuser permissions (see above) for the database specified by the MYSQL_DATABASE variable. Both variables are required for a user to be created.

3. Lanzamiento del contenedor de Prestashop

Una vez ya tenemos la base para lanzar nuestro contenedor Prestashop, es decir, una red en Docker y una base de datos, solo nos queda escoger la versión de Prestashop que queremos instalar.

Por defecto, las versiones de Prestashop se instalan con la versión PHP 5.6, si no queremos está versión podemos escoger la instalación PHP con Apache o FPM, por ejemplo:

  • Apache: para la versión de PHP 7.2, tendríamos por ejemplo: 
    • 1.6-7.2-apache: Prestashop 1.6
    • 1.7-7.2-apache: Prestashop 1.7
  • FPM: para la versión de PHP 7.2, tendríamos por ejemplo:
    • 1.6-7.2-fpm: Prestashop 1.6
    • 1.7-7.2-fpm: Prestashop 1.7

No todas las combinaciones están disponibles, ni todas las versiones de Prestashop, si necesitas alguna combinación en particular lo tendras que hacer con Docker Compose (en Docker Hub de Prestashop tienes detalladas las opciones disponibles).

Para empezar nosotros vamos a realizar la instalación básica que trae por defecto y con la última versión llamando a la imagen prestashop/prestashop; para otra combinación simplemente cambiariamos la llamada a la imagen que queremos descargar y utilizar.

La estructura básica de la llamada docker a Prestashop es la siguiente, tienes que observar que se hace referencia a la red y a la base de datos creadas anteriormente:

docker run -ti --name some-prestashop --network prestashop-net -e DB_SERVER=some-mysql -p 8080:80 -d prestashop/prestashop

Siguiendo esa estructura y con los datos que hemos utilizado antes nuestro comando quedaría así:

$ docker run -ti --name cx-prestashop1.7 --network cx-prestashop1.7-net -v /home/codigoxules/docker/cx-prestashop/var/www/html/:/var/www/html -e DB_SERVER=cx-presta-mysql -p 8080:80 -d prestashop/prestashop

Explicamos los parámetros utilizados:

  • run: con este comando lanzamos la ejecución del contenedor Docker, si no existe la imagen esta se descargará automáticamente para su instalación.
  • –name cx-prestashop1.7: especificamos el nombre que le asignamos a nuestro contenedor de Prestashop.
  • –network cx-prestashop1.7-net: indicamos que pertenece a la red que creamos anteriormente cx-prestashop1.7-net
  • -v /home/codigoxules/docker/cx-prestashop/var/www/html/:/var/www/html asignamos una ubiciación externa para Prestashop para tener persistencia de la misma, aún cuando eliminemos el contenedor, al lanzar desde docker la ruta tiene que ser absoluta.
  • -e DB_SERVER=cx-prestashop1.7-mysql: parámetro de entorno de la imagen de MySQL, definimos la password de root.
  • -p 8080:80: asignamos un puerto externo al puerto interno que utiliza el contenedor Docker de Prestashop, esto nos permitirá acceder a la web de Prestashop desde fuera del contenedor.
  • -d prestashop/prestashop: versión de la imagen que instalamos, en este caso será la última versión de Prestashop con PHP 5.6.

4. Parámetros disponibles en la imagen de Docker de Prestashop

Algunos de los parámetros disponibles más importantes son:

  • PS_DEV_MODE: The constant _PS_MODE_DEV_ will be set at true (default value: 0)
  • PS_HOST_MODE: The constant _PS_HOST_MODE_ will be set at true. Useful to simulate a PrestaShop Cloud environment. (default value: 0)
  • PS_DEMO_MODE: The constant _PS_DEMO_MODE_ will be set at true. Use it to create a demonstration shop. (default value: 0)
  • DB_SERVER: If set, the external MySQL database will be used instead of the volatile internal one (default value: localhost)
  • DB_USER: Override default MySQL user (default value: root)
  • DB_PASSWD: Override default MySQL password (default value: admin)
  • DB_PREFIX: Override default tables prefix (default value: ps_)
  • DB_NAME: Override default database name (default value: prestashop)
  • PS_INSTALL_AUTO=1: The installation will be executed. Useful to initialize your image faster. In some configurations, you may need to set PS_DOMAIN or PS_HANDLE_DYNAMIC_DOMAIN as well. (Please note that PrestaShop can be installed automatically from PS 1.5)
  • PS_ERASE_DB: Drop the mysql database. All previous mysql data will be lost (default value: 0)
  • PS_INSTALL_DB: Create the mysql database. (default value: 0)

5. Instalación básica de Prestashop en el contenedor Docker

Para empezar con la instalación accedemos desde nuestro navegador a http://localhost:8080/ una vez accedido si todo fue bien, realizamos una instalación de Prestashop genérica:

Paso 1: Selección de idioma en instalación Docker Prestashop

Selección de idioma y pasamos al siguiente paso como se muestra en la imagen:

Docker Prestashop - 01 - Selección de idioma
Docker Prestashop – 01 – Selección de idioma

Paso 2: Aceptar licencia en instalación Docker Prestashop

Aceptamos la licencia y seguimos:

Docker Prestashop - 02 -Aceptar licencia Prestashop
Docker Prestashop – 02 -Aceptar licencia Prestashop

Paso 3: Información de la tienda en instalación Docker Prestashop

Damos el nombre a nuestra tienda y configuramos los accesos a la parte de administración con un email y una contraseña:

Docker Prestashop - 03 - Parámetros de l tienda
Docker Prestashop – 03 – Parámetros de l tienda

Paso 4: Dirección del servidor MySQL en la instalación Docker Prestashop

En este paso configuramos el acceso a la base de datos MySQL, gracias a que hemos configurado una red con Docker, ahora tenemos acceso entre los contenedores por eso en la dirección del servidor de base de datos podemos poner directamente el nombre del contenedor en mi caso: cx-prestashop-1.7-mysql.

Comprobamos la conexión y si todo está Ok seguimos:

Docker Prestashop - 04 - Vinculación base de datos mysql
Docker Prestashop – 04 – Vinculación base de datos mysql

Paso 5: Crear base de datos en instalación Docker Prestashop

Como no hemos creado la base de datos en nuestro servidor MySQL, la creamos desde la instalación de Prestashop:

Docker Prestashop - 05 - Conexión realizada no existe base de datos
Docker Prestashop – 05 – Conexión realizada no existe base de datos

Paso 6: Base de datos creada, instalamos Prestashop con Docker

Prestashop nos confirma que la creación de la base de datos ha sido existosa y realizamos ya la instalación, con la creación de las tablas, ….

Docker Prestashop - 06 - Base de datos creada instalamos Prestashop con Docker
Docker Prestashop – 06 – Base de datos creada instalamos Prestashop con Docker

Paso 7: Instalación de Prestashop con Docker finalizada

Si todo ha ido bien llegamos a este último paso, donde ya solo tendrás que eliminar la carpeta install, y cambiar el nombre de la carpeta admin.

Docker Prestashop - 07 - Instalación finalizada Docker Prestashop MySQL
Docker Prestashop – 07 – Instalación finalizada Docker Prestashop MySQL

Esto lo podemos hacer de dos formas:

  1. Desde fuera del contedor: como hemos creado un volumen tenemos acceso a la carpeta de instalación de Prestashop:
    • Paso 1: vamos a nuestra carpeta en mi caso dentro de mi directorio tengo una carpeta var/www/html, accedo ahí y con permisos de superusuario
    • Paso 2: eliminar carpeta install:
      • sudo rm -r install
    • Paso 2: cambiar el nombre a la carpeta admin:
      • sudo mv admin admin-cx-presta
  2. Desde dentro del contendor: accedemos al contedor de Prestashop, accesmo a /var/www/html/ , y desde ahí, eliminamos install y cambiamos el nombre a la carpeta admin:
    • Paso 1: accedemos al contenedor de Prestashop:
      • docker exec -it cx-prestashop1.7 bash
      • Con este comando accedemos al contenedor en la carpeta /var/www/html/, en este caso ya accedo al contenedor como superusuario.
    • Paso 2: eliminar carpeta install:
      • rm -r install
    • Paso 3: cambiar el nombre a la carpeta admin:
      • mv admin admin-cx-presta

6. Documentación Docker Prestashop

Documentación general utilizada para esta guía: