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
- Creación de una red para la comunicacion entre contenedores
- Creación y lanzamiendo de una base de datos MySQL
- Lanzamiento del contenedor Docker de Prestashop
- Parámetros disponibles en la imagen de Docker de Prestashop
- Instalación básica de Prestashop en el contenedor Docker
- 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 , -d | bridge | Driver to manage the Network |
--gateway | IPv4 or IPv6 Gateway for the master subnet | |
--ingress | API 1.29+ Create swarm routing-mesh network | |
--internal | Restrict external access to the network | |
--ip-range | Allocate 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.
- 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
MYSQL_USER
,MYSQL_PASSWORD
:
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.61.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 attrue
(default value: 0) - PS_HOST_MODE: The constant
_PS_HOST_MODE_
will be set attrue
. Useful to simulate a PrestaShop Cloud environment. (default value: 0) - PS_DEMO_MODE: The constant
_PS_DEMO_MODE_
will be set attrue
. 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:
Paso 2: Aceptar licencia en instalación Docker Prestashop
Aceptamos la licencia y seguimos:
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:
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:
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:
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, ….
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.
Esto lo podemos hacer de dos formas:
- 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
- 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:
- Paso 1: accedemos al contenedor de Prestashop:
6. Documentación Docker Prestashop
Documentación general utilizada para esta guía:
- Docker Network create: documentación para creación de una red y los diferentes parámetros disponibles.
- Docker Hub de Prestashop: documentación oficial de las imágenes Docker de Prestashop.
- Docker Hub oficial de MySQL: aquí encontrarás toda la documentación y los diferentes parámetros que puedes utilizar para crear tu contenedor, esto son los más importantes.
- MySQL enviroment variables: documentación de las variables de entorno de MySQL.