Showing preview only (340K chars total). Download the full file or copy to clipboard to get everything.
Repository: mageinferno/magento2-docker-compose
Branch: release/next
Commit: c2c54289027b
Files: 184
Total size: 298.6 KB
Directory structure:
gitextract_68gwi905/
├── .gitattributes
├── .github/
│ ├── FUNDING.yml
│ ├── ISSUE_TEMPLATE/
│ │ └── bug_report.md
│ ├── dependabot.yml
│ └── workflows/
│ ├── build-elasticsearch-7-16.yml
│ ├── build-elasticsearch-7-17.yml
│ ├── build-elasticsearch-8-11.yml
│ ├── build-elasticsearch-8-13.yml
│ ├── build-elasticsearch-8-4.yml
│ ├── build-elasticsearch-8-5.yml
│ ├── build-elasticsearch-8-7.yml
│ ├── build-nginx-1-18.yml
│ ├── build-nginx-1-22.yml
│ ├── build-nginx-1-24.yml
│ ├── build-opensearch-1-2.yml
│ ├── build-opensearch-2-12.yml
│ ├── build-opensearch-2-5.yml
│ ├── build-php-8-1.yml
│ ├── build-php-8-2.yml
│ ├── build-php-8-3.yml
│ ├── build-php-8-4.yml
│ ├── build-rabbitmq-3-11.yml
│ ├── build-rabbitmq-3-12.yml
│ ├── build-rabbitmq-3-13.yml
│ ├── build-rabbitmq-3-9.yml
│ ├── build-rabbitmq-4-1.yml
│ ├── build-ssh.yml
│ ├── claude.yml
│ └── shellcheck.yml
├── CHANGELOG.md
├── LICENSE.md
├── README.md
├── compose/
│ ├── .gitignore
│ ├── .vscode/
│ │ └── launch.json
│ ├── Makefile
│ ├── bin/
│ │ ├── analyse
│ │ ├── bash
│ │ ├── blackfire
│ │ ├── cache-clean
│ │ ├── check-dependencies
│ │ ├── cli
│ │ ├── clinotty
│ │ ├── cliq
│ │ ├── composer
│ │ ├── configure-linux
│ │ ├── copyfromcontainer
│ │ ├── copytocontainer
│ │ ├── create-user
│ │ ├── cron
│ │ ├── debug-cli
│ │ ├── deploy
│ │ ├── dev-test-run
│ │ ├── dev-urn-catalog-generate
│ │ ├── devconsole
│ │ ├── docker-compose
│ │ ├── docker-start
│ │ ├── docker-stats
│ │ ├── download
│ │ ├── ece-patches
│ │ ├── fixowns
│ │ ├── fixperms
│ │ ├── grunt
│ │ ├── init
│ │ ├── install-php-extensions
│ │ ├── log
│ │ ├── magento
│ │ ├── magento-version
│ │ ├── mftf
│ │ ├── mysql
│ │ ├── mysqldump
│ │ ├── n98-magerun2
│ │ ├── node
│ │ ├── npm
│ │ ├── phpcbf
│ │ ├── phpcs
│ │ ├── phpcs-json-report
│ │ ├── pwa-studio
│ │ ├── redis
│ │ ├── remove
│ │ ├── removeall
│ │ ├── removenetwork
│ │ ├── removevolumes
│ │ ├── restart
│ │ ├── root
│ │ ├── rootnotty
│ │ ├── setup
│ │ ├── setup-composer-auth
│ │ ├── setup-domain
│ │ ├── setup-grunt
│ │ ├── setup-install
│ │ ├── setup-integration-tests
│ │ ├── setup-pwa-studio
│ │ ├── setup-pwa-studio-sampledata
│ │ ├── setup-ssl
│ │ ├── setup-ssl-ca
│ │ ├── spx
│ │ ├── start
│ │ ├── status
│ │ ├── stop
│ │ ├── stopall
│ │ ├── test/
│ │ │ ├── unit
│ │ │ ├── unit-coverage
│ │ │ └── unit-xdebug
│ │ ├── update
│ │ └── xdebug
│ ├── compose.dev-linux.yaml
│ ├── compose.dev-ssh.yaml
│ ├── compose.dev.yaml
│ ├── compose.healthcheck.yaml
│ ├── compose.yaml
│ ├── env/
│ │ ├── blackfire.env
│ │ ├── cloudflare.env
│ │ ├── db.env
│ │ ├── elasticsearch.env
│ │ ├── magento.env
│ │ ├── opensearch.env
│ │ ├── phpfpm.env
│ │ ├── rabbitmq.env
│ │ └── redis.env
│ └── template/
│ └── dev/
│ └── tests/
│ └── integration/
│ └── etc/
│ ├── install-config-mysql.php.2.3.dist
│ └── install-config-mysql.php.2.4.dist
├── images/
│ ├── elasticsearch/
│ │ ├── 7.16/
│ │ │ └── Dockerfile
│ │ ├── 7.17/
│ │ │ └── Dockerfile
│ │ ├── 8.11/
│ │ │ └── Dockerfile
│ │ ├── 8.13/
│ │ │ └── Dockerfile
│ │ ├── 8.4/
│ │ │ └── Dockerfile
│ │ ├── 8.5/
│ │ │ └── Dockerfile
│ │ └── 8.7/
│ │ └── Dockerfile
│ ├── nginx/
│ │ ├── 1.18/
│ │ │ ├── Dockerfile
│ │ │ └── conf/
│ │ │ ├── default.conf
│ │ │ ├── default.magento1.conf
│ │ │ └── nginx.conf
│ │ ├── 1.22/
│ │ │ ├── Dockerfile
│ │ │ └── conf/
│ │ │ ├── default.conf
│ │ │ ├── default.magento1.conf
│ │ │ └── nginx.conf
│ │ └── 1.24/
│ │ ├── Dockerfile
│ │ └── conf/
│ │ ├── default.conf
│ │ ├── default.magento1.conf
│ │ └── nginx.conf
│ ├── opensearch/
│ │ ├── 1.2/
│ │ │ └── Dockerfile
│ │ ├── 2.12/
│ │ │ └── Dockerfile
│ │ └── 2.5/
│ │ └── Dockerfile
│ ├── php/
│ │ ├── 8.1/
│ │ │ ├── Dockerfile
│ │ │ └── conf/
│ │ │ ├── blackfire.ini
│ │ │ ├── msmtprc
│ │ │ ├── php-fpm.conf
│ │ │ ├── php.ini
│ │ │ ├── spx.ini
│ │ │ └── www.conf
│ │ ├── 8.2/
│ │ │ ├── Dockerfile
│ │ │ └── conf/
│ │ │ ├── blackfire.ini
│ │ │ ├── msmtprc
│ │ │ ├── php-fpm.conf
│ │ │ ├── php.ini
│ │ │ ├── spx.ini
│ │ │ └── www.conf
│ │ ├── 8.3/
│ │ │ ├── Dockerfile
│ │ │ └── conf/
│ │ │ ├── blackfire.ini
│ │ │ ├── msmtprc
│ │ │ ├── php-fpm.conf
│ │ │ ├── php.ini
│ │ │ ├── spx.ini
│ │ │ └── www.conf
│ │ └── 8.4/
│ │ ├── Dockerfile
│ │ └── conf/
│ │ ├── blackfire.ini
│ │ ├── msmtprc
│ │ ├── php-fpm.conf
│ │ ├── php.ini
│ │ ├── spx.ini
│ │ └── www.conf
│ ├── rabbitmq/
│ │ ├── 3.11/
│ │ │ ├── Dockerfile
│ │ │ └── conf/
│ │ │ └── rabbitmq.conf
│ │ ├── 3.12/
│ │ │ ├── Dockerfile
│ │ │ └── conf/
│ │ │ └── rabbitmq.conf
│ │ ├── 3.13/
│ │ │ ├── Dockerfile
│ │ │ └── conf/
│ │ │ └── rabbitmq.conf
│ │ ├── 3.9/
│ │ │ ├── Dockerfile
│ │ │ └── conf/
│ │ │ └── rabbitmq.conf
│ │ └── 4.1/
│ │ ├── Dockerfile
│ │ └── conf/
│ │ └── rabbitmq.conf
│ └── ssh/
│ └── Dockerfile
└── lib/
├── onelinesetup
└── template
================================================
FILE CONTENTS
================================================
================================================
FILE: .gitattributes
================================================
/docs export-ignore
================================================
FILE: .github/FUNDING.yml
================================================
# These are supported funding model platforms
github: markshust
================================================
FILE: .github/ISSUE_TEMPLATE/bug_report.md
================================================
---
name: Bug report
about: Create a report to help us improve
title: ''
labels: ''
assignees: ''
---
**Description**
**Steps To Reproduce**
1.
**Expected Result**
**Actual Result**
================================================
FILE: .github/dependabot.yml
================================================
version: 2
updates:
- package-ecosystem: github-actions
directory: /
schedule:
interval: daily
================================================
FILE: .github/workflows/build-elasticsearch-7-16.yml
================================================
name: build-elasticsearch-7-16
on: workflow_dispatch
jobs:
elasticsearch-7-17:
runs-on: ubuntu-latest
steps:
-
name: Checkout
uses: actions/checkout@v6
with:
ref: release/next
-
name: Set up QEMU
uses: docker/setup-qemu-action@v4
-
name: Set up Docker Buildx
uses: docker/setup-buildx-action@v4
-
name: Login to DockerHub
uses: docker/login-action@v4
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
-
name: Build and push
id: docker_build
uses: docker/build-push-action@v7
with:
context: images/elasticsearch/7.17
platforms: linux/amd64,linux/arm64
push: true
tags: |
markoshust/magento-elasticsearch:7.16
markoshust/magento-elasticsearch:7.16-0
================================================
FILE: .github/workflows/build-elasticsearch-7-17.yml
================================================
name: build-elasticsearch-7-17
on: workflow_dispatch
jobs:
elasticsearch-7-17:
runs-on: ubuntu-latest
steps:
-
name: Checkout
uses: actions/checkout@v6
with:
ref: release/next
-
name: Set up QEMU
uses: docker/setup-qemu-action@v4
-
name: Set up Docker Buildx
uses: docker/setup-buildx-action@v4
-
name: Login to DockerHub
uses: docker/login-action@v4
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
-
name: Build and push
id: docker_build
uses: docker/build-push-action@v7
with:
context: images/elasticsearch/7.17
platforms: linux/amd64,linux/arm64
push: true
tags: |
markoshust/magento-elasticsearch:7.17
markoshust/magento-elasticsearch:7.17-1
================================================
FILE: .github/workflows/build-elasticsearch-8-11.yml
================================================
name: build-elasticsearch-8-11
on: workflow_dispatch
jobs:
elasticsearch-8-5:
runs-on: ubuntu-latest
steps:
-
name: Checkout
uses: actions/checkout@v6
with:
ref: release/next
-
name: Set up QEMU
uses: docker/setup-qemu-action@v4
-
name: Set up Docker Buildx
uses: docker/setup-buildx-action@v4
-
name: Login to DockerHub
uses: docker/login-action@v4
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
-
name: Build and push
id: docker_build
uses: docker/build-push-action@v7
with:
context: images/elasticsearch/8.11
platforms: linux/amd64,linux/arm64
push: true
tags: |
markoshust/magento-elasticsearch:8.11
markoshust/magento-elasticsearch:8.11-0
================================================
FILE: .github/workflows/build-elasticsearch-8-13.yml
================================================
name: build-elasticsearch-8-13
on: workflow_dispatch
jobs:
elasticsearch-8-5:
runs-on: ubuntu-latest
steps:
-
name: Checkout
uses: actions/checkout@v6
with:
ref: release/next
-
name: Set up QEMU
uses: docker/setup-qemu-action@v4
-
name: Set up Docker Buildx
uses: docker/setup-buildx-action@v4
-
name: Login to DockerHub
uses: docker/login-action@v4
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
-
name: Build and push
id: docker_build
uses: docker/build-push-action@v7
with:
context: images/elasticsearch/8.13
platforms: linux/amd64,linux/arm64
push: true
tags: |
markoshust/magento-elasticsearch:8.13
markoshust/magento-elasticsearch:8.13-0
================================================
FILE: .github/workflows/build-elasticsearch-8-4.yml
================================================
name: build-elasticsearch-8-4
on: workflow_dispatch
jobs:
elasticsearch-8-4:
runs-on: ubuntu-latest
steps:
-
name: Checkout
uses: actions/checkout@v6
with:
ref: release/next
-
name: Set up QEMU
uses: docker/setup-qemu-action@v4
-
name: Set up Docker Buildx
uses: docker/setup-buildx-action@v4
-
name: Login to DockerHub
uses: docker/login-action@v4
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
-
name: Build and push
id: docker_build
uses: docker/build-push-action@v7
with:
context: images/elasticsearch/8.4
platforms: linux/amd64,linux/arm64
push: true
tags: |
markoshust/magento-elasticsearch:8.4
markoshust/magento-elasticsearch:8.4-0
================================================
FILE: .github/workflows/build-elasticsearch-8-5.yml
================================================
name: build-elasticsearch-8-5
on: workflow_dispatch
jobs:
elasticsearch-8-5:
runs-on: ubuntu-latest
steps:
-
name: Checkout
uses: actions/checkout@v6
with:
ref: release/next
-
name: Set up QEMU
uses: docker/setup-qemu-action@v4
-
name: Set up Docker Buildx
uses: docker/setup-buildx-action@v4
-
name: Login to DockerHub
uses: docker/login-action@v4
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
-
name: Build and push
id: docker_build
uses: docker/build-push-action@v7
with:
context: images/elasticsearch/8.5
platforms: linux/amd64,linux/arm64
push: true
tags: |
markoshust/magento-elasticsearch:8.5
markoshust/magento-elasticsearch:8.5-0
================================================
FILE: .github/workflows/build-elasticsearch-8-7.yml
================================================
name: build-elasticsearch-8-7
on: workflow_dispatch
jobs:
elasticsearch-8-5:
runs-on: ubuntu-latest
steps:
-
name: Checkout
uses: actions/checkout@v6
with:
ref: release/next
-
name: Set up QEMU
uses: docker/setup-qemu-action@v4
-
name: Set up Docker Buildx
uses: docker/setup-buildx-action@v4
-
name: Login to DockerHub
uses: docker/login-action@v4
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
-
name: Build and push
id: docker_build
uses: docker/build-push-action@v7
with:
context: images/elasticsearch/8.7
platforms: linux/amd64,linux/arm64
push: true
tags: |
markoshust/magento-elasticsearch:8.7
markoshust/magento-elasticsearch:8.7-0
================================================
FILE: .github/workflows/build-nginx-1-18.yml
================================================
name: build-nginx-1-18
on: workflow_dispatch
jobs:
nginx-1-18:
runs-on: ubuntu-latest
steps:
-
name: Checkout
uses: actions/checkout@v6
with:
ref: release/next
-
name: Set up QEMU
uses: docker/setup-qemu-action@v4
-
name: Set up Docker Buildx
uses: docker/setup-buildx-action@v4
-
name: Login to DockerHub
uses: docker/login-action@v4
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
-
name: Build and push
id: docker_build
uses: docker/build-push-action@v7
with:
context: images/nginx/1.18
platforms: linux/amd64,linux/arm64
push: true
tags: |
markoshust/magento-nginx:1.18
markoshust/magento-nginx:1.18-8
================================================
FILE: .github/workflows/build-nginx-1-22.yml
================================================
name: build-nginx-1-22
on: workflow_dispatch
jobs:
nginx-1-18:
runs-on: ubuntu-latest
steps:
-
name: Checkout
uses: actions/checkout@v6
with:
ref: release/next
-
name: Set up QEMU
uses: docker/setup-qemu-action@v4
-
name: Set up Docker Buildx
uses: docker/setup-buildx-action@v4
-
name: Login to DockerHub
uses: docker/login-action@v4
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
-
name: Build and push
id: docker_build
uses: docker/build-push-action@v7
with:
context: images/nginx/1.22
platforms: linux/amd64,linux/arm64
push: true
tags: |
markoshust/magento-nginx:1.22
markoshust/magento-nginx:1.22-0
================================================
FILE: .github/workflows/build-nginx-1-24.yml
================================================
name: build-nginx-1-24
on: workflow_dispatch
jobs:
nginx-1-18:
runs-on: ubuntu-latest
steps:
-
name: Checkout
uses: actions/checkout@v6
with:
ref: release/next
-
name: Set up QEMU
uses: docker/setup-qemu-action@v4
-
name: Set up Docker Buildx
uses: docker/setup-buildx-action@v4
-
name: Login to DockerHub
uses: docker/login-action@v4
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
-
name: Build and push
id: docker_build
uses: docker/build-push-action@v7
with:
context: images/nginx/1.24
platforms: linux/amd64,linux/arm64
push: true
tags: |
markoshust/magento-nginx:1.24
markoshust/magento-nginx:1.24-1
================================================
FILE: .github/workflows/build-opensearch-1-2.yml
================================================
name: build-opensearch-1-2
on: workflow_dispatch
jobs:
opensearch-1-2:
runs-on: ubuntu-latest
steps:
-
name: Checkout
uses: actions/checkout@v6
with:
ref: release/next
-
name: Set up QEMU
uses: docker/setup-qemu-action@v4
-
name: Set up Docker Buildx
uses: docker/setup-buildx-action@v4
-
name: Login to DockerHub
uses: docker/login-action@v4
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
-
name: Build and push
id: docker_build
uses: docker/build-push-action@v7
with:
context: images/opensearch/1.2
platforms: linux/amd64,linux/arm64
push: true
tags: |
markoshust/magento-opensearch:1.2
markoshust/magento-opensearch:1.2-0
================================================
FILE: .github/workflows/build-opensearch-2-12.yml
================================================
name: build-opensearch-2-12
on: workflow_dispatch
jobs:
opensearch-2-5:
runs-on: ubuntu-latest
steps:
-
name: Checkout
uses: actions/checkout@v6
with:
ref: release/next
-
name: Set up QEMU
uses: docker/setup-qemu-action@v4
-
name: Set up Docker Buildx
uses: docker/setup-buildx-action@v4
-
name: Login to DockerHub
uses: docker/login-action@v4
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
-
name: Build and push
id: docker_build
uses: docker/build-push-action@v7
with:
context: images/opensearch/2.12
platforms: linux/amd64,linux/arm64
push: true
tags: |
markoshust/magento-opensearch:2.12
markoshust/magento-opensearch:2.12-0
================================================
FILE: .github/workflows/build-opensearch-2-5.yml
================================================
name: build-opensearch-2-5
on: workflow_dispatch
jobs:
opensearch-2-5:
runs-on: ubuntu-latest
steps:
-
name: Checkout
uses: actions/checkout@v6
with:
ref: release/next
-
name: Set up QEMU
uses: docker/setup-qemu-action@v4
-
name: Set up Docker Buildx
uses: docker/setup-buildx-action@v4
-
name: Login to DockerHub
uses: docker/login-action@v4
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
-
name: Build and push
id: docker_build
uses: docker/build-push-action@v7
with:
context: images/opensearch/2.5
platforms: linux/amd64,linux/arm64
push: true
tags: |
markoshust/magento-opensearch:2.5
markoshust/magento-opensearch:2.5-1
================================================
FILE: .github/workflows/build-php-8-1.yml
================================================
name: build-php-8-1
on: workflow_dispatch
jobs:
php-8-1:
runs-on: ubuntu-latest
steps:
-
name: Checkout
uses: actions/checkout@v6
with:
ref: release/next
-
name: Set up QEMU
uses: docker/setup-qemu-action@v4
-
name: Set up Docker Buildx
uses: docker/setup-buildx-action@v4
-
name: Login to DockerHub
uses: docker/login-action@v4
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
-
name: Build and push
id: docker_build
uses: docker/build-push-action@v7
with:
context: images/php/8.1
platforms: linux/amd64,linux/arm64
push: true
tags: |
markoshust/magento-php:8.1-fpm
markoshust/magento-php:8.1-fpm-8
================================================
FILE: .github/workflows/build-php-8-2.yml
================================================
name: build-php-8-2
on: workflow_dispatch
jobs:
php-8-2:
runs-on: ubuntu-latest
steps:
-
name: Checkout
uses: actions/checkout@v6
with:
ref: release/next
-
name: Set up QEMU
uses: docker/setup-qemu-action@v4
-
name: Set up Docker Buildx
uses: docker/setup-buildx-action@v4
-
name: Login to DockerHub
uses: docker/login-action@v4
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
-
name: Build and push
id: docker_build
uses: docker/build-push-action@v7
with:
context: images/php/8.2
platforms: linux/amd64,linux/arm64
push: true
tags: |
markoshust/magento-php:8.2-fpm
markoshust/magento-php:8.2-fpm-7
================================================
FILE: .github/workflows/build-php-8-3.yml
================================================
name: build-php-8-3
on: workflow_dispatch
jobs:
php-8-3:
runs-on: ubuntu-latest
steps:
-
name: Checkout
uses: actions/checkout@v6
with:
ref: release/next
-
name: Set up QEMU
uses: docker/setup-qemu-action@v4
-
name: Set up Docker Buildx
uses: docker/setup-buildx-action@v4
-
name: Login to DockerHub
uses: docker/login-action@v4
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
-
name: Build and push
id: docker_build
uses: docker/build-push-action@v7
with:
context: images/php/8.3
platforms: linux/amd64,linux/arm64
push: true
tags: |
markoshust/magento-php:8.3-fpm
markoshust/magento-php:8.3-fpm-5
================================================
FILE: .github/workflows/build-php-8-4.yml
================================================
name: build-php-8-4
on: workflow_dispatch
jobs:
php-8-3:
runs-on: ubuntu-latest
steps:
-
name: Checkout
uses: actions/checkout@v6
with:
ref: release/next
-
name: Set up QEMU
uses: docker/setup-qemu-action@v4
-
name: Set up Docker Buildx
uses: docker/setup-buildx-action@v4
-
name: Login to DockerHub
uses: docker/login-action@v4
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
-
name: Build and push
id: docker_build
uses: docker/build-push-action@v7
with:
context: images/php/8.4
platforms: linux/amd64,linux/arm64
push: true
tags: |
markoshust/magento-php:8.4-fpm
markoshust/magento-php:8.4-fpm-0
================================================
FILE: .github/workflows/build-rabbitmq-3-11.yml
================================================
name: build-rabbitmq-3-11
on: workflow_dispatch
jobs:
rabbitmq-3-11:
runs-on: ubuntu-latest
steps:
-
name: Checkout
uses: actions/checkout@v6
with:
ref: release/next
-
name: Set up QEMU
uses: docker/setup-qemu-action@v4
-
name: Set up Docker Buildx
uses: docker/setup-buildx-action@v4
-
name: Login to DockerHub
uses: docker/login-action@v4
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
-
name: Build and push
id: docker_build
uses: docker/build-push-action@v7
with:
context: images/rabbitmq/3.11
platforms: linux/amd64,linux/arm64
push: true
tags: |
markoshust/magento-rabbitmq:3.11
markoshust/magento-rabbitmq:3.11-1
================================================
FILE: .github/workflows/build-rabbitmq-3-12.yml
================================================
name: build-rabbitmq-3-12
on: workflow_dispatch
jobs:
rabbitmq-3-11:
runs-on: ubuntu-latest
steps:
-
name: Checkout
uses: actions/checkout@v6
with:
ref: release/next
-
name: Set up QEMU
uses: docker/setup-qemu-action@v4
-
name: Set up Docker Buildx
uses: docker/setup-buildx-action@v4
-
name: Login to DockerHub
uses: docker/login-action@v4
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
-
name: Build and push
id: docker_build
uses: docker/build-push-action@v7
with:
context: images/rabbitmq/3.12
platforms: linux/amd64,linux/arm64
push: true
tags: |
markoshust/magento-rabbitmq:3.12
markoshust/magento-rabbitmq:3.12-0
================================================
FILE: .github/workflows/build-rabbitmq-3-13.yml
================================================
name: build-rabbitmq-3-13
on: workflow_dispatch
jobs:
rabbitmq-3-11:
runs-on: ubuntu-latest
steps:
-
name: Checkout
uses: actions/checkout@v6
with:
ref: release/next
-
name: Set up QEMU
uses: docker/setup-qemu-action@v4
-
name: Set up Docker Buildx
uses: docker/setup-buildx-action@v4
-
name: Login to DockerHub
uses: docker/login-action@v4
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
-
name: Build and push
id: docker_build
uses: docker/build-push-action@v7
with:
context: images/rabbitmq/3.13
platforms: linux/amd64,linux/arm64
push: true
tags: |
markoshust/magento-rabbitmq:3.13
markoshust/magento-rabbitmq:3.13-0
================================================
FILE: .github/workflows/build-rabbitmq-3-9.yml
================================================
name: build-rabbitmq-3-9
on: workflow_dispatch
jobs:
rabbitmq-3-9:
runs-on: ubuntu-latest
steps:
-
name: Checkout
uses: actions/checkout@v6
with:
ref: release/next
-
name: Set up QEMU
uses: docker/setup-qemu-action@v4
-
name: Set up Docker Buildx
uses: docker/setup-buildx-action@v4
-
name: Login to DockerHub
uses: docker/login-action@v4
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
-
name: Build and push
id: docker_build
uses: docker/build-push-action@v7
with:
context: images/rabbitmq/3.9
platforms: linux/amd64,linux/arm64
push: true
tags: |
markoshust/magento-rabbitmq:3.9
markoshust/magento-rabbitmq:3.9-0
================================================
FILE: .github/workflows/build-rabbitmq-4-1.yml
================================================
name: build-rabbitmq-4-1
on: workflow_dispatch
jobs:
rabbitmq-4-1:
runs-on: ubuntu-latest
steps:
-
name: Checkout
uses: actions/checkout@v6
with:
ref: release/next
-
name: Set up QEMU
uses: docker/setup-qemu-action@v4
-
name: Set up Docker Buildx
uses: docker/setup-buildx-action@v4
-
name: Login to DockerHub
uses: docker/login-action@v4
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
-
name: Build and push
id: docker_build
uses: docker/build-push-action@v7
with:
context: images/rabbitmq/4.1
platforms: linux/amd64,linux/arm64
push: true
tags: |
markoshust/magento-rabbitmq:4.1
markoshust/magento-rabbitmq:4.1-0
================================================
FILE: .github/workflows/build-ssh.yml
================================================
name: build-ssh
on: workflow_dispatch
jobs:
ssh:
runs-on: ubuntu-latest
steps:
-
name: Checkout
uses: actions/checkout@v6
with:
ref: release/next
-
name: Set up QEMU
uses: docker/setup-qemu-action@v4
-
name: Set up Docker Buildx
uses: docker/setup-buildx-action@v4
-
name: Login to DockerHub
uses: docker/login-action@v4
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
-
name: Build and push
id: docker_build
uses: docker/build-push-action@v7
with:
context: images/php/8.2
platforms: linux/amd64,linux/arm64
push: true
tags: markoshust/ssh
================================================
FILE: .github/workflows/claude.yml
================================================
name: Claude PR Assistant
on:
issue_comment:
types: [created]
pull_request_review_comment:
types: [created]
issues:
types: [opened, assigned]
pull_request_review:
types: [submitted]
jobs:
claude-code-action:
if: |
(github.event_name == 'issue_comment' && contains(github.event.comment.body, '@claude')) ||
(github.event_name == 'pull_request_review_comment' && contains(github.event.comment.body, '@claude')) ||
(github.event_name == 'pull_request_review' && contains(github.event.review.body, '@claude')) ||
(github.event_name == 'issues' && contains(github.event.issue.body, '@claude'))
runs-on: ubuntu-latest
permissions:
contents: read
pull-requests: read
issues: read
id-token: write
steps:
- name: Checkout repository
uses: actions/checkout@v6
with:
fetch-depth: 1
- name: Run Claude PR Action
uses: anthropics/claude-code-action@beta
with:
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
timeout_minutes: "60"
================================================
FILE: .github/workflows/shellcheck.yml
================================================
name: ShellCheck
on:
push:
paths:
- "compose/bin/**"
branches:
- master
pull_request:
paths:
- "compose/bin/**"
jobs:
shellcheck:
name: shellcheck
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v6
- name: Run ShellCheck
uses: ludeeus/action-shellcheck@master
id: check
env:
SHELLCHECK_OPTS: "-x -e SC2181 -P compose/bin -P compose/env"
with:
check_together: true
scandir: "./compose/bin"
================================================
FILE: CHANGELOG.md
================================================
# Changelog
All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
## [52.1.0] - 2025-10-21
### Added
- Added `bin/init` script to initialize development environment with sample data and dev-related modules [PR #1377](https://github.com/markshust/docker-magento/pull/1377)
- Added support for multiple files or directories as arguments in `bin/copytocontainer` [PR #1384](https://github.com/markshust/docker-magento/pull/1384)
### Updated
- Updated Magento version to 2.4.8-p3 in README installation instructions
### Fixed
- Fixed CDPATH from corrupting directory paths in copy scripts by redirecting output to /dev/null [PR #1374](https://github.com/markshust/docker-magento/pull/1374)
## [52.0.2] - 2025-07-01
### Fixed
- Increase retrieves to prevent OpenSearch from failing to start on Linux [PR #1352](https://github.com/markshust/docker-magento/pull/1352)
## [52.0.1] - 2025-05-12
### Fixed
- Remove UseSVE from Java Options which caused OpenSearch to fail [PR #1341](https://github.com/markshust/docker-magento/pull/1341)
## [52.0.0] - 2025-04-18
This release adds support for the latest message broker and database technologies required for Magento 2.4.8, optimizes container health checks, and fixes OpenSearch issues on Linux.
### Added
- Added support for Valkey 8.1 (Redis successor) for Magento 2.4.8 compatibility [PR #1327](https://github.com/markshust/docker-magento/pull/1327)
- Added RabbitMQ 4.1 support for Magento 2.4.8 compatibility [PR #1326](https://github.com/markshust/docker-magento/pull/1326)
- Added documentation for OpenSearch ARM64/Apple M-series compatibility workaround [PR #1316](https://github.com/markshust/docker-magento/issues/1316)
### Updated
- Updated MariaDB to version 11.4 [PR #1325](https://github.com/markshust/docker-magento/pull/1325)
- Updated MySQL configuration for 8.4 compatibility [PR #1324](https://github.com/markshust/docker-magento/pull/1324)
- Optimized container health checks with YAML anchors for consistency across services [PR #1330](https://github.com/markshust/docker-magento/pull/1330)
- Added `log_bin_trust_function_creators=1` flag to both MariaDB and MySQL configurations [PR #1329](https://github.com/markshust/docker-magento/pull/1329)
### Fixed
- Fixed OpenSearch startup issues on Linux [PR #1316](https://github.com/markshust/docker-magento/issues/1316)
- Fixed PHP 8.4 tag reference in README documentation [PR #1328](https://github.com/markshust/docker-magento/pull/1328)
### Removed
- Dropped support for RabbitMQ 3.8 [PR #1326](https://github.com/markshust/docker-magento/pull/1326)
## [51.0.0] - 2025-04-08
This release provides full support for Magento 2.4.8 (released same day), includes multiple Docker image updates, fixes important bugs, and adds several new utilities for improved developer experience.
### Added
- New `bin/docker-start` helper script to automatically start Docker Desktop or OrbStack environments [PR #956](https://github.com/markshust/docker-magento/pull/956)
- Enhanced cron management that maintains state between container restarts [PR #1309](https://github.com/markshust/docker-magento/pull/1309)
- Compatibility settings for Elasticsearch and OpenSearch on ARM64/Apple M-series chips [PR #1307](https://github.com/markshust/docker-magento/pull/1307)
- Relocated Selenium service configuration to `compose.dev.yaml` for better organization [PR #913](https://github.com/markshust/docker-magento/pull/913)
- Firefox Developer Edition support for SSL certificates [PR #830](https://github.com/markshust/docker-magento/pull/830)
### Updated
- Upgraded Node.js to version 22.x across all PHP images [PR #1305](https://github.com/markshust/docker-magento/pull/1305)
- Upgraded PHP extensions: Redis to 6.2.0, Swoole to 6.0.2, Xdebug to 3.4.2 [PR #1305](https://github.com/markshust/docker-magento/pull/1305)
- Updated Composer to 2.8.6 in PHP 8.2, 8.3, and 8.4 images [PR #1305](https://github.com/markshust/docker-magento/pull/1305)
- Updated SPX PHP profiler to version 0.4.18 [PR #1305](https://github.com/markshust/docker-magento/pull/1305)
- Increased client max body size limit to 100M in nginx configuration [PR #1307](https://github.com/markshust/docker-magento/pull/1307)
- Improved SSL certificate handling for multi-domain setups [PR #1300](https://github.com/markshust/docker-magento/pull/1300)
### Fixed
- OpenSearch and Elasticsearch container failures on ARM64/Apple Silicon devices [PR #1307](https://github.com/markshust/docker-magento/pull/1307)
- Cron service unexpectedly failing to restart after being enabled [PR #1309](https://github.com/markshust/docker-magento/pull/1309)
- Multiple domain support in SSL certificate generation [PR #1257](https://github.com/markshust/docker-magento/pull/1257)
- Typo in README documentation [PR #1296](https://github.com/markshust/docker-magento/pull/1296)
- Reorganized backend access documentation for better visibility [PR #1306](https://github.com/markshust/docker-magento/pull/1306)
## [50.0.0] - 2024-01-31
### Added
- Added `generated` and `var` folders as mounted directories in `compose.dev.yaml` for easier debugging [PR #1284](https://github.com/markshust/docker-magento/pull/1284)
- Added options to `php.ini` to allow for automatic Xdebug profiling [PR #1284](https://github.com/markshust/docker-magento/pull/1284)
### Updated
- Mailcatcher tagged to version 0.10.0 [PR #912](https://github.com/markshust/docker-magento/pull/912)
- Xdebug to version 3.4.1 [PR #1285](https://github.com/markshust/docker-magento/pull/1285)
- Swoole to version 6.0.0 [PR #1285](https://github.com/markshust/docker-magento/pull/1285)
## [49.0.0] - 2024-01-15
### Updated
- Enhanced `bin/xdebug` script with more comprehensive mode management and validation, supporting all Xdebug modes (off, develop, coverage, debug, gcstats, profile, trace) and combinations [PR #1276](https://github.com/markshust/docker-magento/pull/1276)
## [48.0.1] - 2024-12-07
### Fixed
- Unit test scripts [PR #1263](https://github.com/markshust/docker-magento/pull/1263)
## [48.0.0] - 2024-11-27
This release introduces significant enhancements to the development environment, including a new PHP 8.4 Docker image for early adopters and developers wanting to test future compatibility. The MageOS support has been substantially improved, and a new RabbitMQ 3.13 image has been added. Several quality-of-life improvements have been implemented, such as better unit testing tools, enhanced SSL generation for multi-site setups, and comprehensive documentation updates. A notable breaking change is the shift in the download command syntax - it now expects the edition type before the version number (ex: `bin/download community 2.4.7-p3` instead of the previous `bin/download 2.4.7 community`). Additionally, all Docker images have been updated to maintain parity with current Magento version requirements.
### Added
- New PHP 8.4 Docker image for development purposes [PR #1252](https://github.com/markshust/docker-magento/pull/1252)
- New RabbitMQ 3.13 Docker image [PR #1252](https://github.com/markshust/docker-magento/pull/1252)
- Backend login credentials and 2FA setup instructions to README [PR #1205](https://github.com/markshust/docker-magento/pull/1205)
- PHP FTP extension to Docker setup [PR #1210](https://github.com/markshust/docker-magento/pull/1210)
- PhpMyAdmin credentials to README [PR #1212](https://github.com/markshust/docker-magento/pull/1212)
- `bin/test` helper scripts to execute unit tests [PR #1157](https://github.com/markshust/docker-magento/pull/1157)
- `bin/ece-patches` command [PR #1171](https://github.com/markshust/docker-magento/pull/1171)
- rsync to PHP images for Deployer support [PR #1163](https://github.com/markshust/docker-magento/pull/1163)
- PhpMyAdmin for Linux [PR #1177](https://github.com/markshust/docker-magento/pull/1177)
### Updated
- Improved MageOS support [PR #1246](https://github.com/markshust/docker-magento/pull/1246)
- System requirements helper script overhauled for easier use and maintenance [PR #1242](https://github.com/markshust/docker-magento/pull/1242)
- Supported versions in `bin/check-dependencies` script [PR #1175](https://github.com/markshust/docker-magento/pull/1175)
- Docker images for Magento version parity [PR #1252](https://github.com/markshust/docker-magento/pull/1252)
- Bumped docker/build-push-action from 5 to 6 [PR #1174](https://github.com/markshust/docker-magento/pull/1174)
- GitHub Actions to use release/next branch [PR #1254](https://github.com/markshust/docker-magento/pull/1254)
- Speed improvement for `bin/xdebug` command [PR #1245](https://github.com/markshust/docker-magento/pull/1245)
### Fixed
- Code duplication [PR #1141](https://github.com/markshust/docker-magento/pull/1141)
- Empty directory check moved to top of scripts [PR #1143](https://github.com/markshust/docker-magento/pull/1143)
- Elasticsearch container issues [PR #1166](https://github.com/markshust/docker-magento/pull/1166)
- Multi-site SSL generation support [PR #1200](https://github.com/markshust/docker-magento/pull/1200)
- Various typos in files [PR #1238](https://github.com/markshust/docker-magento/pull/1238)
## [47.0.1] - 2024-04-25
### Fixed
- "The current directory is not empty" message appearing on new install [PR #1141](https://github.com/markshust/docker-magento/pull/1141).
## [47.0.0] - 2024-04-25
### Added
- Check to ensure directory does not already exist in project directory [PR #1127](https://github.com/markshust/docker-magento/pull/1127).
### Updated
- Remove obsolete version directive from docker compose files [PR #1125](https://github.com/markshust/docker-magento/pull/1125).
- Predefined version from 2.4.6-p4 to 2.4.7 [PR #1128](https://github.com/markshust/docker-magento/pull/1128).
- Integration testing configuration to use OpenSearch [PR #1131](https://github.com/markshust/docker-magento/pull/1131).
### Fixed
- SSL cert generation when domain has a port included [PR #1136](https://github.com/markshust/docker-magento/pull/1136).
- OpenSearch container fails to start due to memory heap size configuration [PR #1137](https://github.com/markshust/docker-magento/pull/1137).
## [46.1.1] - 2024-04-16
### Fixed
- Xdebug 3.3.1 and Blackfire PHP extension incompatibility [PR #1122](https://github.com/markshust/docker-magento/pull/1122).
## [46.1.0] - 2024-04-13
### Added
- New `bin/blackfire` script to enable, disable, or check status of Blackfire extension [PR #1115](https://github.com/markshust/docker-magento/pull/1115).
- Swool PHP extension to all PHP Docker images to support Adobe Commerce GraphQL Application Layer [PR #1114](https://github.com/markshust/docker-magento/pull/1114).
### Updated
- Supported versions in the `bin/check-dependencies` script [PR #1112](https://github.com/markshust/docker-magento/pull/1112).
### Fixed
- Random 502 Bad Gateway errors when Xdebug is enabled [PR #1085](https://github.com/markshust/docker-magento/pull/1085), [PR #1116](https://github.com/markshust/docker-magento/pull/1116).
## [46.0.0] - 2024-04-09
### Added
- New `bin/check-dependencies` script which provides helpful recommendations for dependencies tailored to the chosen Magento version [PR #1018](https://github.com/markshust/docker-magento/pull/1018/files).
- New `nginx` Docker images for versions 1.22, 1.24 [PR #1019](https://github.com/markshust/docker-magento/pull/1109).
- New `php-fpm` 8.3 Docker image for Magento 2.4.7 support [PR #1019](https://github.com/markshust/docker-magento/pull/1109).
- New `opensearch` 2.12 Docker image for Magento 2.4.7 support [PR #1019](https://github.com/markshust/docker-magento/pull/1109).
- New `elasticsearch` 7.16 and 8.11 Docker images for previous Magento versions support [PR #1019](https://github.com/markshust/docker-magento/pull/1109).
- New `elasticsearch` 8.13 Docker image for Magento 2.4.7 support [PR #1019](https://github.com/markshust/docker-magento/pull/1109).
- New `rabbitmq` 3.8 Docker image for previous Magento versions support [PR #1019](https://github.com/markshust/docker-magento/pull/1109).
- New `rabbitmq` 3.12 Docker image for Magento 2.4.7 support [PR #1019](https://github.com/markshust/docker-magento/pull/1109).
### Updated
- Link `php-fpm` Docker images to officially compatible Composer versions [PR #1019](https://github.com/markshust/docker-magento/pull/1109).
## [45.1.0] - 2024-03-19
### Added
- New `bin/configure-linux` helper script to assist with easier Linux setup [PR #1016](https://github.com/markshust/docker-magento/pull/1016).
- Linux dependencies to README [PR #1050](https://github.com/markshust/docker-magento/pull/1050).
- Added `bin/create-user` script to allow for easy creation of Magento admin user & customer [PR #1040](https://github.com/markshust/docker-magento/pull/1040).
- Descriptions for all missing helper scripts to README and Makefile [PR #1096](https://github.com/markshust/docker-magento/pull/1096).
### Updated
- `bin/docker-stats` to simplified output [PR #1083](https://github.com/markshust/docker-magento/pull/1083).
- Pinned Composer version for increased compatibility with latest Magento versions [PR #1090](https://github.com/markshust/docker-magento/pull/1090).
## [45.0.0] - 2024-02-25
### Added
- New PHP images based on bookworm, pegging pecl libraries for more predictability [PR #1071](https://github.com/markshust/docker-magento/pull/1071).
- New PHP 8.3 image [PR #1071](https://github.com/markshust/docker-magento/pull/1071).
- PHP SPX profiler to enhance performance monitoring capabilities [PR #533](https://github.com/markshust/docker-magento/pull/533).
- Support for the `strace` command, providing developers with powerful tools for diagnosing and troubleshooting [PR #1033](https://github.com/markshust/docker-magento/pull/1033).
- Ability for xdebug to listen to Magento CLI commands [PR #846](https://github.com/markshust/docker-magento/pull/846).
- Abstraction of setup script into two scripts [PR #874](https://github.com/markshust/docker-magento/pull/874).
- New Docker image for OpenSearch 2.4 [PR #858](https://github.com/markshust/docker-magento/pull/858).
- Mage-OS mirror support [PR #835](https://github.com/markshust/docker-magento/pull/835).
- New `bin/log` command to view Magento logs in real-time [PR #1060](https://github.com/markshust/docker-magento/pull/1060).
- New `bin/docker-stats` command for container monitoring [PR #533](https://github.com/markshust/docker-magento/pull/533).
- New `bin/setup-pwa-studio-sampledata` command to install Magento PWA Studio sample data, facilitating easier PWA development setups [#1045](https://github.com/markshust/docker-magento/pull/1045).
- New `bin/deploy` script to deply Magento in pipeline [PR #926](https://github.com/markshust/docker-magento/pull/926).
- New `bin/magento-version` script which outputs current Magento version [PR #931](https://github.com/markshust/docker-magento/pull/931).
- New `bin/spx` script to enable or disable SPX [PR #1074](https://github.com/markshust/docker-magento/pull/1074).
### Updated
- Node.js to version 20.x LTS [PR #1071](https://github.com/markshust/docker-magento/pull/1071).
- Support for Magento 2.4.6-p4, updating the default Magento version in the Docker setup to align with the latest Magento release [PR #1063](https://github.com/markshust/docker-magento/pull/1063).
- Continuous integration and deployment processes were refined to include updates and to maintain dependencies through GitHub Actions and Dependabot, ensuring that the project's dependencies remain up to date and secure [PR #1032](https://github.com/markshust/docker-magento/pull/1032).
- Rework docker compose script to allow future extensibility [PR #1002](https://github.com/markshust/docker-magento/pull/1002).
- Replaced phpmyadmin Docker image with amd64-compatible image [PR #939](https://github.com/markshust/docker-magento/pull/939).
- Set default Magento 2.4.6 search engine to OpenSearch [PR #937](https://github.com/markshust/docker-magento/pull/937).
- Use `/usr/bin/env` to discover bash location [PR #879](https://github.com/markshust/docker-magento/pull/879).
### Fixed
- Execution rights in scripts [PR #1039](https://github.com/markshust/docker-magento/pull/1039).
- Bug with Elasticsearch documentation [PR #1014](https://github.com/markshust/docker-magento/pull/1014).
- Elasticsearch JAVA OPTS issue with containers not starting at startup [PR #938](https://github.com/markshust/docker-magento/pull/938).
- Unexpected Ubuntu 18.04 startup failure [PR #310](https://github.com/markshust/docker-magento/pull/310).
- Failing `npm install` of puppeteer due to missing Chromium [PR #848](https://github.com/markshust/docker-magento/pull/848).
## [44.0.0] - 2022-12-05
### Added
- Allow more variables for the PhpStan analyse script [PR #789](https://github.com/markshust/docker-magento/pull/789).
- New bin/docker-compose script to abstract away calls to docker-compose [PR #787](https://github.com/markshust/docker-magento/pull/787).
- Support for Docker Compose V2 ("docker compose" and backwards-compatibility for "docker-compose") [PR #787](https://github.com/markshust/docker-magento/pull/787).
- New Docker Compose healthcheck [PR #384](https://github.com/markshust/docker-magento/pull/384).
- MageOS support [4591b68c](https://github.com/markshust/docker-magento/commit/4591b68c46667d4015e728392b813ec42939ae67).
- Documentation to recover from failed install [#816](https://github.com/markshust/docker-magento/issues/816).
- OpenSearch support [PR #680](https://github.com/markshust/docker-magento/pull/680).
- New build for Elasticsearch 7.17 [c45f05c3](https://github.com/markshust/docker-magento/commit/c45f05c370fe1347afa35117511794f736710f71).
### Updated
- Rename docker-compose.yml to compose.yaml (preferred) [PR #799](https://github.com/markshust/docker-magento/pull/799).
- Readme file with new info on configuring Xdebug in WSL2 environments [PR #810](https://github.com/markshust/docker-magento/pull/810).
### Fixed
- Lowered RAM check on setup [#720](https://github.com/markshust/docker-magento/issues/720).
### Removed
- Deprecated PHP 7.4 due to all versions < Magento 2.4.4 reaching EOL [3a64324e](https://github.com/markshust/docker-magento/commit/3a64324e08f3d15e3c3ce86b5c0f5e7ebb635a75).
## [43.2.0] - 2022-09-13
### Added
- Added phpmyadmin to docker-compose.dev.yml file [PR #772](https://github.com/markshust/docker-magento/pull/772).
## [43.1.0] - 2022-09-13
### Added
- Support for Grunt + LiveReload [#430](https://github.com/markshust/docker-magento/issues/430).
## [43.0.0] - 2022-05-26
### Added
- Fall back to PHP 7.4 for Magento versions older than 2.4.4 [PR #685](https://github.com/markshust/docker-magento/pull/685) [PR #710](https://github.com/markshust/docker-magento/pull/710).
- Checksum flag to rsync in `bin/update` [PR #707](https://github.com/markshust/docker-magento/pull/707).
- New `bin/analyse` command to statically analyse code with PHPStan [8601c2f7](https://github.com/markshust/docker-magento/commit/8601c2f73cc6f1d2534f017c8f31eec49b0e00fc).
- `node` & `npm` to PHP images [#694](https://github.com/markshust/docker-magento/issues/694).
### Updated
- Magento download to default to 2.4.4 [151dc09a](https://github.com/markshust/docker-magento/commit/151dc09ae95a5cff75598c366f3d77efa58098d5)
- Prevent domain duplication in `/etc/hosts` [PR #693](https://github.com/markshust/docker-magento/pull/693).
- Replace buster images with bullseye to properly fix Apple M1 5-sec delay [#636](https://github.com/markshust/docker-magento/issues/636).
## [42.0.0] - 2022-04-14
This release brings streamlined PHP Docker images (saving 300MB on previous images), a brand new PHP 8.1 image with full support for Magento 2.4.4, a proper Elasticsearch health check during setup, and ability to detect memory assigned to Docker on startup (which will prevent failed installations). Elasticsearch, Redis & RabbitMQ Docker images have also all been updated to their recently supported Magento versions.
### Added
- New Docker image for PHP 8.1 [903f9867](https://github.com/markshust/docker-magento/commit/903f9867aa130100267290feaa03b1b48b157337).
- New Docker image for Elasticsearch 7.16 [f70a1565](https://github.com/markshust/docker-magento/commit/f70a1565bddd56a3abe8df52d4122dbcdc85d98a).
- New Docker image for RabbitMQ 3.9 [7711365c](https://github.com/markshust/docker-magento/commit/7711365cb73aab685859e3e34fc23774937a4e2a).
- Elasticsearch health check timeout when installing Magento [#675](https://github.com/markshust/docker-magento/pull/675).
- Ability to detect if memory usage is too low [#527](https://github.com/markshust/docker-magento/issues/527).
### Updated
- PHP 7.4 Docker image for parity with PHP 8.1 image [481097b3](https://github.com/markshust/docker-magento/commit/481097b3f9184d19deb102b901b43af906ebb256).
### Removed
- ionCube support from PHP 7 image in order to retain Docker image parity between versions, to slim down image size, and because I no longer want to support encrypted or obfuscated code in my open source projects. Feel free to pull, fork or modify if you still need ionCube in your projects.
## [41.1.0] - 2022-03-28
### Fixed
- Increased RabbitMQ sleep timeout to prevent errors on startup [#426](https://github.com/markshust/docker-magento/issues/426).
- RabbitMQ connection issues on Windows/WSL2 [#426](https://github.com/markshust/docker-magento/issues/426).
- Problem with elasticsearch & unexpected character [#597](https://github.com/markshust/docker-magento/issues/597).
- Issue with extra_hosts host.docker.internal for Xdebug on Linux [#595](https://github.com/markshust/docker-magento/issues/595).
- Reverted Xdebug/magerun code refactor which caused issues [#595](https://github.com/markshust/docker-magento/pull/545).
- Composer auth.json auth required message shows after authenticating [#587](https://github.com/markshust/docker-magento/issues/587).
- Failing shellchecks [08206e6d](https://github.com/markshust/docker-magento/commit/08206e6d6a48fdb3c1c3adc8f52b146609ba771c), [53d9b858](https://github.com/markshust/docker-magento/commit/53d9b8585733f8f78a5dcaedce53a83863a1b634).
- Firefox SSL cert fails on first-time install [2695fe2e](https://github.com/markshust/docker-magento/commit/2695fe2e508098906103dd442767d50e9f6011c0).
- Some commands including bin/xdebug not working on Windows + Docker Desktop 4.4.3 [#619](https://github.com/markshust/docker-magento/issues/619).
### Updated
- Redis 5.0 to 6.0 [6653d787](https://github.com/markshust/docker-magento/commit/6653d78722fb8d1d76cc2433a89227456e48514f).
- `bin/setup` script so it can run completely automated [PR #633](https://github.com/markshust/docker-magento/pull/633).
- PHP 8 image to 8.1.4, last version before tagging final release [86093b70](https://github.com/markshust/docker-magento/commit/86093b70c9ee7f0ed3c62e84460b7e53926d033c).
### Added
- `bin/stopall` script to stop all running containers [#599](https://github.com/markshust/docker-magento/pull/599).
- New PHP image to enable WebP support in GD [PR #651](https://github.com/markshust/docker-magento/pull/651).
- Ability to configure custom user/group ID in Nginx image [PR #658](https://github.com/markshust/docker-magento/pull/658).
### Removed
- PHP 7.3 images have been deprecated due to 7.3's EOL.
- EXPOSE statement from PHP image (unneeded) [790e2fe0](https://github.com/markshust/docker-magento/commit/790e2fe0293feb12455d7f9ed2593aa97ad6df99).
## [41.0.2] - 2021-12-09
### Fixed
- Disable "Composer is slower because of Xdebug" message [1990d84](https://github.com/markshust/docker-magento/commit/1990d84).
- Updated verbiage in setup on how to start cron [c3ba47d](https://github.com/markshust/docker-magento/commit/1990d84).
- Fixed "The input device is not a TTY" error during setup [8aada97](https://github.com/markshust/docker-magento/commit/8aada97).
- Expose port 9003 on PHP Docker image for Xdebug [263e40d](https://github.com/markshust/docker-magento/commit/263e40d).
- Disable Xdebug by default for PHP 7.3 [263e40d](https://github.com/markshust/docker-magento/commit/263e40d).
### Updated
- Updated PHP 8.1 image to use official GA version [263e40d](https://github.com/markshust/docker-magento/commit/263e40d).
## [41.0.1] - 2021-11-09
### Fixed
- Fixed additional issue of waiting for Elasticsearch/RabbitMQ connection on Mac [#442](https://github.com/markshust/docker-magento/issues/442).
## [41.0.0] - 2021-11-08
There has been an ongoing issue with Docker for Mac + M1 chips (Apple Silicon) which causes a 5-second delay in network requests (see [#5626](https://github.com/docker/for-mac/issues/5626)). A fix has been implemented in this release that works around this issue, adding `extra_hosts` directives in the `docker-compose.yml` file. This update should be backwards-compatible, but will break existing setups that use custom Docker networks (this is an uncommon scenario). See notes at the top of `docker-compose.yml` for how to configure this project for custom Docker networks.
### Added
- Added Imagick PHP extension [#530](https://github.com/markshust/docker-magento/issues/530).
### Fixed
- Fixed issue with onelinesetup script failing on download [92b803c](https://github.com/markshust/docker-magento/commit/92b803c) [67c76b4](https://github.com/markshust/docker-magento/commit/67c76b4).
- Fix Shellcheck failures for bin/setup-ssl-ca [#558](https://github.com/markshust/docker-magento/issues/558).
- Fix wrong `sendmail_path` in php.ini [#556](https://github.com/markshust/docker-magento/issues/556).
- Ensure .composer directory isn't created by root [#562](https://github.com/markshust/docker-magento/issues/562).
- Fixed `bin/devconsole` command not working [646f617](https://github.com/markshust/docker-magento/commit/646f617).
- Fixed `bin/setup-composer-auth` does not persist auth creds [#567](https://github.com/markshust/docker-magento/issues/567).
- Fixed documentation around Xdebug port on Linux [90af7fa](https://github.com/markshust/docker-magento/commit/90af7fa).
- Fixed waiting for Elasticsearch/RabbitMQ connection on Mac [#442](https://github.com/markshust/docker-magento/issues/442).
### Updated
- Updated info about MySQL backups and existing projects in README [86faa70](https://github.com/markshust/docker-magento/commit/86faa70).
- Updated README for Xdebug + PhpStorm [b1fe812](https://github.com/markshust/docker-magento/commit/b1fe812).
## [40.1.0] - 2021-10-29
### Fixed
- Fixed issues with onelinesetup script [#564](https://github.com/markshust/docker-magento/issues/564).
- Fixed Shellcheck failures for bin/setup-ssl-ca [#558](https://github.com/markshust/docker-magento/issues/558).
- Fixed php.ini possible wrong smtp-addr [#556](https://github.com/markshust/docker-magento/issues/556).
- Ensure files are created so Docker doesn't create them as root [#562](https://github.com/markshust/docker-magento/issues/562).
- Added additional time for Elasticsearch container to get initialized during setup.
## [40.0.2] - 2021-10-20
### Fixed
- Fixed Selenium configuration for MFTF [PR #554](https://github.com/markshust/docker-magento/pull/554).
## [40.0.1] - 2021-10-20
### Fixed
- Fixed PHP image `8.0-fpm-develop` for Magento 2.4.4 support (note: still has `-develop` tag).
### Updated
- Moved `~/.ssh` volume mount references to `docker-compose.yml` to ease maintenance.
## [40.0.0] - 2021-10-15
This is one of the biggest releases of docker-magento 💥! This major update includes support for Apple Silicon (M1/M1X) chips, as well as SSH support for fully native filesystem speed.
All the images are now multi-arch builds, meaning they can install on both AMD & ARM chipsets. Additionally, by setting up your IDE to connect to Docker over SSH/SFTP to avoid selective filesystem syncing.
The docker-compose configuration files have also been streamlined & simplified, with dedicated files for both SSH and Linux setups. Read more about these updates at https://github.com/markshust/docker-magento#ssh and https://github.com/markshust/docker-magento#linux respectively.
Many issues have been resolved, and long-standing pull requests have been merged. A special thanks to [@drpayyne](https://github.com/drpayyne) for multi-arch support, [@rangerz](https://github.com/rangerz) for their massive contributions, as well as many others for their continued work & pull requests submitted to this project.
### Updated
- Updated `onelinesetup` script to use version `2.4.3-p1` by default.
- Updated `bin/cache-clean` with improved logic [PR #400](https://github.com/markshust/docker-magento/pull/400).
- Simplified `docker-compose.dev.yml` file to only contain volume mounting information.
### Added
- Added new `mailcatcher` image to replace `mailhog` for multi-arch support [#511](https://github.com/markshust/docker-magento/issues/511).
- Added `docker-compose.dev-ssh.xml` to streamline SSH setup.
- Added `docker-compose.dev-linux.xml` to streamline Linux setup.
- Added GitHub workflows for multi-arch build support [#396](https://github.com/markshust/docker-magento/issues/396).
- Added multi-arch support for Nginx [PR #515](https://github.com/markshust/docker-magento/pull/515).
- Added multi-arch support for PHP [PR #516](https://github.com/markshust/docker-magento/pull/516).
- Added new `bin/setup-domain` script [PR #429](https://github.com/markshust/docker-magento/pull/429).
- Added Basic MFTP Setup information [PR #269](https://github.com/markshust/docker-magento/pull/269).
- Make uid & gid of app user configurable [#520](https://github.com/markshust/docker-magento/pull/520).
- Added Makefile with list of available commands [#399](https://github.com/markshust/docker-magento/pull/399).
- Xdebug 3 support for `bin/n98-magerun2` [#545](https://github.com/markshust/docker-magento/pull/545).
### Fixed
- Fixed SSL setup failing on Linux [#222](https://github.com/markshust/docker-magento/issues/222).
- Fixed locale code for `bin/setup-grunt` [#484](https://github.com/markshust/docker-magento/pull/484).
- Fixed cron not working [#540](https://github.com/markshust/docker-magento/issues/540).
## [39.1.0] - 2021-09-21
### Updated
- Replace MailHog with Mailcatcher for multi-arch compatibility [#511](https://github.com/markshust/docker-magento/issues/511).
## [39.0.2] - 2021-09-21
### Fixed
- Fixed placement of enabling developer mode within bin/setup.
## [39.0.1] - 2021-09-21
### Fixed
- Connection to Redis fails without php-redis extension [#474](https://github.com/markshust/docker-magento/issues/474).
## [39.0.0] - 2021-09-21
### Added
- New Elasticsearch Docker images `7.9`, `7.9.3-0` [#488](https://github.com/markshust/docker-magento/issues/488).
### Updated
- Replace Percona DB with MariaDB 10.4 [#514](https://github.com/markshust/docker-magento/issues/514).
- Updated RabbitMQ image to 3.8.
### Fixed
- Resolve cron install script not in bin/setup [#420](https://github.com/markshust/docker-magento/issues/420).
- Update Elasticsearch settings to fix catalog search index error [#488](https://github.com/markshust/docker-magento/issues/488).
## [38.0.0] - 2021-07-27
### Added
- Composer 2 support [#409](https://github.com/markshust/docker-magento/issues/409).
### Fixed
- Composer `auth.json` not properly set after installation [#42](https://github.com/markshust/docker-magento/issues/42).
- `bin/remove` not removing containers in newer versions of Docker Compose.
- Invalid template error with Docker 3.5.1 [#486](https://github.com/markshust/docker-magento/issues/486).
## [37.0.2] - 2021-02-17
### Added
- New `bin/setup-composer-auth` file to setup Composer auth creds.
## [37.0.1] - 2021-02-15
### Fixed
- Fix onelinesetup script bug.
## [37.0.0] - 2021-02-14
### Added
- Official support for Xdebug 3 [#390](https://github.com/markshust/docker-magento/issues/390). The new PHP images are `7.3-fpm-12` & `7.4-fpm-5`.
- If you need to still use Xdebug 2, update your docker-compose.yml files to instead look at PHP image `7.3-fpm-11` or `7.4-fpm-4`. These images are exactly the same other than being pegged to Xdebug 2.
## [36.0.2] - 2021-02-14
### Updated
- Reverted Xdebug to version 2 for backwards-compatible support [#390](https://github.com/markshust/docker-magento/issues/390).
## [36.0.1] - 2021-02-04
### Updated
- Reverted DB image back to `percona:5.7` until issues with MySQL 8.0 image are resolved.
## [36.0.0] - 2021-02-04
### Added
- New Elasticsearch Docker images `7.7`, `7.7.1-0` [#392](https://github.com/markshust/docker-magento/issues/392).
- SpellCheck GitHub Action for continuous integration checks of shell scripts [#387](https://github.com/markshust/docker-magento/pull/387), [#388](https://github.com/markshust/docker-magento/pull/388).
### Fixed
- Support filesystem paths with spaces [e5f22e56](https://github.com/markshust/docker-magento/commit/e5f22e56fcd382b8339d5804a9d236dd6b238a3d).
- Added missing `bin/cache-clean` file [f0e57202](https://github.com/markshust/docker-magento/commit/f0e5720281cd9f536f163bd5bdfe5bd66a956dc6).
### Updated
- Updated PHP images to NodeJS version 14 LTS [4a81f2b8](https://github.com/markshust/docker-magento/commit/4a81f2b8c61674b261ee7b42752e21fc8d5e945d).
- Changed `db` service to use MySQL 8.0 Docker image.
## [35.0.0] - 2021-01-29
### Added
- Automatically purge caches for a better dev experience [#380](https://github.com/markshust/docker-magento/issues/380).
- Stop script execution on error [#363](https://github.com/markshust/docker-magento/pull/363/).
- Make xdebug command understand partials [#371](https://github.com/markshust/docker-magento/pull/371).
- Extended functionality for `bin/xdebug`, including new `status` and `toggle` commands [#332](https://github.com/markshust/docker-magento/pull/332).
- Check Elasticsearch connection before setup:install [#326](https://github.com/markshust/docker-magento/pull/326).
### Updated
- The onelinesetup now accepts a `community` or `enterprise` param to pick version to install [b2399ff1](https://github.com/markshust/docker-magento/commit/ad573f6f3c8d2f7066034cbde936a86eb2399ff1).
- Fix bin/start for macOS Big Sur [#355](https://github.com/markshust/docker-magento/pull/355/).
## [34.2.0] - 2020-10-15
### Updated
- Updated Composer to version `1.10.15` to avoid nag update messages in new PHP Docker images `7.3-fpm-9`, `7.4-fpm-2`.
## [34.1.0] - 2020-10-15
### Added
- HTTP/2 added to Nginx image `1.18-4`
### Updated
- `bin/download` falls back to using Composer if archive download fails or is not found.
## [34.0.0] - 2020-10-11
### Added
- New `bin/setup-integration-tests` script to setup integration tests [3c021ff](https://github.com/markshust/docker-magento/commit/3c021ff6c92e49fad669deed0805cceae26bdccf).
- Added `MYSQL_HOST` environment variable to `env/db.env` file.
- New Nginx `1.18-3` Docker images uses Alpine as base image [PR #306](https://github.com/markshust/docker-magento/pull/306).
### Updated
- Prevent containers from starting if volume mapping doesn't exist, validate volumes to avoid empty folder creation [PR #256](https://github.com/markshust/docker-magento/pull/256).
- Setup script uses MySQL `env/db.env` file for database connection credentials [PR #302](https://github.com/markshust/docker-magento/pull/302).
- Increased MySQL's `max_allowed_packet` to `64M` in `docker-compose.yml` file [PR #303](https://github.com/markshust/docker-magento/pull/303).
- `docker-compose.yml` now uses Alpine images for Redis and RabbitMQ [#305](https://github.com/markshust/docker-magento/pull/305).
- `docker-compose.yml` file now uses new Alpine images for Redis, RabbitMQ & Nginx.
- `bin/setup` script updated to use Redis for cache and session directly in installer script [PR #304](https://github.com/markshust/docker-magento/pull/304).
- `bin/setup` script sets Admin URL to `/admin` [PR #304](https://github.com/markshust/docker-magento/pull/304).
- Enabling/disabling Xdebug now only restarts `phpfpm` container rather than all containers [PR #314](https://github.com/markshust/docker-magento/pull/314).
- `bin/setup` script moves `.vscode` directory to `src` after install [846d02c](https://github.com/markshust/docker-magento/commit/846d02c12c5af8005fe0cbb0b167b97f501db0c9).
### Fixed
- Exception while running integration tests [#292](https://github.com/markshust/docker-magento/pull/292).
- Nested files not copying in copytocontainer script [#295](https://github.com/markshust/docker-magento/pull/295) [#296](https://github.com/markshust/docker-magento/pull/295).
- Ubuntu unable to start because of missing volumes [#309](https://github.com/markshust/docker-magento/issues/309).
## [33.0.0] - 2020-07-30
### Added
- The `php:7.4-fpm` Docker image has been setup with full support for Magento 2.4 (see [images/php/7.4](https://github.com/markshust/docker-magento/tree/master/images/php/7.4)).
- Added easy way to mount an SSH key to the container (see [#89](https://github.com/markshust/docker-magento/issues/89)).
- The `bin/download` script now falls back to Hypernode's Magento Download mirror in the event the archive doesn't exist or fails to download from Nexcess.
### Updated
- All Docker volumes now use `:cached` rather than `:delegated`. The `delegated` volume functionality is changing in a future version of Docker for Mac to use Mutagen volumes, and the implementation is very buggy & awkward. Using the `cached` flag retains the current functionality we've been using in `delegated` without any changes (confirmed in [docker/for-mac#1592](https://github.com/docker/for-mac/issues/1592#issuecomment-662504816)).
- Updated `bin/setup-ssl-ca` so SSL generation works on Linux ([#222](https://github.com/markshust/docker-magento/issues/222))
- Updated `php` Docker images to use most recent version of Composer (1.10.9).
- The `bin/setup` script now runs `composer update` rather than `composer install`. There was an error happening with `composer install`, and with the start of the project it's best to just get the most recent Composer packages anyway.
- The `bin/setup` script now sets Elasticsearch 7 as the default catalog search engine directly when executing `bin/magento setup:install`.
### Removed
- All `latest` tags have been removed on all Docker images. It is bad practice to not use a specific version. The `latest` tag will no longer be recompiled when new images are released.
- The `php:7.2` Docker images have been deprecated, as that version is no longer supported in Magento.
- The `elasticsearch:6` Docker images have been deprecated, as those versions are no longer supported in Magento.
- Removed invalid checksum hack fix in `bin/setup` for `google-shopping-api` package, as that is only applicable to older versions of Magento.
## [32.0.1] - 2020-05-12
### Fixed
- Backed out last Elasticsearch update with elasticsearch.yml, caused issues with startup.
## [32.0.0] - 2020-05-11
### Fixed
- Updated `bin/dev-urn-catalog-generate` to account for new versions of PHPStorm (simplified).
- Indexing error with possible ElasticSearch modules ([#262](https://github.com/markshust/docker-magento/issues/262)).
### Updated
- Updated ElasticSearch 6 to version 6.8.
## [31.0.2] - 2020-04-30
### Fixed
- Fixed typo in last build image, new version is `magento-nginx:1.18-2`.
## [31.0.1] - 2020-04-30
### Fixed
- Reverted old SSL cert, it needs to exist as default cert until new certs are generated.
## [31.0.0] - 2020-04-30
### Added
- New `magento-nginx:1.18` Docker image.
- New `magento-elasticsearch:7.6` Docker image.
- Documentation to install Magento directly with sample data (using `with-samples-` prefix (thanks Nexcess!).
### Updated
- The `bin/setup` helper script to enable Elasticsearch 7 and automatically reindex during installation.
- The `docker-compose.yml` file now references the `magento-nginx:1.18-0` and `magento-elasticsearch:7.6.2-0` Docker images.
- The `docker-compose.yml` adds the new environment variable `"discovery.type=single-node"` for compatibility with Elasticsearch 7.
- The new `nginx:1.18` Docker image sets `fastcgi_buffer_size 64k;` and `fastcgi_buffers 8 128k;` directives for Magento 2.3.5 compatibility.
### Removed
- Old SSL cert being generated directly on Nginx image (deprecated).
- References to Nginx 1.13 images (deprecated).
## [30.0.3] - 2020-04-25
### Updated
- Reverted disabling Temando_Shipping module in bin/magento for sample data installation. <a href="https://github.com/markshust/docker-magento/issues/250">#250</a>
## [30.0.2] - 2020-04-17
### Fixed
- The `Temando_Shipping` module conflicts with sample data installation. Added fix to `bin/magento` helper script to disable this module, install sample data, then re-enable it.
### Added
- Added a `--remove-orphans` flag to `bin/start` script to remove orphaned containers (applicable to cron service).
## [30.0.1] - 2020-03-18
### Updated
- Increased php.ini `memory_limit` to `4G` to get PHPUnit tests to pass
- Increased php.ini `upload_max_filesize` and `post_max_size` to `100M` just to prevent issues from being filed in the future
### Added
- New PHP image tags `7.2-fpm-9`, `7.3-fpm-6`
## [30.0.0] - 2020-03-09
### Added
- Added new CLI to connect to MySQL
### Updated
- Updated readme with new bin/mysql documentation
- n98-magerun2 to install on exec of `bin/n98-magerun2` instead of `bin/setup` script
- Increased `max_input_vars` to `10000` to prevent Invalid Form Post submission errors
### Fixed
- Fixed PHP ioncube module missing ioncube.so file
- Disable TTY on `bin/setup-ssl-ca script`
- Fixed `bin/copytocontainer` script not copying files to proper directory
## [29.0.0] - 2020-01-31
### Fixed
- Fixed implementation of grunt. The grunt-cli is now installed globally on the image and doesn't depend on contents of the `vendor` directory.
## [28.0.0] - 2020-01-31
### Updated
- Upgraded NodeJS to 10.x, as 8.x was failing to install npm due to source repository updates <a href="https://github.com/markshust/docker-magento/issues/210">#210</a>
### Removed
- Removed PHP 7.1 image from filesystem as it has been deprecated. If you need to reference the last version of these images, they are available at <a href="https://github.com/markshust/docker-magento/tree/27.2.0/images/php/7.1">https://github.com/markshust/docker-magento/tree/27.2.0/images/php/7.1</a>
## [27.2.0] - 2020-01-22
### Added
- Support for RabbitMQ <a href="https://github.com/markshust/docker-magento/pull/212">PR #212</a>
## [27.1.0] - 2020-01-20
### Added
- New `bin/setup-ssl` script to generate valid SSL certificates <a href="https://github.com/markshust/docker-magento/issues/211">#211</a>
- New `markoshust/magento-nginx:1.13-8` image containing mkcert script
### Updated
- Updated `bin/setup` to use new `bin/setup-ssl` script
## [27.0.0] - 2020-01-01
Happy new year! 🎉
### Updated
- Updated the PHP base images from Debian Stretch to Buster
- Updated PHP libsodium package to `1.0.17` to support `HASH_VERSION_ARGON2ID13` <a href="https://github.com/markshust/docker-magento/issues/193">#193</a>
### Added
- Built-in support for Blackfire.io
- New PHP image tags `7.2-fpm-5`, `7.3-fpm-2`
## [26.0.0] - 2019-12-30
### Added
- Ability for `src` directory to be a symlink
### Fixed
- Fixed Magento2 setup script with n98-magerun2.phar
- Fixed dev-urn-catalog-generate script
### Removed
- All Windows-specific setup and helper scripts. This involved changing directory structure of `compose` folder, there is no longer specific `magento-2` and `magento-2-windows` specific folders. Windows support works on Docker with WSL.
- Support for PHP 7.1 (EOL)
## [25.0.0] - 2019-10-22
### Added
- Full parity with [Magento Cloud PHP extensions](https://devdocs.magento.com/guides/v2.3/cloud/project/project-conf-files_magento-app.html#php-extensions)
### Updated
- Optimized Dockerfile install order and layer usage for all PHP images (7.1, 7.2 & 7.3)
- Updated few lib dependencies in Dockerfiles with new versions
- Pegged Composer to version 1.9.0 for predictability, moved to lower layer so updating version doesn't require full rebuild of all layers
## [24.2.0] - 2019-10-18
### Fixed
- Fixed logic of `bin/copyfromcontainer` and `bin/copytocontainer` so subdirectories are now properly copied from and to the container
### Added
- The `bin/fixowns` script now includes the ability to fix ownerships at the subdirectory level
- The `bin/copyfromcontainer` and `bin/copytocontainer` scripts now fixes permissions and ownerships of just the subdirectories that are copied
## [24.1.2] - 2019-10-15
### Fixed
- Fixed `bin/copyfromcontainer` and `bin/copytocontainer` referencing incorrect destination file locations
## [24.1.1] - 2019-10-11
### Fixed
- Added missing `bin/pwa-studio` and `bin/setup-pwa-studio` bash scripts
## [24.1.0] - 2019-10-10
### Added
- Documented in README how to retrieve `bin/update` file for previous versions that did not include it
- Added `hirak/prestissimo` composer package to `bin/setup` helper script for much faster composer installs
- Downloaded archive installs are now cached on the user's machine, so subsequent installs of Magento will no longer re-download the archive if previously downloaded. Downloaded archives are stored in the `~/.docker-magento` folder.
### Fixed
- There is an invalid checksum reference in the Nexcess archive of 2.3.3, replaced checksum reference in `bin/setup` to resolve the error
### Removed
- The previous CHANGELOG for `24.0.0` referenced `vertex/module-tax` being removed but for some reason it was not removed, now it is
## [24.0.0] - 2019-10-09
### Added
- New PHP docker image version `7.3-fpm-0` for Magento 2.3.3 support
- New Elasticsearch docker image `markoshust/magento-elasticsearch:6.5.4-0` which comes bundled with icu and phonetic plugins. The initial `6.5` version is for parity with Magento Cloud.
- New `bin/update` helper script that updates your docker-magento setup to the latest version
- Added `.gitignore` file to project root to ignore `src` directory. It is recommended to keep your root docker config files in one repository, and your Magento code setup in another. This ensures the Magento base path lives at the top of one specific repository, which makes automated build pipelines and deployments easy to manage, and maintains compatibility with projects such as Magento Cloud.
- Install n98-magerun2 when setup is executed, and added related `bin/n98-magerun` and `bin/devconsole` helper scripts.
- Added `bin/setup-pwa-studio` (BETA) helper script to easily install PWA Studio, usage accepts a single parameter being the site URL you wish PWA Studio to connect to (ex. `bin/setup-pwa-studio magento2.test`)
- Added `bin/pwa-studio` (BETA) helper script to easily run the PWA Studio NodeJS web server
### Fixed
- The `bin/dev-urn-catalog-generate` helper script has been updated for compatibility with more recent versions of PHPStorm
### Removed
- The `vertex/module-tax` Composer package installs correctly as of 2.3.0, so the line within the `bin/setup` script which prevented it from being installed was removed. If one is having issues installing an older version of Magento 2, add the following line to your `composer.json` file to prevent this package from being installed:
`{"replace": { "vertex/module-tax": "*" }}`
## [23.2.3] - 2019-07-20
### Fixed
- The `php` base Docker image changed from Debian Stretch to Buster and broke a lot of packages, which caused a failed build for `7.1-fpm-12` & `7.2-fpm-3` tags. This update pegs the `php` Docker image to Debian Stretch.
## [23.2.2] - 2019-07-17
### Fixed
- Xdebug breakpoints not triggering
### Added
- New PHP docker image versions `7.1-fpm-12`, `7.2-fpm-3`
## [23.2.1] - 2019-07-11
### Fixed
- Mailhog container doesn't stop when running bin/stop
## [23.2.0] - 2019-07-07
### Added
- View emails sent locally through Mailhog by visiting [http://{yourdomain}:8025](http://{yourdomain}:8025)
## [23.1.1] - 2019-07-01
### Updated
- Make Dockerfile consistent between versions
- Move Docker layers to bottom for smaller downloads, useful for those using previous versions
- Same Docker version tag, so just remove Docker image locally and re-pull to use
## [23.1.0] - 2019-06-27
### Added
- `libsodium-dev` package and `sodium` PHP extension for Magento 2.3.2 support.
- New PHP docker versions `7.1-fpm-10`, `7.2-fpm-1`
## [23.0.0] - 2019-04-02
### Added
- Allow setup without SSH credentials.
- Documentation for connecting to MySQL.
- `bin/status` to check container status.
### Updated
- Readme for existing installs.
- `bin/dev-urn-catalog-generate` to look at `src` folder as project root.
### Fixed
- Readme usage of pasting command into non-standard terminal.
## [22.0.0] - 2019-02-14
### Added
- Host bind mount `var/log` folder in `docker-compose.dev.yml` for debugging purposes.
- Redis is now the default storage engine for cache and session. Massively improved performance for local dev! 🚀
- Added commented-out line in `docker-compose.dev.yml` file to easily mount `auth.json` file, with updated usage in README
### Fixed
- Cron not working correctly
## [21.1.2] - 2019-02-04
### Fixed
- Helper script `bin/fixowns` now fixes permissions on `/var/www` instead of `/var/www/html` folder.
- Removed superfluous mounting of `~/.composer` directory in `docker-compose.dev.yml` file.
## [21.1.1] - 2018-12-27
### Fixed
- Helper script `bin/copytocontainer` now calls `bin/fixowns` afterwards to ensure correct file ownerships are set.
## [21.1.0] - 2018-12-26
### Added
- Helper script `bin/removevolumes` to remove docker volumes easily.
- Added removal of `vendor` folder and force of composer install to `bin/setup` script. When installed from zip, it's possible Magento isn't installing all deps properly and assigning wrong permissions in Docker. Forcing a reinstall fixes this issue.
- Force deploy of static content when running `bin/setup` to speed up initial requests.
### Fixed
- Fixed helper script `bin/dev-urn-catalog-generate` to copy file to host.
## [21.0.0] - 2018-12-24
🎅 Santa Shust wishes you a very Merry Christmas!
### Changed
- 💯 performance improvements (14 second load times now take 7 seconds!)
- The `bin/start` helper script no longer copies docker volumes introduced in version 18.0.0. The `docker-compose.yml` setup has been updated to only reference native Docker volumes. A new `docker-compose.dev.yml` file has been added to reference development-specific settings, including host bind mounts. Only `.composer`, `app/code`, `app/design`, `app/etc`, `composer.json`, `composer.lock`, and `nginx.conf` filesystem locations are host bind mounted. Being very specific in which files and folders are being mounted leads to drastically faster response times. The main culprit in performance penalties before was mounting `generated` and `var` folders as host bind mounts. These directories are considered "caching" folders and should never be host bind mounted.
- If you need access to specific files that are created within the container and are not host bind mounted, you can use `bin/cli` or `bin/bash` commands to go into the container to access the files. You can also use the new `bin/copyfromcontainer` and `bin/copytocontainer` bin helper scripts to copy files & folders from or to containers.
- If you need to host bind mount files or folders, feel free to do so within the `docker-compose.dev.yml` file! Just be aware there is a performance penalty for doing so.
- Updated `nginx` Docker image to look for `nginx.conf` file instead of `nginx.conf.sample` file. This will now require copying the `nginx.conf.sample` file to `nginx.conf`, or using a host bind mount. This location allows overrides that aren't overridden when you upgrade Magento, and allow customizations for projects. Tagged new image as `markoshust/magento-nginx:1.13-7`.
- The `bin/setup` helper script uses only the `docker-compose.yml` file, with only native docker volume mounts.
- The `bin/start` helper script uses both `docker-compose.yml` and `docker-compose.dev.yml` files. Development-only specifications should now be placed within `docker-compose.dev.yml`, such as host bind volume mounts.
- The `docker-compose.yml` file now uses a `sockdata` volume mount to mount the `/sock` directory. You may need to delete the `appdata` volume mount (`docker volume rm NAME`) and rebuild it with `bin/copytocontainer --all`.
- Removed call to `bin/fixperms` within `bin/setup` to speed up initial installation.
### Added
- Added `bin/copyfromcontainer` and `bin/copytocontainer` helper scripts to copy folders or files from or to containers. Specify the `--all` option to copy entire web directory structure.
- Added `bin/rootnotty` to run root commands with no TTY (needed for unassisted one-line setup with new volume setup).
- Added `bin/fixowns` to fix filesystem ownerships within the Docker container.
- Added `docker-compose.dev.yml` file for development-only specifications.
### Removed
- The Magento 1 version of this development environment has been deprecated and is no longer supported. PHP 5 was used as it's base, and that version has reached end-of-life. If you still wish to use this setup, please reference [compose/magento-1 on tag 20.1.1](https://github.com/markshust/docker-magento/tree/master/compose/magento-1), but please be aware these images are no longer maintained.
- The PHP 5.6 and 7.0 images have been deprecated, as both of these versions have reached end-of-life. These versions have been removed from the README and are no longer maintained. If you still wish to use these images, please reference the [README on tag 20.1.1](https://github.com/markshust/docker-magento/blob/master/README.md), but please be aware these images are no longer maintained.
- Removed `bin/copydir` and `bin/copydirall` helper scripts.
## [20.1.1] - 2018-12-10
### Fixed
- Fixed typo in docker-compose.yml for linux
## [20.1.0] - 2018-12-03
### Added
- Official support for Elasticsearch. Go to Admin > Stores > Configuration > Catalog > Catalog > Catalog Search, and select "Elasticsarch 5.0+" from the list of options. Keep all defaults the same, but set Elasticsearch Server Hostname to `elasticsearch`. Save, clear the cache, and run `bin/magento indexer:reindex` to enable.
## [20.0.0] - 2018-11-27
### Added
- Official support for Magento 2.3 & PHP 7.2. Officially tagging `7.2-fpm-0` php image.
### Updated
- Various updates to README, including references now being made to Magento 2.3.
- Added comments to docker-compose for fixes needed on Linux machines (volume mounts and host.docker.internal fix).
### Fixed
- Volume mount issues on linux. Updated `bin/start` to ignore call to `bin/copydirall` when ran on Linux.
## [19.0.0] - 2018-10-08
### Added
- Added SSL support and made it enabled by default in the nginx config. All http requests will also be forwarded to https.
## [18.1.1] - 2018-10-08
### Updated
- Magento 2 nginx configuration now includes `nginx.conf.sample` file from root installation directory for configuration, instead of having standalone configuration.
## [18.0.1] - 2018-10-08
### Fixed
- Reverted old `bin/cli` usage and created `bin/clinotty` for non-tty sessions. Updated calls in `bin/setup` and other scripts where appropriate to `bin/clinotty`.
## [18.0.0] - 2018-10-06
### Changed
- Changed the way bind mounts work with Docker compose and Magento 2.
- Note that `bin/start` now includes a call to `bin/copydirall` after the containers start. This helper script runs a `docker cp` command of all Magento directories from the container to the host. There is still a bind mount setup to `./src` root directory.
- There is a condition/bug within Docker that when named volumes overlap with bind mounts, the named volumes automatically sync back to the host once a `docker cp` command runs, while retaining their named volume status within the Docker container.
- We're tapping into this very odd bug and taking advantage of this as long as we can. Since data is still fetched from within the Docker container as a named volume, this should also allow not-so-performant computers to now run this Docker setup, as it provides near or truly native filesystem performance, since requests to these directories are still fetched through the named volume as far as Docker is concerned.
- `bin/start` now runs in daemon mode, as we also need to run `bin/copydirall` immediately after starting containers so data syncs back to the host (and vice versa). This also eliminates the need to to have a terminal window open all the time for keeping containers running.
### Added
- Added back support for Magento 1 and PHP 5.6 containers. Magento 1 EOL will not be until 2020, so we should support these images and Docker Compose setup indefinitely for the time being.
- Added new `bin/restart` helper script to stop and start all containers.
- Added new `bin/remove` helper script to remove all containers.
- Added new `bin/copydir` which copies whichever folder you wish from the container to the host.
- Added new `bin/copydirall` which copies all Magento folders from the container to the host.
- Added `lib/template` and `lib/onelinesetup` for much easier installation methods.
- Added automatic Xdebug support for VS Code - no setup needed!
### Removed
- Removed `bin/initloopback` along with any references to `10.254.254.254` ip address. This may break existing Xdebug setups. Note that this ip address has been replaced with `host.docker.internal`, which should automatically resolve back to the host machine.
## [17.0.1] - 2018-10-06
### Removed
- Removed bind mount of vendor folder introduced in 16.2.0 due to inconsistency issues. Update coming soon that will implement new method of bind mounting.
## [17.0.0] - 2018-09-06
### Removed
- Removed idekey setting from php.ini config.
### Changed
- Simplified Xdebug configuration for PHPStorm. This will require configuration updates for all users using Xdebug within PHPStorm.
### Added
- Added support for Xdebug and VS Code.
## [16.2.0] - 2018-08-29
### Changed
- Updated docker-compose.yml file to volume mount vendor folder for 50% performance increase
## [16.1.0] - 2018-08-23
### Added
- Added php ssh2 extension
### Deprecated
- The PHP 5.6 release will no longer be maintained, the last released version is 16.0.0
## [16.0.0] - 2018-08-22
### Changed
- Moved `dev/auth.json` to `dev/composer/auth.json`
- Added `client_max_body_size 20M` to nginx.conf
- Added `upload_max_filesize = 20M` and `post_max_size = 20M` to php.ini
## [15.0.1] - 2018-08-03
### Fixed
- Bugs with npm permissions.
## [15.0.0] - 2018-08-03
### Added
- NodeJS 8 and npm 5 added to the PHP images!
- New PHP 7.2 image. Be aware that this hasn't yet been fully tested.
- New helper scripts bin/grunt, bin/node, bin/npm and bin/stop.
### Changed
- All bin helper script calls from ./bin/name to bin/name.
- Updated bin scripts for Windows, possible breaking updates.
## [14.0.1] - 2018-07-28
### Fixed
- Magento 2.2.5 requires username and password to be different values. Updated to dummy "John Smith" user persona with username `john.smith` and password `password123`.
## [14.0.0] - 2018-07-21
### Added
- New `dev/auth.json` file used instead of `~/.composer/auth.json` file, so each project can have different auth credentials.
### Changed
- The `cron` service is now disabled by default. This services uses higher CPU and should probably only be enabled when working on cron-related tasks (or on production).
================================================
FILE: LICENSE.md
================================================
MIT License
Copyright (c) 2016 Mage Inferno
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
================================================
FILE: README.md
================================================
<h1 align="center">markshust/docker-magento</h1>
<div align="center">
<p>Mark Shust's Docker Configuration for Magento</p>
<img src="https://img.shields.io/badge/magento-2.X-brightgreen.svg?logo=magento&longCache=true" alt="Supported Magento Versions" />
<a href="https://hub.docker.com/r/markoshust/magento-php/" target="_blank"><img src="https://img.shields.io/docker/pulls/markoshust/magento-php.svg?label=php%20docker%20pulls" alt="Docker Hub Pulls - PHP" /></a>
<a href="https://hub.docker.com/r/markoshust/magento-nginx/" target="_blank"><img src="https://img.shields.io/docker/pulls/markoshust/magento-nginx.svg?label=nginx%20docker%20pulls" alt="Docker Hub Pulls - Nginx" /></a>
<a href="https://github.com/markshust/docker-magento/graphs/commit-activity" target="_blank"><img src="https://img.shields.io/badge/maintained%3F-yes-brightgreen.svg" alt="Maintained - Yes" /></a>
<img src="https://img.shields.io/badge/apple%20silicon%20support-yes-brightgreen" alt="Apple Silicon Support" />
<a href="https://opensource.org/licenses/MIT" target="_blank"><img src="https://img.shields.io/badge/license-MIT-blue.svg" /></a>
</div>
## Table of contents
- [Docker Hub](#docker-hub)
- [Free Course](#free-course)
- [Usage](#usage)
- [Prerequisites](#prerequisites)
- [Setup](#setup)
- [Updates](#updates)
- [Custom CLI Commands](#custom-cli-commands)
- [Misc Info](#misc-info)
- [Known Issues](#known-issues)
- [Alternatives](#alternatives)
- [Credits](#credits)
- [License](#license)
## Docker Hub
View Dockerfiles for the latest tags:
- [markoshust/magento-nginx (Docker Hub)](https://hub.docker.com/r/markoshust/magento-nginx/)
- [`1.18`, `1.18-8`](images/nginx/1.18)
- [`1.22`, `1.22-0`](images/nginx/1.22)
- [`1.24`, `1.24-0`](images/nginx/1.24)
- [markoshust/magento-php (Docker Hub)](https://hub.docker.com/r/markoshust/magento-php/)
- [`8.1-fpm`, `8.1-fpm-7`](images/php/8.1)
- [`8.2-fpm`, `8.2-fpm-6`](images/php/8.2)
- [`8.3-fpm`, `8.3-fpm-4`](images/php/8.3)
- [`8.4-fpm`, `8.4-fpm-0`](images/php/8.4)
- [markoshust/magento-opensearch (Docker Hub)](https://hub.docker.com/r/markoshust/magento-opensearch/)
- [`1.2`, `1.2-0`](images/opensearch/1.2)
- [`2.5`, `2.5-1`](images/opensearch/2.5)
- [`2.12`, `2.12-0`](images/opensearch/2.12)
- [markoshust/magento-elasticsearch (Docker Hub)](https://hub.docker.com/r/markoshust/magento-elasticsearch/)
- [`7.16`, `7.16-0`](images/elasticsearch/7.16)
- [`7.17`, `7.17-1`](images/elasticsearch/7.17)
- [`8.4`, `8.4-0`](images/elasticsearch/8.4)
- [`8.5`, `8.5-0`](images/elasticsearch/8.5)
- [`8.7`, `8.7-0`](images/elasticsearch/8.7)
- [`8.11`, `8.11-0`](images/elasticsearch/8.11)
- [`8.13`, `8.13-0`](images/elasticsearch/8.13)
- [markoshust/magento-rabbitmq (Docker Hub)](https://hub.docker.com/r/markoshust/magento-rabbitmq/)
- [`3.9`, `3.9-0`](images/rabbitmq/3.9)
- [`3.11`, `3.11-1`](images/rabbitmq/3.11)
- [`3.12`, `3.12-0`](images/rabbitmq/3.12)
- [`4.1`, `4.1-0`](images/rabbitmq/4.1)
- [markoshust/ssh (Docker Hub)](https://hub.docker.com/r/markoshust/magento-ssh/)
- [`latest`](images/ssh)
## Free Course
This course is sponsored by <a href="https://m.academy" target="_blank">M.academy</a>, the simplest way to learn Magento.
<a href="https://m.academy" target="_blank"><img src="docs/macademy-logo.png" alt="M.academy"></a>
A free screencast course is available (which was fully refreshed in December 2021), which details the basic usage of this project:
<a href="https://m.academy/courses/set-up-magento-2-development-environment-docker" target="_blank">
<img src="docs/set-up-magento-2-development-environment-docker-og.png" alt="Set Up a Magento 2 Development Environment with Docker" width="400"><br/>
Set Up a Magento 2 Development Environment with Docker
</a>
### Course Curriculum
#### Intro
- <a href="https://courses.m.academy/courses/set-up-magento-2-development-environment-docker/lectures/36738848" target="_blank">Quick hi & welcome from Mark!</a>
- <a href="https://courses.m.academy/courses/set-up-magento-2-development-environment-docker/lectures/36738860" target="_blank">About the course format</a>
#### Initial Project Setup
- <a href="https://courses.m.academy/courses/set-up-magento-2-development-environment-docker/lectures/9205849" target="_blank">Install Docker Desktop & configure preferences</a>
- <a href="https://courses.m.academy/courses/set-up-magento-2-development-environment-docker/lectures/8974570" target="_blank">Set up Magento with the automated onelinesetup script</a>
- <a href="https://courses.m.academy/courses/set-up-magento-2-development-environment-docker/lectures/9064259" target="_blank">Set up Magento manually from a custom Git branch</a>
- <a href="https://courses.m.academy/courses/set-up-magento-2-development-environment-docker/lectures/9283467" target="_blank">Set up Docker for an existing Magento project</a>
#### The Basics of docker-magento
- <a href="https://courses.m.academy/courses/set-up-magento-2-development-environment-docker/lectures/9064258" target="_blank">Execute docker-magento helper scripts</a>
- <a href="https://courses.m.academy/courses/set-up-magento-2-development-environment-docker/lectures/9331008" target="_blank">Start, stop, restart and check container status</a>
- <a href="https://courses.m.academy/courses/set-up-magento-2-development-environment-docker/lectures/9064269" target="_blank">Execute bin/magento and composer within Docker containers</a>
- <a href="https://courses.m.academy/courses/set-up-magento-2-development-environment-docker/lectures/36150902" target="_blank">Install Magento sample data</a>
#### Docker Filesystem & Data Volumes
- <a href="https://courses.m.academy/courses/set-up-magento-2-development-environment-docker/lectures/9064334" target="_blank">Understand Docker volumes & host bind mounts</a>
- <a href="https://courses.m.academy/courses/set-up-magento-2-development-environment-docker/lectures/9064338" target="_blank">Manage files & folders within Docker containers</a>
#### PhpStorm
- <a href="https://courses.m.academy/courses/set-up-magento-2-development-environment-docker/lectures/9748834" target="_blank">Set up a docker-magento project in PhpStorm</a>
- <a href="https://courses.m.academy/courses/set-up-magento-2-development-environment-docker/lectures/9763893" target="_blank">Set up the Magento PhpStorm plugin</a>
#### Code Quality Tools
- <a href="https://courses.m.academy/courses/set-up-magento-2-development-environment-docker/lectures/52640115" target="_blank">Configure PHPCS (PHP CodeSniffer) for Magento</a>
- <a href="https://courses.m.academy/courses/set-up-magento-2-development-environment-docker/lectures/52642491" target="_blank">Configure PHPCSF (PHP CodeSniffer Fixer) for Magento</a>
- <a href="https://courses.m.academy/courses/set-up-magento-2-development-environment-docker/lectures/52643314" target="_blank">Configure PHPMD (PHP Mess Detector) for Magento</a>
#### Xdebug
- <a href="https://courses.m.academy/courses/set-up-magento-2-development-environment-docker/lectures/9064478" target="_blank">Install the Xdebug helper browser plugin for Chrome & PhpStorm</a>
- <a href="https://courses.m.academy/courses/set-up-magento-2-development-environment-docker/lectures/9064482" target="_blank">Enable disable check the status of Xdebug</a>
- <a href="https://courses.m.academy/courses/set-up-magento-2-development-environment-docker/lectures/9064615" target="_blank">Configure PhpStorm for Xdebug connections</a>
- <a href="https://courses.m.academy/courses/set-up-magento-2-development-environment-docker/lectures/9064617" target="_blank">Trigger an Xdebug breakpoint in PhpStorm</a>
- <a href="https://courses.m.academy/courses/set-up-magento-2-development-environment-docker/lectures/36677538" target="_blank">Trigger an Xdebug breakpoint for CLI commands in PhpStorm</a>
#### Customize Server Configurations
- <a href="https://courses.m.academy/courses/set-up-magento-2-development-environment-docker/lectures/36702830" target="_blank">Understand the docker-compose application structure</a>
- <a href="https://courses.m.academy/courses/set-up-magento-2-development-environment-docker/lectures/36702861" target="_blank">Increase the PHP memory limit in php.ini</a>
- <a href="https://courses.m.academy/courses/set-up-magento-2-development-environment-docker/lectures/9064349" target="_blank">Increase the Nginx request timeout in nginx.conf</a>
- <a href="https://courses.m.academy/courses/set-up-magento-2-development-environment-docker/lectures/36703258" target="_blank">Increase the MySQL buffer pool size with command or in my.cnf</a>
- <a href="https://courses.m.academy/courses/set-up-magento-2-development-environment-docker/lectures/9064350" target="_blank">Install a new PHP extension by building a custom Docker image</a>
- <a href="https://courses.m.academy/courses/set-up-magento-2-development-environment-docker/lectures/14780970" target="_blank">Configure multi-store instances in Docker with Nginx</a>
## Usage
This configuration is intended to be used as a Docker-based development environment for Magento 2.
Folders:
- `images`: Docker images for nginx and php
- `compose`: sample setups with Docker Compose
> The Magento 1 version of this development environment has been deprecated and is no longer supported. PHP 5 was used as it's base, and that version has reached end-of-life. If you still wish to use this setup, please reference [compose/magento-1 on tag 20.1.1](https://github.com/markshust/docker-magento/tree/20.1.1/compose/magento-1), but please be aware these images are no longer maintained.
## Prerequisites
This setup assumes you are running Docker on a computer with at least 6GB of RAM allocated to Docker, a dual-core, and an SSD hard drive. [Download & Install Docker Desktop](https://www.docker.com/products/docker-desktop).
This configuration has been tested on Mac & Linux. Windows is supported through the use of Docker on WSL.
## Setup
### Automated Setup (New Project)
```bash
# Create your project directory then go into it:
mkdir -p ~/Sites/magento
cd $_
# Run this automated one-liner from the directory you want to install your project.
curl -s https://raw.githubusercontent.com/markshust/docker-magento/master/lib/onelinesetup | bash -s -- magento.test community 2.4.8-p3
```
The `magento.test` above defines the hostname to use, `community` is the Magento edition, and the `2.4.8-p3` defines the Magento version to install. Note that since we need a write to `/etc/hosts` for DNS resolution, you will be prompted for your system password during setup.
After the one-liner above completes running, you should be able to access your site at `https://magento.test`.
#### Install sample data and development modules
After the above installation is complete, you can initialize the development environment with sample data and dev-related modules with:
```bash
bin/init
```
### Manual Setup
Same result as the one-liner above. Just replace `magento.test` references with the hostname that you wish to use.
#### New Projects
```bash
# Create your project directory then go into it:
mkdir -p ~/Sites/magento
cd $_
# Download the Docker Compose template:
curl -s https://raw.githubusercontent.com/markshust/docker-magento/master/lib/template | bash
# Download the version of Magento you want to use with:
bin/download community 2.4.8-p3
# You can specify the edition (community, enterprise, mageos) and version (2.4.7-p3, 1.0.5, etc.)
# If no arguments are passed in, the edition defaults to "community"
# If no version is specified, it defaults to the most recent version defined in `bin/download`
# or for Magento core development:
# bin/start --no-dev
# bin/setup-composer-auth
# bin/cli git clone git@github.com:magento/magento2.git .
# bin/cli git checkout 2.4-develop
# bin/composer install
# Run the setup installer for Magento:
bin/setup magento.test
# Initialize development environment with sample data and dev-related modules:
bin/init
open https://magento.test
```
#### Existing Projects
```bash
# Create your project directory then go into it:
mkdir -p ~/Sites/magento
cd $_
# Download the Docker Compose template:
curl -s https://raw.githubusercontent.com/markshust/docker-magento/master/lib/template | bash
# Take a backup of your existing database:
bin/mysqldump > ~/Sites/existing/magento.sql
# Replace with existing source code of your existing Magento instance:
cp -R ~/Sites/existing src
# or: git clone git@github.com:myrepo.git src
# Start some containers, copy files to them and then restart the containers:
bin/start --no-dev
bin/copytocontainer --all ## Initial copy will take a few minutes...
# If your vendor directory was empty, populate it with:
bin/composer install
# Import existing database:
bin/mysql < ../existing/magento.sql
# Update database connection details to use the above Docker MySQL credentials:
# Also note: creds for the MySQL server are defined at startup from env/db.env
# vi src/app/etc/env.php
# Import app-specific environment settings:
bin/magento app:config:import
# Create a DNS host entry and setup Magento base url
bin/setup-domain yoursite.test
bin/restart
open https://magento.test
```
### Elasticsearch vs OpenSearch
OpenSearch is set as the default search engine when setting up this project. Follow the instructions below if you want to use Elasticsearch instead:
1. Comment out or remove the `opensearch` container in both the [`compose.yaml`](https://github.com/markshust/docker-magento/blob/master/compose/compose.yaml#L69-L84) and [`compose.healthcheck.yaml`](https://github.com/markshust/docker-magento/blob/master/compose/compose.healthcheck.yaml#L36-L41) files
2. Uncomment the `elasticsearch` container in both the [`compose.yaml`](https://github.com/markshust/docker-magento/blob/master/compose/compose.yaml#L86-L106) and [`compose.healthcheck.yaml`](https://github.com/markshust/docker-magento/blob/master/compose/compose.healthcheck.yaml#L43-L48) files
3. Update the `bin/setup-install` command to use the Elasticsearch rather than OpenSearch. Change:
```
--opensearch-host="$OPENSEARCH_HOST" \
--opensearch-port="$OPENSEARCH_PORT" \
```
to:
```
--elasticsearch-host="$ES_HOST" \
--elasticsearch-port="$ES_PORT" \
```
## Updates
To update your project to the latest version of `docker-magento`, run:
```
bin/update
```
We recommend keeping your docker config files in version control, so you can monitor the changes to files after updates. After reviewing the code updates and ensuring they updated as intended, run `bin/restart` to restart your containers to have the new configuration take effect.
It is recommended to keep your root docker config files in one repository, and your Magento code setup in another. This ensures the Magento base path lives at the top of one specific repository, which makes automated build pipelines and deployments easy to manage, and maintains compatibility with projects such as Magento Cloud.
## Custom CLI Commands
- `bin/analyse`: Run `phpstan analyse` within the container to statically analyse code, passing in directory to analyse. Ex. `bin/analyse app/code`
- `bin/bash`: Drop into the bash prompt of your Docker container. The `phpfpm` container should be mainly used to access the filesystem within Docker.
- `bin/blackfire`: Disable or enable Blackfire. Accepts argument `disable`, `enable`, or `status`. Ex. `bin/blackfire enable`
- `bin/cache-clean`: Access the [cache-clean](https://github.com/mage2tv/magento-cache-clean) CLI. Note the watcher is automatically started at startup in `bin/start`. Ex. `bin/cache-clean config full_page`
- `bin/check-dependencies`: Provides helpful recommendations for dependencies tailored to the chosen Magento version.
- `bin/cli`: Run any CLI command without going into the bash prompt. Ex. `bin/cli ls`
- `bin/clinotty`: Run any CLI command with no TTY. Ex. `bin/clinotty chmod u+x bin/magento`
- `bin/cliq`: The same as `bin/cli`, but pipes all output to `/dev/null`. Useful for a quiet CLI, or implementing long-running processes.
- `bin/composer`: Run the composer binary. Ex. `bin/composer install`
- `bin/configure-linux`: Adds the Docker container's IP address to the system's `/etc/hosts` file if it's not already present. Additionally, it prompts the user to open port 9003 for Xdebug if desired.
- `bin/copyfromcontainer`: Copy folders or files from container to host. Ex. `bin/copyfromcontainer vendor`
- `bin/copytocontainer`: Copy folders or files from host to container. Ex. `bin/copytocontainer --all`
- `bin/create-user`: Create either an admin user or customer account.
- `bin/cron`: Start or stop the cron service. Ex. `bin/cron start`
- `bin/debug-cli`: Enable Xdebug for bin/magento, with an optional argument of the IDE key. Defaults to PHPSTORM Ex. `bin/debug-cli enable PHPSTORM`
- `bin/deploy`: Runs the standard Magento deployment process commands. Pass extra locales besides `en_US` via an optional argument. Ex. `bin/deploy nl_NL`
- `bin/dev-test-run`: Facilitates running PHPUnit tests for a specified test type (e.g., integration). It expects the test type as the first argument and passes any additional arguments to PHPUnit, allowing for customization of test runs. If no test type is provided, it prompts the user to specify one before exiting.
- `bin/dev-urn-catalog-generate`: Generate URN's for PhpStorm and remap paths to local host. Restart PhpStorm after running this command.
- `bin/devconsole`: Alias for `bin/n98-magerun2 dev:console`
- `bin/docker-compose`: Support V1 (`docker-compose`) and V2 (`docker compose`) docker compose command, and use custom configuration files, such as `compose.yml` and `compose.dev.yml`
- `bin/docker-start`: Start the Docker application (either Orbstack or Docker Desktop)
- `bin/docker-stats`: Display container name and container ID, status for CPU, memory usage(in MiB and %), and memory limit of currently-running Docker containers.
- `bin/download`: Download specific Magento version from Composer to the container, with optional arguments of the type ("community" [default], "enterprise", or "mageos") and version ([default] is defined in `bin/download`). Ex. `bin/download mageos` or `bin/download enterprise 2.4.8`
- `bin/ece-patches`: Run the Cloud Patches CLI. Ex: `bin/ece-tools apply`
- `bin/fixowns`: This will fix filesystem ownerships within the container.
- `bin/fixperms`: This will fix filesystem permissions within the container.
- `bin/grunt`: Run the grunt binary. Ex. `bin/grunt exec`
- `bin/init`: Initialize development environment with sample data and dev-related modules.
- `bin/install-php-extensions`: Install PHP extension in the container. Ex. `bin/install-php-extensions sourceguardian`
- `bin/log`: Monitor the Magento log files. Pass no params to tail all files. Ex. `bin/log debug.log`
- `bin/magento`: Run the Magento CLI. Ex: `bin/magento cache:flush`
- `bin/magento-version`: Determine the Magento version installed in the current environment.
- `bin/mftf`: Run the Magento MFTF. Ex: `bin/mftf build:project`
- `bin/mysql`: Run the MySQL CLI with database config from `env/db.env`. Ex. `bin/mysql -e "EXPLAIN core_config_data"` or`bin/mysql < magento.sql`
- `bin/mysqldump`: Backup the Magento database. Ex. `bin/mysqldump > magento.sql`
- `bin/n98-magerun2`: Access the [n98-magerun2](https://github.com/netz98/n98-magerun2) CLI. Ex: `bin/n98-magerun2 dev:console`
- `bin/node`: Run the node binary. Ex. `bin/node --version`
- `bin/npm`: Run the npm binary. Ex. `bin/npm install`
- `bin/phpcbf`: Auto-fix PHP_CodeSniffer errors with Magento2 options. Ex. `bin/phpcbf <path-to-extension>`
- `bin/phpcs`: Run PHP_CodeSniffer with Magento2 options. Ex. `bin/phpcs <path-to-extension>`
- `bin/phpcs-json-report`: Run PHP_CodeSniffer with Magento2 options and save to `report.json` file. Ex. `bin/phpcs-json-report <path-to-extension>`
- `bin/pwa-studio`: (BETA) Start the PWA Studio server. Note that Chrome will throw SSL cert errors and not allow you to view the site, but Firefox will.
- `bin/redis`: Run a command from the redis container. Ex. `bin/redis redis-cli monitor`
- `bin/remove`: Remove all containers.
- `bin/removeall`: Remove all containers, networks, volumes, and images, calling `bin/stopall` before doing so.
- `bin/removenetwork`: Remove a network associated with the current directory's name.
- `bin/removevolumes`: Remove all volumes.
- `bin/restart`: Stop and then start all containers.
- `bin/root`: Run any CLI command as root without going into the bash prompt. Ex `bin/root apt-get install nano`
- `bin/rootnotty`: Run any CLI command as root with no TTY. Ex `bin/rootnotty chown -R app:app /var/www/html`
- `bin/setup`: Run the Magento setup process to install Magento from the source code, with optional domain name. Defaults to `magento.test`. Ex. `bin/setup magento.test`
- `bin/setup-composer-auth`: Setup authentication credentials for Composer.
- `bin/setup-domain`: Setup Magento domain name. Ex: `bin/setup-domain magento.test`
- `bin/setup-grunt`: Install and configure Grunt JavaScript task runner to compile .less files
- `bin/setup-install`: Automates the installation process for a Magento instance.
- `bin/setup-integration-tests`: Script to set up integration tests.
- `bin/setup-pwa-studio`: (BETA) Install PWA Studio (requires NodeJS and Yarn to be installed on the host machine). Pass in your base site domain, otherwise the default `master-7rqtwti-mfwmkrjfqvbjk.us-4.magentosite.cloud` will be used. Ex: `bin/setup-pwa-studio magento.test`.
- `bin/setup-pwa-studio-sampledata`: This script makes it easier to install Venia sample data. Pass in your base site domain, otherwise the default `master-7rqtwti-mfwmkrjfqvbjk.us-4.magentosite.cloud` will be used. Ex: `bin/setup-pwa-studio-sampledata magento.test`.
- `bin/setup-ssl`: Generate an SSL certificate for one or more domains. Ex. `bin/setup-ssl magento.test foo.test`
- `bin/setup-ssl-ca`: Generate a certificate authority and copy it to the host.
- `bin/spx`: Disable or enable output compression to enable or disable SPX. Accepts params `disable` (default) or `enable`. Ex. `bin/spx enable`
- `bin/start`: Start all containers, good practice to use this instead of `docker-compose up -d`, as it may contain additional helpers.
- `bin/status`: Check the container status.
- `bin/stop`: Stop all project containers.
- `bin/stopall`: Stop all docker running containers
- `bin/test/unit`: Run unit tests for a specific path. Ex. `bin/test/unit my-dir`
- `bin/test/unit-coverage`: Generate unit tests coverage reports, saved to the folder `dev/tests/unit/report`. Ex. `bin/test/unit-coverage my-dir`
- `bin/test/unit-xdebug`: Run unit tests with Xdebug. Ex. `bin/test/unit-xdebug my-dir`
- `bin/update`: Update your project to the most recent version of `docker-magento`.
- `bin/xdebug`: Set a custom xdebug.mode (Ex. `bin/xdebug debug`) or check the current status and get all available modes (Ex. `bin/xdebug`)
## Misc Info
### Install fails because project directory is not empty
The most common issue with a failed docker-magento install is getting this error:
```
Project directory "/var/www/html/." is not empty error
```
This message occurs when _something_ fails to execute correctly during an install, and a subsequent install is re-attempted. Unfortunately, when attempting a second (or third) install, it's possible the `src` directory is no longer empty. This prevents Composer from creating the new project because it needs to create new projects within an empty directory.
The workaround to this is that once you have fixed the issue that was initially preventing your install from completing, you will need to completely remove the assets from the previously attempted install before attempting a subsequent install.
You can do this by running:
```
bin/removeall
cd ..
rm -rf yourproject
```
Then, create your new project directory again so you can attempt the install process again. The `bin/removeall` command removes all previous Docker containers & volumes related to the specific project directory you are within. You can then attempt the install process again.
### Accessing the Magento Backend
After successfully installing the Magento environment, you can access the backend by following these steps:
1. Open your web browser and go to the following URL: `https://magento.test/admin/`.
2. Use the following default credentials to log in:
- **Username:** `john.smith`
- **Password:** `password123`
3. Upon logging in, you might be prompted to configure Two-Factor Authentication (2FA). This emails you a code to log in with (which you can check with Mailcatcher by visiting `http://{yourdomain}:1080`). By default, the email address used for this purpose is:
- **Email:** `john.smith@gmail.com`
If you are testing in a local development environment and wish to disable 2FA, you can do so by installing [Mark's DisableTwoFactorAuth module](https://github.com/markshust/magento2-module-disabletwofactorauth).
### Caching
For an improved developer experience, caches are automatically refreshed when related files are updated, courtesy of [cache-clean](https://github.com/mage2tv/magento-cache-clean). This means you can keep all of the standard Magento caches enabled, and this script will only clear the specific caches needed, and only when necessary.
To disable this functionality, uncomment the last line in the `bin/start` file to disable the watcher.
### Database
The hostname of each service is the name of the service within the `compose.yaml` file. So for example, MySQL's hostname is `db` (not `localhost`) when accessing it from within a Docker container. Elasticsearch's hostname is `elasticsearch`.
To connect to the MySQL CLI tool of the Docker instance, run:
```
bin/mysql
```
You can use the `bin/mysql` script to import a database, for example a file stored in your local host directory at `magento.sql`:
```
bin/mysql < magento.sql
```
You also can use `bin/mysqldump` to export the database. The file will appear in your local host directory at `magento.sql`:
```
bin/mysqldump > magento.sql
```
> Getting an "Access denied, you need (at least one of) the SUPER privilege(s) for this operation." message when running one of the above lines? Try running it as root with:
> ```
> bin/clinotty mysql -hdb -uroot -pmagento magento < src/backup.sql
> ```
> You can also remove the DEFINER lines from the MySQL backup file with:
> ```
> sed 's/\sDEFINER=`[^`]*`@`[^`]*`//g' -i src/backup.sql
> ```
### Composer Authentication
First setup Magento Marketplace authentication (details in the [DevDocs](https://experienceleague.adobe.com/en/docs/commerce-operations/installation-guide/prerequisites/authentication-keys)).
Copy `src/auth.json.sample` to `src/auth.json`. Then, update the username and password values with your Magento public and private keys, respectively. Finally, copy the file to the container by running `bin/copytocontainer auth.json`.
### Email / Mailcatcher
View emails sent locally through Mailcatcher by visiting [http://{yourdomain}:1080](http://{yourdomain}:1080). In order to use mailcatcher, set the mailserver host to `mailcatcher` and set port to `1025`. Note that this port (`1025`) is different from the mailcatcher interface to read the emails (`1080`).
### Redis
Redis is now the default cache and session storage engine, and is automatically configured & enabled when running `bin/setup` on new installs.
Use the following lines to enable Redis on existing installs:
**Enable for Cache:**
`bin/magento setup:config:set --cache-backend=redis --cache-backend-redis-server=redis --cache-backend-redis-db=0`
**Enable for Full Page Cache:**
`bin/magento setup:config:set --page-cache=redis --page-cache-redis-server=redis --page-cache-redis-db=1`
**Enable for Session:**
`bin/magento setup:config:set --session-save=redis --session-save-redis-host=redis --session-save-redis-log-level=4 --session-save-redis-db=2`
You may also monitor Redis by running: `bin/redis redis-cli monitor`
For more information about Redis usage with Magento, <a href="https://devdocs.magento.com/guides/v2.4/config-guide/redis/redis-session.html" target="_blank">see the DevDocs</a>.
### PhpMyAdmin
PhpMyAdmin is built into the `compose.dev.yaml` file. Simply open `http://localhost:8080` in a web browser.
These credentials can be used to log in to PhpMyAdmin:
- **Username:** `magento`
- **Password:** `magento`
### Xdebug & VS Code
Install and enable the PHP Debug extension from the [Visual Studio Marketplace](https://marketplace.visualstudio.com/items?itemName=felixfbecker.php-debug).
Otherwise, this project now automatically sets up Xdebug support with VS Code. If you wish to set this up manually, please see the [`.vscode/launch.json`](https://github.com/markshust/docker-magento/blame/master/compose/.vscode/launch.json) file.
### Xdebug & VS Code in a WSL2 environment
Install and enable the PHP Debug extension from the [Visual Studio Marketplace](https://marketplace.visualstudio.com/items?itemName=felixfbecker.php-debug).
Otherwise, this project now automatically sets up Xdebug support with VS Code. If you wish to set this up manually, please see the [`.vscode/launch.json`](https://github.com/markshust/docker-magento/blame/master/compose/.vscode/launch.json) file.
1. In VS Code, make sure that it's running in a WSL window, rather than in the default window.
2. Install the [`PHP Debug`](https://marketplace.visualstudio.com/items?itemName=xdebug.php-debug) extension on VS Code.
3. Create a new configuration file inside the project. Go to the `Run and Debug` section in VS Code, then click on `create a launch.json file`.
4. Attention to the following configs inside the file:
* The port must be the same as the port on the xdebug.ini file.
```bash
bin/cli cat /usr/local/etc/php/php.ini
```
```bash
memory_limit = 4G
max_execution_time = 1800
zlib.output_compression = On
cgi.fix_pathinfo = 0
date.timezone = UTC
xdebug.mode = debug
xdebug.client_host = host.docker.internal
xdebug.idekey = PHPSTORM
xdebug.client_port=9003
#You can uncomment the following line to force the debug with each request
#xdebug.start_with_request=yes
upload_max_filesize = 100M
post_max_size = 100M
max_input_vars = 10000
```
* The pathMappings should have the same folder path as the project inside the Docker container.
```json
{
"version": "0.2.0",
"configurations": [
{
"name": "Listen for XDebug",
"type": "php",
"request": "launch",
"port": 9003,
"pathMappings": {
"/var/www/html": "${workspaceFolder}"
},
"hostname": "localhost"
}
]
}
```
5. Run the following command in the Windows Powershell. It allows WSL through the firewall, otherwise breakpoints might not be hitten.
```powershell
New-NetFirewallRule -DisplayName "WSL" -Direction Inbound -InterfaceAlias "vEthernet (WSL)" -Action Allow
```
### Xdebug & PhpStorm
1. First, install the [Chrome Xdebug helper](https://chrome.google.com/webstore/detail/xdebug-helper/eadndfjplgieldjbigjakmdgkmoaaaoc). After installed, right click on the Chrome icon for it and go to Options. Under IDE Key, select PhpStorm from the list to set the IDE Key to "PHPSTORM", then click Save.
2. Next, enable Xdebug debugging in the PHP container by running: `bin/xdebug enable`.
3. Then, open `PhpStorm > Preferences > PHP` and configure:
* `CLI Interpreter`
* Create a new interpreter from the `From Docker, Vagrant, VM...` list.
* Select the Docker Compose option.
* For Server, select `Docker`. If you don't have Docker set up as a server, create one and name it `Docker`.
* For Configuration files, add both the `compose.yaml` and `compose.dev.yaml` files from your project directory.
* For Service, select `phpfpm`, then click OK.
* Name this CLI Interpreter `phpfpm`, then click OK again.
* `Path mappings`
* There is no need to define a path mapping in this area.
4. Open `PhpStorm > Preferences > PHP > Debug` and ensure Debug Port is set to `9000,9003`.
5. Open `PhpStorm > Preferences > PHP > Servers` and create a new server:
* For the Name, set this to the value of your domain name (ex. `magento.test`).
* For the Host, set this to the value of your domain name (ex. `magento.test`).
* Keep port set to `80`.
* Check the "Use path mappings" box and map `src` to the absolute path of `/var/www/html`.
6. Go to `Run > Edit Configurations` and create a new `PHP Remote Debug` configuration.
* Set the Name to the name of your domain (ex. `magento.test`).
* Check the `Filter debug connection by IDE key` checkbox, select the Server you just setup.
* For IDE key, enter `PHPSTORM`. This value should match the IDE Key value set by the Chrome Xdebug Helper.
* Click OK to finish setting up the remote debugger in PHPStorm.
7. Open up `pub/index.php` and set a breakpoint near the end of the file.
* Start the debugger with `Run > Debug 'magento.test'`, then open up a web browser.
* Ensure the Chrome Xdebug helper is enabled by clicking on it and selecting Debug. The icon should turn bright green.
* Navigate to your Magento store URL, and Xdebug should now trigger the debugger within PhpStorm at the toggled breakpoint.
### SSH
Since version `40.0.0`, this project supports connecting to Docker with SSH/SFTP. This means that if you solely use either PhpStorm or VSCode, you no longer need to selectively mount host volumes in order to gain bi-directional sync capabilities from host to container. This will enable full speed in the native filesystem, as all files will be stored directly in the `appdata` container volume, rather than being synced from the host. This is especially useful if you'd like to sync larger directories such as `generated`, `pub` & `vendor`.
Copy `compose.dev-ssh.yaml` to `compose.dev.yaml` before installing Magento to take advantage of this setup. Then, create an SFTP connection at Preferences -> Build, Execution, Deployment -> Deployment. Connect to `localhost` and use `app` for the username & password. You can set additional options for working with Magento in PhpStorm at Preferences -> Build, Execution, Deployment -> Deployment -> Options.
Note that you must use your IDE's SSH/SFTP functionality, otherwise changes will not be synced. To re-sync your host environment at any time, run:
```
bin/copyfromcontainer --all
```
### Linux
Running Docker on Linux should be pretty straight-forward. Note that you need to run some [post install commands](https://docs.docker.com/install/linux/linux-postinstall/) as well as [installing Docker Compose](https://docs.docker.com/compose/install/) before continuing. These steps are taken care of automatically with Docker Desktop, but not on Linux.
Copy `compose.dev-linux.yaml` to `compose.dev.yaml` before installing Magento to take advantage of this setup.
#### Install necessary dependencies
To ensure proper functionality, the docker-magento setup requires a few system dependencies to be installed on Linux. To install these dependencies, please execute the following command from the terminal:
```
sudo apt install curl libnss3-tools unzip rsync
```
#### The host.docker.internal hostname
The `host.docker.internal` hostname is used on Docker for Mac/Windows to reference the Docker daemon. On Linux, this hostname does not exist.
This hostname is [hard-coded in the php.ini file](images/php/8.1/conf/php.ini#L8). To make this hostname resolve, add `"host.docker.internal:172.17.0.1"` to the `app.extra_hosts` parameter of `compose.yaml`, replacing `172.17.0.1` with the result of:
```
docker run --rm alpine ip route | awk 'NR==1 {print $3}'
```
You must also create a new entry in your `/etc/hosts` file using the same IP:
```
172.17.0.1 host.docker.internal
```
#### Extra settings
To enable Xdebug on Linux, you may also need to open port 9003 on the firewall by running:
```
sudo iptables -A INPUT -p tcp --dport 9003 -j ACCEPT
```
You may also have to increase a virtual memory map count on the host system which is required by [Elasticsearch](https://www.elastic.co/guide/en/elasticsearch/reference/current/vm-max-map-count.html).
Add the following line to the `/etc/sysctl.conf` file on your host:
```
vm.max_map_count=262144
```
### Blackfire.io
These docker images have built-in support for Blackfire.io. To use it, first register your server ID and token with the Blackfire agent:
```
bin/root blackfire-agent --register --server-id={YOUR_SERVER_ID} --server-token={YOUR_SERVER_TOKEN}
```
Next, open up the `bin/start` helper script and uncomment the line:
```
#bin/root /etc/init.d/blackfire-agent start
```
Finally, restart the containers with `bin/restart`. After doing so, everything is now configured and you can use a browser extension to profile your Magento store with Blackfire.
### Cloudflare Tunnel
These docker images have built-in support for Cloudflare Tunnel. It can be useful for testing implementations that require some third-party integrations involving allow-listing domains. Since your local app cannot be allow-listed by other services, you can use Cloudflare Tunnel to get a public hostname that can be allow-listed on the other service.
To use it:
- First, create a tunnel in Cloudflare Zero Trust and add the token to `env/cloudflare.env`.
- Next, uncomment Cloudflare Tunnel section in main `compose.yaml`.
- Finally, restart the containers with `bin/restart`.
In Cloudflare Tunnel configuration, configure the service URL to use type `HTTPS` and a URL of `{name of app container}:{HTTPS port of app container}`. For examplem, `demo-app-1:8443`. Enable the `No TLS Verify` option, since our local certificates are self-signed. You should now be able to access your app via the public hostname defined in Cloudflare Tunnel.
NOTE: Do not leave instances with Cloudflare Tunnel enabled running long-term, as your instance is publicly available to the world. You should ideally turn off tunnel container once testing is finished.
### MFTF
To work with MFTF you will need to first enable the `selenium` image in the `compose.dev.yaml` file. Then, you will need to run the following.
1. Run mftf build process `bin/mftf build:project`. This should build the basic setup for mftf in your project.
2. Update the `extra_host` values to match your Magento URL and IP in `compose.dev.yaml`.
3. Update the values in `src/dev/tests/acceptance/.env`, including adding the new line `SELENIUM_HOST=selenium` to define the host Codeception should connect to.
4. Run a sample test `bin/mftf run:test AdminLoginSuccessfulTest`.
5. Update your `nginx.conf` file to allow access to the dev section with the following, before the final `deny all` section:
```
location ~* ^/dev/tests/acceptance/utils($|/) {
root $MAGE_ROOT;
location ~ ^/dev/tests/acceptance/utils/command.php {
fastcgi_pass fastcgi_backend;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
```
For debugging, you can connect to the selenium image using a VCN client.
- Connect with the VCN option and `127.0.0.1:5900`, (default password: `secret`)
- Run `bin/mftf doctor` to validate all sections are setup correctly.
Find more info [here](https://devdocs.magento.com/mftf/docs/getting-started.html) about mftf configuration.
### Grunt + LiveReload for Frontend Development
#### Create a new theme and make it active
Create your new theme at `app/design/frontend/VendorName/theme-name`, with the related `composer.json`, `registration.php` and `theme.xml` files.
Make your new theme active at Admin > Content > Design > Configuration. Click the Edit button next to Global Scope, and set the Applied Theme to your new theme name, and click Save Configuration.
#### Load the LiveReload client file
To create a connection to LiveReload, you'll need to insert the LiveReload script into your theme. You can do this by creating a file in your theme at `Magento_Theme/layout/default_head_blocks.xml` with the contents:
```xml
<?xml version="1.0"?>
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
<head>
<script defer="true" src="/livereload.js?port=443" src_type="url"/>
</head>
</page>
```
The "?port=443" parameter is important, otherwise the `livereload.js` script won't work.
While we're at it, let's also create an initial LESS file so we have something to test. Create a new file in your theme at `web/css/source/_extend.less` with the contents:
```css
body {
background: white;
}
```
You'll need to clear the Magento cache to enable your module, and make sure this layout XML update is properly loaded.
Your new theme should now be active at `https://yourdomain.test`. Since this is a new theme, it should appear the same as the parent theme defined in your theme.xml file, which is usually Blank.
#### Set up Grunt
Run `bin/setup-grunt`. This will set up the Grunt configuration files for your new theme. It's important to run this step after setting up your new theme, not before.
#### Start the Grunt watcher
Grunt can watch for filesystem changes by running `bin/grunt watch`. You can optionally pass in the `--verbose` or `-v` flag to toggle verbose mode on. This will let you know what's going on under the hood, so you can be sure it is compiling & watching the correct files, and updating them as changes are made.
#### LiveReload Browser extension
Running the `grunt watch` process also spawns the LiveReload server. Your browser needs to connect to this server, and this is done by installing the [LiveReload browser extension](https://chrome.google.com/webstore/detail/livereload/jnihajbhpnppcggbcgedagnkighmdlei?hl=en).
In your browser, be sure to also open the Google Chrome Dev Tools, go to the Network tab, and click "Disable cache". This will ensure the browser does not long-cache static file assets, such as JavaScript & CSS files, which is important during development.
Ensure the LiveReload browser icon has been toggled on, and refresh the page. We can confirm the LiveReload script is loaded by going to the Network tab and ensuring the `livereload.js` file is loaded, and that it also spawns off a new websocket request to `/livereload`.
#### Test LiveReload
Since this is all set, let's update the CSS file to a different background color:
```css
body {
background: blue;
}
```
Upon saving this file, we will see the Grunt watcher detect the changes, and your browser should automatically load the new style without you needing to refresh the page, and without a full browser refresh.
### PHP-SPX
The images also have additional profiler-tracers built-in to the <a href="https://github.com/NoiseByNorthwest/php-spx/tree/master#web-ui" target="_blank">Web UI.</a>
To access the control panel, just open the following URL: `https://magento.test/?SPX_UI_URI=/`
**Suggested Configuration**
- Enabled: Checked
- Automatic start: Checked
- Profile internal functions: Unchecked
- Sampling: 5ms
- Max profiling depth: Unlimited
- Additional metrics: Unselected
Changing any options on this page set cookies for the domain for these settings. After then visiting a page on the frontend, you can navigate back to the GUI and scroll to the bottom of the page, and click the related request to view the trace of the request & response.
Profiling is also possible via command line, or curl:
```
SPX_REPORT=full SPX_ENABLED=1 SPX_SAMPLING_PERIOD=5000 bin/magento {command_name}
curl --cookie "SPX_REPORT=full; SPX_ENABLED=1; SPX_SAMPLING_PERIOD=5000" https://magento.test/
```
Additional information of how to work with SPX is available at https://www.youtube.com/watch?v=xk-JiBLsKfA
## Known Issues
There are currently no large known issues or workarounds needed to use docker-magento with your Magento project. If you find any, please [report them](https://github.com/markshust/docker-magento/issues)!
## Alternatives
### Mappia
If you love using `docker-magento` for local development and are starting to think about how to run Magento in production, [Mappia](https://www.mappia.io/) may be a great next step.
[Mappia](https://www.mappia.io/) is a production-grade tool for deploying Magento onto Kubernetes. It takes the same container-first approach you’re already using locally and extends it to scalable, secure, and repeatable deployments in the cloud—without forcing you to re-architect your application.
If `docker-magento` helps you build Magento locally, [Mappia](https://www.mappia.io/) helps you operate it confidently in production—using the same container mindset, just at production scale.
## Credits
### M.academy
This course is sponsored by <a href="https://m.academy" target="_blank">M.academy</a>, the simplest way to learn Magento.
<a href="https://m.academy" target="_blank"><img src="docs/macademy-logo.png" alt="M.academy"></a>
### Mark Shust
My name is Mark Shust and I'm the creator of this repo. I'm a <a href="https://www.credly.com/users/mark-shust/badges" target="_blank">6X Adobe Commerce Certified Developer</a> and have been involved with Magento since the early days (v0.8!). I create technical education courses full-time for my company, <a href="https://m.academy" target="_blank">M.academy</a>.
- <a href="https://m.academy/courses" target="_blank">🖥️ See my Magento lessons & courses</a>
- <a href="https://m.academy/articles" target="_blank">📖 Read my technical articles</a>
- <a href="https://youtube.com/markshust" target="_blank">🎥 Watch my YouTube videos</a>
- <a href="https://www.linkedin.com/in/MarkShust/" target="_blank">🔗 Connect on LinkedIn</a>
- <a href="https://twitter.com/MarkShust" target="_blank">🐦 Follow me on X</a>
- <a href="mailto:mark@m.academy">💌 Contact me</a>
## License
[MIT](https://opensource.org/licenses/MIT)
================================================
FILE: compose/.gitignore
================================================
src/
================================================
FILE: compose/.vscode/launch.json
================================================
{
"configurations": [
{
"name": "Listen for XDebug",
"type": "php",
"request": "launch",
"pathMappings": {
"/var/www/html": "${workspaceFolder}"
},
"port": 9003,
}
]
}
================================================
FILE: compose/Makefile
================================================
SHELL := /usr/bin/env bash
args = `arg="$(filter-out $(firstword $(MAKECMDGOALS)),$(MAKECMDGOALS))" && echo $${arg:-${1}}`
green = $(shell printf "\e[32;01m$1\e[0m")
yellow = $(shell printf "\e[33;01m$1\e[0m")
red = $(shell printf "\e[33;31m$1\e[0m")
format = $(shell printf "%-40s %s" "$(call green,bin/$1)" $2)
comma:= ,
.DEFAULT_GOAL:=help
%:
@:
help:
@echo ""
@echo "$(call yellow,Use the following CLI commands:)"
@echo "$(call red,===============================)"
@echo "$(call format,analyse,'Run \`phpstan analyse\` within the container to statically analyse code$(comma) passing in directory to analyse.')"
@echo "$(call format,bash,'Drop into the bash prompt of your Docker container.')"
@echo "$(call format,blackfire,'Disable or enable Blackfire. Accepts argument \`disable\`$(comma) \`enable\`$(comma) or \`status\`.')"
@echo "$(call format,cache-clean,'Access the cache-clean CLI.')"
@echo "$(call format,check-dependencies,'Provides helpful recommendations for dependencies.')"
@echo "$(call format,cli,'Run any CLI command without going into the bash prompt.')"
@echo "$(call format,clinotty,'Run any CLI command with no TTY.')"
@echo "$(call format,cliq,'Run any CLI command but pipe all output to /dev/null.')"
@echo "$(call format,composer,'Run the composer binary.')"
@echo "$(call format,configure-linux,'Adds the Docker container IP address to /etc/hosts if not already present. Optionally enables port 9003 for Xdebug.')"
@echo "$(call format,copyfromcontainer,'Copy folders or files from container to host.')"
@echo "$(call format,copytocontainer,'Copy folders or files from host to container.')"
@echo "$(call format,create-user,'Create either an admin user or customer account.')"
@echo "$(call format,cron,'Start or stop the cron service.')"
@echo "$(call format,debug-cli,'Enable Xdebug for bin/magento$(comma) with an optional argument of the IDE key. Defaults to PHPSTORM.')"
@echo "$(call format,deploy,'Runs the standard Magento deployment process commands. Pass extra locales besides \`en_US\` via an optional argument.')"
@echo "$(call format,dev-test-run,'Facilitates running PHPUnit tests for a specified test type.')"
@echo "$(call format,dev-urn-catalog-generate,'Generate URNs for PHPStorm and remap paths to local host.')"
@echo "$(call format,devconsole,'Alias for n98-magerun2 dev:console.')"
@echo "$(call format,docker-compose,'Support V1 (\`docker-compose\`) and V2 (\`docker compose\`) docker compose command$(comma) and use custom configuration files.')"
@echo "$(call format,docker-start,'Start the Docker application (either Orbstack or Docker Desktop).')"
@echo "$(call format,docker-stats,'Display status for CPU$(comma) memory usage$(comma) and memory limit of currently-running Docker containers.')"
@echo "$(call format,download,'Download & extract specific Magento version to the src directory.')"
@echo "$(call format,ece-patches,'Run the Cloud Patches CLI.')"
@echo "$(call format,fixowns,'This will fix filesystem ownerships within the container.')"
@echo "$(call format,fixperms,'This will fix filesystem permissions within the container.')"
@echo "$(call format,grunt,'Run the grunt binary.')"
@echo "$(call format,init,'Initialize development environment with sample data and dev-related modules.')"
@echo "$(call format,install-php-extensions,'Install PHP extension in the container.')"
@echo "$(call format,log,'Monitor the Magento log files. Pass no params to tail all files.')"
@echo "$(call format,magento,'Run the Magento CLI.')"
@echo "$(call format,magento-version,'Determine the Magento version installed in the current environment.')"
@echo "$(call format,mftf,'Run the Magento MFTF.')"
@echo "$(call format,mysql,'Run the MySQL CLI with database config from env/db.env.')"
@echo "$(call format,mysqldump,'Backup the Magento database.')"
@echo "$(call format,n98-magerun2,'Access the n98-magerun2 CLI.')"
@echo "$(call format,node,'Run the node binary.')"
@echo "$(call format,npm,'Run the npm binary.')"
@echo "$(call format,phpcbf,'Auto-fix PHP_CodeSniffer errors with Magento2 options.')"
@echo "$(call format,phpcs,'Run PHP_CodeSniffer with Magento2 options.')"
@echo "$(call format,phpcs-json-report,'Run PHP_CodeSniffer with Magento2 options and save to \`report.json\` file.')"
@echo "$(call format,pwa-studio,'(BETA) Start the PWA Studio server.')"
@echo "$(call format,redis,'Run a command from the redis container.')"
@echo "$(call format,remove,'Remove all containers.')"
@echo "$(call format,removeall,'Remove all containers$(comma) networks$(comma) volumes and images.')"
@echo "$(call format,removenetwork,'Remove a network associated with the current directory name.')"
@echo "$(call format,removevolumes,'Remove all volumes.')"
@echo "$(call format,restart,'Stop and then start all containers.')"
@echo "$(call format,root,'Run any CLI command as root without going into the bash prompt.')"
@echo "$(call format,rootnotty,'Run any CLI command as root with no TTY.')"
@echo "$(call format,setup,'Run the Magento setup process$(comma) with optional domain name.')"
@echo "$(call format,setup-composer-auth,'Setup authentication credentials for Composer.')"
@echo "$(call format,setup-domain,'Setup Magento domain name.')"
@echo "$(call format,setup-grunt,'Install and configure Grunt JavaScript task runner.')"
@echo "$(call format,setup-install,'Automates the installation process for a Magento instance.')"
@echo "$(call format,setup-integration-tests,'Script to set up integration tests.')"
@echo "$(call format,setup-pwa-studio,'(BETA) Install PWA Studio.')"
@echo "$(call format,setup-pwa-studio-sampledata,'This script makes it easier to install Venia sample data.')"
@echo "$(call format,setup-ssl,'Generate an SSL certificate for one or more domains.')"
@echo "$(call format,setup-ssl-ca,'Generate a certificate authority and copy it to the host.')"
@echo "$(call format,spx,'Disable or enable output compression to enable or disable SPX.')"
@echo "$(call format,start,'Start all containers.')"
@echo "$(call format,status,'Check the container status.')"
@echo "$(call format,stop,'Stop all project containers.')"
@echo "$(call format,stopall,'Stop all docker running containers.')"
@echo "$(call format,test,'Run unit tests for a specific path.')"
@echo "$(call format,update,'Update your project to the latest version of docker-magento.')"
@echo "$(call format,xdebug,'Set a custom xdebug.mode$(comma) or check the current status and get all available modes . Accepts optional argument of mode \`off\`$(comma) \`debug\`$(comma) etc.')"
analyse:
@./bin/analyse $(call args)
bash:
@./usr/bin/env bash
cache-clean:
@./bin/cache-clean $(call args)
check-dependencies:
@./bin/check-dependencies
cli:
@./bin/cli $(call args)
clinotty:
@./bin/clinotty $(call args)
cliq:
@./bin/cliq $(call args)
composer:
@./bin/composer $(call args)
configure-linux:
@./bin/configure-linux
copyfromcontainer:
@./bin/copyfromcontainer $(call args)
copytocontainer:
@./bin/copytocontainer $(call args)
cron:
@./bin/cron $(call args)
debug-cli:
@./bin/debug-cli $(call args)
deploy:
@./bin/deploy $(call args)
dev-test-run:
@./bin/dev-test-run
dev-urn-catalog-generate:
@./bin/dev-urn-catalog-generate
devconsole:
@./bin/devconsole
docker-compose:
@./bin/docker-compose
docker-stats:
@./bin/docker-stats
download:
@./bin/download $(call args)
fixowns:
@./bin/fixowns $(call args)
fixperms:
@./bin/fixperms $(call args)
grunt:
@./bin/grunt $(call args)
install-php-extensions:
@./bin/install-php-extensions $(call args)
log:
@./bin/log $(call args)
magento:
@./bin/magento $(call args)
magento-version:
@./bin/magento-version
mftf:
@./bin/mftf $(call args)
mysql:
@./bin/mysql $(call args)
mysqldump:
@./bin/mysqldump $(call args)
n98-magerun2:
@./bin/n98-magerun2 $(call args)
node:
@./bin/node $(call args)
npm:
@./bin/npm $(call args)
phpcbf:
@./bin/phpcbf $(call args)
phpcs:
@./bin/phpcs $(call args)
phpcs-json-report:
@./bin/phpcs-json-report $(call args)
pwa-studio:
@./bin/pwa-studio
redis:
@./bin/redis $(call args)
remove:
@./bin/remove
removeall:
@./bin/removeall
removenetwork:
@./bin/removenetwork
removevolumes:
@./bin/removevolumes
restart:
@./bin/restart $(call args)
root:
@./bin/root $(call args)
rootnotty:
@./bin/rootnotty $(call args)
setup:
@./bin/setup $(call args)
setup-composer-auth:
@./bin/setup-composer-auth
setup-domain:
@./bin/setup-domain $(call args)
setup-grunt:
@./bin/setup-grunt
setup-install:
@./bin/setup-install $(call args)
setup-integration-tests:
@./bin/setup-integration-tests
setup-pwa-studio:
@./bin/setup-pwa-studio $(call args)
setup-pwa-studio-sampledata:
@./bin/setup-pwa-studio-sampledata $(call args)
setup-ssl:
@./bin/setup-ssl $(call args)
setup-ssl-ca:
@./bin/setup-ssl-ca
spx:
@./bin/spx $(call args)
start:
@./bin/start $(call args)
status:
@./bin/status
stop:
@./bin/stop $(call args)
stopall:
@./bin/stopall $(call args)
update:
@./bin/update
xdebug:
@./bin/xdebug $(call args)
================================================
FILE: compose/bin/analyse
================================================
#!/usr/bin/env bash
bin/cli vendor/bin/phpstan analyse "$@"
================================================
FILE: compose/bin/bash
================================================
#!/usr/bin/env bash
bin/cli bash
================================================
FILE: compose/bin/blackfire
================================================
#!/usr/bin/env bash
S=$(bin/clinotty cat /usr/local/etc/php/conf.d/blackfire.ini | grep -iGc '\;extension=blackfire.so');
blackfire_status() {
if [[ $S == 1 ]]; then
echo "Blackfire is disabled."
else
echo "Blackfire is enabled."
fi
}
blackfire_toggle() {
if [[ $S == 1 ]]; then
blackfire_enable
else
blackfire_disable
fi
}
blackfire_enable() {
if [[ $S == 1 ]]; then
bin/root sed -i -e 's/^;extension=blackfire.so/extension=blackfire.so/g' /usr/local/etc/php/conf.d/blackfire.ini
sleep 1
bin/restart phpfpm
echo "Blackfire has been enabled."
else
echo "Blackfire is already enabled."
fi
}
blackfire_disable() {
if [[ $S == 0 ]]; then
bin/root sed -i -e 's/^extension=blackfire.so/;extension=blackfire.so/g' /usr/local/etc/php/conf.d/blackfire.ini
sleep 1
bin/restart phpfpm
echo "Blackfire has been disabled."
else
echo "Blackfire is already disabled."
fi
}
firstArgLetter="$(echo "$1" | head -c 1)"
if [[ $firstArgLetter == "d" ]]; then
blackfire_disable
elif [[ $firstArgLetter == "e" ]]; then
blackfire_enable
elif [[ $firstArgLetter == "t" ]]; then
blackfire_toggle
elif [[ $firstArgLetter == "s" ]]; then
blackfire_status
else
printf "Please specify either 'disable', 'enable', 'status' or 'toggle' as an argument.\nEx: bin/blackfire status\n"
fi
================================================
FILE: compose/bin/cache-clean
================================================
#!/usr/bin/env bash
COMPOSER_GLOBAL=/var/www/.composer-global
CACHE_CLEAN=${COMPOSER_GLOBAL}/vendor/bin/cache-clean.js
if ! bin/cliq ls $CACHE_CLEAN; then
echo "Installing devtools metapackage, just a moment..."
bin/cliq mkdir -p ${COMPOSER_GLOBAL}
bin/composer require --working-dir=${COMPOSER_GLOBAL} --quiet markshust/magento2-metapackage-devtools-cli:^1.0
echo "Devtools installed."
fi
if [ "$1" == "--watch" ]; then
# Kill duplicate watch process
WATCH_PID=$(bin/clinotty ps -eaf | grep "$CACHE_CLEAN --quiet --watch" | grep -v grep | awk '{print $2}')
if [[ "" != "$WATCH_PID" ]]; then
bin/cliq kill -9 "$WATCH_PID"
fi
# Run watch mode in the background
bin/cliq $CACHE_CLEAN --quiet --watch &
else
bin/cli $CACHE_CLEAN "$@"
fi
================================================
FILE: compose/bin/check-dependencies
================================================
#!/usr/bin/env bash
# Define colors for formatting
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[0;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# Function to display the script header
show_header() {
echo -e "${GREEN}============================================${NC}"
echo -e "${GREEN} Magento 2 System Requirements Checker${NC}"
echo -e "${GREEN}============================================${NC}"
echo
}
# Function to display version groups
show_version_groups() {
echo -e "${BLUE}Available Magento version groups:${NC}"
echo "1) 2.4.7.x (2.4.7, 2.4.7-p1, 2.4.7-p2, 2.4.7-p3)"
echo "2) 2.4.6.x (2.4.6 through 2.4.6-p8)"
echo "3) 2.4.5.x (2.4.5 through 2.4.5-p10)"
echo "4) 2.4.4.x (2.4.4 through 2.4.4-p11)"
echo "5) 2.4.3.x (2.4.3-p3)"
echo "6) 2.4.2.x (2.4.2-p2)"
echo
}
# Function to display requirements for a specific version group
show_requirements() {
local version_group=$1
echo -e "${GREEN}System Requirements for Magento ${version_group}:${NC}"
echo -e "${YELLOW}Required Components:${NC}"
case $version_group in
"2.4.7.x")
echo "• PHP: 8.3, 8.2"
echo "• Composer: 2.7"
echo "• Database:"
echo " - MySQL: 8.0"
echo " - MariaDB: 10.6"
echo "• Search: "
echo " - Elasticsearch: 8.11"
echo " - OpenSearch: 2.12"
echo "• Cache/Session:"
echo " - Redis: 7.2"
echo "• Message Queue:"
echo " - RabbitMQ: 3.13"
echo "• Web Server:"
echo " - Apache: 2.4"
echo " - Nginx: 1.24"
echo "• Varnish: 7.5"
echo -e "${BLUE}Supported AWS Services:${NC}"
echo "• Aurora (MySQL): 8.0"
echo "• S3: ✔️"
echo "• MQ: 3.11.20"
echo "• ElastiCache: Redis7.0"
echo "• OpenSearch: 2.11"
;;
"2.4.6.x")
echo "• PHP: 8.2, 8.1"
echo "• Composer: 2.2"
echo "• Database:"
echo " - MySQL: 8.0"
echo " - MariaDB: 10.6"
echo "• Search: "
echo " - Elasticsearch: 8.11, 7.17"
echo " - OpenSearch: 2.12"
echo "• Cache/Session:"
echo " - Redis: 7.0"
echo "• Message Queue:"
echo " - RabbitMQ: 3.13"
echo "• Web Server:"
echo " - Apache: 2.4"
echo " - Nginx: 1.24"
echo "• Varnish: 7.5"
echo -e "${BLUE}Supported AWS Services:${NC}"
echo "• Aurora (MySQL): 8.0"
echo "• S3: ✔️"
echo "• MQ: 3.9.16"
echo "• ElastiCache: Redis6.2"
echo "• OpenSearch: 1.2"
;;
"2.4.5.x")
echo "• PHP: 8.1"
echo "• Composer: 2.2"
echo "• Database:"
echo " - MySQL: 8.0"
echo " - MariaDB: 10.4"
echo "• Search: "
echo " - Elasticsearch: 7.17"
echo " - OpenSearch: 1.2"
echo "• Cache/Session:"
echo " - Redis: 6.2"
echo "• Message Queue:"
echo " - RabbitMQ: 3.11, 3.9"
echo "• Web Server:"
echo " - Apache: 2.4"
echo " - Nginx: 1.24"
echo "• Varnish: 7.3"
echo -e "${BLUE}Supported AWS Services:${NC}"
echo "• Aurora (MySQL): 8.0"
echo "• S3: ✔️"
echo "• MQ: 3.9.13"
echo "• ElastiCache: Redis6"
echo "• OpenSearch: 1.2"
;;
"2.4.4.x")
echo "• PHP: 8.1"
echo "• Composer: 2.2"
echo "• Database:"
echo " - MySQL: 8.0"
echo " - MariaDB: 10.4"
echo "• Search: "
echo " - Elasticsearch: 7.17"
echo " - OpenSearch: 1.2"
echo "• Cache/Session:"
echo " - Redis: 6.2"
echo "• Message Queue:"
echo " - RabbitMQ: 3.9"
echo "• Web Server:"
echo " - Apache: 2.4"
echo " - Nginx: 1.24"
echo "• Varnish: 7.3"
echo -e "${YELLOW}NOTE: Supports MySQL 8.0.0 through 8.0.28 only${NC}"
echo -e "${BLUE}Supported AWS Services:${NC}"
echo "• Aurora (MySQL): 8.0"
echo "• S3: ✔️"
echo "• MQ: 3.9.13"
echo "• ElastiCache: Redis6"
echo "• OpenSearch: 1.2"
;;
"2.4.3.x")
echo "• PHP: 7.4"
echo "• Composer: 1"
echo "• Database:"
echo " - MySQL: 8.0"
echo " - MariaDB: 10.4"
echo "• Search: "
echo " - Elasticsearch: 7.16"
echo " - OpenSearch: 1.2"
echo "• Cache/Session:"
echo " - Redis: 6.0"
echo "• Message Queue:"
echo " - RabbitMQ: 3.8"
echo "• Web Server:"
echo " - Apache: 2.4"
echo " - Nginx: 1.18"
echo "• Varnish: 6.5"
echo -e "${BLUE}Supported AWS Services:${NC}"
echo "• Aurora (MySQL): 5.7"
echo "• S3: ✔️"
echo "• MQ: 3.8.11"
echo "• ElastiCache: Redis6"
echo "• Elasticsearch: 7.9"
;;
"2.4.2.x")
echo "• PHP: 7.4"
echo "• Composer: 1"
echo "• Database:"
echo " - MySQL: 8.0"
echo " - MariaDB: 10.4"
echo "• Search: "
echo " - Elasticsearch: 7.9"
echo "• Cache/Session:"
echo " - Redis: 6.0"
echo "• Message Queue:"
echo " - RabbitMQ: 3.8"
echo "• Web Server:"
echo " - Apache: 2.4"
echo " - Nginx: 1.18"
echo "• Varnish: 6.4"
echo -e "${BLUE}Supported AWS Services:${NC}"
echo "• S3: ✔️"
echo "• Elasticsearch: 7.9"
;;
*)
echo -e "${RED}Version group not found${NC}"
;;
esac
}
# Function to show additional information
show_additional_info() {
echo -e "${BLUE}Additional Information:${NC}"
echo "• Full system requirements documentation: https://experienceleague.adobe.com/docs/commerce-operations/installation-guide/system-requirements.html"
echo "• Magento DevDocs: https://developer.adobe.com/commerce/docs/"
echo "• Security Best Practices: https://experienceleague.adobe.com/docs/commerce-operations/implementation-playbook/best-practices/security/overview.html"
}
# Main script execution
clear
show_header
while true; do
show_version_groups
echo -e "${YELLOW}Options:${NC}"
echo "1-6) Select version group"
echo "i) Additional Information"
echo "q) Quit"
echo
read -r -p "Enter your choice: " choice
case $choice in
q|Q)
echo -e "${GREEN}Thank you for using the Magento System Requirements Checker!${NC}"
exit 0
;;
i|I)
clear
show_additional_info
;;
1)
clear
show_requirements "2.4.7.x"
;;
2)
clear
show_requirements "2.4.6.x"
;;
3)
clear
show_requirements "2.4.5.x"
;;
4)
clear
show_requirements "2.4.4.x"
;;
5)
clear
show_requirements "2.4.3.x"
;;
6)
clear
show_requirements "2.4.2.x"
;;
*)
echo -e "${RED}Invalid choice. Please try again.${NC}"
;;
esac
echo
read -r -p "Press Enter to continue..."
clear
done
================================================
FILE: compose/bin/cli
================================================
#!/usr/bin/env bash
[ -z "$1" ] && echo "Please specify a CLI command (ex. ls)" && exit
bin/docker-compose exec phpfpm "$@"
================================================
FILE: compose/bin/clinotty
================================================
#!/usr/bin/env bash
[ -z "$1" ] && echo "Please specify a CLI command (ex. ls)" && exit
# -T: Disable pseudo-tty allocation
bin/docker-compose exec -T phpfpm "$@"
================================================
FILE: compose/bin/cliq
================================================
#!/usr/bin/env bash
[ -z "$1" ] && echo "Please specify a CLI command (ex. ls)" && exit
# Without stdout and stderr
bin/clinotty "$@" >/dev/null 2>&1
================================================
FILE: compose/bin/composer
================================================
#!/usr/bin/env bash
bin/cli composer "$@"
================================================
FILE: compose/bin/configure-linux
================================================
#!/usr/bin/env bash
if [ "$(uname)" == "Darwin" ]; then
echo "This script is designed for Linux and will not work properly on macOS."
else
# Get the IP address from the Docker container
docker_ip=$(docker run --rm alpine ip route | awk 'NR==1 {print $3}')
# Check if the IP address already exists in /etc/hosts
if grep -q "$docker_ip host.docker.internal" /etc/hosts; then
echo "The entry already exists in /etc/hosts. No action needed."
else
# Add a new entry to /etc/hosts
echo "$docker_ip host.docker.internal" | sudo tee -a /etc/hosts
echo "A new entry in the /etc/hosts file has been created"
fi
# Ask the user whether to execute the iptables command
read -r -p "Do you want to open port 9003 for Xdebug? (y/n): " choice
if [ "$choice" == "y" ]; then
sudo iptables -A INPUT -p tcp --dport 9003 -j ACCEPT
echo "Port 9003 has been opened for xdebug."
fi
echo "Tasks completed successfully"
fi
================================================
FILE: compose/bin/copyfromcontainer
================================================
#!/usr/bin/env bash
[ -z "$1" ] && echo "Please specify a directory or file to copy from container (ex. vendor, --all)" && exit
CONTAINER_ID=$(bin/docker-compose ps -q phpfpm | awk '{print $1}')
REAL_SRC=$(cd -P "src" >/dev/null && pwd)
if [ ! -d "$REAL_SRC" ]; then
mkdir -p "$REAL_SRC"
fi
if [ "$1" == "--all" ]; then
docker cp "$CONTAINER_ID":/var/www/html/./ "$REAL_SRC/"
echo "Completed copying all files from container to host"
else
if [ -f "$1" ] ; then
docker cp "$CONTAINER_ID":/var/www/html/"$1" "$REAL_SRC/$1"
else
docker cp "$CONTAINER_ID":/var/www/html/"$1" "$REAL_SRC/$(dirname "$1")"
fi
echo "Completed copying $1 from container to host"
fi
================================================
FILE: compose/bin/copytocontainer
================================================
#!/usr/bin/env bash
[ $# -eq 0 ] && echo "Please specify one or more directories/files to copy to container (ex. vendor, --all)" && exit 1
CONTAINER_ID=$(bin/docker-compose ps -q phpfpm | awk '{print $1}')
REAL_SRC=$(cd -P "src" >/dev/null && pwd)
for ARG in "$@"; do
if [ "$ARG" == "--all" ]; then
docker cp "$REAL_SRC/./" "$CONTAINER_ID":/var/www/html/
echo "Completed copying all files from host to container"
bin/fixowns
bin/fixperms
else
if [ -f "$REAL_SRC/$ARG" ]; then
docker cp "$REAL_SRC/$ARG" "$CONTAINER_ID":/var/www/html/"$ARG"
else
docker cp "$REAL_SRC/$ARG" "$CONTAINER_ID":/var/www/html/"$(dirname "$ARG")"
fi
echo "Completed copying $ARG from host to container"
bin/fixowns "$ARG"
bin/fixperms "$ARG"
fi
done
================================================
FILE: compose/bin/create-user
================================================
#!/usr/bin/env bash
read -r -p "Create an admin (a) or a customer (c)? [a/c]: " account_type
[[ "$account_type" == [Aa] ]] && read -r -p "Username: " USERNAME
read -r -p "Email: " EMAIL
read -r -p "Password (at least 8 characters): " PASSWORD
read -r -p "First Name: " FIRSTNAME
read -r -p "Last Name: " LASTNAME
if [[ "$account_type" == [Aa] ]]; then
bin/magento admin:user:create \
--admin-user="${USERNAME}" \
--admin-password="${PASSWORD}" \
--admin-email="${EMAIL}" \
--admin-firstname="${FIRSTNAME}" \
--admin-lastname="${LASTNAME}"
elif [[ "$account_type" == [Cc] ]]; then
bin/n98-magerun2 customer:create "${EMAIL}" "${PASSWORD}" "${FIRSTNAME}" "${LASTNAME}"
else
echo "Invalid option. Please choose either a or c."
fi
================================================
FILE: compose/bin/cron
================================================
#!/usr/bin/env bash
[ -z "$1" ] && echo "Please specify a service operation (start|stop|status|restart|reload|force-reload)" && exit
if [ "$1" == "start" ]; then
# Create the .cron-enabled file when starting cron
bin/cli touch /var/www/html/var/.cron-enabled
fi
if [ "$1" == "stop" ]; then
# Remove the .cron-enabled file when stopping cron
bin/cli rm -f /var/www/html/var/.cron-enabled
fi
bin/root service cron "$@"
bin/root touch /var/www/html/var/.setup_cronjob_status /var/www/html/var/.update_cronjob_status
bin/root chown app:app /var/www/html/var/.setup_cronjob_status /var/www/html/var/.update_cronjob_status
================================================
FILE: compose/bin/debug-cli
================================================
#!/usr/bin/env bash
S=$(bin/clinotty cat /usr/local/etc/php/php.ini | grep -iGc 'xdebug.mode = off');
R=$(grep -c 'XDEBUG_CONFIG=idekey' ./env/phpfpm.env)
if [[ -z "$2" ]]
then
platform="PHPSTORM"
else
platform=$2
fi
local_debug_status(){
if [[ $R != 0 ]]; then
echo "Cli debug enabled"
else
echo "Cli debug disabled"
fi
}
local_debug_toggle() {
if [[ $R != 0 ]]; then
local_debug_disable
else
local_debug_enable
fi
}
local_debug_enable() {
if [[ $S == 1 ]]; then
bin/xdebug enable
fi
if [[ $R != 0 ]]; then
echo "Already enabled"
exit 0
fi
echo "XDEBUG_CONFIG=idekey=$platform" >> ./env/phpfpm.env
sleep 1
bin/restart phpfpm
echo "Cli debug enabled"
}
local_debug_disable() {
sed -i '' '/XDEBUG_CONFIG=idekey/d' ./env/phpfpm.env
sleep 1
bin/restart phpfpm
echo "Cli debug disabled"
}
firstArgLetter="$(echo "$1" | head -c 1)"
if [[ $firstArgLetter == "d" ]]; then
local_debug_disable
elif [[ $firstArgLetter == "e" ]]; then
local_debug_enable
elif [[ $firstArgLetter == "t" ]]; then
local_debug_toggle
elif [[ $firstArgLetter == "s" ]]; then
local_debug_status
else
printf "Please specify either 'disable', 'enable', 'status' or 'toggle' as mandatory argument.\nSpecify as an optional second argument the platform. Default is PHPSTORM\nEx: bin/debug-cli enable [PHPSTORM]\n"
fi
================================================
FILE: compose/bin/deploy
================================================
#!/usr/bin/env bash
bin/composer install
bin/magento maintenance:enable
bin/cli rm -rf generated/code var/view_preprocessed
bin/magento cache:flush
bin/magento setup:upgrade
bin/magento setup:di:compile
bin/magento setup:static-content:deploy en_US "$@" -f
bin/magento maintenance:disable
bin/magento cache:flush
================================================
FILE: compose/bin/dev-test-run
================================================
#!/usr/bin/env bash
[ -z "$1" ] && echo "Please specify test type (ex. integration)" && exit
TEST_TYPE="$1"
shift
bin/clinotty bash -c "cd dev/tests/${TEST_TYPE} && ../../../vendor/bin/phpunit -c phpunit.xml.dist $*"
================================================
FILE: compose/bin/dev-urn-catalog-generate
================================================
#!/usr/bin/env bash
bin/magento dev:urn-catalog:generate misc.xml
bin/copyfromcontainer misc.xml
mkdir -p src/.idea
mv src/misc.xml src/.idea/misc.xml
echo "URN's have been generated, you may now restart PHPStorm"
================================================
FILE: compose/bin/devconsole
================================================
#!/usr/bin/env bash
bin/n98-magerun2 dev:console
================================================
FILE: compose/bin/docker-compose
================================================
#!/usr/bin/env bash
if docker compose version > /dev/null 2>&1; then
DOCKER_COMPOSE="docker compose"
else
DOCKER_COMPOSE="docker-compose"
fi
COMPOSE_FILES=("compose.yaml" "compose.healthcheck.yaml")
# If --no-dev is passed to this script, we won't load the compose.dev.yaml file,
# but this argument should be removed so it isn't passed to docker compose.
if [ "$1" == "--no-dev" ]; then
# Remove the "--no-dev" argument so it isn't passed to docker compose
shift 1
else
# The "--no-dev" argument wasn't passed in, so let's load the dev config.
COMPOSE_FILES+=("compose.dev.yaml")
fi
# Loop over the list of compose files, and prefix them with -f.
# This ensures paths with spaces aren't split when passed as parameters.
COMPOSE_FILES_PREFIXED=()
for file in "${COMPOSE_FILES[@]}"; do
COMPOSE_FILES_PREFIXED+=("-f" "$file")
done
${DOCKER_COMPOSE} "${COMPOSE_FILES_PREFIXED[@]}" "$@"
================================================
FILE: compose/bin/docker-start
================================================
#!/usr/bin/env bash
# Function to check if Docker daemon is running
docker_running() {
docker stats --no-stream &> /dev/null
return $?
}
# Check if OrbStack is installed and not running
if [ -d "/Applications/OrbStack.app" ]; then
echo "* OrbStack is installed"
if (! docker_running); then
echo "* Starting OrbStack..."
open /Applications/OrbStack.app
# Wait until Docker daemon is running via OrbStack
while (! docker_running); do
echo "* Waiting for OrbStack to initialize Docker..."
sleep 2
done
echo "* Docker is now running via OrbStack"
exit 0
else
echo "* Docker is already running (possibly via OrbStack)"
exit 0
fi
fi
# Check if Docker Desktop is installed
if [ -d "/Applications/Docker.app" ]; then
echo "* Docker Desktop is installed"
# Check if Docker is running
if (! docker_running); then
echo "* Starting Docker Desktop..."
open /Applications/Docker.app
# Wait until Docker daemon is running
while (! docker_running); do
echo "* Waiting for Docker Desktop to initialize..."
sleep 2
done
echo "* Docker Desktop is now running"
else
echo "* Docker is already running"
fi
else
echo "* Docker Desktop is not installed. Please install Docker Desktop or OrbStack."
exit 1
fi
================================================
FILE: compose/bin/docker-stats
================================================
#!/usr/bin/env bash
stty -echo
INTERVAL=3
trap 'stty echo; exit' INT EXIT
print_header() {
echo "+----------------------------------------------------+--------------+----------+----------+------------------------+"
printf "| %-50s | %-12s | %-8s | %-8s | %-22s |\n" "NAME" "CONTAINER ID" "CPU %" "MEM %" "MEM USAGE / MEM LIMIT"
echo "+----------------------------------------------------+--------------+----------+----------+------------------------+"
}
print_container_info() {
local container_info
local container_name
local container_id
local cpu_perc
local mem_perc
local mem_usage
container_info="$1"
container_name=$(echo "$container_info" | cut -f1)
container_id=$(echo "$container_info" | cut -f2)
cpu_perc=$(echo "$container_info" | cut -f3)
mem_perc=$(echo "$container_info" | cut -f4)
mem_usage=$(echo "$container_info" | cut -f5)
print_container_info() {
local container_info
local container_name
local container_id
local cpu_perc
local mem_perc
local mem_usage
container_info="$1"
container_name=$(echo "$container_info" | cut -f1)
container_id=$(echo "$container_info" | cut -f2)
cpu_perc=$(echo "$container_info" | cut -f3)
mem_perc=$(echo "$container_info" | cut -f4)
mem_usage=$(echo "$container_info" | cut -f5)
printf "| %-50s | %-12s | %-8s | %-8s | %-22s |\n" "$container_name" "$container_id" "$cpu_perc" "$mem_perc" "$mem_usage"
}
}
while true; do
DOCKER_STATS=$(docker stats --no-stream --format "{{.Name}}\t{{.ID}}\t{{.CPUPerc}}\t{{.MemPerc}}\t{{.MemUsage}}")
clear
if [[ -n "$DOCKER_STATS" ]]; then
print_header
while IFS= read -r line; do
print_container_info "$(echo "$line" | awk '{gsub(/\//, " "); print}')"
done <<< "$DOCKER_STATS"
echo "+----------------------------------------------------+--------------+----------+----------+------------------------+"
else
echo "No active containers found"
break
fi
sleep $INTERVAL
done
================================================
FILE: compose/bin/download
================================================
#!/usr/bin/env bash
EDITION=${1:-community}
# Define ANSI escape codes for colors
YELLOW='\033[0;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
if [ -d "./src" ]; then
echo "Error: The \"src\" directory is not empty. Please remove all contents within this directory and try again."
exit 1
fi
bin/stop
bin/start --no-dev
[ $? != 0 ] && echo "Failed to start Docker services" && exit
bin/setup-composer-auth
bin/fixowns
if [ "$EDITION" == "mageos" ]; then
VERSION=${2:-1.0.5}
bin/clinotty composer create-project --repository-url=https://repo.mage-os.org/ mage-os/project-community-edition="${VERSION}" .
else
VERSION=${2:-2.4.7-p3}
bin/clinotty composer create-project --repository=https://repo.magento.com/ magento/project-"${EDITION}"-edition="${VERSION}" .
fi
if [ $? != 0 ]; then
echo -e "${BLUE}Please check the installation guide at ${YELLOW}https://github.com/markshust/docker-magento#install-fails-because-project-directory-is-not-empty${BLUE} for troubleshooting.${NC}"
else
bin/clinotty [ ! -f "./var/composer_home/auth.json" ] && bin/clinotty mkdir -p ./var/composer_home && bin/clinotty cp /var/www/.composer/auth.json ./var/composer_home/auth.json
fi
================================================
FILE: compose/bin/ece-patches
================================================
#!/usr/bin/env bash
if ! bin/cliq ls vendor/bin/ece-patches; then
echo "The ece-patches tool is not installed. Please ensure you are using Adobe Commerce Cloud before running this command."
fi
bin/cli vendor/bin/ece-patches "$@"
================================================
FILE: compose/bin/fixowns
================================================
#!/usr/bin/env bash
echo "Fixing filesystem ownerships..."
if [ -z "$1" ]; then
bin/rootnotty chown -R app:app /var/www/
else
bin/rootnotty chown -R app:app /var/www/html/"$1"
fi
echo "Filesystem ownerships fixed."
================================================
FILE: compose/bin/fixperms
================================================
#!/usr/bin/env bash
echo "Fixing filesystem permissions..."
if [ -z "$1" ]; then
bin/clinotty find var vendor pub/static pub/media app/etc \( -type f -or -type d \) -exec chmod u+w {} +;
bin/clinotty chmod u+x bin/magento
else
bin/clinotty find "$1" \( -type f -or -type d \) -exec chmod u+w {} +;
fi
echo "Filesystem permissions fixed."
================================================
FILE: compose/bin/grunt
================================================
#!/usr/bin/env bash
bin/cli npx grunt "$@"
================================================
FILE: compose/bin/init
================================================
#!/usr/bin/env bash
# Script to initialize a Magento development environment
# Exit immediately if a command fails
set -e
echo ">>> Deploying Magento sample data..."
bin/magento sampledata:deploy
# Sample data requires standalone setup:upgrade exec to trigger activation
echo ">>> Running setup upgrade to activate sample data..."
bin/magento setup:upgrade
echo ">>> Installing DisableTwoFactorAuth module for dev..."
bin/composer require --dev markshust/magento2-module-disabletwofactorauth
bin/magento module:enable MarkShust_DisableTwoFactorAuth
bin/magento setup:upgrade
echo ">>> Setting long admin session lifetime (1 year)..."
bin/magento config:set twofactorauth/general/enable 0
bin/magento config:set admin/security/session_lifetime 31536000
bin/magento config:set admin/security/password_lifetime 0
echo ">>> Generating URN catalog for IDEs..."
bin/dev-urn-catalog-generate
echo ">>> Flushing cache to apply all updates..."
bin/magento cache:flush
echo ">>> Magento development environment initialized successfully! 🎉"
================================================
FILE: compose/bin/install-php-extensions
================================================
#!/usr/bin/env bash
if ! bin/cliq ls /usr/local/bin/install-php-extensions; then
echo "Downloading install-php-extensions, just a moment..."
bin/rootnotty curl -sSLf \
-o /usr/local/bin/install-php-extensions \
https://github.com/mlocati/docker-php-extension-installer/releases/latest/download/install-php-extensions
bin/rootnotty chmod +x /usr/local/bin/install-php-extensions
fi
bin/root install-php-extensions "$@"
================================================
FILE: compose/bin/log
================================================
#!/usr/bin/env bash
CONTAINER_LOG_PATH="/var/www/html/var/log/";
display_help() {
echo -e "Description:
Tail logs from the Magento var/log folder all and specific logs
Usage:
bin/log <specific_log_files>
Arguments:
specific_log_files If specific_log_files are NOT provided, show all logs. Ex: bin/log system.log cache.log
Options:
-h, --help Display help message"
}
generate_logs_file_path() {
local container_log_path="$1"
shift # This shifts the positional parameters to the left, so $2 becomes $1, $3 becomes $2, etc.
local log_files=("$@")
local log_file_paths=()
for file in "${log_files[@]}"; do
log_file_paths+=("$container_log_path$file")
done
echo "${log_file_paths[@]}"
}
get_all_logs_file_path() {
local logs_location="$1"
bin/docker-compose exec phpfpm ls -p "$logs_location" | grep -v '/$' | sed "s|^|$logs_location|"
}
if [[ $1 == "-h" || $1 == "--help" ]]; then
display_help
elif [[ -z $1 ]]; then
mapfile -t all_logs_file_path < <(get_all_logs_file_path "$CONTAINER_LOG_PATH")
bin/docker-compose exec phpfpm tail -f "${all_logs_file_path[@]}"
else
mapfile -t logs_file_path < <(generate_logs_file_path "$CONTAINER_LOG_PATH" "$@")
bin/docker-compose exec phpfpm tail -f "${logs_file_path[@]}"
fi
================================================
FILE: compose/bin/magento
================================================
#!/usr/bin/env bash
bin/cli bin/magento "$@"
================================================
FILE: compose/bin/magento-version
================================================
#!/usr/bin/env bash
# Method 1: Using bin/magento --version
version=$(bin/magento --version --no-ansi 2> /dev/null | cut -d" " -f 3)
if [[ -z "$version" ]]; then
# Method 2: Using grep in composer.lock
version=$(grep -A 1 "magento/magento2-base" ./src/composer.lock | grep "version" | awk -F "\"" '{print $4}')
fi
if [[ -z "$version" ]]; then
# Method 3: Using bin/yq in composer.json
version=$(bin/yq -oj '.version' ./src/composer.json | sed 's/"//g')
fi
# If version is still not obtained, output error message
if [[ -z "$version" ]]; then
echo "Failed to retrieve Magento version."
else
echo "$version"
fi
================================================
FILE: compose/bin/mftf
================================================
#!/usr/bin/env bash
bin/clinotty vendor/bin/mftf "$@"
================================================
FILE: compose/bin/mysql
================================================
#!/usr/bin/env bash
# shellcheck source=../env/db.env
source env/db.env
if [ -t 0 ]; then
# Need tty to run mysql shell
bin/cli mysql -h"${MYSQL_HOST}" -u"${MYSQL_USER}" -p"${MYSQL_PASSWORD}" "${MYSQL_DATABASE}" "$@"
else
# Read from stdin, ex: bin/mysql < dbdump.sql
bin/clinotty mysql -h"${MYSQL_HOST}" -u"${MYSQL_USER}" -p"${MYSQL_PASSWORD}" "${MYSQL_DATABASE}" "$@"
fi
================================================
FILE: compose/bin/mysqldump
================================================
#!/usr/bin/env bash
bin/n98-magerun2 db:dump --human-readable --stdout "$@"
================================================
FILE: compose/bin/n98-magerun2
================================================
#!/usr/bin/env bash
if ! bin/cliq ls bin/n98-magerun2.phar; then
echo "Downloading n98-magerun2.phar, just a moment..."
bin/clinotty curl -sS -O https://files.magerun.net/n98-magerun2.phar
bin/clinotty curl -sS -o n98-magerun2.phar.sha256 https://files.magerun.net/sha256.php?file=n98-magerun2.phar
bin/clinotty shasum -a 256 -c n98-magerun2.phar.sha256
[ $? != 0 ] && echo "sha256 checksum do not match!" && exit
bin/cliq chmod +x n98-magerun2.phar
bin/cliq mkdir -p bin
bin/cliq mv n98-magerun2.phar bin
fi
bin/cli bin/n98-magerun2.phar "$@"
================================================
FILE: compose/bin/node
================================================
#!/usr/bin/env bash
bin/cli node "$@"
================================================
FILE: compose/bin/npm
================================================
#!/usr/bin/env bash
bin/cli npm "$@"
================================================
FILE: compose/bin/phpcbf
================================================
#!/usr/bin/env bash
bin/clinotty vendor/bin/phpcbf --standard=Magento2 --extensions=php,phtml --error-severity=10 --ignore-annotations "$@"
================================================
FILE: compose/bin/phpcs
================================================
#!/usr/bin/env bash
bin/clinotty vendor/bin/phpcs --standard=Magento2 --extensions=php,phtml --error-severity=10 --ignore-annotations "$@"
================================================
FILE: compose/bin/phpcs-json-report
================================================
#!/usr/bin/env bash
bin/clinotty vendor/bin/phpcs --standard=Magento2 --extensions=php,phtml --error-severity=10 --ignore-annotations --report=json "$@" > report.json
================================================
FILE: compose/bin/pwa-studio
================================================
#!/usr/bin/env bash
set -o errexit
if [ ! -d pwa-studio ]; then
echo "PWA studio must first be installed by running bin/setup-pwa-studio"
exit
fi
cd pwa-studio
NODE_TLS_REJECT_UNAUTHORIZED=0 yarn run watch:all
================================================
FILE: compose/bin/redis
================================================
#!/usr/bin/env bash
bin/docker-compose exec redis "$@"
================================================
FILE: compose/bin/remove
================================================
#!/usr/bin/env bash
bin/docker-compose rm
================================================
FILE: compose/bin/removeall
================================================
#!/usr/bin/env bash
bin/stopall
bin/remove
bin/removevolumes
bin/removenetwork
================================================
FILE: compose/bin/removenetwork
================================================
#!/usr/bin/env bash
current_folder=${PWD##*/}
volume_prefix=$(echo "$current_folder" | awk '{print tolower($0)}' | sed 's/\.//g')
docker network rm "$volume_prefix"_default
================================================
FILE: compose/bin/removevolumes
================================================
#!/usr/bin/env bash
current_folder=${PWD##*/}
volume_prefix=$(echo "$current_folder" | awk '{print tolower($0)}' | sed 's/\.//g')
docker volume rm "${volume_prefix}"_appdata
docker volume rm "${volume_prefix}"_dbdata
docker volume rm "${volume_prefix}"_rabbitmqdata
docker volume rm "${volume_prefix}"_sockdata
docker volume rm "${volume_prefix}"_ssldata
================================================
FILE: compose/bin/restart
================================================
#!/usr/bin/env bash
bin/stop "$@"
bin/start "$@"
================================================
FILE: compose/bin/root
================================================
#!/usr/bin/env bash
[ -z "$1" ] && echo "Please specify a CLI command (ex. ls)" && exit
bin/docker-compose exec -u root phpfpm "$@"
================================================
FILE: compose/bin/rootnotty
================================================
#!/usr/bin/env bash
[ -z "$1" ] && echo "Please specify a CLI command (ex. ls)" && exit
bin/docker-compose exec -u root -T phpfpm "$@"
================================================
FILE: compose/bin/setup
================================================
#!/usr/bin/env bash
set -o errexit
if [ -f "../env/magento.env" ]; then
source "../env/magento.env"
else
echo "Warning: magento.env file not found."
fi
MEM_BYTES=$(docker info -f '{{.MemTotal}}')
MEM_MB=$(( MEM_BYTES / 1000000 ))
# When Docker Desktop is set to 6GB in the GUI, it is reported as 6227 MB
(( MEM_MB < 6227 )) && echo "There must be at least 6GB of RAM allocated to Docker in order to continue." && exit
DOMAIN=${1:-magento.test}
bin/stop
bin/start --no-dev
[ $? != 0 ] && echo "Failed to start Docker services" && exit
bin/clinotty chmod u+x bin/magento
rm -rf src && mkdir src
echo "Adding Magento modules to Composer allow-plugins directive..."
bin/clinotty composer config --no-plugins allow-plugins.magento/magento-composer-installer true
bin/clinotty composer config --no-plugins allow-plugins.magento/inventory-composer-installer true
bin/clinotty composer config --no-plugins allow-plugins.laminas/laminas-dependency-plugin true
echo "Running, Magento setup:install..."
bin/setup-install "${DOMAIN}"
echo "Copying files from container to host after install..."
bin/copyfromcontainer --all
echo "Forcing deploy of static content to speed up initial requests..."
bin/clinotty bin/magento setup:static-content:deploy -f
echo "Re-indexing with Elasticsearch..."
bin/clinotty bin/magento indexer:reindex
echo "Setting basic URL and generating SSL certificate..."
bin/setup-domain "${DOMAIN}"
echo "Fixing owner and permissions..."
bin/fixowns
bin/fixperms
echo "Clearing the cache to apply updates..."
bin/clinotty bin/magento cache:flush
echo "Installing cron, run 'bin/cron start' to enable..."
bin/clinotty bin/magento cron:install
echo "Turning on developer mode..."
bin/clinotty bin/magento deploy:mode:set developer
cp -r .vscode src/
echo "Docker development environment setup complete."
echo "You may now access your Magento instance at https://${DOMAIN}/"
echo "You may now access your Magento backend instance at https://${DOMAIN}/admin/"
echo "Use the following default credentials to log in:"
echo "Username: $MAGENTO_ADMIN_USER"
echo "Password: $MAGENTO_ADMIN_PASSWORD"
================================================
FILE: compose/bin/setup-composer-auth
================================================
#!/usr/bin/env bash
MAGENTO_USERNAME_PROP="http-basic.repo.magento.com.username"
MAGENTO_PASSWORD_PROP="http-basic.repo.magento.com.password"
hash composer 2>/dev/null && IS_COMPOSER_ON_HOST=true
PUBLIC_KEY="$(bin/clinotty composer config --global $MAGENTO_USERNAME_PROP 2>/dev/null)"
PRIVATE_KEY="$(bin/clinotty composer config --global $MAGENTO_PASSWORD_PROP 2>/dev/null)"
if [ -n "$PUBLIC_KEY" ] && [ -n "$PRIVATE_KEY" ]; then
echo "Composer auth has already been set up."
exit 0
fi
if [ "$IS_COMPOSER_ON_HOST" ]; then
PUBLIC_KEY="$(composer config --global $MAGENTO_USERNAME_PROP 2>/dev/null)"
PRIVATE_KEY="$(composer config --global $MAGENTO_PASSWORD_PROP 2>/dev/null)"
fi
if [ -z "$PUBLIC_KEY" ] || [ -z "$PRIVATE_KEY" ]; then
exec < /dev/tty
echo
echo "Composer authentication required (repo.magento.com public and private keys):"
read -r -p " Username: " PUBLIC_KEY
read -r -p " Password: " PRIVATE_KEY
echo
exec <&-
fi
if [ -z "$PUBLIC_KEY" ] || [ -z "$PRIVATE_KEY" ]; then
echo "Please setup Composer auth for repo.magento.com to continue." && exit 1
fi
# Output must be piped otherwise file descriptor errors occur. Carriage returns?
echo "composer config --global http-basic.repo.magento.com ${PUBLIC_KEY} ${PRIVATE_KEY}" | bin/clinotty bash -
# Also make sure alternate auth.json is setup (Magento uses this internally)
bin/clinotty [ -d "./var/composer_home" ] && bin/clinotty cp /var/www/.composer/auth.json ./var/composer_home/auth.json
echo "Composer auth has been set up."
================================================
FILE: compose/bin/setup-domain
================================================
#!/usr/bin/env bash
set -o errexit
[ -z "$1" ] && echo "Please specify a domain name (ex. magento.test)" && exit
DOMAIN=$1
if ! grep -q "$DOMAIN" /etc/hosts; then
echo "Your system password is needed to add an entry to /etc/hosts..."
echo "127.0.0.1 ::1 $DOMAIN" | sudo tee -a /etc/hosts
fi
echo "Set https://${DOMAIN}/ to web/secure/base_url and web/unsecure/base_url"
bin/clinotty bin/magento config:set web/secure/base_url https://"$DOMAIN"/
bin/clinotty bin/magento config:set web/unsecure/base_url https://"$DOMAIN"/
echo "Generating SSL certificate..."
bin/setup-ssl "$DOMAIN"
================================================
FILE: compose/bin/setup-grunt
================================================
#!/usr/bin/env bash
echo "Confirming n98-magerun2 is installed..."
bin/n98-magerun2 > /dev/null 2>&1
DEFAULT_THEME_ID="select value from core_config_data where path = 'design/theme/theme_id'"
THEME_PATH="select theme_path from theme where theme_id in ($DEFAULT_THEME_ID);"
VENDOR_THEME=$(bin/n98-magerun2 db:query "$THEME_PATH" | sed -n 2p | cut -d$'\r' -f1)
THEME=$(echo "$VENDOR_THEME" | cut -d'/' -f2)
LOCALE_CODE=$(bin/magento config:show general/locale/code | cut -d$'\r' -f1 | sed 's/ *$//g')
# Generate local-theme.js for custom theme
read -r -d '' GEN_THEME_JS << EOM
var fs = require('fs');
var util = require('util');
var theme = require('./dev/tools/grunt/configs/themes');
theme['$THEME'] = {
area: 'frontend',
name: '$VENDOR_THEME',
locale: '$LOCALE_CODE',
files: [
'css/styles-m',
'css/styles-l'
],
dsl: 'less'
};
fs.writeFileSync('./dev/tools/grunt/configs/local-themes.js', '"use strict"; module.exports = ' + util.inspect(theme), 'utf-8');
EOM
if [ -z "$VENDOR_THEME" ] || [ -z "$THEME" ]; then
echo "Using Magento/luma theme for grunt config"
THEME=luma
bin/clinotty cp ./dev/tools/grunt/configs/themes.js ./dev/tools/grunt/configs/local-themes.js
else
echo "Using $VENDOR_THEME theme for grunt config"
bin/node -e "$GEN_THEME_JS"
fi
# Create files from sample files if they do not yet exist
test -f src/package.json || cp src/package.json.sample src/package.json
test -f src/Gruntfile.js || cp src/Gruntfile.js.sample src/Gruntfile.js
test -f src/grunt-config.json || cp src/grunt-config.json.sample src/grunt-config.json
# Disable grunt-contrib-jasmine on ARM processors (incompatible)
if [ "$(uname -m)" == "arm64" ]; then
sed -e 's/"grunt-contrib-jasmine": "[~.0-9]*",//' src/package.json > package.json \
&& mv package.json src/package.json
fi
# Enable these custom files on compose.dev.yaml so custom updates are persisted
sed -e 's/grunt-config.json.sample/grunt-config.json/' compose.dev.yaml > compose.dev.yaml.updated \
&& mv compose.dev.yaml.updated compose.dev.yaml
sed -e 's/Gruntfile.js.sample/Gruntfile.js/' compose.dev.yaml > compose.dev.yaml.updated \
&& mv compose.dev.yaml.updated compose.dev.yaml
sed -e 's/package.json.sample/package.json/' compose.dev.yaml > compose.dev.yaml.updated \
&& mv compose.dev.yaml.updated compose.dev.yaml
bin/restart app phpfpm
bin/npm install ajv@^5.0.0 --save
bin/npm install
bin/magento cache:clean
bin/grunt clean
bin/grunt exec:"$THEME"
bin/grunt less:"$THEME"
================================================
FILE: compose/bin/setup-install
================================================
#!/usr/bin/env bash
set -o errexit
DOMAIN=${1:-magento.test}
# shellcheck source=../env/db.env
source env/db.env
# shellcheck source=../env/elasticsearch.env
source env/elasticsearch.env
# shellcheck source=../env/opensearch.env
source env/opensearch.env
# shellcheck source=../env/magento.env
source env/magento.env
# shellcheck source=../env/rabbitmq.env
source env/rabbitmq.env
# shellcheck source=../env/redis.env
source env/redis.env
bin/clinotty bin/magento setup:install \
--db-host="$MYSQL_HOST" \
--db-name="$MYSQL_DATABASE" \
--db-user="$MYSQL_USER" \
--db-password="$MYSQL_PASSWORD" \
--base-url=https://"$DOMAIN"/ \
--base-url-secure=https://"$DOMAIN"/ \
--backend-frontname="$MAGENTO_ADMIN_FRONTNAME" \
--admin-firstname="$MAGENTO_ADMIN_FIRST_NAME" \
--admin-lastname="$MAGENTO_ADMIN_LAST_NAME" \
--admin-email="$MAGENTO_ADMIN_EMAIL" \
--admin-user="$MAGENTO_ADMIN_USER" \
--admin-password="$MAGENTO_ADMIN_PASSWORD" \
--language="$MAGENTO_LOCALE" \
--currency="$MAGENTO_CURRENCY" \
--timezone="$MAGENTO_TIMEZONE" \
--amqp-host="$RABBITMQ_HOST" \
--amqp-port="$RABBITMQ_PORT" \
--amqp-user="$RABBITMQ_DEFAULT_USER" \
--amqp-password="$RABBITMQ_DEFAULT_PASS" \
--amqp-virtualhost="$RABBITMQ_DEFAULT_VHOST" \
--cache-backend=redis \
--cache-backend-redis-server="$REDIS_CACHE_BACKEND_SERVER" \
--cache-backend-redis-db="$REDIS_CACHE_BACKEND_DB" \
--page-cache=redis \
--page-cache-redis-server="$REDIS_PAGE_CACHE_SERVER" \
--page-cache-redis-db="$REDIS_PAGE_CACHE_DB" \
--session-save=redis \
--session-save-redis-host="$REDIS_SESSION_SAVE_HOST" \
--session-save-redis-log-level=4 \
--session-save-redis-db=2 \
--elasticsearch-host="$ES_HOST" \
--elasticsearch-port="$ES_PORT" \
--opensearch-host="$OPENSEARCH_HOST" \
--opensearch-port="$OPENSEARCH_PORT" \
--search-engine=opensearch \
--use-rewrites=1 \
--cleanup-database \
--no-interaction
================================================
FILE: compose/bin/setup-integration-tests
================================================
#!/usr/bin/env bash
# shellcheck source=../env/db.env
source env/db.env
MYSQL_INTEGRATION_CONFIG=dev/tests/integration/etc/install-config-mysql.php
# If database doesn't exist, create it and add user permissions
bin/clinotty mysql -h"${MYSQL_INTEGRATION_HOST}" -uroot -p"${MYSQL_ROOT_PASSWORD}" "${MYSQL_INTEGRATION_DATABASE}" -e exit &> /dev/null ||
bin/clinotty mysqladmin -h"${MYSQL_INTEGRATION_HOST}" -uroot -p"${MYSQL_ROOT_PASSWORD}" create "${MYSQL_INTEGRATION_DATABASE}" &&
echo "Database ${MYSQL_INTEGRATION_DATABASE} created." &&
bin/cli mysql -uroot -p"${MYSQL_ROOT_PASSWORD}" -h"${MYSQL_INTEGRATION_HOST}" \
-e "GRANT ALL PRIVILEGES ON ${MYSQL_INTEGRATION_DATABASE}.* TO '${MYSQL_INTEGRATION_USER}'@'%';FLUSH PRIVILEGES;"
if [[ ! -f "src/${MYSQL_INTEGRATION_CONFIG}" ]]; then
MAGENTO_MAJOR=$(bin/magento-version | cut -d'.' -f1,2)
cp template/"${MYSQL_INTEGRATION_CONFIG}"."${MAGENTO_MAJOR}".dist src/${MYSQL_INTEGRATION_CONFIG}
fi
bin/copytocontainer ${MYSQL_INTEGRATION_CONFIG}
================================================
FILE: compose/bin/setup-pwa-studio
================================================
#!/usr/bin/env bash
set -o errexit
echo "Install NodeJS and Yarn on host machine, otherwise setup will fail"
BASE_URL=${1:-master-7rqtwti-mfwmkrjfqvbjk.us-4.magentosite.cloud}
git clone https://github.com/magento/pwa-studio.git
cd pwa-studio
yarn install
yarn buildpack create-custom-origin packages/venia-concept
MAGENTO_BACKEND_URL="https://$BASE_URL/" yarn buildpack create-env-file packages/venia-concept
================================================
FILE: compose/bin/setup-pwa-studio-sampledata
================================================
#!/usr/bin/env bash
set +e
RED='\033[0;31m'
GREEN='\033[0;32m'
NC='\033[0m'
BASE_URL=${1:-master-7rqtwti-mfwmkrjfqvbjk.us-4.magentosite.cloud}
install_sampledata() {
echo -e "${GREEN}Setting up composer repository for Venia sample data.${NC}"
bin/composer config --no-interaction --ansi repositories.venia-sample-data composer https://repo.magento.com
echo -e "${GREEN}Requiring Venia sample data metapackage.${NC}"
bin/composer require --no-interaction --ansi magento/venia-sample-data:*
echo -e "${GREEN}Installing Venia sample data modules.${NC}"
bin/magento setup:upgrade
echo -e "${GREEN}Reindexing the data from the modules.${NC}"
bin/magento indexer:reindex
}
install_sampledata
ENV_DIST_FILE="packages/venia-concept/.env.dist"
if [ -f "$ENV_DIST_FILE" ]; then
cp "$ENV_DIST_FILE" packages/venia-concept/.env
else
echo -e "${RED}.env.dist file not found. Continuing without copying.${NC}"
fi
echo -e "${GREEN}Script completed successfully.${NC}"
echo "You may now access your Magento PWA Studio instance at https://${BASE_URL}/"
================================================
FILE: compose/bin/setup-ssl
================================================
#!/usr/bin/env bash
[ $# -eq 0 ] && echo "Please specify at least one domain (ex. mydomain.test)" && exit
# Generate certificate authority if not already setup
if ! bin/docker-compose exec -T -u root app cat /root/.local/share/mkcert/rootCA.pem | grep -q 'BEGIN CERTIFICATE'; then
bin/setup-ssl-ca
fi
# Initialize an empty array to hold the processed domains
DOMAINS_WITHOUT_PORT=()
# Loop through each domain
for domain in "$@"; do
# Strip out the port number
DOMAIN_WITHOUT_PORT=$(echo "$domain" | cut -d ':' -f1)
# Append the processed domain to the array
DOMAINS_WITHOUT_PORT+=("$DOMAIN_WITHOUT_PORT")
done
# Use the array in the mkcert command
bin/docker-compose exec -T -u root app mkcert -key-file nginx.key -cert-file nginx.crt "${DOMAINS_WITHOUT_PORT[@]}"
echo "Moving key and cert to /etc/nginx/certs/..."
bin/docker-compose exec -T -u root app chown app:app nginx.key nginx.crt
bin/docker-compose exec -T -u root app mv nginx.key nginx.crt /etc/nginx/certs/
# Restart nginx to apply the updates
echo "Restarting containers to apply updates..."
bin/restart
================================================
FILE: compose/bin/setup-ssl-ca
================================================
#!/usr/bin/env bash
set -o errexit
# Generate a new local CA "/root/.local/share/mkcert"
bin/docker-compose exec -T -u root app mkcert -install
docker cp "$(bin/docker-compose ps -q app|awk '{print $1}')":/root/.local/share/mkcert/rootCA.pem .
echo "System password requested to install certificate authority on host..."
if [ "$(uname)" == "Darwin" ]; then
sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain rootCA.pem
echo "{\"policies\": {\"Certificates\": {\"ImportEnterpriseRoots\": true}}}" | sudo tee policies.json
FIREFOX_FOUND=0
### Check if Firefox is installed
for FFoxAppDir in \
'/Applications/Firefox.app' \
'/Applications/Firefox Developer Edition.app' \
; do
FFoxBin=$FFoxAppDir/Contents/MacOS/firefox-bin
if [[ -f $FFoxBin ]]; then
printf 'Firefox compatible found at: %s\n' "$FFoxAppDir" >&2
FIREFOX_FOUND=1
### Copy the newly created policies.json to the Certificates directory
DistDirectory=$FFoxAppDir/Contents/Resources/distribution
sudo mkdir -p "$DistDirectory"
sudo cp policies.json "$DistDirectory"/policies.json
fi
done
if [[ $FIREFOX_FOUND -ne 0 ]]; then
### Copy the newly created .pem to the Certificates directory
CertDirectory='/Library/Application Support/Mozilla/Certificates'
printf 'Installing CA certificate to: %s\n' "$CertDirectory" >&2
sudo mkdir -p "$CertDirectory"
sudo cp rootCA.pem "$CertDirectory"/rootCA.pem
fi
rm -f policies.json rootCA.pem
else
### Requirement: apt install libnss3-tools
REQUIRED_PKG="libnss3-tools"
PKG_OK=$(dpkg-query -W --showformat='${Status}\n' $REQUIRED_PKG|grep "install ok installed")
echo Checking for $REQUIRED_PKG: "$PKG_OK"
if [ "" = "$PKG_OK" ]; then
echo "No $REQUIRED_PKG found. Setting up $REQUIRED_PKG."
sudo apt-get --yes install $REQUIRED_PKG
fi
### CA file to install (CUSTOMIZE!)
certfile="rootCA.pem"
certname="Root CA"
### For cert8 (legacy - DBM)
find ~/ -name "cert8.db" -print0 | while read -r certDB
do
certdir=$(dirname "${certDB}");
certutil -D -n "${certname}" -i ${certfile} -d dbm:"${certdir}"
certutil -A -n "${certname}" -t "TCu,Cu,Tu" -i ${certfile} -d dbm:"${certdir}"
done
### For cert9 (SQL)
find ~/ -name "cert9.db" -print0 | while read -r certDB
do
certdir=$(dirname "${certDB}");
certutil -D -n "${certname}" -i ${certfile} -d sql:"${certdir}"
certutil -A -n "${certname}" -t "TCu,Cu,Tu" -i ${certfile} -d sql:"${certdir}"
done
sudo mv rootCA.pem /usr/local/share/ca-certificates/rootCA.crt
sudo update-ca-certificates
fi
================================================
FILE: compose/bin/spx
================================================
#!/usr/bin/env bash
S=$(bin/clinotty cat /usr/local/etc/php/php.ini | grep -iGc 'zlib.output_compression = 1');
spx_status() {
if [[ $S == 1 ]]; then
echo "Output compression is enabled, so you cannot currently debug with SPX."
else
echo "Output compression is disabled, so you can currently debug with SPX."
fi
}
spx_toggle() {
if [[ $S == 1 ]]; then
spx_enable
else
spx_disable
fi
}
spx_enable() {
if [[ $S == 1 ]]; then
bin/root sed -i -e 's/^zlib.output_compression = 1/zlib.output_compression = 0/g' /usr/local/etc/php/php.ini
sleep 1
bin/restart phpfpm
echo "Output compression is now disabled, so you can start debugging with SPX."
else
echo "Output compression is already disabled, so you can start debugging with SPX."
fi
}
spx_disable() {
if [[ $S == 0 ]]; then
bin/root sed -i -e 's/^zlib.output_compression = 0/zlib.output_compression = 1/g' /usr/local/etc/php/php.ini
sleep 1
bin/restart phpfpm
echo "Output compression is now enabled, so you can no longer debug with SPX."
else
echo "Output compression is already enabled, so you can no longer debug with SPX."
fi
}
firstArgLetter="$(echo "$1" | head -c 1)"
if [[ $firstArgLetter == "d" ]]; then
spx_disable
elif [[ $firstArgLetter == "e" ]]; then
spx_enable
elif [[ $firstArgLetter == "t" ]]; then
spx_toggle
elif [[ $firstArgLetter == "s" ]]; then
spx_status
else
printf "Please specify either 'disable', 'enable', 'status' or 'toggle' as an argument.\nEx: bin/spx status\n"
fi
================================================
FILE: compose/bin/start
================================================
#!/usr/bin/env bash
set -o errexit
MEM=$(docker info | grep "Total Memory" | cut -d':' -f2 | xargs | sed s/GiB//)
# Docker reports RAM 0.2 less than what it is actually set to
(( $(echo "$MEM < 5.7" | bc -l) )) && echo "There must be at least 6GB of RAM allocated to Docker to continue." && exit
if [ "$1" == "--no-dev" ]; then
bin/docker-compose --no-dev up -d --remove-orphans "${@:2}"
exit $?
fi
# Ref: https://stackoverflow.com/a/51789677/9821321
function parseYaml {
local s
local w
local fs
s='[[:space:]]*'
w='[a-zA-Z0-9_]*'
fs=$(echo @|tr @ '\034')
sed -ne "s|,$s\]$s\$|]|" \
-e "s|^\($s\)\($w\)$s:$s\[$s\(.*\)$s\]|\1\2:\n\1 - \3|;p" "$1" | \
sed -ne "s|,$s}$s\$|}|" \
-e "s|^\($s\)-$s{$s\(.*\)$s}|\1-\n\1 \2|;p" | \
sed -ne "s|^\($s\):|\1|" \
-e "s|^\($s\)-$s{[\"']\(.*\)[\"']}$s\$|\1$fs$fs\2|p" \
-e "s|^\($s\)-$s\(.*\)$s\$|\1$fs$fs\2|p" \
-e "s|^\($s\)\($w\)$s:$s{[\"']\(.*\)[\"']}$s\$|\1$fs\2$fs\3|p" \
-e "s|^\($s\)\($w\)$s:$s\(.*\)$s\$|\1$fs\2$fs\3|p" | \
awk -F"$fs" '{
indent = length($1)/2;
vname[indent] = $2;
for (i in vname) {if (i > indent) {delete vname[i]; idx[i]=0}}
if (length($2) == 0) {vname[indent] = ++idx[indent] };
if (length($3) > 0) {
vn=""; for (i=0; i<indent; i++) {vn = (vn)(vname[i])("_")}
if ("'"$2"'_" == vn) {
print substr($3 ,1 , match($3,":")-1)
}
}
}'
}
# Check if volume files exist to avoid creating an empty folder
VOLUME_LIST=$(parseYaml compose.dev.yaml services_app_volumes)
IGNORE_LIST="./src/app/code ./src/m2-hotfixes ./src/patches ./src/var/log ./src/var/report ./src"
IS_VALID=true
# Loop through all files missing from the compose.dev.yaml file
for file in $VOLUME_LIST; do
if [[ ! -e $file && " $IGNORE_LIST " != *" $file "* ]]; then
echo "$file: No such file or directory"
IS_VALID=false
fi
done
# Wait
gitextract_68gwi905/
├── .gitattributes
├── .github/
│ ├── FUNDING.yml
│ ├── ISSUE_TEMPLATE/
│ │ └── bug_report.md
│ ├── dependabot.yml
│ └── workflows/
│ ├── build-elasticsearch-7-16.yml
│ ├── build-elasticsearch-7-17.yml
│ ├── build-elasticsearch-8-11.yml
│ ├── build-elasticsearch-8-13.yml
│ ├── build-elasticsearch-8-4.yml
│ ├── build-elasticsearch-8-5.yml
│ ├── build-elasticsearch-8-7.yml
│ ├── build-nginx-1-18.yml
│ ├── build-nginx-1-22.yml
│ ├── build-nginx-1-24.yml
│ ├── build-opensearch-1-2.yml
│ ├── build-opensearch-2-12.yml
│ ├── build-opensearch-2-5.yml
│ ├── build-php-8-1.yml
│ ├── build-php-8-2.yml
│ ├── build-php-8-3.yml
│ ├── build-php-8-4.yml
│ ├── build-rabbitmq-3-11.yml
│ ├── build-rabbitmq-3-12.yml
│ ├── build-rabbitmq-3-13.yml
│ ├── build-rabbitmq-3-9.yml
│ ├── build-rabbitmq-4-1.yml
│ ├── build-ssh.yml
│ ├── claude.yml
│ └── shellcheck.yml
├── CHANGELOG.md
├── LICENSE.md
├── README.md
├── compose/
│ ├── .gitignore
│ ├── .vscode/
│ │ └── launch.json
│ ├── Makefile
│ ├── bin/
│ │ ├── analyse
│ │ ├── bash
│ │ ├── blackfire
│ │ ├── cache-clean
│ │ ├── check-dependencies
│ │ ├── cli
│ │ ├── clinotty
│ │ ├── cliq
│ │ ├── composer
│ │ ├── configure-linux
│ │ ├── copyfromcontainer
│ │ ├── copytocontainer
│ │ ├── create-user
│ │ ├── cron
│ │ ├── debug-cli
│ │ ├── deploy
│ │ ├── dev-test-run
│ │ ├── dev-urn-catalog-generate
│ │ ├── devconsole
│ │ ├── docker-compose
│ │ ├── docker-start
│ │ ├── docker-stats
│ │ ├── download
│ │ ├── ece-patches
│ │ ├── fixowns
│ │ ├── fixperms
│ │ ├── grunt
│ │ ├── init
│ │ ├── install-php-extensions
│ │ ├── log
│ │ ├── magento
│ │ ├── magento-version
│ │ ├── mftf
│ │ ├── mysql
│ │ ├── mysqldump
│ │ ├── n98-magerun2
│ │ ├── node
│ │ ├── npm
│ │ ├── phpcbf
│ │ ├── phpcs
│ │ ├── phpcs-json-report
│ │ ├── pwa-studio
│ │ ├── redis
│ │ ├── remove
│ │ ├── removeall
│ │ ├── removenetwork
│ │ ├── removevolumes
│ │ ├── restart
│ │ ├── root
│ │ ├── rootnotty
│ │ ├── setup
│ │ ├── setup-composer-auth
│ │ ├── setup-domain
│ │ ├── setup-grunt
│ │ ├── setup-install
│ │ ├── setup-integration-tests
│ │ ├── setup-pwa-studio
│ │ ├── setup-pwa-studio-sampledata
│ │ ├── setup-ssl
│ │ ├── setup-ssl-ca
│ │ ├── spx
│ │ ├── start
│ │ ├── status
│ │ ├── stop
│ │ ├── stopall
│ │ ├── test/
│ │ │ ├── unit
│ │ │ ├── unit-coverage
│ │ │ └── unit-xdebug
│ │ ├── update
│ │ └── xdebug
│ ├── compose.dev-linux.yaml
│ ├── compose.dev-ssh.yaml
│ ├── compose.dev.yaml
│ ├── compose.healthcheck.yaml
│ ├── compose.yaml
│ ├── env/
│ │ ├── blackfire.env
│ │ ├── cloudflare.env
│ │ ├── db.env
│ │ ├── elasticsearch.env
│ │ ├── magento.env
│ │ ├── opensearch.env
│ │ ├── phpfpm.env
│ │ ├── rabbitmq.env
│ │ └── redis.env
│ └── template/
│ └── dev/
│ └── tests/
│ └── integration/
│ └── etc/
│ ├── install-config-mysql.php.2.3.dist
│ └── install-config-mysql.php.2.4.dist
├── images/
│ ├── elasticsearch/
│ │ ├── 7.16/
│ │ │ └── Dockerfile
│ │ ├── 7.17/
│ │ │ └── Dockerfile
│ │ ├── 8.11/
│ │ │ └── Dockerfile
│ │ ├── 8.13/
│ │ │ └── Dockerfile
│ │ ├── 8.4/
│ │ │ └── Dockerfile
│ │ ├── 8.5/
│ │ │ └── Dockerfile
│ │ └── 8.7/
│ │ └── Dockerfile
│ ├── nginx/
│ │ ├── 1.18/
│ │ │ ├── Dockerfile
│ │ │ └── conf/
│ │ │ ├── default.conf
│ │ │ ├── default.magento1.conf
│ │ │ └── nginx.conf
│ │ ├── 1.22/
│ │ │ ├── Dockerfile
│ │ │ └── conf/
│ │ │ ├── default.conf
│ │ │ ├── default.magento1.conf
│ │ │ └── nginx.conf
│ │ └── 1.24/
│ │ ├── Dockerfile
│ │ └── conf/
│ │ ├── default.conf
│ │ ├── default.magento1.conf
│ │ └── nginx.conf
│ ├── opensearch/
│ │ ├── 1.2/
│ │ │ └── Dockerfile
│ │ ├── 2.12/
│ │ │ └── Dockerfile
│ │ └── 2.5/
│ │ └── Dockerfile
│ ├── php/
│ │ ├── 8.1/
│ │ │ ├── Dockerfile
│ │ │ └── conf/
│ │ │ ├── blackfire.ini
│ │ │ ├── msmtprc
│ │ │ ├── php-fpm.conf
│ │ │ ├── php.ini
│ │ │ ├── spx.ini
│ │ │ └── www.conf
│ │ ├── 8.2/
│ │ │ ├── Dockerfile
│ │ │ └── conf/
│ │ │ ├── blackfire.ini
│ │ │ ├── msmtprc
│ │ │ ├── php-fpm.conf
│ │ │ ├── php.ini
│ │ │ ├── spx.ini
│ │ │ └── www.conf
│ │ ├── 8.3/
│ │ │ ├── Dockerfile
│ │ │ └── conf/
│ │ │ ├── blackfire.ini
│ │ │ ├── msmtprc
│ │ │ ├── php-fpm.conf
│ │ │ ├── php.ini
│ │ │ ├── spx.ini
│ │ │ └── www.conf
│ │ └── 8.4/
│ │ ├── Dockerfile
│ │ └── conf/
│ │ ├── blackfire.ini
│ │ ├── msmtprc
│ │ ├── php-fpm.conf
│ │ ├── php.ini
│ │ ├── spx.ini
│ │ └── www.conf
│ ├── rabbitmq/
│ │ ├── 3.11/
│ │ │ ├── Dockerfile
│ │ │ └── conf/
│ │ │ └── rabbitmq.conf
│ │ ├── 3.12/
│ │ │ ├── Dockerfile
│ │ │ └── conf/
│ │ │ └── rabbitmq.conf
│ │ ├── 3.13/
│ │ │ ├── Dockerfile
│ │ │ └── conf/
│ │ │ └── rabbitmq.conf
│ │ ├── 3.9/
│ │ │ ├── Dockerfile
│ │ │ └── conf/
│ │ │ └── rabbitmq.conf
│ │ └── 4.1/
│ │ ├── Dockerfile
│ │ └── conf/
│ │ └── rabbitmq.conf
│ └── ssh/
│ └── Dockerfile
└── lib/
├── onelinesetup
└── template
Condensed preview — 184 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (327K chars).
[
{
"path": ".gitattributes",
"chars": 20,
"preview": "/docs export-ignore\n"
},
{
"path": ".github/FUNDING.yml",
"chars": 65,
"preview": "# These are supported funding model platforms\n\ngithub: markshust\n"
},
{
"path": ".github/ISSUE_TEMPLATE/bug_report.md",
"chars": 190,
"preview": "---\nname: Bug report\nabout: Create a report to help us improve\ntitle: ''\nlabels: ''\nassignees: ''\n\n---\n\n**Description**\n"
},
{
"path": ".github/dependabot.yml",
"chars": 111,
"preview": "version: 2\nupdates:\n - package-ecosystem: github-actions\n directory: /\n schedule:\n interval: daily\n"
},
{
"path": ".github/workflows/build-elasticsearch-7-16.yml",
"chars": 938,
"preview": "name: build-elasticsearch-7-16\n\non: workflow_dispatch\n\njobs:\n elasticsearch-7-17:\n runs-on: ubuntu-latest\n steps:"
},
{
"path": ".github/workflows/build-elasticsearch-7-17.yml",
"chars": 938,
"preview": "name: build-elasticsearch-7-17\n\non: workflow_dispatch\n\njobs:\n elasticsearch-7-17:\n runs-on: ubuntu-latest\n steps:"
},
{
"path": ".github/workflows/build-elasticsearch-8-11.yml",
"chars": 936,
"preview": "name: build-elasticsearch-8-11\n\non: workflow_dispatch\n\njobs:\n elasticsearch-8-5:\n runs-on: ubuntu-latest\n steps:\n"
},
{
"path": ".github/workflows/build-elasticsearch-8-13.yml",
"chars": 936,
"preview": "name: build-elasticsearch-8-13\n\non: workflow_dispatch\n\njobs:\n elasticsearch-8-5:\n runs-on: ubuntu-latest\n steps:\n"
},
{
"path": ".github/workflows/build-elasticsearch-8-4.yml",
"chars": 932,
"preview": "name: build-elasticsearch-8-4\n\non: workflow_dispatch\n\njobs:\n elasticsearch-8-4:\n runs-on: ubuntu-latest\n steps:\n "
},
{
"path": ".github/workflows/build-elasticsearch-8-5.yml",
"chars": 932,
"preview": "name: build-elasticsearch-8-5\n\non: workflow_dispatch\n\njobs:\n elasticsearch-8-5:\n runs-on: ubuntu-latest\n steps:\n "
},
{
"path": ".github/workflows/build-elasticsearch-8-7.yml",
"chars": 932,
"preview": "name: build-elasticsearch-8-7\n\non: workflow_dispatch\n\njobs:\n elasticsearch-8-5:\n runs-on: ubuntu-latest\n steps:\n "
},
{
"path": ".github/workflows/build-nginx-1-18.yml",
"chars": 898,
"preview": "name: build-nginx-1-18\n\non: workflow_dispatch\n\njobs:\n nginx-1-18:\n runs-on: ubuntu-latest\n steps:\n -\n "
},
{
"path": ".github/workflows/build-nginx-1-22.yml",
"chars": 898,
"preview": "name: build-nginx-1-22\n\non: workflow_dispatch\n\njobs:\n nginx-1-18:\n runs-on: ubuntu-latest\n steps:\n -\n "
},
{
"path": ".github/workflows/build-nginx-1-24.yml",
"chars": 898,
"preview": "name: build-nginx-1-24\n\non: workflow_dispatch\n\njobs:\n nginx-1-18:\n runs-on: ubuntu-latest\n steps:\n -\n "
},
{
"path": ".github/workflows/build-opensearch-1-2.yml",
"chars": 917,
"preview": "name: build-opensearch-1-2\n\non: workflow_dispatch\n\njobs:\n opensearch-1-2:\n runs-on: ubuntu-latest\n steps:\n -"
},
{
"path": ".github/workflows/build-opensearch-2-12.yml",
"chars": 921,
"preview": "name: build-opensearch-2-12\n\non: workflow_dispatch\n\njobs:\n opensearch-2-5:\n runs-on: ubuntu-latest\n steps:\n "
},
{
"path": ".github/workflows/build-opensearch-2-5.yml",
"chars": 917,
"preview": "name: build-opensearch-2-5\n\non: workflow_dispatch\n\njobs:\n opensearch-2-5:\n runs-on: ubuntu-latest\n steps:\n -"
},
{
"path": ".github/workflows/build-php-8-1.yml",
"chars": 890,
"preview": "name: build-php-8-1\n\non: workflow_dispatch\n\njobs:\n php-8-1:\n runs-on: ubuntu-latest\n steps:\n -\n name:"
},
{
"path": ".github/workflows/build-php-8-2.yml",
"chars": 890,
"preview": "name: build-php-8-2\n\non: workflow_dispatch\n\njobs:\n php-8-2:\n runs-on: ubuntu-latest\n steps:\n -\n name:"
},
{
"path": ".github/workflows/build-php-8-3.yml",
"chars": 890,
"preview": "name: build-php-8-3\n\non: workflow_dispatch\n\njobs:\n php-8-3:\n runs-on: ubuntu-latest\n steps:\n -\n name:"
},
{
"path": ".github/workflows/build-php-8-4.yml",
"chars": 890,
"preview": "name: build-php-8-4\n\non: workflow_dispatch\n\njobs:\n php-8-3:\n runs-on: ubuntu-latest\n steps:\n -\n name:"
},
{
"path": ".github/workflows/build-rabbitmq-3-11.yml",
"chars": 912,
"preview": "name: build-rabbitmq-3-11\n\non: workflow_dispatch\n\njobs:\n rabbitmq-3-11:\n runs-on: ubuntu-latest\n steps:\n -\n "
},
{
"path": ".github/workflows/build-rabbitmq-3-12.yml",
"chars": 912,
"preview": "name: build-rabbitmq-3-12\n\non: workflow_dispatch\n\njobs:\n rabbitmq-3-11:\n runs-on: ubuntu-latest\n steps:\n -\n "
},
{
"path": ".github/workflows/build-rabbitmq-3-13.yml",
"chars": 912,
"preview": "name: build-rabbitmq-3-13\n\non: workflow_dispatch\n\njobs:\n rabbitmq-3-11:\n runs-on: ubuntu-latest\n steps:\n -\n "
},
{
"path": ".github/workflows/build-rabbitmq-3-9.yml",
"chars": 908,
"preview": "name: build-rabbitmq-3-9\n\non: workflow_dispatch\n\njobs:\n rabbitmq-3-9:\n runs-on: ubuntu-latest\n steps:\n -\n "
},
{
"path": ".github/workflows/build-rabbitmq-4-1.yml",
"chars": 907,
"preview": "name: build-rabbitmq-4-1\n\non: workflow_dispatch\n\njobs:\n rabbitmq-4-1:\n runs-on: ubuntu-latest\n steps:\n -\n "
},
{
"path": ".github/workflows/build-ssh.yml",
"chars": 807,
"preview": "name: build-ssh\n\non: workflow_dispatch\n\njobs:\n ssh:\n runs-on: ubuntu-latest\n steps:\n -\n name: Checkou"
},
{
"path": ".github/workflows/claude.yml",
"chars": 1088,
"preview": "name: Claude PR Assistant\n\non:\n issue_comment:\n types: [created]\n pull_request_review_comment:\n types: [created]"
},
{
"path": ".github/workflows/shellcheck.yml",
"chars": 543,
"preview": "name: ShellCheck\n\non:\n push:\n paths:\n - \"compose/bin/**\"\n branches:\n - master\n pull_request:\n paths"
},
{
"path": "CHANGELOG.md",
"chars": 59682,
"preview": "# Changelog\nAll notable changes to this project will be documented in this file.\n\nThe format is based on [Keep a Changel"
},
{
"path": "LICENSE.md",
"chars": 1069,
"preview": "MIT License\n\nCopyright (c) 2016 Mage Inferno\n\nPermission is hereby granted, free of charge, to any person obtaining a co"
},
{
"path": "README.md",
"chars": 46302,
"preview": "<h1 align=\"center\">markshust/docker-magento</h1>\n\n<div align=\"center\">\n <p>Mark Shust's Docker Configuration for Magent"
},
{
"path": "compose/.gitignore",
"chars": 5,
"preview": "src/\n"
},
{
"path": "compose/.vscode/launch.json",
"chars": 224,
"preview": "{\n \"configurations\": [\n {\n \"name\": \"Listen for XDebug\",\n \"type\": \"php\",\n \"request\": \"launch\",\n \""
},
{
"path": "compose/Makefile",
"chars": 9136,
"preview": "SHELL := /usr/bin/env bash\n\nargs = `arg=\"$(filter-out $(firstword $(MAKECMDGOALS)),$(MAKECMDGOALS))\" && echo $${arg:-${1"
},
{
"path": "compose/bin/analyse",
"chars": 60,
"preview": "#!/usr/bin/env bash\nbin/cli vendor/bin/phpstan analyse \"$@\"\n"
},
{
"path": "compose/bin/bash",
"chars": 33,
"preview": "#!/usr/bin/env bash\nbin/cli bash\n"
},
{
"path": "compose/bin/blackfire",
"chars": 1440,
"preview": "#!/usr/bin/env bash\n\nS=$(bin/clinotty cat /usr/local/etc/php/conf.d/blackfire.ini | grep -iGc '\\;extension=blackfire.so'"
},
{
"path": "compose/bin/cache-clean",
"chars": 764,
"preview": "#!/usr/bin/env bash\nCOMPOSER_GLOBAL=/var/www/.composer-global\nCACHE_CLEAN=${COMPOSER_GLOBAL}/vendor/bin/cache-clean.js\n\n"
},
{
"path": "compose/bin/check-dependencies",
"chars": 7845,
"preview": "#!/usr/bin/env bash\n\n# Define colors for formatting\nRED='\\033[0;31m'\nGREEN='\\033[0;32m'\nYELLOW='\\033[0;33m'\nBLUE='\\033[0"
},
{
"path": "compose/bin/cli",
"chars": 124,
"preview": "#!/usr/bin/env bash\n[ -z \"$1\" ] && echo \"Please specify a CLI command (ex. ls)\" && exit\nbin/docker-compose exec phpfpm \""
},
{
"path": "compose/bin/clinotty",
"chars": 163,
"preview": "#!/usr/bin/env bash\n[ -z \"$1\" ] && echo \"Please specify a CLI command (ex. ls)\" && exit\n# -T: Disable pseudo-tty allocat"
},
{
"path": "compose/bin/cliq",
"chars": 150,
"preview": "#!/usr/bin/env bash\n[ -z \"$1\" ] && echo \"Please specify a CLI command (ex. ls)\" && exit\n# Without stdout and stderr\nbin/"
},
{
"path": "compose/bin/composer",
"chars": 42,
"preview": "#!/usr/bin/env bash\nbin/cli composer \"$@\"\n"
},
{
"path": "compose/bin/configure-linux",
"chars": 996,
"preview": "#!/usr/bin/env bash\n\nif [ \"$(uname)\" == \"Darwin\" ]; then\n echo \"This script is designed for Linux and will not work p"
},
{
"path": "compose/bin/copyfromcontainer",
"chars": 680,
"preview": "#!/usr/bin/env bash\n[ -z \"$1\" ] && echo \"Please specify a directory or file to copy from container (ex. vendor, --all)\" "
},
{
"path": "compose/bin/copytocontainer",
"chars": 785,
"preview": "#!/usr/bin/env bash\n[ $# -eq 0 ] && echo \"Please specify one or more directories/files to copy to container (ex. vendor,"
},
{
"path": "compose/bin/create-user",
"chars": 757,
"preview": "#!/usr/bin/env bash\n\nread -r -p \"Create an admin (a) or a customer (c)? [a/c]: \" account_type\n[[ \"$account_type\" == [Aa]"
},
{
"path": "compose/bin/cron",
"chars": 628,
"preview": "#!/usr/bin/env bash\n[ -z \"$1\" ] && echo \"Please specify a service operation (start|stop|status|restart|reload|force-relo"
},
{
"path": "compose/bin/debug-cli",
"chars": 1385,
"preview": "#!/usr/bin/env bash\nS=$(bin/clinotty cat /usr/local/etc/php/php.ini | grep -iGc 'xdebug.mode = off');\nR=$(grep -c 'XDEBU"
},
{
"path": "compose/bin/deploy",
"chars": 313,
"preview": "#!/usr/bin/env bash\nbin/composer install\nbin/magento maintenance:enable\nbin/cli rm -rf generated/code var/view_preproces"
},
{
"path": "compose/bin/dev-test-run",
"chars": 219,
"preview": "#!/usr/bin/env bash\n\n[ -z \"$1\" ] && echo \"Please specify test type (ex. integration)\" && exit\n\nTEST_TYPE=\"$1\"\nshift\nbin/"
},
{
"path": "compose/bin/dev-urn-catalog-generate",
"chars": 216,
"preview": "#!/usr/bin/env bash\nbin/magento dev:urn-catalog:generate misc.xml\nbin/copyfromcontainer misc.xml\nmkdir -p src/.idea\nmv s"
},
{
"path": "compose/bin/devconsole",
"chars": 49,
"preview": "#!/usr/bin/env bash\nbin/n98-magerun2 dev:console\n"
},
{
"path": "compose/bin/docker-compose",
"chars": 902,
"preview": "#!/usr/bin/env bash\n\nif docker compose version > /dev/null 2>&1; then\n DOCKER_COMPOSE=\"docker compose\"\nelse\n DOCKER_CO"
},
{
"path": "compose/bin/docker-start",
"chars": 1327,
"preview": "#!/usr/bin/env bash\n\n# Function to check if Docker daemon is running\ndocker_running() {\n docker stats --no-stream &> /d"
},
{
"path": "compose/bin/docker-stats",
"chars": 2070,
"preview": "#!/usr/bin/env bash\n\nstty -echo\n\nINTERVAL=3\n\ntrap 'stty echo; exit' INT EXIT\n\nprint_header() {\n echo \"+--------------"
},
{
"path": "compose/bin/download",
"chars": 1192,
"preview": "#!/usr/bin/env bash\n\nEDITION=${1:-community}\n\n# Define ANSI escape codes for colors\nYELLOW='\\033[0;33m'\nBLUE='\\033[0;34m"
},
{
"path": "compose/bin/ece-patches",
"chars": 233,
"preview": "#!/usr/bin/env bash\nif ! bin/cliq ls vendor/bin/ece-patches; then\n echo \"The ece-patches tool is not installed. Pleas"
},
{
"path": "compose/bin/fixowns",
"chars": 221,
"preview": "#!/usr/bin/env bash\necho \"Fixing filesystem ownerships...\"\n\nif [ -z \"$1\" ]; then\n bin/rootnotty chown -R app:app /var/w"
},
{
"path": "compose/bin/fixperms",
"chars": 346,
"preview": "#!/usr/bin/env bash\necho \"Fixing filesystem permissions...\"\n\nif [ -z \"$1\" ]; then\n bin/clinotty find var vendor pub/sta"
},
{
"path": "compose/bin/grunt",
"chars": 43,
"preview": "#!/usr/bin/env bash\nbin/cli npx grunt \"$@\"\n"
},
{
"path": "compose/bin/init",
"chars": 1039,
"preview": "#!/usr/bin/env bash\n\n# Script to initialize a Magento development environment\n\n# Exit immediately if a command fails\nset"
},
{
"path": "compose/bin/install-php-extensions",
"chars": 433,
"preview": "#!/usr/bin/env bash\nif ! bin/cliq ls /usr/local/bin/install-php-extensions; then\n echo \"Downloading install-php-extensi"
},
{
"path": "compose/bin/log",
"chars": 1275,
"preview": "#!/usr/bin/env bash\n\nCONTAINER_LOG_PATH=\"/var/www/html/var/log/\";\n\ndisplay_help() {\n echo -e \"Description:\n Tail logs "
},
{
"path": "compose/bin/magento",
"chars": 45,
"preview": "#!/usr/bin/env bash\nbin/cli bin/magento \"$@\"\n"
},
{
"path": "compose/bin/magento-version",
"chars": 637,
"preview": "#!/usr/bin/env bash\n\n# Method 1: Using bin/magento --version\nversion=$(bin/magento --version --no-ansi 2> /dev/null | cu"
},
{
"path": "compose/bin/mftf",
"chars": 53,
"preview": "#!/usr/bin/env bash\nbin/clinotty vendor/bin/mftf \"$@\""
},
{
"path": "compose/bin/mysql",
"chars": 382,
"preview": "#!/usr/bin/env bash\n\n# shellcheck source=../env/db.env\nsource env/db.env\nif [ -t 0 ]; then\n # Need tty to run mysql she"
},
{
"path": "compose/bin/mysqldump",
"chars": 76,
"preview": "#!/usr/bin/env bash\nbin/n98-magerun2 db:dump --human-readable --stdout \"$@\"\n"
},
{
"path": "compose/bin/n98-magerun2",
"chars": 562,
"preview": "#!/usr/bin/env bash\nif ! bin/cliq ls bin/n98-magerun2.phar; then\n echo \"Downloading n98-magerun2.phar, just a moment..."
},
{
"path": "compose/bin/node",
"chars": 38,
"preview": "#!/usr/bin/env bash\nbin/cli node \"$@\"\n"
},
{
"path": "compose/bin/npm",
"chars": 37,
"preview": "#!/usr/bin/env bash\nbin/cli npm \"$@\"\n"
},
{
"path": "compose/bin/phpcbf",
"chars": 140,
"preview": "#!/usr/bin/env bash\nbin/clinotty vendor/bin/phpcbf --standard=Magento2 --extensions=php,phtml --error-severity=10 --igno"
},
{
"path": "compose/bin/phpcs",
"chars": 139,
"preview": "#!/usr/bin/env bash\nbin/clinotty vendor/bin/phpcs --standard=Magento2 --extensions=php,phtml --error-severity=10 --ignor"
},
{
"path": "compose/bin/phpcs-json-report",
"chars": 167,
"preview": "#!/usr/bin/env bash\nbin/clinotty vendor/bin/phpcs --standard=Magento2 --extensions=php,phtml --error-severity=10 --ignor"
},
{
"path": "compose/bin/pwa-studio",
"chars": 220,
"preview": "#!/usr/bin/env bash\nset -o errexit\n\nif [ ! -d pwa-studio ]; then\n echo \"PWA studio must first be installed by running"
},
{
"path": "compose/bin/redis",
"chars": 55,
"preview": "#!/usr/bin/env bash\nbin/docker-compose exec redis \"$@\"\n"
},
{
"path": "compose/bin/remove",
"chars": 42,
"preview": "#!/usr/bin/env bash\nbin/docker-compose rm\n"
},
{
"path": "compose/bin/removeall",
"chars": 79,
"preview": "#!/usr/bin/env bash\nbin/stopall\nbin/remove\nbin/removevolumes\nbin/removenetwork\n"
},
{
"path": "compose/bin/removenetwork",
"chars": 173,
"preview": "#!/usr/bin/env bash\ncurrent_folder=${PWD##*/}\nvolume_prefix=$(echo \"$current_folder\" | awk '{print tolower($0)}' | sed '"
},
{
"path": "compose/bin/removevolumes",
"chars": 355,
"preview": "#!/usr/bin/env bash\ncurrent_folder=${PWD##*/}\nvolume_prefix=$(echo \"$current_folder\" | awk '{print tolower($0)}' | sed '"
},
{
"path": "compose/bin/restart",
"chars": 49,
"preview": "#!/usr/bin/env bash\nbin/stop \"$@\"\nbin/start \"$@\"\n"
},
{
"path": "compose/bin/root",
"chars": 132,
"preview": "#!/usr/bin/env bash\n[ -z \"$1\" ] && echo \"Please specify a CLI command (ex. ls)\" && exit\nbin/docker-compose exec -u root "
},
{
"path": "compose/bin/rootnotty",
"chars": 135,
"preview": "#!/usr/bin/env bash\n[ -z \"$1\" ] && echo \"Please specify a CLI command (ex. ls)\" && exit\nbin/docker-compose exec -u root "
},
{
"path": "compose/bin/setup",
"chars": 2127,
"preview": "#!/usr/bin/env bash\nset -o errexit\nif [ -f \"../env/magento.env\" ]; then\n source \"../env/magento.env\"\nelse\n echo \"W"
},
{
"path": "compose/bin/setup-composer-auth",
"chars": 1553,
"preview": "#!/usr/bin/env bash\nMAGENTO_USERNAME_PROP=\"http-basic.repo.magento.com.username\"\nMAGENTO_PASSWORD_PROP=\"http-basic.repo."
},
{
"path": "compose/bin/setup-domain",
"chars": 596,
"preview": "#!/usr/bin/env bash\nset -o errexit\n\n[ -z \"$1\" ] && echo \"Please specify a domain name (ex. magento.test)\" && exit\n\nDOMAI"
},
{
"path": "compose/bin/setup-grunt",
"chars": 2516,
"preview": "#!/usr/bin/env bash\necho \"Confirming n98-magerun2 is installed...\"\nbin/n98-magerun2 > /dev/null 2>&1\n\nDEFAULT_THEME_ID=\""
},
{
"path": "compose/bin/setup-install",
"chars": 1932,
"preview": "#!/usr/bin/env bash\nset -o errexit\n\nDOMAIN=${1:-magento.test}\n\n# shellcheck source=../env/db.env\nsource env/db.env\n# she"
},
{
"path": "compose/bin/setup-integration-tests",
"chars": 1010,
"preview": "#!/usr/bin/env bash\n\n# shellcheck source=../env/db.env\nsource env/db.env\n\nMYSQL_INTEGRATION_CONFIG=dev/tests/integration"
},
{
"path": "compose/bin/setup-pwa-studio",
"chars": 410,
"preview": "#!/usr/bin/env bash\nset -o errexit\necho \"Install NodeJS and Yarn on host machine, otherwise setup will fail\"\n\nBASE_URL=$"
},
{
"path": "compose/bin/setup-pwa-studio-sampledata",
"chars": 1085,
"preview": "#!/usr/bin/env bash\nset +e\n\nRED='\\033[0;31m'\nGREEN='\\033[0;32m'\nNC='\\033[0m'\n\nBASE_URL=${1:-master-7rqtwti-mfwmkrjfqvbjk"
},
{
"path": "compose/bin/setup-ssl",
"chars": 1083,
"preview": "#!/usr/bin/env bash\n[ $# -eq 0 ] && echo \"Please specify at least one domain (ex. mydomain.test)\" && exit\n\n# Generate ce"
},
{
"path": "compose/bin/setup-ssl-ca",
"chars": 2655,
"preview": "#!/usr/bin/env bash\nset -o errexit\n# Generate a new local CA \"/root/.local/share/mkcert\"\nbin/docker-compose exec -T -u r"
},
{
"path": "compose/bin/spx",
"chars": 1631,
"preview": "#!/usr/bin/env bash\n\nS=$(bin/clinotty cat /usr/local/etc/php/php.ini | grep -iGc 'zlib.output_compression = 1');\n\nspx_st"
},
{
"path": "compose/bin/start",
"chars": 2664,
"preview": "#!/usr/bin/env bash\nset -o errexit\n\nMEM=$(docker info | grep \"Total Memory\" | cut -d':' -f2 | xargs | sed s/GiB//)\n# Doc"
},
{
"path": "compose/bin/status",
"chars": 42,
"preview": "#!/usr/bin/env bash\nbin/docker-compose ps\n"
},
{
"path": "compose/bin/stop",
"chars": 49,
"preview": "#!/usr/bin/env bash\nbin/docker-compose stop \"$@\"\n"
},
{
"path": "compose/bin/stopall",
"chars": 245,
"preview": "#!/usr/bin/env bash\nif [ -z \"$(docker ps -q)\" ]; then\n echo \"You have no running container\"\nelse\n echo \"Stopping a"
},
{
"path": "compose/bin/test/unit",
"chars": 566,
"preview": "#!/usr/bin/env bash\n\ndisplay_help() {\n echo -e \"Description:\n Run unit tests\n\nUsage:\n bin/test/unit <unit_test_path>\n"
},
{
"path": "compose/bin/test/unit-coverage",
"chars": 752,
"preview": "#!/usr/bin/env bash\n\ndisplay_help() {\n echo -e \"Description:\n Generate unit tests coverage report in folder: dev/tests"
},
{
"path": "compose/bin/test/unit-xdebug",
"chars": 674,
"preview": "#!/usr/bin/env bash\n\ndisplay_help() {\n echo -e \"Description:\n Run unit tests with xdebug (you need to turn on xdebug i"
},
{
"path": "compose/bin/update",
"chars": 299,
"preview": "#!/usr/bin/env bash\nset -o errexit\nmkdir -p tmpupdate && cd \"$_\"\ncurl -s https://raw.githubusercontent.com/markshust/doc"
},
{
"path": "compose/bin/xdebug",
"chars": 1393,
"preview": "#!/usr/bin/env bash\n\ncurrent_mode=$(bin/clinotty cat /usr/local/etc/php/php.ini | grep '^xdebug.mode' | cut -d'=' -f2 | "
},
{
"path": "compose/compose.dev-linux.yaml",
"chars": 315,
"preview": "services:\n app:\n volumes: &appvolumes\n - ./src/nginx.conf.sample:/var/www/html/nginx.conf:cached\n - ./src:"
},
{
"path": "compose/compose.dev-ssh.yaml",
"chars": 228,
"preview": "services:\n app:\n volumes: &appvolumes\n - ./src/nginx.conf.sample:/var/www/html/nginx.conf:cached\n\n phpfpm:\n "
},
{
"path": "compose/compose.dev.yaml",
"chars": 1375,
"preview": "services:\n app:\n volumes: &appvolumes\n ## Host mounts with performance penalty, only put what is necessary here"
},
{
"path": "compose/compose.healthcheck.yaml",
"chars": 1451,
"preview": "x-healthcheck-defaults: &healthcheck-defaults\n interval: 5s\n timeout: 5s\n retries: 6\n\nx-healthcheck-slow-start: &heal"
},
{
"path": "compose/compose.yaml",
"chars": 4682,
"preview": "## Mark Shust's Docker Configuration for Magento\n## (https://github.com/markshust/docker-magento)\n##\n## Version 52.1.0\n\n"
},
{
"path": "compose/env/blackfire.env",
"chars": 101,
"preview": "BLACKFIRE_DISABLE_LEGACY_PORT=true\nBLACKFIRE_LOG_LEVEL=\nBLACKFIRE_SERVER_ID=\nBLACKFIRE_SERVER_TOKEN=\n"
},
{
"path": "compose/env/cloudflare.env",
"chars": 14,
"preview": "TUNNEL_TOKEN=\n"
},
{
"path": "compose/env/db.env",
"chars": 293,
"preview": "MYSQL_HOST=db\nMYSQL_ROOT_PASSWORD=magento\nMYSQL_DATABASE=magento\nMYSQL_USER=magento\nMYSQL_PASSWORD=magento\n\nMYSQL_INTEGR"
},
{
"path": "compose/env/elasticsearch.env",
"chars": 35,
"preview": "ES_HOST=elasticsearch\nES_PORT=9200\n"
},
{
"path": "compose/env/magento.env",
"chars": 272,
"preview": "MAGENTO_ADMIN_EMAIL=john.smith@gmail.com\nMAGENTO_ADMIN_FIRST_NAME=john\nMAGENTO_ADMIN_LAST_NAME=smith\nMAGENTO_ADMIN_USER="
},
{
"path": "compose/env/opensearch.env",
"chars": 131,
"preview": "OPENSEARCH_HOST=opensearch\nOPENSEARCH_PORT=9200\n\n# Prevent security patch conflicts with core M2 code\nDISABLE_SECURITY_P"
},
{
"path": "compose/env/phpfpm.env",
"chars": 140,
"preview": "BLACKFIRE_CLIENT_ID=\nBLACKFIRE_CLIENT_TOKEN=\nCOMPOSER_DISABLE_XDEBUG_WARN=1\nPHP_CS_FIXER_IGNORE_ENV=1\nPUPPETEER_SKIP_CHR"
},
{
"path": "compose/env/rabbitmq.env",
"chars": 158,
"preview": "RABBITMQ_HOST=rabbitmq\nRABBITMQ_PORT=5672\nRABBITMQ_MANAGEMENT_PORT=15672\nRABBITMQ_DEFAULT_USER=magento\nRABBITMQ_DEFAULT_"
},
{
"path": "compose/env/redis.env",
"chars": 140,
"preview": "REDIS_CACHE_BACKEND_SERVER=redis\nREDIS_CACHE_BACKEND_DB=0\nREDIS_PAGE_CACHE_SERVER=redis\nREDIS_PAGE_CACHE_DB=1\nREDIS_SESS"
},
{
"path": "compose/template/dev/tests/integration/etc/install-config-mysql.php.2.3.dist",
"chars": 786,
"preview": "<?php\n/**\n * Copyright © Magento, Inc. All rights reserved.\n * See COPYING.txt for license details.\n */\nreturn [\n 'db"
},
{
"path": "compose/template/dev/tests/integration/etc/install-config-mysql.php.2.4.dist",
"chars": 905,
"preview": "<?php\n/**\n * Copyright © Magento, Inc. All rights reserved.\n * See COPYING.txt for license details.\n */\n\nreturn [\n 'd"
},
{
"path": "images/elasticsearch/7.16/Dockerfile",
"chars": 128,
"preview": "FROM elasticsearch:7.16.3\n\nRUN /usr/share/elasticsearch/bin/elasticsearch-plugin install \\\n analysis-icu \\\n analysis-p"
},
{
"path": "images/elasticsearch/7.17/Dockerfile",
"chars": 129,
"preview": "FROM elasticsearch:7.17.16\n\nRUN /usr/share/elasticsearch/bin/elasticsearch-plugin install \\\n analysis-icu \\\n analysis-"
},
{
"path": "images/elasticsearch/8.11/Dockerfile",
"chars": 128,
"preview": "FROM elasticsearch:8.11.4\n\nRUN /usr/share/elasticsearch/bin/elasticsearch-plugin install \\\n analysis-icu \\\n analysis-p"
},
{
"path": "images/elasticsearch/8.13/Dockerfile",
"chars": 128,
"preview": "FROM elasticsearch:8.13.0\n\nRUN /usr/share/elasticsearch/bin/elasticsearch-plugin install \\\n analysis-icu \\\n analysis-p"
},
{
"path": "images/elasticsearch/8.4/Dockerfile",
"chars": 127,
"preview": "FROM elasticsearch:8.4.3\n\nRUN /usr/share/elasticsearch/bin/elasticsearch-plugin install \\\n analysis-icu \\\n analysis-ph"
},
{
"path": "images/elasticsearch/8.5/Dockerfile",
"chars": 127,
"preview": "FROM elasticsearch:8.5.3\n\nRUN /usr/share/elasticsearch/bin/elasticsearch-plugin install \\\n analysis-icu \\\n analysis-ph"
},
{
"path": "images/elasticsearch/8.7/Dockerfile",
"chars": 127,
"preview": "FROM elasticsearch:8.7.1\n\nRUN /usr/share/elasticsearch/bin/elasticsearch-plugin install \\\n analysis-icu \\\n analysis-ph"
},
{
"path": "images/nginx/1.18/Dockerfile",
"chars": 921,
"preview": "FROM nginx:1.18-alpine\nMAINTAINER Mark Shust <mark@shust.com>\n\nARG APP_ID=1000\n\nRUN addgroup -g \"$APP_ID\" app \\\n && addu"
},
{
"path": "images/nginx/1.18/conf/default.conf",
"chars": 739,
"preview": "upstream fastcgi_backend {\n server unix:/sock/docker.sock;\n}\n\nserver {\n listen 8000;\n return 301 https://$host$reques"
},
{
"path": "images/nginx/1.18/conf/default.magento1.conf",
"chars": 629,
"preview": "upstream fastcgi_backend {\n server unix:/sock/docker.sock;\n}\n\nserver {\n listen 8000;\n server_name localhost;\n\n set $"
},
{
"path": "images/nginx/1.18/conf/nginx.conf",
"chars": 821,
"preview": "# let's assume dual-core machine\nworker_processes 2;\n\nerror_log /var/log/nginx/error.log debug;\npid /var/run/nginx.pid;\n"
},
{
"path": "images/nginx/1.22/Dockerfile",
"chars": 921,
"preview": "FROM nginx:1.22-alpine\nMAINTAINER Mark Shust <mark@shust.com>\n\nARG APP_ID=1000\n\nRUN addgroup -g \"$APP_ID\" app \\\n && addu"
},
{
"path": "images/nginx/1.22/conf/default.conf",
"chars": 739,
"preview": "upstream fastcgi_backend {\n server unix:/sock/docker.sock;\n}\n\nserver {\n listen 8000;\n return 301 https://$host$reques"
},
{
"path": "images/nginx/1.22/conf/default.magento1.conf",
"chars": 629,
"preview": "upstream fastcgi_backend {\n server unix:/sock/docker.sock;\n}\n\nserver {\n listen 8000;\n server_name localhost;\n\n set $"
},
{
"path": "images/nginx/1.22/conf/nginx.conf",
"chars": 821,
"preview": "# let's assume dual-core machine\nworker_processes 2;\n\nerror_log /var/log/nginx/error.log debug;\npid /var/run/nginx.pid;\n"
},
{
"path": "images/nginx/1.24/Dockerfile",
"chars": 929,
"preview": "FROM nginx:1.24-alpine\nLABEL maintainer=\"Mark Shust <mark@shust.com>\"\n\nARG APP_ID=1000\n\nRUN addgroup -g \"$APP_ID\" app \\\n"
},
{
"path": "images/nginx/1.24/conf/default.conf",
"chars": 739,
"preview": "upstream fastcgi_backend {\n server unix:/sock/docker.sock;\n}\n\nserver {\n listen 8000;\n return 301 https://$host$reques"
},
{
"path": "images/nginx/1.24/conf/default.magento1.conf",
"chars": 629,
"preview": "upstream fastcgi_backend {\n server unix:/sock/docker.sock;\n}\n\nserver {\n listen 8000;\n server_name localhost;\n\n set $"
},
{
"path": "images/nginx/1.24/conf/nginx.conf",
"chars": 822,
"preview": "# let's assume dual-core machine\nworker_processes 2;\n\nerror_log /var/log/nginx/error.log debug;\npid /var/run/nginx.pid;\n"
},
{
"path": "images/opensearch/1.2/Dockerfile",
"chars": 144,
"preview": "FROM opensearchproject/opensearch:1.2.4\n\nRUN /usr/share/opensearch/bin/opensearch-plugin install --batch \\\n analysis-ic"
},
{
"path": "images/opensearch/2.12/Dockerfile",
"chars": 145,
"preview": "FROM opensearchproject/opensearch:2.12.0\n\nRUN /usr/share/opensearch/bin/opensearch-plugin install --batch \\\n analysis-i"
},
{
"path": "images/opensearch/2.5/Dockerfile",
"chars": 144,
"preview": "FROM opensearchproject/opensearch:2.5.0\n\nRUN /usr/share/opensearch/bin/opensearch-plugin install --batch \\\n analysis-ic"
},
{
"path": "images/php/8.1/Dockerfile",
"chars": 2687,
"preview": "FROM php:8.1-fpm-bookworm\nLABEL maintainer=\"Mark Shust <mark@shust.com>\"\n\nARG APP_ID=1000\nRUN groupadd -g \"$APP_ID\" app "
},
{
"path": "images/php/8.1/conf/blackfire.ini",
"chars": 67,
"preview": "extension=blackfire.so\nblackfire.agent_socket=tcp://blackfire:8307\n"
},
{
"path": "images/php/8.1/conf/msmtprc",
"chars": 66,
"preview": "account default\nhost mailcatcher\nport 1025\nfrom \"user@domain.com\"\n"
},
{
"path": "images/php/8.1/conf/php-fpm.conf",
"chars": 671,
"preview": "; This file was initially adapted from the output of: (on PHP 5.6)\n; grep -vE '^;|^ *$' /usr/local/etc/php-fpm.conf.de"
},
{
"path": "images/php/8.1/conf/php.ini",
"chars": 441,
"preview": "memory_limit = 4G\nmax_execution_time = 1800\nzlib.output_compression = 1\ncgi.fix_pathinfo = 0\ndate.timezone = UTC\n\nxdebug"
},
{
"path": "images/php/8.1/conf/spx.ini",
"chars": 148,
"preview": "extension = /usr/lib/php-spx/modules/spx.so\nspx.http_enabled = 1\nspx.http_key = \"dev\"\nspx.http_ip_whitelist = \"*\"\nspx.da"
},
{
"path": "images/php/8.1/conf/www.conf",
"chars": 18497,
"preview": "; Start a new pool named 'www'.\n; the variable $pool can we used in any directive and will be replaced by the\n; pool nam"
},
{
"path": "images/php/8.2/Dockerfile",
"chars": 2697,
"preview": "FROM php:8.2-fpm-bookworm\nLABEL maintainer=\"Mark Shust <mark@shust.com>\"\n\nARG APP_ID=1000\nRUN groupadd -g \"$APP_ID\" app "
},
{
"path": "images/php/8.2/conf/blackfire.ini",
"chars": 67,
"preview": "extension=blackfire.so\nblackfire.agent_socket=tcp://blackfire:8307\n"
},
{
"path": "images/php/8.2/conf/msmtprc",
"chars": 66,
"preview": "account default\nhost mailcatcher\nport 1025\nfrom \"user@domain.com\"\n"
},
{
"path": "images/php/8.2/conf/php-fpm.conf",
"chars": 671,
"preview": "; This file was initially adapted from the output of: (on PHP 5.6)\n; grep -vE '^;|^ *$' /usr/local/etc/php-fpm.conf.de"
},
{
"path": "images/php/8.2/conf/php.ini",
"chars": 441,
"preview": "memory_limit = 4G\nmax_execution_time = 1800\nzlib.output_compression = 1\ncgi.fix_pathinfo = 0\ndate.timezone = UTC\n\nxdebug"
},
{
"path": "images/php/8.2/conf/spx.ini",
"chars": 148,
"preview": "extension = /usr/lib/php-spx/modules/spx.so\nspx.http_enabled = 1\nspx.http_key = \"dev\"\nspx.http_ip_whitelist = \"*\"\nspx.da"
},
{
"path": "images/php/8.2/conf/www.conf",
"chars": 18497,
"preview": "; Start a new pool named 'www'.\n; the variable $pool can we used in any directive and will be replaced by the\n; pool nam"
},
{
"path": "images/php/8.3/Dockerfile",
"chars": 2697,
"preview": "FROM php:8.3-fpm-bookworm\nLABEL maintainer=\"Mark Shust <mark@shust.com>\"\n\nARG APP_ID=1000\nRUN groupadd -g \"$APP_ID\" app "
},
{
"path": "images/php/8.3/conf/blackfire.ini",
"chars": 67,
"preview": "extension=blackfire.so\nblackfire.agent_socket=tcp://blackfire:8307\n"
},
{
"path": "images/php/8.3/conf/msmtprc",
"chars": 66,
"preview": "account default\nhost mailcatcher\nport 1025\nfrom \"user@domain.com\"\n"
},
{
"path": "images/php/8.3/conf/php-fpm.conf",
"chars": 671,
"preview": "; This file was initially adapted from the output of: (on PHP 5.6)\n; grep -vE '^;|^ *$' /usr/local/etc/php-fpm.conf.de"
},
{
"path": "images/php/8.3/conf/php.ini",
"chars": 441,
"preview": "memory_limit = 4G\nmax_execution_time = 1800\nzlib.output_compression = 1\ncgi.fix_pathinfo = 0\ndate.timezone = UTC\n\nxdebug"
},
{
"path": "images/php/8.3/conf/spx.ini",
"chars": 148,
"preview": "extension = /usr/lib/php-spx/modules/spx.so\nspx.http_enabled = 1\nspx.http_key = \"dev\"\nspx.http_ip_whitelist = \"*\"\nspx.da"
},
{
"path": "images/php/8.3/conf/www.conf",
"chars": 18497,
"preview": "; Start a new pool named 'www'.\n; the variable $pool can we used in any directive and will be replaced by the\n; pool nam"
},
{
"path": "images/php/8.4/Dockerfile",
"chars": 2697,
"preview": "FROM php:8.4-fpm-bookworm\nLABEL maintainer=\"Mark Shust <mark@shust.com>\"\n\nARG APP_ID=1000\nRUN groupadd -g \"$APP_ID\" app "
},
{
"path": "images/php/8.4/conf/blackfire.ini",
"chars": 67,
"preview": "extension=blackfire.so\nblackfire.agent_socket=tcp://blackfire:8307\n"
},
{
"path": "images/php/8.4/conf/msmtprc",
"chars": 66,
"preview": "account default\nhost mailcatcher\nport 1025\nfrom \"user@domain.com\"\n"
},
{
"path": "images/php/8.4/conf/php-fpm.conf",
"chars": 671,
"preview": "; This file was initially adapted from the output of: (on PHP 5.6)\n; grep -vE '^;|^ *$' /usr/local/etc/php-fpm.conf.de"
},
{
"path": "images/php/8.4/conf/php.ini",
"chars": 441,
"preview": "memory_limit = 4G\nmax_execution_time = 1800\nzlib.output_compression = 1\ncgi.fix_pathinfo = 0\ndate.timezone = UTC\n\nxdebug"
},
{
"path": "images/php/8.4/conf/spx.ini",
"chars": 148,
"preview": "extension = /usr/lib/php-spx/modules/spx.so\nspx.http_enabled = 1\nspx.http_key = \"dev\"\nspx.http_ip_whitelist = \"*\"\nspx.da"
},
{
"path": "images/php/8.4/conf/www.conf",
"chars": 18497,
"preview": "; Start a new pool named 'www'.\n; the variable $pool can we used in any directive and will be replaced by the\n; pool nam"
},
{
"path": "images/rabbitmq/3.11/Dockerfile",
"chars": 90,
"preview": "FROM rabbitmq:3.11-management-alpine\n\nCOPY conf/rabbitmq.conf /etc/rabbitmq/rabbitmq.conf\n"
},
{
"path": "images/rabbitmq/3.11/conf/rabbitmq.conf",
"chars": 40,
"preview": "vm_memory_high_watermark.absolute = 1GB\n"
},
{
"path": "images/rabbitmq/3.12/Dockerfile",
"chars": 90,
"preview": "FROM rabbitmq:3.12-management-alpine\n\nCOPY conf/rabbitmq.conf /etc/rabbitmq/rabbitmq.conf\n"
},
{
"path": "images/rabbitmq/3.12/conf/rabbitmq.conf",
"chars": 40,
"preview": "vm_memory_high_watermark.absolute = 1GB\n"
},
{
"path": "images/rabbitmq/3.13/Dockerfile",
"chars": 90,
"preview": "FROM rabbitmq:3.13-management-alpine\n\nCOPY conf/rabbitmq.conf /etc/rabbitmq/rabbitmq.conf\n"
},
{
"path": "images/rabbitmq/3.13/conf/rabbitmq.conf",
"chars": 40,
"preview": "vm_memory_high_watermark.absolute = 1GB\n"
},
{
"path": "images/rabbitmq/3.9/Dockerfile",
"chars": 89,
"preview": "FROM rabbitmq:3.9-management-alpine\n\nCOPY conf/rabbitmq.conf /etc/rabbitmq/rabbitmq.conf\n"
},
{
"path": "images/rabbitmq/3.9/conf/rabbitmq.conf",
"chars": 40,
"preview": "vm_memory_high_watermark.absolute = 1GB\n"
},
{
"path": "images/rabbitmq/4.1/Dockerfile",
"chars": 89,
"preview": "FROM rabbitmq:4.1-management-alpine\n\nCOPY conf/rabbitmq.conf /etc/rabbitmq/rabbitmq.conf\n"
},
{
"path": "images/rabbitmq/4.1/conf/rabbitmq.conf",
"chars": 40,
"preview": "vm_memory_high_watermark.absolute = 1GB\n"
},
{
"path": "images/ssh/Dockerfile",
"chars": 282,
"preview": "FROM debian:buster-slim\n\nARG APP_ID=1000\n\nRUN apt-get update && apt-get install -y ssh\n\nRUN groupadd -g \"$APP_ID\" app \\\n"
},
{
"path": "lib/onelinesetup",
"chars": 426,
"preview": "#!/usr/bin/env bash\nset -o errexit\n\nDOMAIN=${1:-magento.test}\nEDITION=${2}\nVERSION=${3}\n\ncurl -s https://raw.githubuserc"
},
{
"path": "lib/template",
"chars": 501,
"preview": "#!/usr/bin/env bash\n\nif [ -d \"./bin\" ]; then\n echo \"Error: The current directory is not empty. Please remove all conten"
}
]
About this extraction
This page contains the full source code of the mageinferno/magento2-docker-compose GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 184 files (298.6 KB), approximately 89.2k tokens. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.