Browse Source

Merge branch 'master' into add-ioncube-loader

Emberdyn, LLC 5 years ago
parent
commit
6ebf878e58
82 changed files with 1035 additions and 357 deletions
  1. 3 0
      .github/FUNDING.yml
  2. 19 0
      .github/ISSUE_TEMPLATE/bug_report.md
  3. 101 1
      CHANGELOG.md
  4. 106 32
      README.md
  5. 2 24
      SETUP.md
  6. 1 0
      compose/.gitignore
  7. 0 0
      compose/.vscode/launch.json
  8. 0 0
      compose/bin/bash
  9. 0 0
      compose/bin/cli
  10. 0 0
      compose/bin/clinotty
  11. 0 0
      compose/bin/composer
  12. 3 2
      compose/bin/copyfromcontainer
  13. 15 0
      compose/bin/copytocontainer
  14. 13 0
      compose/bin/dev-urn-catalog-generate
  15. 2 0
      compose/bin/devconsole
  16. 9 0
      compose/bin/download
  17. 10 0
      compose/bin/fixowns
  18. 13 0
      compose/bin/fixperms
  19. 0 0
      compose/bin/grunt
  20. 0 0
      compose/bin/magento
  21. 2 0
      compose/bin/n98-magerun2
  22. 0 0
      compose/bin/node
  23. 0 0
      compose/bin/npm
  24. 8 0
      compose/bin/pwa-studio
  25. 0 0
      compose/bin/redis
  26. 0 0
      compose/bin/remove
  27. 0 0
      compose/bin/removevolumes
  28. 0 0
      compose/bin/restart
  29. 0 0
      compose/bin/root
  30. 0 0
      compose/bin/rootnotty
  31. 14 8
      compose/bin/setup
  32. 9 0
      compose/bin/setup-pwa-studio
  33. 20 0
      compose/bin/setup-ssl
  34. 9 0
      compose/bin/start
  35. 0 0
      compose/bin/status
  36. 0 0
      compose/bin/stop
  37. 8 0
      compose/bin/update
  38. 0 0
      compose/bin/xdebug
  39. 1 1
      compose/docker-compose.dev.yml
  40. 16 5
      compose/docker-compose.yml
  41. 0 0
      compose/env/db.env
  42. 0 14
      compose/magento-2-windows/.vscode/launch.json
  43. 0 1
      compose/magento-2-windows/bin/bash.ps1
  44. 0 6
      compose/magento-2-windows/bin/cli.ps1
  45. 0 6
      compose/magento-2-windows/bin/clinotty.ps1
  46. 0 1
      compose/magento-2-windows/bin/composer.ps1
  47. 0 6
      compose/magento-2-windows/bin/copydir.ps1
  48. 0 11
      compose/magento-2-windows/bin/copydirall.ps1
  49. 0 1
      compose/magento-2-windows/bin/copymagento.ps1
  50. 0 27
      compose/magento-2-windows/bin/download.ps1
  51. 0 8
      compose/magento-2-windows/bin/fixperms.ps1
  52. 0 1
      compose/magento-2-windows/bin/grunt.ps1
  53. 0 1
      compose/magento-2-windows/bin/magento.ps1
  54. 0 1
      compose/magento-2-windows/bin/node.ps1
  55. 0 1
      compose/magento-2-windows/bin/npm.ps1
  56. 0 1
      compose/magento-2-windows/bin/restart.ps1
  57. 0 6
      compose/magento-2-windows/bin/root.ps1
  58. 0 28
      compose/magento-2-windows/bin/setup.ps1
  59. 0 5
      compose/magento-2-windows/bin/start.ps1
  60. 0 1
      compose/magento-2-windows/bin/stop.ps1
  61. 0 16
      compose/magento-2-windows/bin/xdebug.ps1
  62. 0 63
      compose/magento-2-windows/docker-compose.yml
  63. 0 1
      compose/magento-2-windows/src/.gitignore
  64. 0 12
      compose/magento-2/bin/copytocontainer
  65. 0 10
      compose/magento-2/bin/dev-urn-catalog-generate
  66. 0 3
      compose/magento-2/bin/download
  67. 0 3
      compose/magento-2/bin/fixowns
  68. 0 8
      compose/magento-2/bin/fixperms
  69. 0 2
      compose/magento-2/bin/start
  70. 0 4
      compose/magento-2/env/db.env
  71. 0 1
      compose/magento-2/src/.gitignore
  72. 4 0
      images/elasticsearch/6.5/Dockerfile
  73. 10 1
      images/nginx/1.13/Dockerfile
  74. 27 13
      images/php/7.1/Dockerfile
  75. 33 15
      images/php/7.2/Dockerfile
  76. 104 0
      images/php/7.3/Dockerfile
  77. 7 0
      images/php/7.3/bin/cronstart
  78. 31 0
      images/php/7.3/conf/php-fpm.conf
  79. 16 0
      images/php/7.3/conf/php.ini
  80. 413 0
      images/php/7.3/conf/www.conf
  81. 3 3
      lib/onelinesetup
  82. 3 3
      lib/template

+ 3 - 0
.github/FUNDING.yml

@@ -0,0 +1,3 @@
+# These are supported funding model platforms
+
+github: markshust

+ 19 - 0
.github/ISSUE_TEMPLATE/bug_report.md

@@ -0,0 +1,19 @@
+---
+name: Bug report
+about: Create a report to help us improve
+title: ''
+labels: ''
+assignees: ''
+
+---
+
+**Description**
+
+
+**Steps To Reproduce**
+1. 
+
+**Expected Result**
+
+
+**Actual Result**

+ 101 - 1
CHANGELOG.md

@@ -6,7 +6,107 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
 
 
 ## [Unreleased]
 ## [Unreleased]
 
 
-- N/A
+N/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
 ## [23.2.3] - 2019-07-20
 
 

+ 106 - 32
README.md

@@ -15,7 +15,8 @@
 - [Docker Hub](#docker-hub)
 - [Docker Hub](#docker-hub)
 - [Usage](#usage)
 - [Usage](#usage)
 - [Prerequisites](#prerequisites)
 - [Prerequisites](#prerequisites)
-- [Quick Setup](#quick-setup)
+- [Setup](#setup)
+- [Updates](#updates)
 - [Custom CLI Commands](#custom-cli-commands)
 - [Custom CLI Commands](#custom-cli-commands)
 - [Misc Info](#misc-info)
 - [Misc Info](#misc-info)
 - [Credits](#credits)
 - [Credits](#credits)
@@ -36,7 +37,8 @@ View Dockerfiles:
 
 
 - [markoshust/magento-nginx (Docker Hub)](https://hub.docker.com/r/markoshust/magento-nginx/)
 - [markoshust/magento-nginx (Docker Hub)](https://hub.docker.com/r/markoshust/magento-nginx/)
   - 1.13
   - 1.13
-      - [`latest`, `1.13`, `1.13-7`](https://github.com/markshust/docker-magento/tree/master/images/nginx/1.13)
+      - [`latest`, `1.13`, `1.13-8`](https://github.com/markshust/docker-magento/tree/master/images/nginx/1.13)
+      - [`1.13-7`](https://github.com/markshust/docker-magento/tree/27.0.0/images/nginx/1.13)
       - [`1.13-6`](https://github.com/markshust/docker-magento/tree/20.1.1/images/nginx/1.13)
       - [`1.13-6`](https://github.com/markshust/docker-magento/tree/20.1.1/images/nginx/1.13)
       - [`1.13-5`](https://github.com/markshust/docker-magento/tree/18.1.1/images/nginx/1.13)
       - [`1.13-5`](https://github.com/markshust/docker-magento/tree/18.1.1/images/nginx/1.13)
       - [`1.13-4`](https://github.com/markshust/docker-magento/tree/18.0.1/images/nginx/1.13)
       - [`1.13-4`](https://github.com/markshust/docker-magento/tree/18.0.1/images/nginx/1.13)
@@ -45,13 +47,20 @@ View Dockerfiles:
       - [`1.13-1`](https://github.com/markshust/docker-magento/tree/11.1.5/images/nginx/1.13)
       - [`1.13-1`](https://github.com/markshust/docker-magento/tree/11.1.5/images/nginx/1.13)
       - [`1.13-0`](https://github.com/markshust/docker-magento/tree/11.0.0/images/nginx/1.13)
       - [`1.13-0`](https://github.com/markshust/docker-magento/tree/11.0.0/images/nginx/1.13)
 - [markoshust/magento-php (Docker Hub)](https://hub.docker.com/r/markoshust/magento-php/)
 - [markoshust/magento-php (Docker Hub)](https://hub.docker.com/r/markoshust/magento-php/)
+  - 7.3
+      - [`latest`, `7.3-fpm`, `7.3-fpm-2`](https://github.com/markshust/docker-magento/tree/master/images/php/7.3)
+      - [`7.3-fpm-1`](https://github.com/markshust/docker-magento/tree/26.0.0/images/php/7.3)
+      - [`7.3-fpm-0`](https://github.com/markshust/docker-magento/tree/24.2.0/images/php/7.3)
   - 7.2
   - 7.2
-      - [`latest`, `7.2-fpm`, `7.2-fpm-3`](https://github.com/markshust/docker-magento/tree/master/images/php/7.2)
+      - [`7.2-fpm`, `7.2-fpm-5`](https://github.com/markshust/docker-magento/tree/master/images/php/7.2)
+      - [`7.2-fpm-4`](https://github.com/markshust/docker-magento/tree/26.0.0/images/php/7.2)
+      - [`7.2-fpm-3`](https://github.com/markshust/docker-magento/tree/24.2.0/images/php/7.2)
       - [`7.2-fpm-2`](https://github.com/markshust/docker-magento/tree/23.2.1/images/php/7.2)
       - [`7.2-fpm-2`](https://github.com/markshust/docker-magento/tree/23.2.1/images/php/7.2)
       - [`7.2-fpm-1`](https://github.com/markshust/docker-magento/tree/23.1.1/images/php/7.2)
       - [`7.2-fpm-1`](https://github.com/markshust/docker-magento/tree/23.1.1/images/php/7.2)
       - [`7.2-fpm-0`](https://github.com/markshust/docker-magento/tree/23.0.0/images/php/7.2)
       - [`7.2-fpm-0`](https://github.com/markshust/docker-magento/tree/23.0.0/images/php/7.2)
-  - 7.1
-      - [`7.1-fpm`, `7.1-fpm-12`](https://github.com/markshust/docker-magento/tree/master/images/php/7.1)
+  - 7.1 (All images deprecated with PHP 7.1 EOL effective December 1, 2019)
+      - [`7.1-fpm`, `7.1-fpm-13`](https://github.com/markshust/docker-magento/tree/master/images/php/7.1)
+      - [`7.1-fpm-12`](https://github.com/markshust/docker-magento/tree/24.2.0/images/php/7.1)
       - [`7.1-fpm-11`](https://github.com/markshust/docker-magento/tree/23.2.1/images/php/7.1)
       - [`7.1-fpm-11`](https://github.com/markshust/docker-magento/tree/23.2.1/images/php/7.1)
       - [`7.1-fpm-10`](https://github.com/markshust/docker-magento/tree/23.1.1/images/php/7.1)
       - [`7.1-fpm-10`](https://github.com/markshust/docker-magento/tree/23.1.1/images/php/7.1)
       - [`7.1-fpm-9`](https://github.com/markshust/docker-magento/tree/23.0.0/images/php/7.1)
       - [`7.1-fpm-9`](https://github.com/markshust/docker-magento/tree/23.0.0/images/php/7.1)
@@ -64,6 +73,9 @@ View Dockerfiles:
       - [`7.1-fpm-2`](https://github.com/markshust/docker-magento/tree/13.0.0/images/php/7.1)
       - [`7.1-fpm-2`](https://github.com/markshust/docker-magento/tree/13.0.0/images/php/7.1)
       - [`7.1-fpm-1`](https://github.com/markshust/docker-magento/tree/11.1.5/images/php/7.1)
       - [`7.1-fpm-1`](https://github.com/markshust/docker-magento/tree/11.1.5/images/php/7.1)
       - [`7.1-fpm-0`](https://github.com/markshust/docker-magento/tree/11.0.0/images/php/7.1)
       - [`7.1-fpm-0`](https://github.com/markshust/docker-magento/tree/11.0.0/images/php/7.1)
+- [markoshust/magento-elasticsearch (Docker Hub)](https://hub.docker.com/r/markoshust/magento-elasticsearch/)
+  - 6.5
+      - [`latest`, `6.5`, `6.5.4-0`](https://github.com/markshust/docker-magento/tree/master/images/elasticsearch/6.5)
 
 
 ## Usage
 ## Usage
 
 
@@ -80,23 +92,19 @@ Folders:
 
 
 This setup assumes you are running Docker on a computer with at least 4GB of allocated RAM, a dual-core, and an SSD hard drive. [Download & Install Docker Desktop](https://www.docker.com/products/docker-desktop).
 This setup assumes you are running Docker on a computer with at least 4GB of allocated RAM, 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.
+This configuration has been tested on Mac & Linux. Windows is supported through the use of Docker on WSL.
 
 
-> **Windows Configurations**: The Windows configuration does not currently work and is in need of a contributor to get functional once again. Please see [issue 100](https://github.com/markshust/docker-magento/issues/100) to contribute.
-
-## Quick Setup
+## Setup
 
 
 ### Automated Setup (New Project)
 ### Automated Setup (New Project)
 
 
-> macOS & Linux Only
-
 Run this automated one-liner from the directory you want to install your project to:
 Run this automated one-liner from the directory you want to install your project to:
 
 
 ```bash
 ```bash
-curl -s https://raw.githubusercontent.com/markshust/docker-magento/master/lib/onelinesetup | bash -s -- magento2.test 2.3.2
+curl -s https://raw.githubusercontent.com/markshust/docker-magento/master/lib/onelinesetup | bash -s -- magento2.test 2.3.3
 ```
 ```
 
 
-The `magento2.test` above defines the hostname to use, and the `2.3.2` 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.
+The `magento2.test` above defines the hostname to use, and the `2.3.3` 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://magento2.test`.
 After the one-liner above completes running, you should be able to access your site at `https://magento2.test`.
 
 
@@ -108,25 +116,25 @@ Same result as the one-liner above. Just replace `magento2.test` references with
 
 
 ```bash
 ```bash
 # Download the Docker Compose template:
 # Download the Docker Compose template:
-curl -s https://raw.githubusercontent.com/markshust/docker-magento/master/lib/template | bash -s -- magento-2
+curl -s https://raw.githubusercontent.com/markshust/docker-magento/master/lib/template | bash
 
 
 # Download the version of Magento you want to use with:
 # Download the version of Magento you want to use with:
-bin/download 2.3.2
+bin/download 2.3.3
 
 
 # or if you'd rather install with Composer, run:
 # or if you'd rather install with Composer, run:
 #
 #
 # OPEN SOURCE:
 # OPEN SOURCE:
 #
 #
 # rm -rf src
 # rm -rf src
-# composer create-project --repository=https://repo.magento.com/ --ignore-platform-reqs magento/project-community-edition=2.3.2 src
+# composer create-project --repository=https://repo.magento.com/ --ignore-platform-reqs magento/project-community-edition=2.3.3 src
 #
 #
 # COMMERCE:
 # COMMERCE:
 #
 #
 # rm -rf src
 # rm -rf src
-# composer create-project --repository=https://repo.magento.com/ --ignore-platform-reqs magento/project-enterprise-edition=2.3.2 src
+# composer create-project --repository=https://repo.magento.com/ --ignore-platform-reqs magento/project-enterprise-edition=2.3.3 src
 
 
 # Create a DNS host entry for the site:
 # Create a DNS host entry for the site:
-echo "127.0.0.1 magento2.test" | sudo tee -a /etc/hosts
+echo "127.0.0.1 ::1 magento2.test" | sudo tee -a /etc/hosts
 
 
 # Run the setup installer for Magento:
 # Run the setup installer for Magento:
 bin/setup magento2.test
 bin/setup magento2.test
@@ -138,7 +146,7 @@ open https://magento2.test
 
 
 ```bash
 ```bash
 # Download the Docker Compose template:
 # Download the Docker Compose template:
-curl -s https://raw.githubusercontent.com/markshust/docker-magento/master/lib/template | bash -s -- magento-2
+curl -s https://raw.githubusercontent.com/markshust/docker-magento/master/lib/template | bash
 
 
 # Remove existing src directory:
 # Remove existing src directory:
 rm -rf src
 rm -rf src
@@ -148,25 +156,30 @@ cp -R ~/Sites/existing src
 # or: git clone git@github.com:myrepo.git src
 # or: git clone git@github.com:myrepo.git src
 
 
 # Create a DNS host entry for the site:
 # Create a DNS host entry for the site:
-echo "127.0.0.1 magento2.test" | sudo tee -a /etc/hosts
+echo "127.0.0.1 ::1 yoursite.test" | sudo tee -a /etc/hosts
 
 
-# Copy some files to the containers and install dependencies, then restart the containers:
+# Start some containers, copy files ot them and then restart the containers:
 docker-compose up -d
 docker-compose up -d
-bin/copytocontainer --all
+rm -rf src/vendor
+bin/copytocontainer --all ## Initial copy will take a few minutes...
 
 
-# Install composer dependencies, then copy artifacts back to the host:
+# Install composer dependencies, then copy artifacts back to the host (for debugging purposes):
 bin/composer install
 bin/composer install
 bin/copyfromcontainer vendor
 bin/copyfromcontainer vendor
 
 
 # Import existing database:
 # Import existing database:
 bin/clinotty mysql -hdb -umagento -pmagento magento < existing/magento.sql
 bin/clinotty mysql -hdb -umagento -pmagento magento < existing/magento.sql
 
 
-# Update database connection details:
+# 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
 # vi src/app/etc/env.php
 
 
-# Set base URLs to local environment URL:
-bin/magento config:set web/secure/base_url https://magento2.test/
-bin/magento config:set web/unsecure/base_url https://magento2.test/
+# Import app-specific environment settings:
+bin/magento app:config:import
+
+# Set base URLs to local environment URL (if not defined in env.php file):
+bin/magento config:set web/secure/base_url https://yoursite.test/
+bin/magento config:set web/unsecure/base_url https://yoursite.test/
 
 
 bin/restart
 bin/restart
 
 
@@ -175,32 +188,60 @@ open https://magento2.test
 
 
 > For more details on how everything works, see the extended [setup readme](https://github.com/markshust/docker-magento/blob/master/SETUP.md).
 > For more details on how everything works, see the extended [setup readme](https://github.com/markshust/docker-magento/blob/master/SETUP.md).
 
 
+## 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.
+
+### Older Versions
+
+Versions older than `24.0.0` did not include a `bin/update` helper script, and versions older than `26.0.0` had a different directory structure. For both of these situations, you can download the most recent file to your project by running:
+
+```
+(cd bin && curl -OL https://raw.githubusercontent.com/markshust/docker-magento/master/compose/bin/update && chmod +x update)
+```
+
+You'll now have an updated `bin/update` helper script, and can run it to update your project.
+
 ## Custom CLI Commands
 ## Custom CLI Commands
 
 
 - `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/bash`: Drop into the bash prompt of your Docker container. The `phpfpm` container should be mainly used to access the filesystem within Docker.
-- `bin/dev-urn-catalog-generate`: Generate URN's for PHPStorm and remap paths to local host. Restart PHPStorm after running this command.
 - `bin/cli`: Run any CLI command without going into the bash prompt. Ex. `bin/cli ls`
 - `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/clinotty`: Run any CLI command with no TTY. Ex. `bin/clinotty chmod u+x bin/magento`
 - `bin/composer`: Run the composer binary. Ex. `bin/composer install`
 - `bin/composer`: Run the composer binary. Ex. `bin/composer install`
 - `bin/copyfromcontainer`: Copy folders or files from container to host. Ex. `bin/copyfromcontainer vendor`
 - `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/copytocontainer`: Copy folders or files from host to container. Ex. `bin/copytocontainer --all`
-- `bin/download`: Download & extract specific Magento version to the `src` directory. Ex. `bin/download 2.3.2`
+- `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/download`: Download & extract specific Magento version to the `src` directory. Ex. `bin/download 2.3.3`
 - `bin/fixowns`: This will fix filesystem ownerships within the container.
 - `bin/fixowns`: This will fix filesystem ownerships within the container.
 - `bin/fixperms`: This will fix filesystem permissions within the container.
 - `bin/fixperms`: This will fix filesystem permissions within the container.
 - `bin/grunt`: Run the grunt binary. Note that this runs the version from the node_modules directory for project version parity. Ex. `bin/grunt exec`
 - `bin/grunt`: Run the grunt binary. Note that this runs the version from the node_modules directory for project version parity. Ex. `bin/grunt exec`
 - `bin/magento`: Run the Magento CLI. Ex: `bin/magento cache:flush`
 - `bin/magento`: Run the Magento CLI. Ex: `bin/magento cache:flush`
+- `bin/n98-magerun2`: Access the n98 magerun CLI. Ex: `bin/n98-magerun2 dev:console`
 - `bin/node`: Run the node binary. Ex. `bin/node --version`
 - `bin/node`: Run the node binary. Ex. `bin/node --version`
 - `bin/npm`: Run the npm binary. Ex. `bin/npm install`
 - `bin/npm`: Run the npm binary. Ex. `bin/npm install`
-- `bin/redis`: Run a command from the redis container. Ex `bin/redis redis-cli monitor`
+- `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/remove`: Remove all containers.
 - `bin/removevolumes`: Remove all volumes.
 - `bin/removevolumes`: Remove all volumes.
 - `bin/restart`: Stop and then start all containers.
 - `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/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/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 `magento2.test`. Ex. `bin/setup magento2.test`
 - `bin/setup`: Run the Magento setup process to install Magento from the source code, with optional domain name. Defaults to `magento2.test`. Ex. `bin/setup magento2.test`
+- `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 magento2.test`
+- `bin/setup-ssl`: Generate an SSL certificate and install the cert authority on the host. Ex. `bin/setup-ssl magento2.test`
 - `bin/start`: Start all containers, good practice to use this instead of `docker-compose up -d`, as it may contain additional helpers.
 - `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/status`: Check the container status.
 - `bin/stop`: Stop all containers.
 - `bin/stop`: Stop all containers.
+- `bin/update`: Update your project to the most recent version of `docker-magento`.
 - `bin/xdebug`: Disable or enable Xdebug. Accepts params `disable` (default) or `enable`. Ex. `bin/xdebug enable`
 - `bin/xdebug`: Disable or enable Xdebug. Accepts params `disable` (default) or `enable`. Ex. `bin/xdebug enable`
 
 
 ## Misc Info
 ## Misc Info
@@ -256,7 +297,7 @@ For more information about Redis usage with Magento, <a href="https://devdocs.ma
 
 
 Install and enable the PHP Debug extension from the [Visual Studio Marketplace](https://marketplace.visualstudio.com/items?itemName=felixfbecker.php-debug).
 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/magento-2/.vscode/launch.json) file.
+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 & PHPStorm
 ### Xdebug & PHPStorm
 
 
@@ -295,11 +336,44 @@ Otherwise, this project now automatically sets up Xdebug support with VS Code. I
 
 
 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/). These steps are taken care of automatically with Docker Desktop, but not on 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/). These steps are taken care of automatically with Docker Desktop, but not on Linux.
 
 
+You may have to increase a virtual memory map count on the host system. It is required by [Elasticsearch](https://www.elastic.co/guide/en/elasticsearch/reference/current/vm-max-map-count.html).
+
+Add following line to `/etc/sysctl.conf`:
+
+```
+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.
+
 ## Credits
 ## Credits
 
 
 ### Mark Shust
 ### Mark Shust
 
 
-I'm a <a href="https://u.magento.com/certification/directory/dev/883/" target="_blank">Certified Magento Developer & Architect</a> and <a href="http://www.zend.com/en/yellow-pages/ZEND014633" target="_blank">Zend Certified Engineer</a>, and available for consulting & development of your next project 🤓. You can read technical articles on my blog at <a href="https://markshust.com" target="_blank">markshust.com</a> or contact me directly at <a href="mailto:mark@shust.com">mark@shust.com</a>.
+I'm a <a href="https://u.magento.com/certification/directory/dev/883/" target="_blank">Certified Magento Developer & Architect</a> & <a href="http://www.zend.com/en/yellow-pages/ZEND014633" target="_blank">Zend Certified Engineer</a>, and available for consulting & development of your next project 🤓. You can read my blog at <a href="https://markshust.com" target="_blank">markshust.com</a> or contact me directly at <a href="mailto:mark@shust.com">mark@shust.com</a>.
+
+### M.academy
+
+At <a href="https://m.academy" target="_blank">M.academy</a> you can learn the basics of Magento 2 programming & architecture, explained simply by a Certified Magento Developer.
+
+#### Available Courses:
+
+- <a href="https://m.academy/p/setup-magento-2-development-environment-docker" target="_blank">Setup a Magento 2 Development Environment with Docker</a> (FREE!) - The easiest way to install, manage, configure & standardize Magento development environments across your team.
+- <a href="https://m.academy/p/magento-2-coding-kickstart" target="_blank">Magento 2 Coding Kickstart 🚀</a> - Start to become productive in Magento 2 programming within one week with no prior experience.
 
 
 ### Nexcess
 ### Nexcess
 
 

+ 2 - 24
SETUP.md

@@ -3,7 +3,7 @@
 ## New Magento 2 Project (macOS/Linux)
 ## New Magento 2 Project (macOS/Linux)
 
 
 1. Create the project template by going to the place you want the new project (ex. cd ~/Sites/magento2), then run
 1. Create the project template by going to the place you want the new project (ex. cd ~/Sites/magento2), then run
-	- `curl -s https://raw.githubusercontent.com/markshust/docker-magento/master/lib/template|bash -s -- magento-2`
+	- `curl -s https://raw.githubusercontent.com/markshust/docker-magento/master/lib/template | bash`
 
 
 2. Extract the contents of your current Magento site to the `src` folder, or download a fresh copy of the Magento source code for starting a new project with:
 2. Extract the contents of your current Magento site to the `src` folder, or download a fresh copy of the Magento source code for starting a new project with:
     - `bin/download 2.3.0`
     - `bin/download 2.3.0`
@@ -22,26 +22,4 @@
 
 
 ## New Magento 2 Project (Windows)
 ## New Magento 2 Project (Windows)
 
 
-> **Windows Configurations**: The Windows configuration does not currently work and is in need of a contributor to get functional once again. Please see [issue 100](https://github.com/markshust/docker-magento/issues/100) to contribute.
-
-The following scripts are meant to run with Powershell. Note that the execution policy for scripts needs to be set accordingly [Execution policy](https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.security/get-executionpolicy?view=powershell-6).
-
-1. Create the project template by going to the place you want the new project (ex. cd ~/Sites/magento2), then run
-	- `curl -s https://raw.githubusercontent.com/markshust/docker-magento/master/lib/template|bash -s -- magento-2-windows`
-
-2. Extract the contents of your current Magento site to the `src` folder, or download a fresh copy of the Magento source code for starting a new project with the following line. Note that the default untar command is quite slow. If you want to speed that up install [7-Zip](http://www.7-zip.org/) and add it to your PATH. The script will automatically use 7-Zip if it is available:
-    - `bin/download 2.3.0`
-
-3. Copy magento into the docker container with `bin/copymagento`. This is needed because of permission restrictions of shared data in Windows (see [Troubleshooting Docker](https://docs.docker.com/docker-for-windows/troubleshoot/#permissions-errors-on-data-directories-for-shared-volumes)). The `app` folder will however be shared with Windows for ease of development. For this folder the default permission 755 works just fine.
-
-4. Add an entry to `C:\Windows\System32\drivers\etc\hosts` with your custom domain: `127.0.0.1 magento2.test` (assuming the domain  you want to setup is `magento2.test`). Be sure to use a `.test` tld, as `.localhost` and `.dev` will present issues with domain resolution.
-
-5. Start your Docker containers with the provided helper script:
-    - `bin/start`
-
-6. For new projects: run Magento's setup install process with the below helper script. Feel free to edit this file to your liking; at the very least you will probably need to update the `base-url` value to the domain you setup in step 4. Also, be sure to setup [Composer Authentication](https://github.com/markshust/docker-magento#composer-authentication) before initiating the setup script.
-    - `bin/setup magento2.test`
-
-7. You may now access your site! Check out whatever domain you setup from within a web browser.
-    - `open http://magento2.test`
-
+Works with Docker in WSL. Full instructions to follow.

+ 1 - 0
compose/.gitignore

@@ -0,0 +1 @@
+src/

+ 0 - 0
compose/magento-2/.vscode/launch.json → compose/.vscode/launch.json


+ 0 - 0
compose/magento-2/bin/bash → compose/bin/bash


+ 0 - 0
compose/magento-2/bin/cli → compose/bin/cli


+ 0 - 0
compose/magento-2/bin/clinotty → compose/bin/clinotty


+ 0 - 0
compose/magento-2/bin/composer → compose/bin/composer


+ 3 - 2
compose/magento-2/bin/copyfromcontainer → compose/bin/copyfromcontainer

@@ -1,10 +1,11 @@
 #!/bin/bash
 #!/bin/bash
 [ -z "$1" ] && echo "Please specify a directory or file to copy from container (ex. vendor, --all)" && exit
 [ -z "$1" ] && echo "Please specify a directory or file to copy from container (ex. vendor, --all)" && exit
 
 
+REAL_SRC=$(cd -P "src" && pwd)
 if [ "$1" == "--all" ]; then
 if [ "$1" == "--all" ]; then
-  docker cp $(docker-compose ps -q phpfpm|awk '{print $1}'):/var/www/html/./ src/
+  docker cp $(docker-compose ps -q phpfpm|awk '{print $1}'):/var/www/html/./ $REAL_SRC/
   echo "Completed copying all files from container to host"
   echo "Completed copying all files from container to host"
 else
 else
-  docker cp $(docker-compose ps -q phpfpm|awk '{print $1}'):/var/www/html/$1 src/
+  docker cp $(docker-compose ps -q phpfpm|awk '{print $1}'):/var/www/html/$1 $REAL_SRC/
   echo "Completed copying $1 from container to host"
   echo "Completed copying $1 from container to host"
 fi
 fi

+ 15 - 0
compose/bin/copytocontainer

@@ -0,0 +1,15 @@
+#!/bin/bash
+[ -z "$1" ] && echo "Please specify a directory or file to copy to container (ex. vendor, --all)" && exit
+
+REAL_SRC=$(cd -P "src" && pwd)
+if [ "$1" == "--all" ]; then
+  docker cp $REAL_SRC/./ $(docker-compose ps -q phpfpm|awk '{print $1}'):/var/www/html/
+  echo "Completed copying all files from host to container"
+  bin/fixowns
+  bin/fixperms
+else
+  docker cp $REAL_SRC/$1 $(docker-compose ps -q phpfpm|awk '{print $1}'):/var/www/html/$1
+  echo "Completed copying $1 from host to container"
+  bin/fixowns $1
+  bin/fixperms $1
+fi

+ 13 - 0
compose/bin/dev-urn-catalog-generate

@@ -0,0 +1,13 @@
+#!/bin/bash
+bin/magento dev:urn-catalog:generate misc.xml
+bin/copyfromcontainer misc.xml
+
+REAL_SRC=$(cd -P "src" && pwd)
+
+sed -i .bak "s?/var/www/html?$PROJECT_DIR$/src?g" $REAL_SRC/misc.xml
+rm $REAL_SRC/misc.xml.bak
+
+mkdir -p $REAL_SRC/.idea
+mv $REAL_SRC/misc.xml $REAL_SRC/.idea/misc.xml
+
+echo "URN's have been generated, you may now restart PHPStorm"

+ 2 - 0
compose/bin/devconsole

@@ -0,0 +1,2 @@
+#!/bin/bash
+bin/cli bin/n98-magerun2.phar dev:console

+ 9 - 0
compose/bin/download

@@ -0,0 +1,9 @@
+#!/bin/bash
+[ -z "$1" ] && echo "Please specify the version to download (ex. 2.0.0)" && exit
+if [ ! -f ~/.docker-magento/magento2-$1.tar.gz ]; then
+    mkdir -p ~/.docker-magento
+    (cd ~/.docker-magento && curl -OL http://pubfiles.nexcess.net/magento/ce-packages/magento2-$1.tar.gz)
+fi
+
+echo "Extracting magento2-$1.tar.gz to ./src"
+mkdir -p src && tar xzf ~/.docker-magento/magento2-$1.tar.gz -o -C src

+ 10 - 0
compose/bin/fixowns

@@ -0,0 +1,10 @@
+#!/bin/bash
+echo "Correcting 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 corrected."

+ 13 - 0
compose/bin/fixperms

@@ -0,0 +1,13 @@
+#!/bin/bash
+echo "Correcting filesystem permissions..."
+
+if [ -z "$1" ]; then
+  bin/clinotty find var vendor pub/static pub/media app/etc -type f -exec chmod u+w {} \;
+  bin/clinotty find var vendor pub/static pub/media app/etc -type d -exec chmod u+w {} \;
+  bin/clinotty chmod u+x bin/magento
+else
+  bin/clinotty find $1 -type f -exec chmod u+w {} \;
+  bin/clinotty find $1 -type d -exec chmod u+w {} \;
+fi
+
+echo "Filesystem permissions corrected."

+ 0 - 0
compose/magento-2/bin/grunt → compose/bin/grunt


+ 0 - 0
compose/magento-2/bin/magento → compose/bin/magento


+ 2 - 0
compose/bin/n98-magerun2

@@ -0,0 +1,2 @@
+#!/bin/bash
+bin/cli bin/n98-magerun2.phar "$@"

+ 0 - 0
compose/magento-2/bin/node → compose/bin/node


+ 0 - 0
compose/magento-2/bin/npm → compose/bin/npm


+ 8 - 0
compose/bin/pwa-studio

@@ -0,0 +1,8 @@
+#!/bin/bash
+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

+ 0 - 0
compose/magento-2/bin/redis → compose/bin/redis


+ 0 - 0
compose/magento-2/bin/remove → compose/bin/remove


+ 0 - 0
compose/magento-2/bin/removevolumes → compose/bin/removevolumes


+ 0 - 0
compose/magento-2/bin/restart → compose/bin/restart


+ 0 - 0
compose/magento-2/bin/root → compose/bin/root


+ 0 - 0
compose/magento-2/bin/rootnotty → compose/bin/rootnotty


+ 14 - 8
compose/magento-2/bin/setup → compose/bin/setup

@@ -3,16 +3,16 @@ BASE_URL=${1:-magento2.test}
 
 
 bin/stop
 bin/stop
 
 
-# get rid of vertex/module-tax, not required and causes checksum errors on composer install
-# https://github.com/markshust/docker-magento/issues/135
-# prevent double or more insertion
-if ! grep -qF '"replace": { "vertex/module-tax": "*" }' src/composer.json; then
-    sed -e 's/"conflict": {/"replace": { "vertex\/module-tax": "*" },\ "conflict": {/' src/composer.json > composer.json && mv composer.json src/composer.json
-fi
+# fix for invalid google-shopping-api checksum contained in archive installs (temporary fix until nexcess archive is patched)
+sed -e 's/5f5929ef9f2ec4ca048a2add261d22c92807630f/ce31e720d60451784b9fdb3769e43e149f50d436/' src/composer.lock > composer.lock && mv composer.lock src/composer.lock
 
 
 docker-compose -f docker-compose.yml up -d
 docker-compose -f docker-compose.yml up -d
 sleep 1 #Ensure containers are started...
 sleep 1 #Ensure containers are started...
 
 
+curl -O https://files.magerun.net/n98-magerun2.phar
+chmod +x n98-magerun2.phar
+mv n98-magerun2.phar src/bin/n98-magerun2.phar
+
 echo "Copying all files from host to container..."
 echo "Copying all files from host to container..."
 rm -rf src/vendor #Clear for step below
 rm -rf src/vendor #Clear for step below
 bin/copytocontainer --all
 bin/copytocontainer --all
@@ -50,6 +50,7 @@ if [ -n "$PUBLIC_KEY" ] && [ -n "$PRIVATE_KEY" ]; then
 fi
 fi
 
 
 echo "Forcing reinstall of composer deps to ensure perms & reqs..."
 echo "Forcing reinstall of composer deps to ensure perms & reqs..."
+bin/clinotty composer global require hirak/prestissimo
 bin/clinotty composer install
 bin/clinotty composer install
 
 
 bin/clinotty bin/magento setup:install \
 bin/clinotty bin/magento setup:install \
@@ -66,6 +67,11 @@ bin/clinotty bin/magento setup:install \
   --language=en_US \
   --language=en_US \
   --currency=USD \
   --currency=USD \
   --timezone=America/New_York \
   --timezone=America/New_York \
+  --amqp-host=rabbitmq \
+  --amqp-port=5672 \
+  --amqp-user=guest \
+  --amqp-password=guest \
+  --amqp-virtualhost=/ \
   --use-rewrites=1
   --use-rewrites=1
 
 
 echo "Turning on developer mode.."
 echo "Turning on developer mode.."
@@ -92,8 +98,8 @@ echo "Copying files from container to host after install..."
 bin/copyfromcontainer app
 bin/copyfromcontainer app
 bin/copyfromcontainer vendor
 bin/copyfromcontainer vendor
 
 
-echo "Restarting containers with host bind mounts for dev..."
-bin/restart
+echo "Generating SSL certificate..."
+bin/setup-ssl $BASE_URL
 
 
 echo "Docker development environment setup complete."
 echo "Docker development environment setup complete."
 echo "You may now access your Magento instance at https://${BASE_URL}/"
 echo "You may now access your Magento instance at https://${BASE_URL}/"

+ 9 - 0
compose/bin/setup-pwa-studio

@@ -0,0 +1,9 @@
+#!/bin/bash
+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

+ 20 - 0
compose/bin/setup-ssl

@@ -0,0 +1,20 @@
+#!/bin/bash
+[ -z "$1" ] && echo "Please specify a domain (ex. mydomain.test)" && exit
+
+# Generate certificate authority and copy back to the host
+docker-compose exec -u root app mkcert -install
+docker cp $(docker-compose ps -q app|awk '{print $1}'):/root/.local/share/mkcert/rootCA.pem .
+echo "System password requested to install certificate authority on host..."
+sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain rootCA.pem
+rm rootCA.pem
+
+# Generate the certificate for the specified domain
+docker-compose exec -u root app mkcert $1
+echo "Renaming $1 certificate and moving to /etc/nginx/certs/..."
+docker-compose exec -u root app chown app:app $1.pem $1-key.pem
+docker-compose exec -u root app mv $1.pem /etc/nginx/certs/nginx.crt
+docker-compose exec -u root app mv $1-key.pem /etc/nginx/certs/nginx.key
+
+# Restart nginx to apply the updates
+echo "Restarting containers to apply updates..."
+bin/restart

+ 9 - 0
compose/bin/start

@@ -0,0 +1,9 @@
+#!/bin/bash
+docker-compose -f docker-compose.yml -f docker-compose.dev.yml up -d
+
+## Blackfire support
+# ------------------
+## First register the blackfire agent with:
+#bin/root blackfire-agent --register --server-id={YOUR_SERVER_ID} --server-token={YOUR_SERVER_TOKEN}
+## Then uncomment the below line (and leave uncommented) to start the agent automatically with bin/start:
+#bin/root /etc/init.d/blackfire-agent start

+ 0 - 0
compose/magento-2/bin/status → compose/bin/status


+ 0 - 0
compose/magento-2/bin/stop → compose/bin/stop


+ 8 - 0
compose/bin/update

@@ -0,0 +1,8 @@
+#!/bin/bash
+mkdir -p tmpupdate && cd $_
+curl -s https://raw.githubusercontent.com/markshust/docker-magento/master/lib/template | bash
+rm -rf .git
+rsync -av ./ ../
+cd ..
+rm -rf tmpupdate
+echo "docker-magento has been updated, run bin/restart to apply the updates"

+ 0 - 0
compose/magento-2/bin/xdebug → compose/bin/xdebug


+ 1 - 1
compose/magento-2/docker-compose.dev.yml → compose/docker-compose.dev.yml

@@ -1,5 +1,5 @@
 # Mark Shust's Docker Configuration for Magento (https://github.com/markshust/docker-magento)
 # Mark Shust's Docker Configuration for Magento (https://github.com/markshust/docker-magento)
-# Version 23.2.3
+# Version 27.2.0
 
 
 version: "3"
 version: "3"
 
 

+ 16 - 5
compose/magento-2/docker-compose.yml → compose/docker-compose.yml

@@ -1,11 +1,11 @@
 # Mark Shust's Docker Configuration for Magento (https://github.com/markshust/docker-magento)
 # Mark Shust's Docker Configuration for Magento (https://github.com/markshust/docker-magento)
-# Version 23.2.3
+# Version 27.2.0
 
 
 version: "3"
 version: "3"
 
 
 services:
 services:
   app:
   app:
-    image: markoshust/magento-nginx:1.13-7
+    image: markoshust/magento-nginx:1.13-8
     ports:
     ports:
       - "80:8000"
       - "80:8000"
       - "443:8443"
       - "443:8443"
@@ -16,9 +16,10 @@ services:
       - ~/.composer:/var/www/.composer:delegated
       - ~/.composer:/var/www/.composer:delegated
       - appdata:/var/www/html
       - appdata:/var/www/html
       - sockdata:/sock
       - sockdata:/sock
+      - ssldata:/etc/nginx/certs
 
 
   phpfpm:
   phpfpm:
-    image: markoshust/magento-php:7.2-fpm-3
+    image: markoshust/magento-php:7.3-fpm-2
     links:
     links:
       - db
       - db
     volumes: *appvolumes
     volumes: *appvolumes
@@ -35,14 +36,22 @@ services:
     image: redis:5.0
     image: redis:5.0
 
 
   elasticsearch:
   elasticsearch:
-    image: elasticsearch:5.6
+    image: markoshust/magento-elasticsearch:6.5.4-0
     ports:
     ports:
       - "9200:9200"
       - "9200:9200"
       - "9300:9300"
       - "9300:9300"
 
 
+  rabbitmq:
+    image: rabbitmq:3.7-management
+    ports:
+      - "15672:15672"
+      - "5672:5672"
+    volumes:
+      - rabbitmqdata:/var/lib/rabbitmq
+
   # Disabling cron by default as it uses higher CPU, enable if needed
   # Disabling cron by default as it uses higher CPU, enable if needed
   #cron:
   #cron:
-  #  image: markoshust/magento-php:7.2-fpm-3
+  #  image: markoshust/magento-php:7.3-fpm-2
   #  user: root
   #  user: root
   #  command: /usr/local/bin/cronstart
   #  command: /usr/local/bin/cronstart
   #  tty: true
   #  tty: true
@@ -53,4 +62,6 @@ services:
 volumes:
 volumes:
   appdata:
   appdata:
   dbdata:
   dbdata:
+  rabbitmqdata:
   sockdata:
   sockdata:
+  ssldata:

+ 0 - 0
compose/magento-2-windows/env/db.env → compose/env/db.env


+ 0 - 14
compose/magento-2-windows/.vscode/launch.json

@@ -1,14 +0,0 @@
-{
-  "version": "0.2.0",
-  "configurations": [
-    {
-      "name": "Listen for XDebug",
-      "type": "php",
-      "request": "launch",
-      "pathMappings": {
-        "/var/www/html": "${workspaceFolder}/src"
-      },
-      "port": 9001
-    }
-  ]
-}

+ 0 - 1
compose/magento-2-windows/bin/bash.ps1

@@ -1 +0,0 @@
-docker-compose exec phpfpm bash

+ 0 - 6
compose/magento-2-windows/bin/cli.ps1

@@ -1,6 +0,0 @@
-if ($args.length -eq 0) {
-    Write-Host "Please specify a CLI command (ex. ls)"
-    exit
-} else {
-    docker-compose exec phpfpm $args
-}

+ 0 - 6
compose/magento-2-windows/bin/clinotty.ps1

@@ -1,6 +0,0 @@
-if ($args.length -eq 0) {
-    Write-Host "Please specify a CLI command (ex. ls)"
-    exit
-} else {
-    docker-compose exec -T phpfpm $args
-}

+ 0 - 1
compose/magento-2-windows/bin/composer.ps1

@@ -1 +0,0 @@
-bin/cli composer $args

+ 0 - 6
compose/magento-2-windows/bin/copydir.ps1

@@ -1,6 +0,0 @@
-[CmdletBinding()]
-Param(
-  [Parameter(Mandatory=$True,Position=1)]
-  [string]$dir
-)
-docker cp $(docker-compose ps -q phpfpm|awk '{print $dir}'):/var/www/html/$dir src/

+ 0 - 11
compose/magento-2-windows/bin/copydirall.ps1

@@ -1,11 +0,0 @@
-bin/copydir app
-bin/copydir bin
-bin/copydir dev
-bin/copydir generated
-bin/copydir lib
-bin/copydir phpserver
-bin/copydir pub
-bin/copydir setup
-bin/copydir update
-bin/copydir var
-bin/copydir vendor

+ 0 - 1
compose/magento-2-windows/bin/copymagento.ps1

@@ -1 +0,0 @@
-docker-compose run --user=root --no-deps --rm -v $PWD/src/.:/src phpfpm cp -r /src/. /var/www/html

+ 0 - 27
compose/magento-2-windows/bin/download.ps1

@@ -1,27 +0,0 @@
-[CmdletBinding()]
-Param(
-  [Parameter(Mandatory=$True,Position=1)]
-  [string]$version
-)
-function Expand-Targz($tarFile, $dest) {
-  if (Get-Command "7z.exe" -ErrorAction SilentlyContinue) {
-    & cmd.exe "/C 7z x $tarFile.tar.gz -so | 7z x -aoa -si -ttar -o$dest"
-    Remove-Item "$tarFile.tar.gz"
-  }
-  else {
-    if (-not (Get-Command Expand-7Zip -ErrorAction Ignore)) {
-      Install-Package -Scope CurrentUser -Force 7Zip4PowerShell > $null
-    }
-    Expand-7Zip "$tarFile.tar.gz" $dest
-    Expand-7Zip "$tarFile.tar" $dest
-    Remove-Item "$tarFile.tar.gz"
-    Remove-Item "$tarFile.tar"
-  }
-}
-
-If( -not (Test-Path -Path .\src) )
-{
-    mkdir .\src | Out-Null
-}
-Start-BitsTransfer "http://pubfiles.nexcess.net/magento/ce-packages/magento2-$version.tar.gz" ".\src\magento2-$version.tar.gz"
-Expand-Targz ".\src\magento2-$version" ".\src"

+ 0 - 8
compose/magento-2-windows/bin/fixperms.ps1

@@ -1,8 +0,0 @@
-Write-Host "Correcting filesystem permissions..."
-
-bin/rootcli chown -R app:app /var/www
-bin/rootcli find var vendor pub/static pub/media app/etc -type f -exec chmod u+w `{`} `;
-bin/rootcli find var vendor pub/static pub/media app/etc -type d -exec chmod u+w `{`} `;
-bin/rootcli chmod u+x bin/magento
-
-Write-Host "Filesystem permissions corrected."

+ 0 - 1
compose/magento-2-windows/bin/grunt.ps1

@@ -1 +0,0 @@
-bin/cli node_modules/grunt/bin/grunt $args

+ 0 - 1
compose/magento-2-windows/bin/magento.ps1

@@ -1 +0,0 @@
-bin/cli bin/magento $args

+ 0 - 1
compose/magento-2-windows/bin/node.ps1

@@ -1 +0,0 @@
-bin/cli node $args

+ 0 - 1
compose/magento-2-windows/bin/npm.ps1

@@ -1 +0,0 @@
-bin/cli npm $args

+ 0 - 1
compose/magento-2-windows/bin/restart.ps1

@@ -1 +0,0 @@
-docker-compose rm

+ 0 - 6
compose/magento-2-windows/bin/root.ps1

@@ -1,6 +0,0 @@
-if ($args.length -eq 0) {
-    Write-Host "Please specify a CLI command (ex. ls)"
-    exit
-} else {
-    docker-compose exec -u root phpfpm $args
-}

+ 0 - 28
compose/magento-2-windows/bin/setup.ps1

@@ -1,28 +0,0 @@
-bin/cli chmod u+x bin/magento
-
-BASE_URL=${1:-magento2.test}
-
-bin/cli bin/magento setup:install `
-  --db-host=db `
-  --db-name=magento `
-  --db-user=magento `
-  --db-password=magento `
-  --base-url=https://$BASE_URL/ `
-  --admin-firstname=John `
-  --admin-lastname=Smith `
-  --admin-email=john.smith@gmail.com `
-  --admin-user=john.smith `
-  --admin-password=password123 `
-  --language=en_US `
-  --currency=USD `
-  --timezone=America/New_York `
-  --use-rewrites=1
-
-bin/fixperms
-
-echo "Turning on developer mode.."
-bin/magento deploy:mode:set developer
-
-bin/magento indexer:reindex
-
-bin/magento cache:enable

+ 0 - 5
compose/magento-2-windows/bin/start.ps1

@@ -1,5 +0,0 @@
-docker-compose up -d
-
-echo "Initiating bi-directional sync between host & containers..."
-bin/copydirall
-echo "All containers have started successfully."

+ 0 - 1
compose/magento-2-windows/bin/stop.ps1

@@ -1 +0,0 @@
-docker-compose stop

+ 0 - 16
compose/magento-2-windows/bin/xdebug.ps1

@@ -1,16 +0,0 @@
-[CmdletBinding()]
-Param(
-  [Parameter(Mandatory=$True,Position=1)]
-  [string]$enable_disable_xdebug
-)
-if ( "$enable_disable_xdebug" -eq "disable" ) {
-  bin/cli sed -i -e 's/^zend_extension/\;zend_extension/g' /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini
-  bin/restart
-  Write-Host "Xdebug has been disabled."
-} elseif ( "$enable_disable_xdebug" -eq "enable" ) {
-  bin/cli sed -i -e 's/^\;zend_extension/zend_extension/g' /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini
-  bin/restart
-  Write-Host "Xdebug has been enabled."
-} else {
-  Write-Host "Please specify either 'enable' or 'disable' as an argument"
-}

+ 0 - 63
compose/magento-2-windows/docker-compose.yml

@@ -1,63 +0,0 @@
-# Mark Shust's Docker Configuration for Magento (https://github.com/markshust/docker-magento)
-# Version 20.1.0
-
-version: "3"
-
-services:
-  app:
-    image: markoshust/magento-nginx:1.13-6
-    ports:
-      - "80:8000"
-      - "443:8443"
-    links:
-      - db
-      - phpfpm
-    volumes: &appvolumes
-      - ./src:/var/www/html:delegated
-      - ~/.composer:/var/www/.composer:delegated
-      - appdata:/sock
-      - appdata:/var/www/html/app
-      - appdata:/var/www/html/bin
-      - appdata:/var/www/html/dev
-      - appdata:/var/www/html/generated
-      - appdata:/var/www/html/lib
-      - appdata:/var/www/html/phpserver
-      - appdata:/var/www/html/pub
-      - appdata:/var/www/html/setup
-      - appdata:/var/www/html/update
-      - appdata:/var/www/html/var
-      - appdata:/var/www/html/vendor
-
-  phpfpm:
-    image: markoshust/magento-php:7.1-fpm-9
-    links:
-      - db
-    volumes: *appvolumes
-
-  # Disabling cron by default as it uses higher CPU, enable if needed
-  #cron:
-  #  image: markoshust/magento-php:7.1-fpm-9
-  #  user: root
-  #  command: /usr/local/bin/cronstart
-  #  tty: true
-  #  links:
-  #    - db
-  #  volumes: *appvolumes
-
-  db:
-    image: percona:5.7
-    ports:
-      - "3306:3306"
-    env_file: env/db.env
-    volumes:
-      - dbdata:/var/lib/mysql
-
-  elasticsearch:
-    image: elasticsearch:5.6
-    ports:
-      - "9200:9200"
-      - "9300:9300"
-
-volumes:
-  appdata:
-  dbdata:

+ 0 - 1
compose/magento-2-windows/src/.gitignore

@@ -1 +0,0 @@
-!.gitignore

+ 0 - 12
compose/magento-2/bin/copytocontainer

@@ -1,12 +0,0 @@
-#!/bin/bash
-[ -z "$1" ] && echo "Please specify a directory or file to copy to container (ex. vendor, --all)" && exit
-
-if [ "$1" == "--all" ]; then
-  docker cp src/./ $(docker-compose ps -q phpfpm|awk '{print $1}'):/var/www/html/
-  echo "Completed copying all files from host to container"
-else
-  docker cp src/$1 $(docker-compose ps -q phpfpm|awk '{print $1}'):/var/www/html/
-  echo "Completed copying $1 from host to container"
-fi
-
-bin/fixowns

+ 0 - 10
compose/magento-2/bin/dev-urn-catalog-generate

@@ -1,10 +0,0 @@
-#!/bin/bash
-bin/magento dev:urn-catalog:generate misc.xml
-bin/copyfromcontainer misc.xml
-
-sed -i .bak 's?/var/www/html?'`pwd`/src'?' src/misc.xml
-rm src/misc.xml.bak
-mkdir -p src/.idea
-mv src/misc.xml src/.idea/misc.xml
-
-echo "URN's have been generated, you may now restart PHPStorm"

+ 0 - 3
compose/magento-2/bin/download

@@ -1,3 +0,0 @@
-#!/bin/bash
-[ -z "$1" ] && echo "Please specify the version to download (ex. 2.0.0)" && exit
-mkdir -p src && curl -L http://pubfiles.nexcess.net/magento/ce-packages/magento2-$1.tar.gz | tar xzf - -o -C src

+ 0 - 3
compose/magento-2/bin/fixowns

@@ -1,3 +0,0 @@
-#!/bin/bash
-echo "Correcting filesystem ownerships..."
-bin/rootnotty chown -R app:app /var/www/

+ 0 - 8
compose/magento-2/bin/fixperms

@@ -1,8 +0,0 @@
-#!/bin/bash
-echo "Correcting filesystem permissions..."
-
-bin/clinotty find var vendor pub/static pub/media app/etc -type f -exec chmod u+w {} \;
-bin/clinotty find var vendor pub/static pub/media app/etc -type d -exec chmod u+w {} \;
-bin/clinotty chmod u+x bin/magento
-
-echo "Filesystem permissions corrected."

+ 0 - 2
compose/magento-2/bin/start

@@ -1,2 +0,0 @@
-#!/bin/bash
-docker-compose -f docker-compose.yml -f docker-compose.dev.yml up -d

+ 0 - 4
compose/magento-2/env/db.env

@@ -1,4 +0,0 @@
-MYSQL_ROOT_PASSWORD=magento
-MYSQL_DATABASE=magento
-MYSQL_USER=magento
-MYSQL_PASSWORD=magento

+ 0 - 1
compose/magento-2/src/.gitignore

@@ -1 +0,0 @@
-!.gitignore

+ 4 - 0
images/elasticsearch/6.5/Dockerfile

@@ -0,0 +1,4 @@
+FROM elasticsearch:6.5.4
+
+RUN /usr/share/elasticsearch/bin/elasticsearch-plugin install analysis-icu
+RUN /usr/share/elasticsearch/bin/elasticsearch-plugin install analysis-phonetic

+ 10 - 1
images/nginx/1.13/Dockerfile

@@ -6,9 +6,18 @@ RUN groupadd -g 1000 app \
 RUN touch /var/run/nginx.pid
 RUN touch /var/run/nginx.pid
 RUN mkdir /sock
 RUN mkdir /sock
 
 
-RUN apt-get update && apt-get install -y openssl
+RUN apt-get update && apt-get install -y \
+  curl \
+  libnss3-tools \
+  openssl
+
 RUN mkdir /etc/nginx/certs \
 RUN mkdir /etc/nginx/certs \
   && echo -e "\n\n\n\n\n\n\n" | openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/certs/nginx.key -out /etc/nginx/certs/nginx.crt
   && echo -e "\n\n\n\n\n\n\n" | openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/certs/nginx.key -out /etc/nginx/certs/nginx.crt
+RUN ( \
+  cd /usr/local/bin/ \
+  && curl -L https://github.com/FiloSottile/mkcert/releases/download/v1.4.1/mkcert-v1.4.1-linux-amd64 -o mkcert \
+  && chmod +x mkcert \
+  )
 
 
 COPY ./conf/nginx.conf /etc/nginx/
 COPY ./conf/nginx.conf /etc/nginx/
 COPY ./conf/default.conf /etc/nginx/conf.d/
 COPY ./conf/default.conf /etc/nginx/conf.d/

+ 27 - 13
images/php/7.1/Dockerfile

@@ -5,11 +5,14 @@ RUN apt-get update && apt-get install -y \
   cron \
   cron \
   git \
   git \
   gzip \
   gzip \
+  libbz2-dev \
   libfreetype6-dev \
   libfreetype6-dev \
   libicu-dev \
   libicu-dev \
   libjpeg62-turbo-dev \
   libjpeg62-turbo-dev \
   libmcrypt-dev \
   libmcrypt-dev \
   libpng-dev \
   libpng-dev \
+  libsodium-dev \
+  libssh2-1-dev \
   libxslt1-dev \
   libxslt1-dev \
   lsof \
   lsof \
   mysql-client \
   mysql-client \
@@ -21,16 +24,27 @@ RUN docker-php-ext-configure \
 
 
 RUN docker-php-ext-install \
 RUN docker-php-ext-install \
   bcmath \
   bcmath \
+  bz2 \
+  calendar \
+  exif \
   gd \
   gd \
+  gettext \
   intl \
   intl \
   mbstring \
   mbstring \
+  mysqli \
   mcrypt \
   mcrypt \
   opcache \
   opcache \
+  pcntl \
   pdo_mysql \
   pdo_mysql \
   soap \
   soap \
+  sockets \
+  sysvmsg \
+  sysvsem \
+  sysvshm \
   xsl \
   xsl \
   zip
   zip
 
 
+
 RUN cd /tmp \
 RUN cd /tmp \
   && curl -o ioncube.tar.gz http://downloads3.ioncube.com/loader_downloads/ioncube_loaders_lin_x86-64.tar.gz \
   && curl -o ioncube.tar.gz http://downloads3.ioncube.com/loader_downloads/ioncube_loaders_lin_x86-64.tar.gz \
   && tar -xvvzf ioncube.tar.gz \
   && tar -xvvzf ioncube.tar.gz \
@@ -47,16 +61,13 @@ RUN pecl install -f libsodium-1.0.17 \
   && echo "extension=sodium.so" > /usr/local/etc/php/conf.d/sodium.ini
   && echo "extension=sodium.so" > /usr/local/etc/php/conf.d/sodium.ini
 
 
 RUN pecl channel-update pecl.php.net \
 RUN pecl channel-update pecl.php.net \
-  && pecl install xdebug \
-  && docker-php-ext-enable xdebug \
-  && sed -i -e 's/^zend_extension/\;zend_extension/g' /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini
-
-RUN apt-get install -y libssh2-1-dev \
+  && pecl install libsodium \
   && pecl install ssh2-1.1.2 \
   && pecl install ssh2-1.1.2 \
-  && docker-php-ext-enable ssh2
+  && pecl install xdebug
 
 
-RUN curl -sS https://getcomposer.org/installer | \
-  php -- --install-dir=/usr/local/bin --filename=composer
+RUN docker-php-ext-enable ssh2 \
+  && docker-php-ext-enable xdebug \
+  && sed -i -e 's/^zend_extension/\;zend_extension/g' /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini
 
 
 RUN groupadd -g 1000 app \
 RUN groupadd -g 1000 app \
   && useradd -g 1000 -u 1000 -d /var/www -s /bin/bash app
   && useradd -g 1000 -u 1000 -d /var/www -s /bin/bash app
@@ -72,17 +83,20 @@ RUN curl -sSLO https://github.com/mailhog/mhsendmail/releases/download/v0.2.0/mh
   && chmod +x mhsendmail_linux_amd64 \
   && chmod +x mhsendmail_linux_amd64 \
   && mv mhsendmail_linux_amd64 /usr/local/bin/mhsendmail
   && mv mhsendmail_linux_amd64 /usr/local/bin/mhsendmail
 
 
-RUN printf '* *\t* * *\tapp\t%s/usr/local/bin/php /var/www/html/update/cron.php\n' >> /etc/crontab
-RUN printf '* *\t* * *\tapp\t%s/usr/local/bin/php /var/www/html/bin/magento cron:run\n' >> /etc/crontab
-RUN printf '* *\t* * *\tapp\t%s/usr/local/bin/php /var/www/html/bin/magento setup:cron:run\n#\n' >> /etc/crontab
+RUN curl -sS https://getcomposer.org/installer | \
+  php -- --version=1.9.0 --install-dir=/usr/local/bin --filename=composer
+
+RUN printf '* *\t* * *\tapp\t%s/usr/local/bin/php /var/www/html/update/cron.php\n' >> /etc/crontab \
+  && printf '* *\t* * *\tapp\t%s/usr/local/bin/php /var/www/html/bin/magento cron:run\n' >> /etc/crontab \
+  && printf '* *\t* * *\tapp\t%s/usr/local/bin/php /var/www/html/bin/magento setup:cron:run\n#\n' >> /etc/crontab
 
 
 COPY conf/www.conf /usr/local/etc/php-fpm.d/
 COPY conf/www.conf /usr/local/etc/php-fpm.d/
 COPY conf/php.ini /usr/local/etc/php/
 COPY conf/php.ini /usr/local/etc/php/
 COPY conf/php-fpm.conf /usr/local/etc/
 COPY conf/php-fpm.conf /usr/local/etc/
 COPY bin/cronstart /usr/local/bin/
 COPY bin/cronstart /usr/local/bin/
 
 
-RUN mkdir /sock
-RUN chown -R app:app /usr/local/etc/php/conf.d /sock
+RUN mkdir -p /etc/nginx/html /var/www/html /sock \
+  && chown -R app:app /etc/nginx /var/www /usr/local/etc/php/conf.d /sock
 
 
 USER app:app
 USER app:app
 
 

+ 33 - 15
images/php/7.2/Dockerfile

@@ -1,18 +1,21 @@
-FROM php:7.2-fpm-stretch
+FROM php:7.2-fpm-buster
 MAINTAINER Mark Shust <mark@shust.com>
 MAINTAINER Mark Shust <mark@shust.com>
 
 
 RUN apt-get update && apt-get install -y \
 RUN apt-get update && apt-get install -y \
   cron \
   cron \
   git \
   git \
   gzip \
   gzip \
+  libbz2-dev \
   libfreetype6-dev \
   libfreetype6-dev \
   libicu-dev \
   libicu-dev \
   libjpeg62-turbo-dev \
   libjpeg62-turbo-dev \
   libmcrypt-dev \
   libmcrypt-dev \
   libpng-dev \
   libpng-dev \
+  libsodium-dev \
+  libssh2-1-dev \
   libxslt1-dev \
   libxslt1-dev \
   lsof \
   lsof \
-  mysql-client \
+  default-mysql-client \
   vim \
   vim \
   zip
   zip
 
 
@@ -21,12 +24,23 @@ RUN docker-php-ext-configure \
 
 
 RUN docker-php-ext-install \
 RUN docker-php-ext-install \
   bcmath \
   bcmath \
+  bz2 \
+  calendar \
+  exif \
   gd \
   gd \
+  gettext \
   intl \
   intl \
   mbstring \
   mbstring \
+  mysqli \
   opcache \
   opcache \
+  pcntl \
   pdo_mysql \
   pdo_mysql \
   soap \
   soap \
+  sockets \
+  sodium \
+  sysvmsg \
+  sysvsem \
+  sysvshm \
   xsl \
   xsl \
   zip
   zip
 
 
@@ -45,16 +59,12 @@ RUN apt-get update && apt-get -t stretch-backports install -y \
 RUN pecl install -f libsodium-1.0.17
 RUN pecl install -f libsodium-1.0.17
 
 
 RUN pecl channel-update pecl.php.net \
 RUN pecl channel-update pecl.php.net \
-  && pecl install xdebug \
-  && docker-php-ext-enable xdebug \
-  && sed -i -e 's/^zend_extension/\;zend_extension/g' /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini
-
-RUN apt-get install -y libssh2-1-dev \
   && pecl install ssh2-1.1.2 \
   && pecl install ssh2-1.1.2 \
-  && docker-php-ext-enable ssh2
+  && pecl install xdebug
 
 
-RUN curl -sS https://getcomposer.org/installer | \
-  php -- --install-dir=/usr/local/bin --filename=composer
+RUN docker-php-ext-enable ssh2 \
+  && docker-php-ext-enable xdebug \
+  && sed -i -e 's/^zend_extension/\;zend_extension/g' /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini
 
 
 RUN groupadd -g 1000 app \
 RUN groupadd -g 1000 app \
   && useradd -g 1000 -u 1000 -d /var/www -s /bin/bash app
   && useradd -g 1000 -u 1000 -d /var/www -s /bin/bash app
@@ -70,17 +80,25 @@ RUN curl -sSLO https://github.com/mailhog/mhsendmail/releases/download/v0.2.0/mh
   && chmod +x mhsendmail_linux_amd64 \
   && chmod +x mhsendmail_linux_amd64 \
   && mv mhsendmail_linux_amd64 /usr/local/bin/mhsendmail
   && mv mhsendmail_linux_amd64 /usr/local/bin/mhsendmail
 
 
-RUN printf '* *\t* * *\tapp\t%s/usr/local/bin/php /var/www/html/update/cron.php\n' >> /etc/crontab
-RUN printf '* *\t* * *\tapp\t%s/usr/local/bin/php /var/www/html/bin/magento cron:run\n' >> /etc/crontab
-RUN printf '* *\t* * *\tapp\t%s/usr/local/bin/php /var/www/html/bin/magento setup:cron:run\n#\n' >> /etc/crontab
+RUN curl -sS https://getcomposer.org/installer | \
+  php -- --version=1.9.0 --install-dir=/usr/local/bin --filename=composer
+
+RUN curl -s https://packages.blackfire.io/gpg.key | apt-key add - \
+  && echo "deb http://packages.blackfire.io/debian any main" | tee /etc/apt/sources.list.d/blackfire.list \
+  && apt-get update \
+  && apt-get install blackfire-agent blackfire-php
+
+RUN printf '* *\t* * *\tapp\t%s/usr/local/bin/php /var/www/html/update/cron.php\n' >> /etc/crontab \
+  && printf '* *\t* * *\tapp\t%s/usr/local/bin/php /var/www/html/bin/magento cron:run\n' >> /etc/crontab \
+  && printf '* *\t* * *\tapp\t%s/usr/local/bin/php /var/www/html/bin/magento setup:cron:run\n#\n' >> /etc/crontab
 
 
 COPY conf/www.conf /usr/local/etc/php-fpm.d/
 COPY conf/www.conf /usr/local/etc/php-fpm.d/
 COPY conf/php.ini /usr/local/etc/php/
 COPY conf/php.ini /usr/local/etc/php/
 COPY conf/php-fpm.conf /usr/local/etc/
 COPY conf/php-fpm.conf /usr/local/etc/
 COPY bin/cronstart /usr/local/bin/
 COPY bin/cronstart /usr/local/bin/
 
 
-RUN mkdir -p /etc/nginx/html /var/www/html /sock
-RUN chown -R app:app /etc/nginx /var/www /usr/local/etc/php/conf.d /sock
+RUN mkdir -p /etc/nginx/html /var/www/html /sock \
+  && chown -R app:app /etc/nginx /var/www /usr/local/etc/php/conf.d /sock
 
 
 USER app:app
 USER app:app
 
 

+ 104 - 0
images/php/7.3/Dockerfile

@@ -0,0 +1,104 @@
+FROM php:7.3-fpm-buster
+MAINTAINER Mark Shust <mark@shust.com>
+
+RUN apt-get update && apt-get install -y \
+  cron \
+  git \
+  gzip \
+  libbz2-dev \
+  libfreetype6-dev \
+  libicu-dev \
+  libjpeg62-turbo-dev \
+  libmcrypt-dev \
+  libpng-dev \
+  libsodium-dev \
+  libssh2-1-dev \
+  libxslt1-dev \
+  libzip-dev \
+  lsof \
+  default-mysql-client \
+  vim \
+  zip
+
+RUN docker-php-ext-configure \
+  gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/
+
+RUN docker-php-ext-install \
+  bcmath \
+  bz2 \
+  calendar \
+  exif \
+  gd \
+  gettext \
+  intl \
+  mbstring \
+  mysqli \
+  opcache \
+  pcntl \
+  pdo_mysql \
+  soap \
+  sockets \
+  sodium \
+  sysvmsg \
+  sysvsem \
+  sysvshm \
+  xsl \
+  zip
+
+RUN pecl channel-update pecl.php.net \
+  && pecl install xdebug
+
+RUN docker-php-ext-enable xdebug \
+  && sed -i -e 's/^zend_extension/\;zend_extension/g' /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini
+
+## Replace next lines with below commented out version once issue is resolved
+# https://github.com/php/pecl-networking-ssh2/pull/36
+# https://bugs.php.net/bug.php?id=78560
+RUN curl -o /tmp/ssh2-1.2.tgz https://pecl.php.net/get/ssh2 \
+  && pear install /tmp/ssh2-1.2.tgz \
+  && rm /tmp/ssh2-1.2.tgz \
+  && docker-php-ext-enable ssh2
+#RUN pecl install ssh2-1.2 \
+#  && docker-php-ext-enable ssh2
+
+RUN groupadd -g 1000 app \
+ && useradd -g 1000 -u 1000 -d /var/www -s /bin/bash app
+
+RUN apt-get install -y gnupg \
+  && curl -sL https://deb.nodesource.com/setup_8.x | bash - \
+  && apt-get install -y nodejs \
+  && mkdir /var/www/.config /var/www/.npm \
+  && chown app:app /var/www/.config /var/www/.npm \
+  && ln -s /var/www/html/node_modules/grunt/bin/grunt /usr/bin/grunt
+
+RUN curl -sSLO https://github.com/mailhog/mhsendmail/releases/download/v0.2.0/mhsendmail_linux_amd64 \
+  && chmod +x mhsendmail_linux_amd64 \
+  && mv mhsendmail_linux_amd64 /usr/local/bin/mhsendmail
+
+RUN curl -sS https://getcomposer.org/installer | \
+  php -- --version=1.9.0 --install-dir=/usr/local/bin --filename=composer
+
+RUN curl -s https://packages.blackfire.io/gpg.key | apt-key add - \
+  && echo "deb http://packages.blackfire.io/debian any main" | tee /etc/apt/sources.list.d/blackfire.list \
+  && apt-get update \
+  && apt-get install blackfire-agent blackfire-php
+
+RUN printf '* *\t* * *\tapp\t%s/usr/local/bin/php /var/www/html/update/cron.php\n' >> /etc/crontab \
+  && printf '* *\t* * *\tapp\t%s/usr/local/bin/php /var/www/html/bin/magento cron:run\n' >> /etc/crontab \
+  && printf '* *\t* * *\tapp\t%s/usr/local/bin/php /var/www/html/bin/magento setup:cron:run\n#\n' >> /etc/crontab
+
+COPY conf/www.conf /usr/local/etc/php-fpm.d/
+COPY conf/php.ini /usr/local/etc/php/
+COPY conf/php-fpm.conf /usr/local/etc/
+COPY bin/cronstart /usr/local/bin/
+
+RUN mkdir -p /etc/nginx/html /var/www/html /sock \
+  && chown -R app:app /etc/nginx /var/www /usr/local/etc/php/conf.d /sock
+
+USER app:app
+
+VOLUME /var/www
+
+WORKDIR /var/www/html
+
+EXPOSE 9001

+ 7 - 0
images/php/7.3/bin/cronstart

@@ -0,0 +1,7 @@
+#!/bin/bash
+service cron start
+
+touch /var/www/html/var/.setup_cronjob_status /var/www/html/var/.update_cronjob_status
+chown app:app /var/www/html/var/.setup_cronjob_status /var/www/html/var/.update_cronjob_status
+
+/usr/bin/crontab

+ 31 - 0
images/php/7.3/conf/php-fpm.conf

@@ -0,0 +1,31 @@
+; This file was initially adapated from the output of: (on PHP 5.6)
+;   grep -vE '^;|^ *$' /usr/local/etc/php-fpm.conf.default
+
+[global]
+
+error_log = /proc/self/fd/2
+daemonize = no
+
+[www]
+
+; if we send this to /proc/self/fd/1, it never appears
+access.log = /proc/self/fd/2
+
+;user = app
+;group = app
+
+listen = /sock/docker.sock
+listen.owner = app
+listen.group = app
+listen.mode = 0660
+
+pm = dynamic
+pm.max_children = 10
+pm.start_servers = 4
+pm.min_spare_servers = 2
+pm.max_spare_servers = 6
+
+clear_env = no
+
+; Ensure worker stdout and stderr are sent to the main error log.
+catch_workers_output = yes

+ 16 - 0
images/php/7.3/conf/php.ini

@@ -0,0 +1,16 @@
+memory_limit = 2G
+max_execution_time = 1800
+zlib.output_compression = On
+cgi.fix_pathinfo = 0
+date.timezone = UTC
+
+xdebug.remote_autostart = 1
+xdebug.remote_enable = 1
+xdebug.remote_host = host.docker.internal
+xdebug.remote_port = 9001
+xdebug.idekey = PHPSTORM
+
+upload_max_filesize = 20M
+post_max_size = 20M
+
+sendmail_path = "/usr/local/bin/mhsendmail --smtp-addr=mailhog:1025"

+ 413 - 0
images/php/7.3/conf/www.conf

@@ -0,0 +1,413 @@
+; Start a new pool named 'www'.
+; the variable $pool can we used in any directive and will be replaced by the
+; pool name ('www' here)
+[www]
+
+; Per pool prefix
+; It only applies on the following directives:
+; - 'access.log'
+; - 'slowlog'
+; - 'listen' (unixsocket)
+; - 'chroot'
+; - 'chdir'
+; - 'php_values'
+; - 'php_admin_values'
+; When not set, the global prefix (or NONE) applies instead.
+; Note: This directive can also be relative to the global prefix.
+; Default Value: none
+;prefix = /path/to/pools/$pool
+
+; Unix user/group of processes
+; Note: The user is mandatory. If the group is not set, the default user's group
+;       will be used.
+user = app
+group = app
+
+; The address on which to accept FastCGI requests.
+; Valid syntaxes are:
+;   'ip.add.re.ss:port'    - to listen on a TCP socket to a specific IPv4 address on
+;                            a specific port;
+;   '[ip:6:addr:ess]:port' - to listen on a TCP socket to a specific IPv6 address on
+;                            a specific port;
+;   'port'                 - to listen on a TCP socket to all addresses
+;                            (IPv6 and IPv4-mapped) on a specific port;
+;   '/path/to/unix/socket' - to listen on a unix socket.
+; Note: This value is mandatory.
+listen = 127.0.0.1:9000
+
+; Set listen(2) backlog.
+; Default Value: 511 (-1 on FreeBSD and OpenBSD)
+;listen.backlog = 511
+
+; Set permissions for unix socket, if one is used. In Linux, read/write
+; permissions must be set in order to allow connections from a web server. Many
+; BSD-derived systems allow connections regardless of permissions.
+; Default Values: user and group are set as the running user
+;                 mode is set to 0660
+;listen.owner = www-data
+;listen.group = www-data
+;listen.mode = 0660
+; When POSIX Access Control Lists are supported you can set them using
+; these options, value is a comma separated list of user/group names.
+; When set, listen.owner and listen.group are ignored
+;listen.acl_users =
+;listen.acl_groups =
+
+; List of addresses (IPv4/IPv6) of FastCGI clients which are allowed to connect.
+; Equivalent to the FCGI_WEB_SERVER_ADDRS environment variable in the original
+; PHP FCGI (5.2.2+). Makes sense only with a tcp listening socket. Each address
+; must be separated by a comma. If this value is left blank, connections will be
+; accepted from any ip address.
+; Default Value: any
+;listen.allowed_clients = 127.0.0.1
+
+; Specify the nice(2) priority to apply to the pool processes (only if set)
+; The value can vary from -19 (highest priority) to 20 (lower priority)
+; Note: - It will only work if the FPM master process is launched as root
+;       - The pool processes will inherit the master process priority
+;         unless it specified otherwise
+; Default Value: no set
+; process.priority = -19
+
+; Choose how the process manager will control the number of child processes.
+; Possible Values:
+;   static  - a fixed number (pm.max_children) of child processes;
+;   dynamic - the number of child processes are set dynamically based on the
+;             following directives. With this process management, there will be
+;             always at least 1 children.
+;             pm.max_children      - the maximum number of children that can
+;                                    be alive at the same time.
+;             pm.start_servers     - the number of children created on startup.
+;             pm.min_spare_servers - the minimum number of children in 'idle'
+;                                    state (waiting to process). If the number
+;                                    of 'idle' processes is less than this
+;                                    number then some children will be created.
+;             pm.max_spare_servers - the maximum number of children in 'idle'
+;                                    state (waiting to process). If the number
+;                                    of 'idle' processes is greater than this
+;                                    number then some children will be killed.
+;  ondemand - no children are created at startup. Children will be forked when
+;             new requests will connect. The following parameter are used:
+;             pm.max_children           - the maximum number of children that
+;                                         can be alive at the same time.
+;             pm.process_idle_timeout   - The number of seconds after which
+;                                         an idle process will be killed.
+; Note: This value is mandatory.
+pm = dynamic
+
+; The number of child processes to be created when pm is set to 'static' and the
+; maximum number of child processes when pm is set to 'dynamic' or 'ondemand'.
+; This value sets the limit on the number of simultaneous requests that will be
+; served. Equivalent to the ApacheMaxClients directive with mpm_prefork.
+; Equivalent to the PHP_FCGI_CHILDREN environment variable in the original PHP
+; CGI. The below defaults are based on a server without much resources. Don't
+; forget to tweak pm.* to fit your needs.
+; Note: Used when pm is set to 'static', 'dynamic' or 'ondemand'
+; Note: This value is mandatory.
+pm.max_children = 5
+
+; The number of child processes created on startup.
+; Note: Used only when pm is set to 'dynamic'
+; Default Value: min_spare_servers + (max_spare_servers - min_spare_servers) / 2
+pm.start_servers = 2
+
+; The desired minimum number of idle server processes.
+; Note: Used only when pm is set to 'dynamic'
+; Note: Mandatory when pm is set to 'dynamic'
+pm.min_spare_servers = 1
+
+; The desired maximum number of idle server processes.
+; Note: Used only when pm is set to 'dynamic'
+; Note: Mandatory when pm is set to 'dynamic'
+pm.max_spare_servers = 3
+
+; The number of seconds after which an idle process will be killed.
+; Note: Used only when pm is set to 'ondemand'
+; Default Value: 10s
+;pm.process_idle_timeout = 10s;
+
+; The number of requests each child process should execute before respawning.
+; This can be useful to work around memory leaks in 3rd party libraries. For
+; endless request processing specify '0'. Equivalent to PHP_FCGI_MAX_REQUESTS.
+; Default Value: 0
+;pm.max_requests = 500
+
+; The URI to view the FPM status page. If this value is not set, no URI will be
+; recognized as a status page. It shows the following informations:
+;   pool                 - the name of the pool;
+;   process manager      - static, dynamic or ondemand;
+;   start time           - the date and time FPM has started;
+;   start since          - number of seconds since FPM has started;
+;   accepted conn        - the number of request accepted by the pool;
+;   listen queue         - the number of request in the queue of pending
+;                          connections (see backlog in listen(2));
+;   max listen queue     - the maximum number of requests in the queue
+;                          of pending connections since FPM has started;
+;   listen queue len     - the size of the socket queue of pending connections;
+;   idle processes       - the number of idle processes;
+;   active processes     - the number of active processes;
+;   total processes      - the number of idle + active processes;
+;   max active processes - the maximum number of active processes since FPM
+;                          has started;
+;   max children reached - number of times, the process limit has been reached,
+;                          when pm tries to start more children (works only for
+;                          pm 'dynamic' and 'ondemand');
+; Value are updated in real time.
+; Example output:
+;   pool:                 www
+;   process manager:      static
+;   start time:           01/Jul/2011:17:53:49 +0200
+;   start since:          62636
+;   accepted conn:        190460
+;   listen queue:         0
+;   max listen queue:     1
+;   listen queue len:     42
+;   idle processes:       4
+;   active processes:     11
+;   total processes:      15
+;   max active processes: 12
+;   max children reached: 0
+;
+; By default the status page output is formatted as text/plain. Passing either
+; 'html', 'xml' or 'json' in the query string will return the corresponding
+; output syntax. Example:
+;   http://www.foo.bar/status
+;   http://www.foo.bar/status?json
+;   http://www.foo.bar/status?html
+;   http://www.foo.bar/status?xml
+;
+; By default the status page only outputs short status. Passing 'full' in the
+; query string will also return status for each pool process.
+; Example:
+;   http://www.foo.bar/status?full
+;   http://www.foo.bar/status?json&full
+;   http://www.foo.bar/status?html&full
+;   http://www.foo.bar/status?xml&full
+; The Full status returns for each process:
+;   pid                  - the PID of the process;
+;   state                - the state of the process (Idle, Running, ...);
+;   start time           - the date and time the process has started;
+;   start since          - the number of seconds since the process has started;
+;   requests             - the number of requests the process has served;
+;   request duration     - the duration in µs of the requests;
+;   request method       - the request method (GET, POST, ...);
+;   request URI          - the request URI with the query string;
+;   content length       - the content length of the request (only with POST);
+;   user                 - the user (PHP_AUTH_USER) (or '-' if not set);
+;   script               - the main script called (or '-' if not set);
+;   last request cpu     - the %cpu the last request consumed
+;                          it's always 0 if the process is not in Idle state
+;                          because CPU calculation is done when the request
+;                          processing has terminated;
+;   last request memory  - the max amount of memory the last request consumed
+;                          it's always 0 if the process is not in Idle state
+;                          because memory calculation is done when the request
+;                          processing has terminated;
+; If the process is in Idle state, then informations are related to the
+; last request the process has served. Otherwise informations are related to
+; the current request being served.
+; Example output:
+;   ************************
+;   pid:                  31330
+;   state:                Running
+;   start time:           01/Jul/2011:17:53:49 +0200
+;   start since:          63087
+;   requests:             12808
+;   request duration:     1250261
+;   request method:       GET
+;   request URI:          /test_mem.php?N=10000
+;   content length:       0
+;   user:                 -
+;   script:               /home/fat/web/docs/php/test_mem.php
+;   last request cpu:     0.00
+;   last request memory:  0
+;
+; Note: There is a real-time FPM status monitoring sample web page available
+;       It's available in: /usr/local/share/php/fpm/status.html
+;
+; Note: The value must start with a leading slash (/). The value can be
+;       anything, but it may not be a good idea to use the .php extension or it
+;       may conflict with a real PHP file.
+; Default Value: not set
+;pm.status_path = /status
+
+; The ping URI to call the monitoring page of FPM. If this value is not set, no
+; URI will be recognized as a ping page. This could be used to test from outside
+; that FPM is alive and responding, or to
+; - create a graph of FPM availability (rrd or such);
+; - remove a server from a group if it is not responding (load balancing);
+; - trigger alerts for the operating team (24/7).
+; Note: The value must start with a leading slash (/). The value can be
+;       anything, but it may not be a good idea to use the .php extension or it
+;       may conflict with a real PHP file.
+; Default Value: not set
+;ping.path = /ping
+
+; This directive may be used to customize the response of a ping request. The
+; response is formatted as text/plain with a 200 response code.
+; Default Value: pong
+;ping.response = pong
+
+; The access log file
+; Default: not set
+;access.log = log/$pool.access.log
+
+; The access log format.
+; The following syntax is allowed
+;  %%: the '%' character
+;  %C: %CPU used by the request
+;      it can accept the following format:
+;      - %{user}C for user CPU only
+;      - %{system}C for system CPU only
+;      - %{total}C  for user + system CPU (default)
+;  %d: time taken to serve the request
+;      it can accept the following format:
+;      - %{seconds}d (default)
+;      - %{miliseconds}d
+;      - %{mili}d
+;      - %{microseconds}d
+;      - %{micro}d
+;  %e: an environment variable (same as $_ENV or $_SERVER)
+;      it must be associated with embraces to specify the name of the env
+;      variable. Some exemples:
+;      - server specifics like: %{REQUEST_METHOD}e or %{SERVER_PROTOCOL}e
+;      - HTTP headers like: %{HTTP_HOST}e or %{HTTP_USER_AGENT}e
+;  %f: script filename
+;  %l: content-length of the request (for POST request only)
+;  %m: request method
+;  %M: peak of memory allocated by PHP
+;      it can accept the following format:
+;      - %{bytes}M (default)
+;      - %{kilobytes}M
+;      - %{kilo}M
+;      - %{megabytes}M
+;      - %{mega}M
+;  %n: pool name
+;  %o: output header
+;      it must be associated with embraces to specify the name of the header:
+;      - %{Content-Type}o
+;      - %{X-Powered-By}o
+;      - %{Transfert-Encoding}o
+;      - ....
+;  %p: PID of the child that serviced the request
+;  %P: PID of the parent of the child that serviced the request
+;  %q: the query string
+;  %Q: the '?' character if query string exists
+;  %r: the request URI (without the query string, see %q and %Q)
+;  %R: remote IP address
+;  %s: status (response code)
+;  %t: server time the request was received
+;      it can accept a strftime(3) format:
+;      %d/%b/%Y:%H:%M:%S %z (default)
+;      The strftime(3) format must be encapsuled in a %{<strftime_format>}t tag
+;      e.g. for a ISO8601 formatted timestring, use: %{%Y-%m-%dT%H:%M:%S%z}t
+;  %T: time the log has been written (the request has finished)
+;      it can accept a strftime(3) format:
+;      %d/%b/%Y:%H:%M:%S %z (default)
+;      The strftime(3) format must be encapsuled in a %{<strftime_format>}t tag
+;      e.g. for a ISO8601 formatted timestring, use: %{%Y-%m-%dT%H:%M:%S%z}t
+;  %u: remote user
+;
+; Default: "%R - %u %t \"%m %r\" %s"
+;access.format = "%R - %u %t \"%m %r%Q%q\" %s %f %{mili}d %{kilo}M %C%%"
+
+; The log file for slow requests
+; Default Value: not set
+; Note: slowlog is mandatory if request_slowlog_timeout is set
+;slowlog = log/$pool.log.slow
+
+; The timeout for serving a single request after which a PHP backtrace will be
+; dumped to the 'slowlog' file. A value of '0s' means 'off'.
+; Available units: s(econds)(default), m(inutes), h(ours), or d(ays)
+; Default Value: 0
+;request_slowlog_timeout = 0
+
+; The timeout for serving a single request after which the worker process will
+; be killed. This option should be used when the 'max_execution_time' ini option
+; does not stop script execution for some reason. A value of '0' means 'off'.
+; Available units: s(econds)(default), m(inutes), h(ours), or d(ays)
+; Default Value: 0
+;request_terminate_timeout = 0
+
+; Set open file descriptor rlimit.
+; Default Value: system defined value
+;rlimit_files = 1024
+
+; Set max core size rlimit.
+; Possible Values: 'unlimited' or an integer greater or equal to 0
+; Default Value: system defined value
+;rlimit_core = 0
+
+; Chroot to this directory at the start. This value must be defined as an
+; absolute path. When this value is not set, chroot is not used.
+; Note: you can prefix with '$prefix' to chroot to the pool prefix or one
+; of its subdirectories. If the pool prefix is not set, the global prefix
+; will be used instead.
+; Note: chrooting is a great security feature and should be used whenever
+;       possible. However, all PHP paths will be relative to the chroot
+;       (error_log, sessions.save_path, ...).
+; Default Value: not set
+;chroot =
+
+; Chdir to this directory at the start.
+; Note: relative path can be used.
+; Default Value: current directory or / when chroot
+;chdir = /var/www
+
+; Redirect worker stdout and stderr into main error log. If not set, stdout and
+; stderr will be redirected to /dev/null according to FastCGI specs.
+; Note: on highloaded environement, this can cause some delay in the page
+; process time (several ms).
+; Default Value: no
+;catch_workers_output = yes
+
+; Clear environment in FPM workers
+; Prevents arbitrary environment variables from reaching FPM worker processes
+; by clearing the environment in workers before env vars specified in this
+; pool configuration are added.
+; Setting to "no" will make all environment variables available to PHP code
+; via getenv(), $_ENV and $_SERVER.
+; Default Value: yes
+;clear_env = no
+
+; Limits the extensions of the main script FPM will allow to parse. This can
+; prevent configuration mistakes on the web server side. You should only limit
+; FPM to .php extensions to prevent malicious users to use other extensions to
+; exectute php code.
+; Note: set an empty value to allow all extensions.
+; Default Value: .php
+;security.limit_extensions = .php .php3 .php4 .php5 .php7
+
+; Pass environment variables like LD_LIBRARY_PATH. All $VARIABLEs are taken from
+; the current environment.
+; Default Value: clean env
+;env[HOSTNAME] = $HOSTNAME
+;env[PATH] = /usr/local/bin:/usr/bin:/bin
+;env[TMP] = /tmp
+;env[TMPDIR] = /tmp
+;env[TEMP] = /tmp
+
+; Additional php.ini defines, specific to this pool of workers. These settings
+; overwrite the values previously defined in the php.ini. The directives are the
+; same as the PHP SAPI:
+;   php_value/php_flag             - you can set classic ini defines which can
+;                                    be overwritten from PHP call 'ini_set'.
+;   php_admin_value/php_admin_flag - these directives won't be overwritten by
+;                                     PHP call 'ini_set'
+; For php_*flag, valid values are on, off, 1, 0, true, false, yes or no.
+
+; Defining 'extension' will load the corresponding shared extension from
+; extension_dir. Defining 'disable_functions' or 'disable_classes' will not
+; overwrite previously defined php.ini values, but will append the new value
+; instead.
+
+; Note: path INI options can be relative and will be expanded with the prefix
+; (pool, global or /usr/local)
+
+; Default Value: nothing is defined by default except the values in php.ini and
+;                specified at startup with the -d argument
+;php_admin_value[sendmail_path] = /usr/sbin/sendmail -t -i -f www@my.domain.com
+;php_flag[display_errors] = off
+;php_admin_value[error_log] = /var/log/fpm-php.www.log
+;php_admin_flag[log_errors] = on
+;php_admin_value[memory_limit] = 32M

+ 3 - 3
lib/onelinesetup

@@ -1,11 +1,11 @@
 #!/bin/bash
 #!/bin/bash
 DOMAIN=${1:-magento2.test}
 DOMAIN=${1:-magento2.test}
-VERSION=${2:-2.3.0}
+VERSION=${2:-2.3.3}
 
 
-curl -s https://raw.githubusercontent.com/markshust/docker-magento/master/lib/template|bash -s - magento-2
+curl -s https://raw.githubusercontent.com/markshust/docker-magento/master/lib/template | bash
 bin/download $VERSION
 bin/download $VERSION
 
 
 echo "Your system password has been requested to add an entry to /etc/hosts..."
 echo "Your system password has been requested to add an entry to /etc/hosts..."
-echo "127.0.0.1 $DOMAIN" | sudo tee -a /etc/hosts
+echo "127.0.0.1 ::1 $DOMAIN" | sudo tee -a /etc/hosts
 
 
 bin/setup $DOMAIN
 bin/setup $DOMAIN

+ 3 - 3
lib/template

@@ -2,8 +2,8 @@
 git init -qqq
 git init -qqq
 git remote add origin https://github.com/markshust/docker-magento
 git remote add origin https://github.com/markshust/docker-magento
 git fetch origin -qqq
 git fetch origin -qqq
-git checkout origin/master -- compose/$1
-mv compose/$1/* ./
-mv compose/$1/.vscode ./
+git checkout origin/master -- compose
+mv compose/* ./
+mv compose/.vscode ./
 rm -rf compose .git
 rm -rf compose .git
 git init
 git init