Magento 2.4.8 refactor:

- Switch to split containers (markoshust/magento-php:8.2-fpm + magento-nginx:latest)
- Disable central DB; use app-local MariaDB and pin to 11.4
- Composer bootstrap of Magento in php container (Adobe repo keys), idempotent via creates
- Make setup:install idempotent; run as container user 'app'
- Wire OpenSearch (security disabled) and depends_on ordering
- Add credentials schema (adobe_public_key/adobe_private_key)
- Update vars for php/nginx/search containers + MAGENTO_USER
- Remove legacy docs (Administration.md, Upgrade.md)
Context: changes derived from our ChatGPT session about getting Magento 2.4.8 running with MariaDB 11.4.
Conversation: https://chatgpt.com/share/68b8dc30-361c-800f-aa69-88df514cb160
This commit is contained in:
2025-09-04 12:45:03 +02:00
parent 32bc17e0c3
commit 77e8e7ed7e
7 changed files with 87 additions and 103 deletions

View File

@@ -1,55 +0,0 @@
# Administration
## 🗑️ Cleanup (Remove Instance & Volumes)
```bash
cd {{ PATH_DOCKER_COMPOSE_INSTANCES }}magento/
docker compose down
docker volume rm MAGENTO_VOLUME
cd {{ PATH_DOCKER_COMPOSE_INSTANCES }} && rm -vR {{ PATH_DOCKER_COMPOSE_INSTANCES }}magento
```
## 🔍 Access Container Shell
```bash
docker compose exec -it application /bin/bash
```
## 🧰 Common Magento CLI Tasks
```bash
# Reindex
docker compose exec -it application bin/magento indexer:reindex
# Flush caches
docker compose exec -it application bin/magento cache:flush
# Enable maintenance mode
docker compose exec -it application bin/magento maintenance:enable
# Disable maintenance mode
docker compose exec -it application bin/magento maintenance:disable
# Recompile DI (when switching modes)
docker compose exec -it application bin/magento setup:di:compile
# Deploy static content (example for English/German)
docker compose exec -it application bin/magento setup:static-content:deploy en_US de_DE -f
```
## 🚀 Performance
```bash
# Production mode
docker compose exec -it application bin/magento deploy:mode:set production
# Developer mode
docker compose exec -it application bin/magento deploy:mode:set developer
```
## 🔐 Admin User
```bash
# Create another admin (example)
docker compose exec -it application bin/magento admin:user:create \
--admin-user="admin2" \
--admin-password="ChangeMe_12345" \
--admin-email="{{ users.administrator.email }}" \
--admin-firstname="Admin" \
--admin-lastname="User"
```

View File

@@ -1,19 +0,0 @@
# 🔼 Upgrade
> Always back up the database and the `MAGENTO_VOLUME` volume before upgrades.
1. Update images/versions in the application config (`roles/web-app-magento/config/main.yml` or inventory overrides).
2. Recreate containers:
```bash
cd {{ PATH_DOCKER_COMPOSE_INSTANCES }}magento/
docker compose pull
docker compose up -d --remove-orphans
```
3. Run upgrade routines:
```bash
docker compose exec -it application bin/magento maintenance:enable
docker compose exec -it application bin/magento setup:upgrade
docker compose exec -it application bin/magento setup:di:compile
docker compose exec -it application bin/magento cache:flush
docker compose exec -it application bin/magento maintenance:disable
```

View File

@@ -2,7 +2,7 @@ features:
matomo: true
css: true
desktop: true
central_database: true # Use platform DB (recommended). If false, app-local DB container is enabled.
central_database: false # Impossible to use central database due to strict database checking
oidc: false # Magento SSO via OIDC requires extensions; not wired by default
logout: true
ldap: false
@@ -15,17 +15,23 @@ server:
- "shop.{{ PRIMARY_DOMAIN }}"
aliases:
- "magento.{{ PRIMARY_DOMAIN }}"
docker:
services:
application:
image: "ghcr.io/alexcheng1982/docker-magento2"
version: "2.4.6-p3"
name: "magento"
php:
image: "markoshust/magento-php"
version: "8.2-fpm"
name: "magento-php"
backup:
no_stop_required: true
nginx:
image: "markoshust/magento-nginx"
version: "latest"
name: "magento-nginx"
backup:
no_stop_required: true
database:
enabled: true # Central DB recommended; if disabled, app-local DB is created
enabled: true
version: "11.4"
redis:
enabled: true
search:

View File

@@ -1 +1,7 @@
credentials:
adobe_public_key:
description: "Adobe/Magento Marketplace Public Key"
algorithm: "plain"
adobe_private_key:
description: "Adobe/Magento Marketplace Private Key"
algorithm: "plain"

View File

@@ -2,17 +2,36 @@
include_role:
name: sys-stk-full-stateful
vars:
docker_compose_flush_handlers: true
docker_compose_flush_handlers: true
- name: "Bootstrap Magento 2.4.8 source (exact working variant)"
command: >
docker exec
-e COMPOSER_AUTH='{"http-basic":{"repo.magento.com":{"username":"{{ MAGENTO_REPO_PUBLIC_KEY }}","password":"{{ MAGENTO_REPO_PRIVATE_KEY }}"}}}'
-e COMPOSER_HOME=/tmp/composer
-e COMPOSER_CACHE_DIR=/tmp/composer/cache
--user {{ MAGENTO_USER }}
{{ MAGENTO_PHP_CONTAINER }} bash -lc 'set -e
mkdir -p /tmp/composer/cache
cd /var/www/html
composer create-project --no-interaction --no-progress --repository-url=https://repo.magento.com/ magento/project-community-edition=2.4.8 .
mkdir -p var pub/static pub/media app/etc
chmod -R 775 var pub/static pub/media app/etc
'
args:
creates: "{{ [ (MAGENTO_VOLUME | docker_volume_path), 'bin/magento' ] | path_join }}"
- name: "Run Magento setup:install (in container)"
command: >
docker compose exec -T application bash -lc "
docker exec --user {{ MAGENTO_USER }} {{ MAGENTO_PHP_CONTAINER }} bash -lc "
cd /var/www/html && bin/magento setup:install \
--base-url='{{ MAGENTO_URL }}/' \
--db-host=\"$MYSQL_HOST\" \
--db-name=\"$MYSQL_DATABASE\" \
--db-user=\"$MYSQL_USER\" \
--db-password=\"$MYSQL_PASSWORD\" \
--skip-db-validation \
--db-engine=mysql \
--search-engine='opensearch' \
--opensearch-host=\"$OPENSEARCH_HOST\" \
--opensearch-port=\"$OPENSEARCH_PORT_NUMBER\" \
@@ -22,11 +41,11 @@
--admin-user=\"$MAGENTO_ADMIN_USERNAME\" \
--admin-password=\"$MAGENTO_ADMIN_PASSWORD\""
args:
chdir: "{{ docker_compose.directories.instance }}"
creates: "{{ [ (MAGENTO_VOLUME | docker_volume_path), 'app/etc/env.php' ] | path_join }}"
register: magento_install
changed_when: >
(magento_install.stdout is defined and
('Magento installation complete' in magento_install.stdout
or 'successfully installed' in magento_install.stdout))
- include_tasks: utils/run_once.yml
- include_tasks: utils/run_once.yml

View File

@@ -1,27 +1,37 @@
{% include 'roles/docker-compose/templates/base.yml.j2' %}
application:
nginx:
{% set container_port = 80 %}
{% include 'roles/docker-container/templates/base.yml.j2' %}
image: "{{ MAGENTO_IMAGE }}:{{ MAGENTO_VERSION }}"
container_name: "{{ MAGENTO_CONTAINER }}"
ports:
- "127.0.0.1:{{ ports.localhost.http[application_id] }}:{{ container_port }}"
image: "{{ MAGENTO_NGINX_IMAGE }}:{{ MAGENTO_NGINX_VERSION }}"
container_name: "{{ MAGENTO_NGINX_CONTAINER }}"
depends_on:
- php
- search
volumes:
- "data:/var/www/html"
{% include 'roles/docker-container/templates/depends_on/dmbs_excl.yml.j2' %}
# search:
# condition: service_healthy
ports:
- "127.0.0.1:{{ ports.localhost.http[application_id] }}:{{ container_port }}"
{% include 'roles/docker-container/templates/healthcheck/tcp.yml.j2' %}
{% include 'roles/docker-container/templates/networks.yml.j2' %}
php:
{% include 'roles/docker-container/templates/base.yml.j2' %}
image: "{{ MAGENTO_PHP_IMAGE }}:{{ MAGENTO_PHP_VERSION }}"
container_name: "{{ MAGENTO_PHP_CONTAINER }}"
volumes:
- "data:/var/www/html"
{% include 'roles/docker-container/templates/depends_on/dmbs_incl.yml.j2' %}
search:
condition: service_started
{% include 'roles/docker-container/templates/networks.yml.j2' %}
search:
{% set container_port = 9200 %}
image: "{{ MAGENTO_SEARCH_IMAGE }}:{{ MAGENTO_SEARCH_VERSION }}"
container_name: "{{ MAGENTO_SEARCH_NAME }}"
container_name: "{{ MAGENTO_SEARCH_CONTAINER }}"
{% include 'roles/docker-container/templates/base.yml.j2' %}
environment:
- discovery.type=single-node
- plugins.security.disabled=true
- OPENSEARCH_JAVA_OPTS=-Xms512m -Xmx512m
{% include 'roles/docker-container/templates/healthcheck/tcp.yml.j2' %}
{% include 'roles/docker-container/templates/networks.yml.j2' %}
@@ -31,3 +41,4 @@
name: {{ MAGENTO_VOLUME }}
{% include 'roles/docker-compose/templates/networks.yml.j2' %}

View File

@@ -3,14 +3,30 @@ application_id: "web-app-magento"
database_type: "mariadb"
# Magento (application container)
## Meta
MAGENTO_VOLUME: "{{ applications | get_app_conf(application_id, 'docker.volumes.data') }}"
MAGENTO_USER: "app"
## Address
MAGENTO_DOMAIN: "{{ domains | get_domain(application_id) }}"
MAGENTO_URL: "{{ domains | get_url(application_id, WEB_PROTOCOL) }}"
MAGENTO_VERSION: "{{ applications | get_app_conf(application_id, 'docker.services.application.version') }}"
MAGENTO_IMAGE: "{{ applications | get_app_conf(application_id, 'docker.services.application.image') }}"
MAGENTO_CONTAINER: "{{ applications | get_app_conf(application_id, 'docker.services.application.name') }}"
MAGENTO_VOLUME: "{{ applications | get_app_conf(application_id, 'docker.volumes.data') }}"
# Search (OpenSearch)
## Search (OpenSearch)
MAGENTO_SEARCH_VERSION: "{{ applications | get_app_conf(application_id, 'docker.services.search.version') }}"
MAGENTO_SEARCH_IMAGE: "{{ applications | get_app_conf(application_id, 'docker.services.search.image') }}"
MAGENTO_SEARCH_NAME: "{{ applications | get_app_conf(application_id, 'docker.services.search.name') }}"
MAGENTO_SEARCH_CONTAINER: "{{ applications | get_app_conf(application_id, 'docker.services.search.name') }}"
## PHP
MAGENTO_PHP_VERSION: "{{ applications | get_app_conf(application_id, 'docker.services.php.version') }}"
MAGENTO_PHP_IMAGE: "{{ applications | get_app_conf(application_id, 'docker.services.php.image') }}"
MAGENTO_PHP_CONTAINER: "{{ applications | get_app_conf(application_id, 'docker.services.php.name') }}"
## NGINX
MAGENTO_NGINX_VERSION: "{{ applications | get_app_conf(application_id, 'docker.services.nginx.version') }}"
MAGENTO_NGINX_IMAGE: "{{ applications | get_app_conf(application_id, 'docker.services.nginx.image') }}"
MAGENTO_NGINX_CONTAINER: "{{ applications | get_app_conf(application_id, 'docker.services.nginx.name') }}"
## Credentials
MAGENTO_REPO_PUBLIC_KEY: "{{ applications | get_app_conf(application_id, 'credentials.adobe_public_key') }}"
MAGENTO_REPO_PRIVATE_KEY: "{{ applications | get_app_conf(application_id, 'credentials.adobe_private_key') }}"