How to Install Magento on windows host

By | November 24, 2021
Spread the love

Let follow below post, how to install Magento 2.4 locally on Windows using XAMPP server. This tutorial is targeted on current Magento 2.4 users and also users who are completely new to Magento. Now, let’s get started!

Part 1: Install and configure XAMPP

Step 1: Download XAMPP

Download link:

We recommend installing XAMPP with PHP version 7.4.x, which is recommended by Magento for M2.4. Also according to Magento, you can install Magento 2.4 with PHP 7.3, but it is not tested or recommended.

Step 2: Install XAMPP

After downloading XAMPP, double-click on the file to install it on your computer.

Click Next.

Leave the default selection as in the image. Click Next.

Choose your installation folder. The default location is C:\xampp. After that, click Next.

Click Next.

Click Next.

After setup is finished, you will see the option “Do you want to start the Control Panel now?”. Keep it selected. Click Finish to exit setup and enter XAMPP Control Panel.

Step 3: Configure XAMPP

In XAMPP Control Panel, click Config button on “Apache” row, and click “PHP (php.ini)“.

In the php.ini file, find these rows and remove ; before each row:


Expand memory_limit to 4G:


After you’ve done, save and close the file. Then, click the Start button on 2 rows Apache and MySQL to start them. Don’t quit XAMPP after this step, just let it run.

Step 4: Configure hosts file

Open C:\Windows\System32\drivers\etc\hosts. Add the following line to the last row:

Step 5: Create a database

Browse the URL http://localhost/phpmyadmin/ to access phpMyAdmin page. Put in a database name (“Magento2”, for example) and click Create.

Take note of your database name, as you’ll want to install Magento on it later on (using the root user).

Part 2: Install Elasticsearch

As of version 2.4, Magento requires Elasticsearch to be the catalog search engine.

Download Elasticsearch 7.6.0: (Magento 2.4.x is tested with Elasticsearch 7.6.x only. You can use other 7.x versions at your discretion, but we recommend using the tested version of Elasticsearch.)

Extract the .zip file you’ve just downloaded. In a terminal window, cd to the extracted directory, and run this command:


When the installation is complete, you can check if Elasticsearch is properly installed at http://localhost:9200, which should give you something like this:

{ "name" : "Cp8oag6", "cluster_name" : "elasticsearch", "cluster_uuid" : "AT69_T_DTp-1qgIJlatQqA", "version" : { "number" : "7.6.0", "build_flavor" : "default", "build_type" : "tar", "build_hash" : "f27399d", "build_date" : "2016-03-30T09:51:41.449Z", "build_snapshot" : false, "lucene_version" : "8.7.0", "minimum_wire_compatibility_version" : "1.2.3", "minimum_index_compatibility_version" : "1.2.3" }, "tagline" : "You Know, for Search" }

Part 3: Download Magento using Composer

As some of the plugins from Magento 2 do not work with composer 2.x, you’ll want to use a stable version of composer 1.x to download Magento. The best way to do this would be by installing the Composer-Setup.exe.

This setup will install the latest composer version and set up PATH environment variables so that you can conveniently call composer from any directory. After you’re finished installing composer, it’s required that you should downgrade to an earlier 1.x version using composer self-update --1 in order to ensure the best compatibility.

Next, cd to C:\xampp\htdocs and run the following command:

composer create-projectrepository-url= magento/project-community-edition=2.4.2 <install-directory-name>

It should take a while for the composer to download and install all the necessary modules. When everything is finished, this is what you should see:

Part 4: Install Magento using command line

Starting from Magento 2.4, command line interface is the default (and only) installation method for Magento.

During Magento 2.4 installation, you may encounter some errors. To prevent such errors, you first need to make some tweaks to Magento files.

To prevent this error:

Find validateURLScheme function in \vendor\magento\framework\Image\Adapter\Gd2.php and replace it with:

private function validateURLScheme(string $filename) : bool
   $allowed_schemes = ['ftp', 'ftps', 'http', 'https'];
   $url = parse_url($filename);
   if ($url && isset($url['scheme']) && !in_array($url['scheme'], $allowed_schemes) && !file_exists($filename)) {
       return false;
   return true;

Next, cd to your Magento directory and run this command:

php bin/magento setup:install --base-url=http://localhost/magento24/ --db-host=localhost --db-name=yourdbname --db-user=yourdbuser --db-password=yourdbpassword --admin-firstname=admin --admin-lastname=admin [email protected] --admin-user=admin --admin-password=admin123 --language=en_US --currency=USD --timezone=America/Chicago --use-rewrites=1 --backend-frontname=admin --search-engine=elasticsearch7 --elasticsearch-host=localhost --elasticsearch-port=9200


  • base-url: the path that your Magento directory is in, which follows the following format: http[s]://<host or ip>/<your Magento install dir>/
  • db-host: the hostname or IP address of your host
  • db-name: change it to the name of the Magento database you just created
  • db-user: a database user with full permission. We’ll be using the default root user.
  • db-password: the password of your database user. Leave it blank if you’re using ‘root’ database user
  • admin-firstname: your first name
  • admin-lastname: your lastname
  • admin-email: your email address
  • admin-user: the username which you’ll be using to log into Admin Panel
  • admin-password: the password which you’ll be using to log into Admin Panel
  • language: the language which you’ll be using in your Admin Panel and your storefront. Use language code like en_US.
  • admin-email: change it to your email
  • currency: set the default currency to use in your storefront.Enter php bin/magento info:currency:list for a list of supported currencies along with their codes
  • timezone: change to the timezone that you’re in. Refer to the list of supported timezones for a better idea on what to fill.
  • url-rewrites: set to 1 to enable Web Server Rewrites. This will help with your site ranking.
  • backend-frontname: set your Admin URL. Omitting this parameter will result in a randomly generated URL for your Magento Admin path (e.g., admin_jkhgdfq)
  • search-engine: set the version of Elasticsearch that you want to use for this Magento installation. The default is elasticsearch7
  • elasticsearch-host: the hostname or IP address where Elasticsearch is running. The default is localhost
  • elasticsearch-port: the port number that Elasticsearch is listening to. The default is 9200

For more configurable options, please refer to the official guide by Magento.

Upon successful installation, you will see this message:

Post installation file permissions check…
 For security, remove write permissions from these directories: 'C:/xampp/htdocs/magento24/app/etc'
 [Progress: 1270 / 1270]
 [SUCCESS]: Magento installation complete.
 [SUCCESS]: Admin Panel URI: /admin
Nothing to import.

After this, we’ll have to make some additional tweaks in order to make Magento work with Windows, like so:

In app\etc\di.xml, replace Symlink with Copy

<virtualType name="developerMaterialization" type="Magento\Framework\App\View\Asset\MaterializationStrategy\Factory">
<argument name="strategiesList" xsi:type="array">
<item name="view_preprocessed" xsi:type="object">Magento\Framework\App\View\Asset\MaterializationStrategy\Symlink</item>
<item name="default" xsi:type="object">Magento\Framework\App\View\Asset\MaterializationStrategy\Copy</item>

In vendor\magento\framework\View\Element\Template\File\Validator.php, replace line 138 with:

$realPath = str_replace('\\', '/',$this->fileDriver->getRealPath($path));

Finally, run these commands:

php bin/magento indexer:reindex
php bin/magento setup:upgrade
php bin/magento setup:static-content:deploy -f
php bin/magento cache:flush

Additional tweaks for Magento 2.4.2 and above

Starting from Magento 2.4.2, it’s now mandatory to serve content from from the /pub/ folder in order to ensure better security. This is why additional tweaks are required in order to make your Magento 2.4.2 version work properly.

Step 1: Copy the index.php and .htaccess files from /pub/ to your root folder.

Step 2: Find the below line in the index.php (in the root folder):

require __DIR__ . ‘/../app/bootstrap.php’;

and replace it with

require __DIR__ . ‘/app/bootstrap.php’;

Step 3: Go to the Magento 2 database which you recently created (in http://localhost/phpmyadmin) and find the table core_config_data using this SQL query:

SELECT * FROM core_config_data

In this table, you’ll want to insert these rows in:

Path	                        Value
web/secure/base_static_url	http://localhost/magento24/pub/static/
web/unsecure/base_static_url	http://localhost/magento24/pub/static/
web/secure/base_media_url	http://localhost/magento24/pub/media/
web/unsecure/base_media_url	http://localhost/magento24/pub/media/
Replace magento24 with your Magento install directory
  • Insert rows manually:
  • Insert rows with SQL queries:
INSERT INTO `core_config_data` (`config_id`, `scope`, `scope_id`, `path`, `value`, `updated_at`) VALUES (NULL, 'default', '0', 'web/secure/base_static_url', 'http://localhost/magento24/pub/static/', current_timestamp());
INSERT INTO `core_config_data` (`config_id`, `scope`, `scope_id`, `path`, `value`, `updated_at`) VALUES (NULL, 'default', '0', 'web/unsecure/base_static_url', 'http://localhost/magento24/pub/static/', current_timestamp());
INSERT INTO `core_config_data` (`config_id`, `scope`, `scope_id`, `path`, `value`, `updated_at`) VALUES (NULL, 'default', '0', 'web/secure/base_media_url', 'http://localhost/magento24/pub/media/', current_timestamp());
INSERT INTO `core_config_data` (`config_id`, `scope`, `scope_id`, `path`, `value`, `updated_at`) VALUES (NULL, 'default', '0', 'web/unsecure/base_media_url', 'http://localhost/magento24/pub/media/', current_timestamp());

Now clear cache using:

php bin/magento cache:flush

And refresh your frontend. You should now be able to see a blank page like this when access your frontend via configured base-url:

Now you can access your Magento frontend with your configured base-url. For example, with our Magento 2.4.2 installation, we access our new Magento site at http://localhost/magento24/, and our backend at http://localhost/magento24/admin.

*Note: if you face this error when trying to log into your Magento Admin account: “You need to configure Two Factor Authorization…”

Try running this command:

php bin/magento module:disable Magento_TwoFactorAuth

That’s it! You have finished installing Magento 2 on your windows or localhost. Now you can access your Magento 2 frontend/backend and start exploring Magento 2.4 features. We hope you find this post helpful!