-->

Intelligenza Artificiale

A un certo punto non fu più la biologia a dominare il destino dell'uomo, ma il prodotto del suo cervello: la cultura.
Cosicché: "Le uniche leggi della materia sono quelle che la nostra mente deve architettare e le uniche leggi della mente sono architettate per essa dalla materia".
JAMES CLERK MAXWELL

Docker Installare Magento 2


Creare i file di Docker compose e i comandi a terminale

Creare la struttura del progetto

Comandi da eseguire nella cartella principale del progetto

mkdir magento2-docker
cd magento2-docker
mkdir -p docker/php src

Creare e configurare i file necessari


File docker-compose.yml

Nella cartella magento2-docker, creare il file `docker-compose.yml`:

version: '3.8'

services:
  web:
    build:
      context: .
      dockerfile: Dockerfile
    container_name: magento2-web
    ports:
      - "8080:80"
    volumes:
      - ./src:/var/www/html
    depends_on:
      - db
      - redis
      - elasticsearch

  db:
    image: mysql:8.0
    container_name: magento2-db
    environment:
      MYSQL_ROOT_PASSWORD: rootpassword
      MYSQL_DATABASE: magento
      MYSQL_USER: magento
      MYSQL_PASSWORD: magentopassword
    ports:
      - "3306:3306"
    volumes:
      - dbdata:/var/lib/mysql

  redis:
    image: redis:6.2
    container_name: magento2-redis
    ports:
      - "6380:6379"

  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.10.0
    container_name: magento2-elasticsearch
    environment:
      - discovery.type=single-node
      - bootstrap.memory_lock=true
      - ES_JAVA_OPTS=-Xms1g -Xmx1g
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - esdata:/usr/share/elasticsearch/data
    ports:
      - "9201:9200"
    healthcheck:
      test: ["CMD-SHELL", "curl -f http://localhost:9200 || exit 1"]
      interval: 30s
      timeout: 10s
      retries: 3

  phpmyadmin:
    image: phpmyadmin/phpmyadmin
    platform: linux/amd64
    container_name: phpmyadmin
    environment:
      PMA_HOST: db
      PMA_USER: magento
      PMA_PASSWORD: magentopassword
    ports:
      - "8081:80"
    depends_on:
      - db

volumes:
  dbdata:
  esdata:

File Dockerfile

Nella cartella `magento2-docker`, crea un file Dockerfile:

FROM php:8.2-apache

# Install necessary packages and PHP extensions
RUN apt-get update && apt-get install -y --no-install-recommends \
    libfreetype6-dev \
    libjpeg62-turbo-dev \
    libpng-dev \
    libzip-dev \
    libonig-dev \
    libxml2-dev \
    libxslt1-dev \
    zip \
    unzip \
    && docker-php-ext-configure gd --with-freetype --with-jpeg \
    && docker-php-ext-install -j$(nproc) gd \
    && docker-php-ext-install -j$(nproc) mbstring \
    && docker-php-ext-install -j$(nproc) zip \
    && docker-php-ext-install -j$(nproc) intl \
    && docker-php-ext-install -j$(nproc) opcache \
    && docker-php-ext-install -j$(nproc) pdo_mysql \
    && docker-php-ext-install -j$(nproc) soap \
    && docker-php-ext-install -j$(nproc) xsl \
    && docker-php-ext-install -j$(nproc) bcmath \
    && docker-php-ext-install -j$(nproc) sockets \
    && docker-php-ext-install -j$(nproc) gettext \
    && docker-php-ext-install -j$(nproc) calendar \
    && apt-get clean && rm -rf /var/lib/apt/lists/*

# Install Redis extension
RUN pecl install redis && docker-php-ext-enable redis

# Enable Apache modules
RUN a2enmod rewrite

# Copy configuration files
COPY ./docker/php/php.ini /usr/local/etc/php/
COPY ./docker/php/apache2.conf /etc/apache2/apache2.conf
COPY ./docker/php/000-default.conf /etc/apache2/sites-available/000-default.conf

# Enable Apache site configuration
RUN [ -f /etc/apache2/sites-enabled/000-default.conf ] || ln -s /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-enabled/000-default.conf

File php.ini

Nella cartella `magento2-docker/docker/php`, crea il file php.ini
Incolla il seguente contenuto e salva:

memory_limit = 4G
max_execution_time = 1800

File `apache2.conf`

Nella cartella `magento2-docker/docker/php`, crea il file apache2.conf
Incolla il seguente contenuto e salva:

ServerName localhost

# Load all available modules
IncludeOptional mods-enabled/*.load
IncludeOptional mods-enabled/*.conf

# Include the ports listing
Include ports.conf

# Load the virtual host configurations
IncludeOptional sites-enabled/*.conf

# Include the default configurations
IncludeOptional conf-enabled/*.conf

ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined

# Ensure the User and Group directives are set
User www-data
Group www-data

File `000-default.conf`

Nella cartella `magento2-docker/docker/php`, crea il file `000-default.conf`:
Incolla il seguente contenuto e salva:

<VirtualHost *:80>
    DocumentRoot /var/www/html

    <Directory /var/www/html>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
        </Directory>

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
    </VirtualHost>

Installazione di Magento 2

Nella cartella `magento2-docker/src`, scarica Magento 2 utilizzando Composer:

cd src
composer create-project --repository-url=https://repo.magento.com/ magento/project-community-edition .
cd ..

Usare i container Docker


Avviare i container Docker

Nella cartella principale del progetto `magento2-docker`, avvia i container Docker:

docker compose up -d

Verifica lo stato dei container

Verifica lo stato dei container:

docker compose ps

    

Verifica dei log del container web

Verifica i log del container `web` per assicurarti che non ci siano errori di configurazione:

docker compose logs web

Configurazione finale di Magento

Accedi al container `web` e verifica che i file di Magento siano presenti:


docker exec -it magento2-web bash
cd /var/www/html
ls -la

Assicurati che tutti i file e le directory siano di proprietà dell'utente e del gruppo `www-data`:

chown -R www-data:www-data /var/www/html
find /var/www/html -type d -exec chmod 755 {} \;
find /var/www/html -type f -exec chmod 644 {} \;

Installazione di Magento

All'interno del container web, esegui il comando di installazione di Magento


php bin/magento setup:install \
--base-url=http://localhost:8080 \
--db-host=db \
--db-name=magento \
--db-user=magento \
--db-password=magentopassword \
--admin-firstname=admin \
--admin-lastname=admin \
--admin-email=admin@example.com \
--admin-user=admin \
--admin-password=admin123 \
--language=en_US \
--currency=USD \
--timezone=America/Chicago \
--use-rewrites=1 \
--search-engine=elasticsearch7 \
--elasticsearch-host=elasticsearch \
--elasticsearch-port=9200

Configurare Redis

All'interno del container web, configura Redis:

php bin/magento setup:config:set \
--cache-backend=redis \
--cache-backend-redis-server=redis \
--cache-backend-redis-db=0

php bin/magento setup:config:set \
--page-cache=redis \
--page-cache-redis-server=redis \
--page-cache-redis-db=1

php bin/magento setup:config:set \
--session-save=redis \
--session-save-redis-host=redis \
--session-save-redis-db=2


Verifica l'installazione


Apri il browser e accedi al frontend di Magento all'indirizzo `http://localhost:8080`
backend all'indirizzo `http://localhost:8080/admin`. sostituisci a admin quanto trovi nel file app/etc/env

'backend' => [
        'frontName' => 'admin_5lqnf51'
    ],
    
    

Gestione dei container Docker


Verifica dello stato dei container


docker compose ps

Visualizza i log dei container


docker compose logs web
docker compose logs db

Riavvia i container


docker compose down
docker compose up -d

Scaricare manualmente le immagini Docker

Se riscontri problemi di connettività durante il download delle immagini, scarica manualmente le immagini Docker necessarie:

docker pull php:8.2-apache
docker pull mysql:8.0
docker pull redis:6.2
docker pull docker.elastic.co/elasticsearch/elasticsearch:7.10.0
docker pull phpmyadmin/phpmyadmin

Verifica le immagini Docker scaricate:


docker images

    

Creare Nuovo Utente


php bin/magento admin:user:create \
    --admin-user="newadmin" \
    --admin-password="NewAdminPassword123" \
    --admin-email="newadmin@example.com" \
    --admin-firstname="Admin" \
    --admin-lastname="User"

Diasabilitare 2 fattori Autentificazione


docker exec -it magento2-web bash
php bin/magento module:disable Magento_AdminAdobeImsTwoFactorAuth Magento_TwoFactorAuth
php bin/magento cache:clean
php bin/magento cache:flush
php bin/magento module:status



Accedi alla Area Riservata per scaricare il codice


download

Se vuoi Saperne di piu’

Accedi all'area Riservata

Scarica il codice dell'articolo