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.iniIncolla 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.confIncolla 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