mirror of
https://github.com/kevinveenbirkenbach/computer-playbook.git
synced 2025-09-08 11:17:17 +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
|
||||
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:
|
||||
|
@@ -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:
|
||||
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
|
||||
|
@@ -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' %}
|
||||
|
||||
|
@@ -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') }}"
|
||||
|
Reference in New Issue
Block a user