How to Install Magento 2 on Ubuntu 20.04 LTS — Step by Step Instruction

Magento 2 is a leading eCommerce platform that is used mostly by corporations due to the complexity of development and the ability to customize it to the specific needs of merchants. This open-source platform combines powerful features with a flexible and convenient interface. Below is the instruction on how to install Magento 2 on Ubuntu 20.04 LTS.

Introduction

In this manual, we will show how to install Magento 2.4.2 on a computer with only Ubuntu 20.04 LTS. We will use L.A.M.P (Linux Apache MySql Php) as a web server.

First, we need to update the list of repository packages and update our packages:

sudo apt update && sudo apt upgrade

Beginning. Installation of the required packages for Magento 2.

Unzip — packages to work with archives.

#Installing unzip
sudo apt install unzip

Curl — it is short for “Client URL.” The tool is available on the majority of Linux systems and it is designed to check the connection to the URL addresses. Moreover, the command Curl – is a great tool to transfer data. 

#Installing CURL
sudo apt install curl

NodeJS – is an environment for the code execution on JavaScript that is based on the 

JavaScript Chrome V8 engine which allows to broadcast JavaScript into the machine code. Node.js is designed to create server applications in JavaScript.

#Installing NodeJS 10 version
curl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash –
sudo apt-get install -y nodejs

Grunt — task manager for the automatic execution of the routine operations. It is written in JavaScript. We will use it for the transformations of styles from less to css.

#Installing grunt globally
sudo npm i grunt-cli -g

Installing php and apache2

#Installing php
sudo apt install php php-bcmath php-curl php-gd php-intl php-mbstring php-mysql
———————————————-
#Check version php
php -v

Important!!! It is vital to check the php version because if you install 8th versions, Magento 2 could be working with errors. 

#Install apache2

sudo apt install apache2

———————————————

#Enable modules

sudo a2enmod rewrite

#restart apatche to enable the settings
systemctl restart apache2

Installation and creation of MySQL database

MySQL – is a popular database management system (DBMS) with a “client-server” model. That’s why you can frequently hear from other developers the phrase “MySQL-server”.

#Install mysql engine/client
sudo apt install mysql-server
#Check version MySQL.
mysql -V

Enter MySQL using the following command:

sudo mysql

1.Create database

CREATE DATABASE magento2;

2. Create user base

CREATE USER ‘YouUser’@’localhost’ IDENTIFIED BY ‘YouPassword’;
GRANT ALL ON *.* TO ‘YouUser’@’localhost’;
FLUSH PRIVILEGES;
#See all bases:
show databases;

3. Exiting mysql>

#exit:
exit;

If everything is done right, the result should be following:

Installing phpMyAdmin

PhpMyAdmit — allows administering the MySQL server from the browser, launching SQL commands and viewing the content of the database tables.

#Installation of phpmyadmin
sudo apt install phpmyadmin

In the window of the terminal select apache [with space], and move with TAB.

Address: http://localhost/phpmyadmin/
Login and password that were used during the creation of MySQL user. 

Preparation for the installation of Magento 2

You need to create a config file in the folder /etc/apache2/sites-available/.

I am launching the application Double Commander from the root and create the needed file. If you do not have one, you can install it.

#Install Double Commander
sudo apt install doublecmd-qt
#double commander open as root
sudo doublecmd
#Create new project virtual host file
/etc/apache2/sites-available/magento2.conf
<VirtualHost *:80>
ServerAdmin admin@magento2.loc
ServerName magento2.loc
ServerAlias magento2.loc
DocumentRoot /var/www/magento2.loc/pub
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
<Directory /var/www/magento2.loc/pub>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
</VirtualHost>

Let’s add our local site to hosts.

127.0.0.1 magento2.loc
#Standard editor
sudo nano /etc/hosts
# I use third-party editor bluefish
sudo apt install bluefish
sudo bluefish /etc/hosts

Installation of Composer

#Installing Composer
sudo apt install composer
#composer version:
composer –version
#Preferably, it is important install the needed version:
composer self-update 1.10.6

Installation of elasticsearch engine

Elasticsearch engine —  is an open-source product that allows taking data from any source and any format, and also, searching and visualizing it in real time. In Magento 2, it is used for fast and advanced searches in the catalog of products.

#Download and install elasticsearch engine
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.9.2-amd64.deb
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.9.2-amd64.deb.sha512
shasum -a 512 -c elasticsearch-7.9.2-amd64.deb.sha512
sudo dpkg -i elasticsearch-7.9.2-amd64.deb

Create the file for the configuration in the folder: /etc/apache2/sites-available/elastic.conf

For this:

#Open double commander from root
sudo doublecmd
————————————–
#Turn on proxy mod
sudo a2enmod proxy_http
————————————–
#Apply new configuration:
sudo a2ensite elastic.conf
————————————–
#And reload apache2
systemctl reload apache2

The content of the file elastic.conf:

Listen 8080
<VirtualHost *:8080>
ProxyPass “/” “http://localhost:9200/”
ProxyPassReverse “/” “http://localhost:9200/”
</VirtualHost>

Creating folder for your Magento 2 store

Let’s create the folder for the Magento 2 store and grant the needed rights.

1. It is important to grant rights to the folder /var/www.

sudo chmod 777 /var/www/

2. If the rights were granted properly, we can use Double commander (not from root) to create and edit folders.

Create folder magento2.loc. In the end, should be the following: /var/www/magento2.loc

3. Assign the rights to all files and folders which Magento 2 will be creating during the installation.

sudo find /var/www/magento2.loc/ -type d -exec chmod 775 {} \;
sudo find /var/www/magento2.loc/ -type f -exec chmod 664 {} \;

Restart everything that is needed.

sudo service mysql restart
sudo service apache2 restart
sudo service elasticsearch restart
sudo systemctl enable elasticsearch

Check the work of Elastic

curl -i http://localhost:8080/_cluster/health

Magento 2 installation

1. Download Magento 2 from the official repository:

composer create-project –repository-url=https://repo.magento.com/ magento/project-community-edition

Important!!! The command should be done in terminal in: /var/www/magento2.loc

#go the folder /var/www/magento2.loc
cd /var/www/magento2.loc

Before downloading, you need to write a login and password. It is Public Key & Private Key from the site https://marketplace.magento.com. If you do not have them, you need to get them. Sign up and create the access. 

Login: Public Key

Password: Private Key

Important!!! Magento 2 starts slowly downloading its own files on your device, until one moment, a terminal freezes for a long time. It is not an error. Everything is working fine. You can just come back in 10-15 minutes after the installation has been finished. 

If the error is related to Compose, it will appear immediately. In this case, you need to downgrade it to 1.10.6.

composer self-update 1.10.6
# Version composer
composer -v

2. Final command which will install and set up your store:

php bin/magento setup:install –base-url=http://magento2.loc/ –db-host=localhost –db-name=magento2 –db-user=eugene –db-password=password –admin-firstname=Eugene –admin-lastname=Eugene –admin-email=user@example.com –admin-user=eugene –admin-password=qwerty1991 –language=en_US –currency=USD –timezone=America/Chicago –use-rewrites=1 –backend-frontname=admin –search-engine=elasticsearch7 –elasticsearch-host=magento2.loc –elasticsearch-port=9200

The main data to create an admin and launch store.

base-url=http://magento2.loc/ – store’s address;

db-name=magento2 – database name;

db-user=eugene – database user login;

db-password=password – database user password;

admin-user=eugene – admin’s login;

admin-password=qwerty1991 – admin’s password;

backend-frontname=admin – address of admin panel.

The installation is complete at this point, and logically, your shop should be working by now. However, after opening an address, you might encounter 500 Internal Server Error. It will be only once, and it can be solved in one minute. 

Solution to 500 Internal Server Error

It is an issue with rights and you need to fix it.

eugene = Your username

sudo usermod -a -G eugene www-data
sudo usermod -a -G www-data eugene

After the restart of a system, everything should be working fine. 

If you do not know your username, you can use the following command:

#Who am I?
whoami

Installing test products

#Install test products:
php bin/magento sampledata:deploy
——————————————————–
#And update settings
php bin/magento setup:upgrade
——————————————————–
#Clear cache
php bin/magento cache:flush
——————————————————–
#Enable all modules
php bin/magento module:enable –all
——————————————————–
#Disable two-factor authentication
php bin/magento module:disable Magento_TwoFactorAuth
——————————————————–
#And update settings
php bin/magento setup:upgrade
——————————————————–
#Clear cache
php bin/magento cache:flush

If you have encountered an error:

Updating modules:

Could not validate a connection to Elasticsearch. No alive nodes found in your cluster

:

#Launch Elasticsearch
sudo service elasticsearch start
——————————————————–
#And update settings
php bin/magento setup:upgrade
——————————————————–
#Clear Cache
php bin/magento cache:flush

Conclusion

Having installed Magento 2, you can start working on the development of the store. In addition, if you need other tips on eCommerce development and learn about the industry itself, you can check our other articles from the blog. Join our Overdose Tech Club to share the development experience with other eCommerce enthusiasts and learn from industry professionals.

Related Articles

Subscribe
Notify of
0 Comments
Inline Feedbacks
View all comments