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.
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.
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
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.
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.
Create Magento App uses
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.
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.
Retrieves cached ports from the cache folder. This is needed to gracefully stop currently running
Docker containers of Create Magento App. If not containers related to the project are running, the task will be skipped.
php-fpm process. Only the local
php-fpm process for Create Magento App will be stopped.
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.
Saves the list of available ports to the configuration for further use in the application setup.
The second group of tasks is where PHP and Magento get installed. PHP extensions are also installed in the scope of this task group.
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.
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.
This task is responsible for configuring the PHP extensions and adding them to the active PHPBrew instance.
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.
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.
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.
Docker services that are required for Create Magento App to operate. These services are
Redis. In case of initial installation, an appropriate
Docker network will be created as well as Docker volumes to store the data.
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.
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.
Tasks from this list will use the data from all previous tasks to start the application up.
Starts the PHP process manager and the Magento instance.
localhost in the browser. The Magento app will be accessible from there.