How does it work?
The installation of Create Magento App is done through many small steps or tasks and we like to group them by their purpose: Preparation, Installation, Configuration, Execution. Each of these groups works with a specific set of technologies to achieve the desired result.
Overview
We use the listr2
library to help us with task definition and display in the terminal. This library allows us to declare independent tasks and execute them in any order we want, passing down context to later tasks. Context is a way for tasks to share information and is a key aspect of Create Magento App installation process.
During the Preparation tasks, for example, context is populated with various settings, such as available ports, Magento version, cma.js
configuration, etc, and the data is then used in later tasks. This approach simplifies the data flow and makes it easy for us to focus on one thing at a time, instead of doing multiple operations within each task.
Preparation
This is the first group of tasks that are executed once you run Create Magento App. Tasks of this group perform various checks to validate that the necessary requirements are met and set up your machine to be ready for installation.
Create Magento App uses Docker
, PHPBrew
, and Composer
under the hood and we have a task that is responsible for validating that all of them are installed on the machine and are ready to run, including their dependencies. Below will be the list of tasks that are responsible for preparation.
Checking cache folder
Create Magento App works with a lot of data and we don't want to run all of the operations each time the project is started, this is why some of the settings are cached for further use. This task is responsible for validating the presence of the cache folder.
Checking requirements
Create Magento App uses Docker
, PHPBrew
, and Composer
under the hood and this task is responsible for validating that all of them are installed on the machine and are ready to run, including their dependencies. In the scope of this task, your OS is also validated as Create Magento App only works on Mac and Linux.
Loading Magento version
In case the machine has a local Magento installation or multiple Magento installations, the user will be prompted to select the Magento versions that they want to use. In case the Magento installation is missing, the default version (2.4.1) will be chosen instead.
Get cached ports
Retrieves cached ports from the cache folder. This is needed to gracefully stop currently running Docker
containers.
Stopping Docker services
Stops running Docker
containers of Create Magento App. If not containers related to the project are running, the task will be skipped.
Stopping php-fpm
Kills the php-fpm
process. Only the local php-fpm
process for Create Magento App will be stopped.
Get available ports
Retrieves the list of available ports. Will find free ports in case of the first installation, otherwise will validate the ports that have been retrieved from the cache in one of the previous steps. In case one of the cached ports is no longer available, a new one will be found instead.
Save configuration
Saves the list of available ports to the configuration for further use in the application setup.
Installation
The second group of tasks is where PHP and Magento get installed. PHP extensions are also installed in the scope of this task group.
Install PHP
Installs the PHP binaries according to the version specified in the cma.js
, otherwise installs PHP version 7.4.13 by default. During each subsequent run, this task will check for PHP extensions configuration and install any missing extensions, if they are present.
Install Composer, prepare FS, and download images
Installs Composer to allow for Magento to install its dependencies. Prepares File System by creating folders and files necessary for Nginx, PHP, and php-fpm to run. This includes creating SSL certificates and updating the internal configuration file with paths to certain binaries and executables.
These tasks are grouped into one to run them in parallel, heavily decreasing the time needed for initial installation.
Configuring PHP extensions
This task is responsible for configuring the PHP extensions and adding them to the active PHPBrew instance.
Install Prestissimo
Installs Prestissimo, a plugin for Composer to allow it for parallel package installation. This plugin heavily decreases the time needed for initial installation, due to installing Magento's dependencies faster.
Install Magento
This is finally the task where Magento installation takes place! This task creates the project folder, installs Magento, and connects with the ScandiPWA theme created using Create Scandipwa App if present.
Configuration
Tasks in this group are responsible for creating and configuring the infrastructure needed for the application to work. This includes the Magento configuration itself as well as the setup of the Docker
infrastructure, and connection establishment to the MySQL container.
Starting Docker services
Starts 4 Docker
services that are required for Create Magento App to operate. These services are ElasticSearch
, MySQL
, Nginx
, and Redis
. In case of initial installation, an appropriate Docker
network will be created as well as Docker volumes to store the data.
Connect to MySQL server
Running MySQL instance is one of the requirements for Magento configuration, and the Create Magento App makes sure that the connection is established. A check is made to see if the MySQL container is running and in case it's not, the retry mechanism is in place. A total of 10 tries will be made with a 5-second interval between each and in most cases, it's enough to establish a connection.
Setup Magento
In this task, the Magento instance is configured for local development. Many sub-tasks will prepare the Magento instance by migrating the database, configuring URLs, creating an admin user, disabling the maintenance mode, and disabling the 2FA.
Execution
Tasks from this list will use the data from all previous tasks to start the application up.
Starting php-fpm
Starts the PHP process manager and the Magento instance.
Open browser
Opens up localhost
in the browser. The Magento app will be accessible from there.
Last updated