mirror of
				https://github.com/kevinveenbirkenbach/computer-playbook.git
				synced 2025-10-31 02:10:05 +00: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