Usar Prestashop 1.7 con Docker Compose
Tags: docker, prestashop, php, compose
Published: 2020-05-23 09:02:43

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 'newroot'@'%' IDENTIFIED BY 'newroot_password';
```
Después le vamos a dar privilegios/permisos para ejecutar acciones en el servidor de base de datos:
```
GRANT ALL PRIVILEGES ON *.* TO 'newroot'@'%' 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.