Prestashop, OpenCart... quelles solutions utilisez-vous?

Bonjour à toutes et à tous,

Au début utilisé pour vendre en ligne les jeux produits par l’association, nous commençons à avoir des auteurs auto-édités et des collectifs de créateurs qui nous ont demandé de déployer aussi une boutique. Or, nous étions parti il y a quelques années sur Prestashop sur lequel je me limite aux mises à jour de sécurité… et j’ai eu de gros soucis avec la version 9…

Passons déjà sur les détails techniques concernant la maintenance et l’installation de cette application (grrr), la V9 nécessite d’utiliser les services en ligne de Prestashop pour beaucoup de fonctions basiques, dont les paiements en ligne vers des services tiers tels que Stripe ou Mollie. Choix que je trouve assez rédhibitoire : obligation d’avoir un compte « prestashop.com », obligation de passer par la boutique de plugin pour installer un plugin (mais laisse moi utiliser GIT !) et accès à tout le traffic entre la boutique et le système de paiement par un tiers qui commence à nous causer IA et marketting… genre, ça donne envie.

On a regardé du côté d’OpenCart qui semble pas mieux… on va tenter une installation de Spree. Quel logiciel opensource d’e-commerce utilisez-vous ?

J’ai mis à jour un prestashop vers la 9 aussi en décembre, c’était pas de la tarte (car il y avait un thème personnalisé à mettre à jour).

Pour le paiement en ligne , j’ai pas d’avis, mais je suis preneur d’info, il me semblait que certains prestataire de paiement ont leur propre module (genre crédit mutuel).

1 Like

Comme ça, me passe par la tête :

1 Like

J’ai posté la question sur le fédiverse et Luc de Framasoft a répondu par ce billet de blog :

2 Likes

Là, on est en train de tester Magento, l’install a été un peu chiante (on standardise la façon dont on conteneurise nos applications, et la proposition pour Magento n’est pas trop dans l’esprit de ce qu’on a)… mais à priori, c’est en train de cocher plusieurs cases :

  • base de données relationnelle : pratique pour faire des vues pour certains états des ventes ;
  • module de paiement Mollie sans accès tiers entre nous et eux ;
  • pas de trackers ou de services en ligne tiers imposés par le sponsor de la communauté (pourtant derrière, maintenant, c’est Adobe…)

ça convient à l’auteur auto-édtité qu’on avait passé sur PS9. S’il y a des intéressés pour la doc d’installation et les fichiers docker-compose…

Bon, la solution serait quand même d’avoir un espace e-commerce sur Dolibarr (et plus de double saisie comme aujourd’hui), il parait qu’il arrive fin 2026.

Salut, j’aime bien microweber perso

me dit-on

Une version on-premise existe ? j’avais plutôt l’impression d’un service à la Wix.

Ça a l’air d’être self-hostable : https://microweber.org/download
Mais perso je connais pas plus !

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).

3 Likes