mirror of
https://github.com/kevinveenbirkenbach/computer-playbook.git
synced 2025-09-09 11:47:14 +02:00
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:
@@ -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"
|
|
||||||
```
|
|
@@ -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
|
|
||||||
```
|
|
@@ -2,7 +2,7 @@ features:
|
|||||||
matomo: true
|
matomo: true
|
||||||
css: true
|
css: true
|
||||||
desktop: 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
|
oidc: false # Magento SSO via OIDC requires extensions; not wired by default
|
||||||
logout: true
|
logout: true
|
||||||
ldap: false
|
ldap: false
|
||||||
@@ -15,17 +15,23 @@ server:
|
|||||||
- "shop.{{ PRIMARY_DOMAIN }}"
|
- "shop.{{ PRIMARY_DOMAIN }}"
|
||||||
aliases:
|
aliases:
|
||||||
- "magento.{{ PRIMARY_DOMAIN }}"
|
- "magento.{{ PRIMARY_DOMAIN }}"
|
||||||
|
|
||||||
docker:
|
docker:
|
||||||
services:
|
services:
|
||||||
application:
|
php:
|
||||||
image: "ghcr.io/alexcheng1982/docker-magento2"
|
image: "markoshust/magento-php"
|
||||||
version: "2.4.6-p3"
|
version: "8.2-fpm"
|
||||||
name: "magento"
|
name: "magento-php"
|
||||||
|
backup:
|
||||||
|
no_stop_required: true
|
||||||
|
nginx:
|
||||||
|
image: "markoshust/magento-nginx"
|
||||||
|
version: "latest"
|
||||||
|
name: "magento-nginx"
|
||||||
backup:
|
backup:
|
||||||
no_stop_required: true
|
no_stop_required: true
|
||||||
database:
|
database:
|
||||||
enabled: true # Central DB recommended; if disabled, app-local DB is created
|
enabled: true
|
||||||
|
version: "11.4"
|
||||||
redis:
|
redis:
|
||||||
enabled: true
|
enabled: true
|
||||||
search:
|
search:
|
||||||
|
@@ -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"
|
||||||
|
@@ -2,17 +2,36 @@
|
|||||||
include_role:
|
include_role:
|
||||||
name: sys-stk-full-stateful
|
name: sys-stk-full-stateful
|
||||||
vars:
|
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)"
|
- name: "Run Magento setup:install (in container)"
|
||||||
command: >
|
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 \
|
cd /var/www/html && bin/magento setup:install \
|
||||||
--base-url='{{ MAGENTO_URL }}/' \
|
--base-url='{{ MAGENTO_URL }}/' \
|
||||||
--db-host=\"$MYSQL_HOST\" \
|
--db-host=\"$MYSQL_HOST\" \
|
||||||
--db-name=\"$MYSQL_DATABASE\" \
|
--db-name=\"$MYSQL_DATABASE\" \
|
||||||
--db-user=\"$MYSQL_USER\" \
|
--db-user=\"$MYSQL_USER\" \
|
||||||
--db-password=\"$MYSQL_PASSWORD\" \
|
--db-password=\"$MYSQL_PASSWORD\" \
|
||||||
|
--skip-db-validation \
|
||||||
|
--db-engine=mysql \
|
||||||
--search-engine='opensearch' \
|
--search-engine='opensearch' \
|
||||||
--opensearch-host=\"$OPENSEARCH_HOST\" \
|
--opensearch-host=\"$OPENSEARCH_HOST\" \
|
||||||
--opensearch-port=\"$OPENSEARCH_PORT_NUMBER\" \
|
--opensearch-port=\"$OPENSEARCH_PORT_NUMBER\" \
|
||||||
@@ -22,7 +41,7 @@
|
|||||||
--admin-user=\"$MAGENTO_ADMIN_USERNAME\" \
|
--admin-user=\"$MAGENTO_ADMIN_USERNAME\" \
|
||||||
--admin-password=\"$MAGENTO_ADMIN_PASSWORD\""
|
--admin-password=\"$MAGENTO_ADMIN_PASSWORD\""
|
||||||
args:
|
args:
|
||||||
chdir: "{{ docker_compose.directories.instance }}"
|
creates: "{{ [ (MAGENTO_VOLUME | docker_volume_path), 'app/etc/env.php' ] | path_join }}"
|
||||||
register: magento_install
|
register: magento_install
|
||||||
changed_when: >
|
changed_when: >
|
||||||
(magento_install.stdout is defined and
|
(magento_install.stdout is defined and
|
||||||
|
@@ -1,27 +1,37 @@
|
|||||||
{% include 'roles/docker-compose/templates/base.yml.j2' %}
|
{% include 'roles/docker-compose/templates/base.yml.j2' %}
|
||||||
|
nginx:
|
||||||
application:
|
|
||||||
{% set container_port = 80 %}
|
{% set container_port = 80 %}
|
||||||
{% include 'roles/docker-container/templates/base.yml.j2' %}
|
image: "{{ MAGENTO_NGINX_IMAGE }}:{{ MAGENTO_NGINX_VERSION }}"
|
||||||
image: "{{ MAGENTO_IMAGE }}:{{ MAGENTO_VERSION }}"
|
container_name: "{{ MAGENTO_NGINX_CONTAINER }}"
|
||||||
container_name: "{{ MAGENTO_CONTAINER }}"
|
depends_on:
|
||||||
ports:
|
- php
|
||||||
- "127.0.0.1:{{ ports.localhost.http[application_id] }}:{{ container_port }}"
|
- search
|
||||||
volumes:
|
volumes:
|
||||||
- "data:/var/www/html"
|
- "data:/var/www/html"
|
||||||
{% include 'roles/docker-container/templates/depends_on/dmbs_excl.yml.j2' %}
|
ports:
|
||||||
# search:
|
- "127.0.0.1:{{ ports.localhost.http[application_id] }}:{{ container_port }}"
|
||||||
# condition: service_healthy
|
|
||||||
{% include 'roles/docker-container/templates/healthcheck/tcp.yml.j2' %}
|
{% include 'roles/docker-container/templates/healthcheck/tcp.yml.j2' %}
|
||||||
{% include 'roles/docker-container/templates/networks.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:
|
search:
|
||||||
{% set container_port = 9200 %}
|
{% set container_port = 9200 %}
|
||||||
image: "{{ MAGENTO_SEARCH_IMAGE }}:{{ MAGENTO_SEARCH_VERSION }}"
|
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' %}
|
{% include 'roles/docker-container/templates/base.yml.j2' %}
|
||||||
environment:
|
environment:
|
||||||
- discovery.type=single-node
|
- discovery.type=single-node
|
||||||
|
- plugins.security.disabled=true
|
||||||
- OPENSEARCH_JAVA_OPTS=-Xms512m -Xmx512m
|
- OPENSEARCH_JAVA_OPTS=-Xms512m -Xmx512m
|
||||||
{% include 'roles/docker-container/templates/healthcheck/tcp.yml.j2' %}
|
{% include 'roles/docker-container/templates/healthcheck/tcp.yml.j2' %}
|
||||||
{% include 'roles/docker-container/templates/networks.yml.j2' %}
|
{% include 'roles/docker-container/templates/networks.yml.j2' %}
|
||||||
@@ -31,3 +41,4 @@
|
|||||||
name: {{ MAGENTO_VOLUME }}
|
name: {{ MAGENTO_VOLUME }}
|
||||||
|
|
||||||
{% include 'roles/docker-compose/templates/networks.yml.j2' %}
|
{% include 'roles/docker-compose/templates/networks.yml.j2' %}
|
||||||
|
|
||||||
|
@@ -3,14 +3,30 @@ application_id: "web-app-magento"
|
|||||||
database_type: "mariadb"
|
database_type: "mariadb"
|
||||||
|
|
||||||
# Magento (application container)
|
# 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_DOMAIN: "{{ domains | get_domain(application_id) }}"
|
||||||
MAGENTO_URL: "{{ domains | get_url(application_id, WEB_PROTOCOL) }}"
|
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_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_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') }}"
|
||||||
|
Reference in New Issue
Block a user