Docker projet Magento 1.9 sous Windows

Ceci n’est pas un article à proprement parler, mais un mémo que je laisse visible car cela peut intéresser d’autres personnes.

Afin de me débarrasser d’un stack WAMP vieillissant et peu évolutif pour mes développements par Docker, je publie ci-dessous mon projet Magento 1.9, pour ceux, comme moi qui maintienne encore cet ancien CMS e-commerce.


Répertoire du projet

Il s’agit d’un stack LAMP classique : Apache, PHP 5.6, MySQL 5.7, PHPMyAdmin et memcached. Il y a 4 conteneurs. Niveau arborescence, mon projet Docker Magento 1.9 ressemble à ceci :

projet_mage19/
	confs/
	db_data/
	magento_data/
	mysql/
		conf.d/
	docker-compose.yml
	Dockerfile
  • confs : php.ini
  • db_data : les données MySQL
  • magento_data : le site Magento
  • mysql/conf.d : my.cnf

docker-compose.yml

La partie « command » du conteneur « db » permet d’avoir le my.cnf en lecture seule, sinon il est ignoré par MySQL.

version: "3.9"

services:
  db:
    image: mysql:5.7
    volumes:
      - ./db_data:/var/lib/mysql
      - ./mysql/conf.d/:/usr/local/mysqlconf
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: password_root_mysql
      MYSQL_DATABASE: nom_database
      MYSQL_USER: nom_utilisateur
      MYSQL_PASSWORD: password_utilisateur
    command: >
      bash -c "

      cp /usr/local/mysqlconf/*.cnf /etc/mysql/conf.d/ && chmod 644 /etc/mysql/conf.d/*.cnf && /entrypoint.sh mysqld
      "
    
  mage19:
    depends_on:
      - db
    build: .
    volumes:
      - ./magento_data:/var/www/html
    ports:
      - "80:80"
    restart: always
    stdin_open: true
    tty: true
    extra_hosts:
      - monsitemagento.local:127.0.0.1
    hostname: monsitemagento.local
    domainname: local
    
  phpmyadmin:
    image: phpmyadmin
    restart: always
    ports:
      - 8080:80
    environment:
      - PMA_ARBITRARY=1
      
  memcached:
    image: bitnami/memcached:latest
    ports:
      - 11211:11211
    environment:
      - MEMCACHED_CACHE_SIZE=512
      
volumes:
  db_data: {}
  magento_data: {}
  confs: {}

Dockerfile

FROM php:5.6-apache

EXPOSE 80

RUN apt-get update -qq && \
    apt-get install -qy \
	libmemcached-dev \
	zlib1g-dev \
    git \
    gnupg \
    unzip \
    zip \
	&& pecl install memcached-2.2.0 \
    && docker-php-ext-enable memcached

ADD https://github.com/mlocati/docker-php-extension-installer/releases/latest/download/install-php-extensions /usr/local/bin/

RUN chmod +x /usr/local/bin/install-php-extensions && \
    install-php-extensions \
	dom \
	hash \
	iconv \
	pcre \
	simplexml \
	mbstring \
	zip \
        gd \
	pdo \
	pdo_mysql \
	memcached
	
COPY confs/php.ini /usr/local/etc/php/conf.d/app.ini
	
RUN a2enmod rewrite
RUN service apache2 restart

my.cnf

[mysqld]
query_cache_type = 1
query_cache_size = 512M
query_cache_limit = 256M

tmp_table_size = 256M
max_heap_table_size = 256M
read_buffer_size = 128M
read_rnd_buffer_size = 128M
bulk_insert_buffer_size = 64M

myisam_sort_buffer_size = 128M
myisam_max_sort_file_size = 256M
myisam_repair_threads = 2

key_buffer_size = 256M
max_allowed_packet = 256M
table_open_cache = 1024
sort_buffer_size = 8M
thread_cache_size = 8

innodb_log_buffer_size = 32M
innodb_log_file_size = 32M
innodb_log_files_in_group = 2
innodb_flush_log_at_trx_commit = 0
innodb_buffer_pool_size = 1024M

php.ini

date.timezone = Europe/Paris

memory_limit = 1024M
max_execution_time=600

magic_quotes_gpc = off

opcache.enable = 1
opcache.enable_cli = 1
opcache.memory_consumption = 256M
opcache.revalidate_freq = 0
apc.enable_cli = On

upload_max_filesize = 16M
post_max_size = 16M

realpath_cache_size = 4096k
realpath_cache_ttl = 7200

display_errors = Off
display_startup_errors = Off

Démarrer les conteneurs avec docker-compose

Pour accéder au site via http://monsitemagento.local ne pas oublier d’ajouter une ligne dans le fichier hosts :

127.0.0.1       monsitemagento.local

Puis, dans un terminal, dans le répertoire projet_mage19 :

docker-compose up -d

Le résultat est (beaucoup) trop lent ? Allez lire l’article qui suit : Volumes Docker Windows très lent

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.