Usar Prestashop 1.7 con Docker Compose

En esta publicación os contaré lo que hice para montar PrestaShop 1.7 con docker-compose sin usar la imagen oficial de Docker para PrestaShop. Lo primero es crear nuestro Dockerfile en el que indicaremos la versión de PHP y servidor que vamos a utilizar. En mi caso usé la imagen de php:7.2-apache y yo le indiqué que extensiones habilitar.

FROM php:7.2-apache

RUN pecl install -f xdebug \
    && echo "zend_extension=$(find /usr/local/lib/php/extensions/ -name xdebug.so)" > /usr/local/etc/php/conf.d/xdebug.ini;

RUN apt-get update && apt-get install -y \
    libfreetype6-dev \
    libjpeg62-turbo-dev \
    libpng-dev \
    && docker-php-ext-install -j$(nproc) iconv \
    && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \
    && docker-php-ext-install -j$(nproc) gd \
    && docker-php-ext-install mysqli pdo pdo_mysql zip

ADD https://raw.githubusercontent.com/mlocati/docker-php-extension-installer/master/install-php-extensions /usr/local/bin/

RUN chmod uga+x /usr/local/bin/install-php-extensions && sync && \
    install-php-extensions intl bcmath imagick memcached

RUN a2enmod rewrite

Después vamos a crear el fichero docker-compose.yml, que será el que levantará los contenedores.

version: '3.3'

services:
    db:
        image: mysql:5.7.22
        container_name: serverdb
        command: --sql_mode=""
        restart: always
        environment:
            - MYSQL_DATABASE=prestashop
            - MYSQL_ROOT_PASSWORD=root_password
            - MYSQL_USER=prestashop
            - MYSQL_PASSWORD=prestashop
        ports:
            - "13306:3306"
        volumes:
            - "./data/db/mysql:/var/lib/mysql"
    web:
        build:
            context: .
            dockerfile: ./Dockerfile
        environment:
            XDEBUG_CONFIG: remote_host=172.17.0.1 remote_port=9000 remote_enable=1
        ports:
            - '80:80'
        volumes:
            - './web:/var/www/html'
        depends_on:
            - db

Una vez tengamos ambos ficheros listos, vamos a levantar nuestros entornos de docker lanzado el siguiente comando en nuestra terminal o consola:

docker-compose up -d

Si todo ha salido bien, en nuestra carpeta de proyecto y al mismo nivel que nuestro fichero docker-compose.yml, se nos habrán creado tres carpetas. Una es data, contiene toda la base de datos, la otra es etc, que contiene toda la configuración de servidor web, y por último una llamada web, es en la que tenemos que añadir nuestro código. En este caso, es en esa carpeta donde pondríamos los archivos para instalar PrestaShop 1.7 en local.

Es posible que tengas que ajustar los permisos para poder mover los fichero dentro de la carpeta web.

Ahora que ya tenemos todos los servicios levantados, vamos a entrar en el servidor de base de datos ejecutando en nuestro terminal el siguiente comando:

docker-compose exec db mysql -h localhost -u root -p

Una vez dentro del servidor de base de datos, vamos a darle permisos totales al usuario que queremos usar para conectar nuestra plataforma PHP con nuestra base de datos, primero creando el usuario en caso de que no esté creado ya:

CREATE USER 'root'@'%' IDENTIFIED BY 'root_password';

Después le vamos a dar privilegios/permisos para ejecutar acciones en el servidor de base de datos:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;

Y por último, vamos a refrescar esos privilegios para que coja la nueva configuración:

FLUSH PRIVILEGES;

Al hacer esto nos hemos asegurado de que nuestro usuario de base de datos puede hacer lo que quiera sobre las bases de datos y sus tablas. Ahora mismo ya podemos iniciar el proceso de instalación de Prestashop. Si hemos copiado los ficheros de instalación en la carpeta web, nos vale con poner http://localhost en nuestro navegador.