Bon, finalement après une bonne semaine de réglages, on va rester sur Magento2 (en lorgnant quand même du fork mage-os).
Il coche toutes le cases attendues :
- opensource
- pas de service en ligne obligatoire (uniquement de rapport avancé qui peut être désactivé)
- gestion en ligne de commande (composer et une commande type « console » symfony)
- une vraie base de données relationnelle (pratique pour des vues avec les rapports)
- conteneurisation aisée
- accès à des services de paiement européen (mollie en l’occurence)
Là, on a donc une installation avec Varnish, Opensearch et RabbitMQ qui tourne plutôt bien et qui est rapide !
Voici le docker-compose.yml pour celles et ceux qui sont intéressés :
version: '3.3'
services:
varnish:
image: varnish:7.7
restart: "always"
expose:
- "80"
ports:
- "xxxx:80" <--- port de sortie
links:
- web
depends_on:
- web
volumes:
- ./volumes/conf/varnish/magento.vcl:/etc/varnish/default.vcl:ro
networks:
default:
ipv4_address: 192.168.xx.8
rabbitmq:
image: rabbitmq:3
restart: "always"
env_file:
- .env
expose:
- "5672"
volumes:
- ./volumes/rabbitmq:/var/lib/rabbitmq
networks:
default:
ipv4_address: 192.168.xx.7
opensearch:
image: opensearchproject/opensearch:3
restart: "always"
env_file:
- .env
environment:
- "cluster.routing.allocation.disk.threshold_enabled=false"
- "index.blocks.read_only_allow_delete"
- "discovery.type=single-node"
expose:
- "9200"
networks:
default:
ipv4_address: 192.168.xx.6
redis:
image: redis:7.2-alpine
volumes:
- ./volumes/redis:/data
restart: "always"
expose:
- "6379"
networks:
default:
ipv4_address: 192.168.xx.5
db:
image: mariadb:11.4
volumes:
- ./volumes/db:/var/lib/mysql
- ./volumes/dump:/tmp/sql-dump
env_file:
- .env
restart: "always"
expose:
- "3306"
ports:
- "127.0.0.1:9591:3306"
networks:
default:
ipv4_address: 192.168.xx.3
app:
build:
context: ./sources/php
dockerfile: Dockerfile
restart: "always"
expose:
- "9000"
volumes:
- ./volumes/conf/php/php.ini:/usr/local/etc/php/php.ini
- ./volumes/conf/php/php-fpm.d:/usr/local/etc/php-fpm.d
- ./volumes/app:/var/www/html
#- ./volumes/data:/var/www/html/upload
depends_on:
- db
- redis
- opensearch
- rabbitmq
links:
- db
- redis
- opensearch
- rabbitmq
networks:
default:
ipv4_address: 192.168.xx.4
web:
image: nginx:1.24-alpine
volumes:
- ./volumes/app:/var/www/html
- ./volumes/conf/nginx/:/etc/nginx/conf.d
depends_on:
- app
links:
- app
expose:
- 80
networks:
default:
ipv4_address: 192.168.xx.2
networks:
default:
driver: bridge
ipam:
driver: default
config:
- subnet: 192.168.xx.0/24
Le .env
MYSQL_ROOT_PASSWORD=(pass root mariadb)
MYSQL_DATABASE=magento
MYSQL_USER=magento
MYSQL_PASSWORD=(pass magento mariadb)
DISABLE_SECURITY_PLUGIN=true
OPENSEARCH_JAVA_OPTS=-Xms256m -Xmx256m
RABBITMQ_DEFAULT_USER=magento
RABBITMQ_DEFAULT_PASS=(pass rabbitmq)
Le dockerfile php
FROM php:8.3-fpm
RUN apt-get update && apt-get install -y \
libmcrypt-dev \
libicu-dev \
libpng-dev \
libjpeg62-turbo-dev \
libwebp-dev \
libfreetype6-dev \
libxrender1 \
libfontconfig \
libxext-dev \
libzip-dev \
libldap-dev \
libmemcached-dev \
libgmp-dev \
libxslt-dev \
libcurl4-openssl-dev \
git \
&& apt-get install -y libmagickwand-dev --no-install-recommends \
&& rm -rf /var/lib/apt/lists/* \
&& docker-php-ext-configure gd --with-freetype --with-jpeg --with-webp \
&& docker-php-ext-install -j$(nproc) gd bcmath opcache mysqli zip ldap intl exif pdo pdo_mysql gmp \
&& docker-php-ext-install -j$(nproc) ftp soap xsl sockets curl \
&& printf "\n" | pecl install imagick \
&& docker-php-ext-enable imagick \
&& git clone https://github.com/phpredis/phpredis /tmp/redis \
&& docker-php-ext-configure /tmp/redis \
&& docker-php-ext-install /tmp/redis \
&& rm -rf /tmp/redis \
&& pecl install apcu \
&& docker-php-ext-enable apcu \
&& pecl install uploadprogress \
&& docker-php-ext-enable uploadprogress \
&& pecl clear-cache
RUN cd /tmp \
&& php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" \
&& php composer-setup.php \
&& php -r "unlink('composer-setup.php');" \
&& mv composer.phar /usr/local/bin/composer \
&& chmod +x /usr/local/bin/composer
USER www-data
WORKDIR /var/www/html
la config NGINX (à mettre dans ./volumes/conf/nginx) est identique à celle proposée par Magento avec juste le remplacement de la variable $MAGE_ROOT par son chemin « en dur » (donc, /var/www/html/pub)
Pour l’installation :
$ git clone https://github.com/magento/magento2.git app
$ cd app ; git checkout 2.4.8
$ cd .. ; chown -R www-data:www-data app
$ docker exec -it (conteneur)_app_1 /bin/bash
$ composer install
$ bin/magento setup:install --base-url=https:/(url finale) --db-host=db --db-name=magento --db-user=magento --db-password=(pass db magento) --admin-firstname=(prénom) --admin-lastname=(nom- --admin-user=admin --admin-email=(mail admin) --admin-password=(pass admin) --language=fr_FR --currency=EUR --timezone=Europe/Paris --search-engine=opensearch --opensearch-host=opensearch --opensearch-port=9200 --opensearch-index-prefix=magento2 --opensearch-timeout=15
Mise en place des crons
$ touch /var/www/html/var/log/magento.cron.log
$ bin/magento setup:config:set --amqp-host=rabbitmq --amqp-port=5672 --amqp-user=magento --amqp-password=(pass rabbitmq)
$ bin/magento cache:flush
$ bin/magento queue:consumers:list
Il n’y a plus qu’à croner toutes les minutes bin/magento cron:run depuis l’hôte.
/usr/local/bin/php /var/www/bin/magento cron:run 2>&1 | grep -v "Ran jobs by schedule" >> /var/www/html/var/log/magento.cron.log
Langue FR
$ composer require mageplaza/magento-2-french-language-pack
$ bin/magento setup:upgrade
$ bin/magento cache:flush
Mise en prod
$ bin/magento deploy:mode:set production
$ bin/magento setup:upgrade
$ bin/mangeto cache:clean
$ bin/magento setup:static-content:deploy
$ bin/magento cache:flush
(à activer après installation)
la config de Varnish est générée à partir de celle proposée par Magento, attention juste à écouter les purges depuis 192.168.xx.2 et 192.168.xx.4 et de configurer 192.168.xx.2 : 80 pour le backend (avec « web », ça déconnait parfois).