Magento 2 Development Workshop Learn More
Blog > How to Setup an Ubuntu Server for Magento 2 Open Source

How to Setup an Ubuntu Server for Magento 2 Open Source

Andrii Paschenko | April 06, 2020

In this tutorial, we’ll show you how to install and configure Web Server on Ubuntu OS for Magento 2 Open Source. First of all, you need a VPS server with ssh access. We’ll use the Digital Ocean.

Following the Magento 2 technology stack requirements you need at least 2GB of RAM, non-root user with sudo privileges…

What we need

  1. Install MySQL
  2. Install Nginx
  3. Install php + php-fpm
  4. Install Composer Package Manager
  5. Install Magento 2 Open Source using Composer

Step 1 - Install MySQL database

For this tutorial, we are going to install an open-source Percona Server 5.7.

$ apt -y install gnupg2
$ wget https://repo.percona.com/apt/percona-release_latest.$(lsb_release -sc)_all.deb
$ dpkg -i percona-release_latest.$(lsb_release -sc)_all.deb

Percona repositories should be added. You can check the repository setup in the /etc/apt/sources.list.d/percona-original-release.list file.

Let's check. Perform the below command.

$ cat /etc/apt/sources.list.d/percona-original-release.list

As a result, you should see the list of repositories.

How to Setup an Ubuntu Server for Magento 2 Open Source

After you need to update the local cache and check if Percona Server 5.7 available to install:

$ apt-get update
$ apt-cache search percona-server

How to Setup an Ubuntu Server for Magento 2 Open Source

The percona-server-server-5.7 is available to install, let's install it to our server:

$ apt -y install percona-server-server-5.7

You’ll be prompted to set up a root password. Generate strong password and paste here

How to Setup an Ubuntu Server for Magento 2 Open Source

Once the install has completed, lets go check our mysql server to see if it works.

$ systemctl status mysql

Change the MySQL server configuration

To avoid the server performance issues, try to add the following configuration in /etc/mysql/percona-server.conf.d/mysqld.cnf:

$ vi /etc/mysql/percona-server.conf.d/mysqld.cnf

At the end of the file

[mysqld]
...
performance_schema = off
innodb_file_per_table   = 0
query-cache-size        = 256M
query-cache-limit       = 2097152
innodb-file-per-table   = 1
innodb-flush-method     = O_DIRECT

How to Setup an Ubuntu Server for Magento 2 Open Source

Save and close. To take effect don’t forget restart the mysql service

$ systemctl restart mysql

Create database for your Magento 2 website

First login to your MySQL server

$ mysql -uroot -p

And paste the password for the root user you set earlier.

$ CREATE DATABASE magento;
$ GRANT ALL PRIVILEGES ON magento.* to 'magento_user'@'localhost' identified by 'YourPassword';
$ FLUSH PRIVILEGES;
$ exit

Change database name magento to name of your database and magento_user to your user name and 'YourPassword' to strong password with digits, special characters, uppercase and lowercase letters, and at least 12-16 characters.

Step 2 - Install PHP 7.3 + php-fpm

In our Ubuntu available to install PHP 7.2. But we need to use the latest. Let’s add new PHP repo to our system

$ sudo add-apt-repository ppa:ondrej/php
$ sudo apt-get update

Magento 2 Open Source requires several PHP extensions to function properly:

$ sudo apt -y install php7.3 php7.3-fpm php7.3-mysql php7.3-soap php7.3-bcmath php7.3-xml php7.3-mbstring php7.3-gd php7.3-common php7.3-cli php7.3-curl php7.3-intl php7.3-zip zip unzip

After the installation is finished

$ systemctl start php7.3-fpm
$ systemctl status php7.3-fpm

It should be Active status running.

Step 3 - Install Composer Package Manager

Install composer to your system by the following commands or you can use official documentation.

$ php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" && php composer-setup.php
$ php -r "unlink('composer-setup.php');"
$ mv composer.phar /usr/bin/composer

Step 4 - Install Nginx web server

Because Ubuntu contains old versions of Nginx, first of all we need to add the latest packages. Lets do that from the official Nginx documentation.

$ sudo apt install curl gnupg2 ca-certificates lsb-release
$ echo "deb http://nginx.org/packages/mainline/ubuntu `lsb_release -cs` nginx" \
 | sudo tee /etc/apt/sources.list.d/nginx.list

To be sure Nginx mainline was added correctly, we can check with the following command cat /etc/apt/sources.list.d/nginx.list

We should see something like this

How to Setup an Ubuntu Server for Magento 2 Open Source

Next step, import an official nginx signing key

$ curl -fsSL https://nginx.org/keys/nginx_signing.key | sudo apt-key add -
$ sudo apt-key fingerprint ABF5BD827BD9BF62

The output should be like in screenshot below

How to Setup an Ubuntu Server for Magento 2 Open Source

It’s enough to install nginx with the following commands:

$ sudo apt update
$ sudo apt -y install nginx

Once the install has completed, let's go to enable nginx and check the status.

$ systemctl start nginx
$ systemctl status nginx

You must be able to see the status Active: active (running)

Configure Nginx

Create virtual host

$ vi /etc/nginx/conf.d/magento.conf

Add the following configuration

upstream fastcgi_backend {
  server  unix:/run/php/php7.3-fpm.sock;
}

server {

  listen 80;
  server_name yourservername;
  set $MAGE_ROOT /var/www/magento2;
  include /var/www/magento2/nginx.conf.sample;
}

Save and close.

Delete sample configuration

$ rm /etc/nginx/conf.d/default.conf

Change nginx configration

$ vi /etc/nginx/nginx.conf

Here we are gonna to change nginx user and worker_processes. It is first and second lines in this file. Default settings

user  nginx;
worker_processes  1;

Change to

user  www-data;
worker_processes  auto;

Save and close

For now we cannot restart nginx web server because we don’t have the path /var/www/magento2 where our magento should be located.

Go to the var directory and create the www folder

$ cd /var
$ mkdir www
$ cd www

And now we are able to install Magento 2.

Step 5 - Install Magento 2 Open Source via Composer Package Manager

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

In process it will ask you to add credentials which you can find in your Magento Marketplace account. It will take some time to download the latest Magento modules and all dependencies.

Now, our server and Magento 2 are ready to be installed.

Check of your nginx settings are correct

$ nginx -t

It should be the following output

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Restart nginx

$ systemctl restart nginx

And change permissions to folders

$ chown -R www-data:www-data magento2/

Go to your domain name you set in /etc/nginx/conf.d/magento.conf.

Magento 2 ready for installation.

How to Setup an Ubuntu Server for Magento 2 Open Source

You can proceed with browser installation which will take some time or use this command

$ cd magento2
$ bin/magento setup:install --base-url=https://local.magento.com/ \
--db-host=localhost --db-name=yourdbname \
--db-user=magento_user --db-password=yourdbpassword \
--admin-firstname=Magento --admin-lastname=User --admin-email=user@example.com \
--admin-user=admin --admin-password=admin123 --language=en_US \
--currency=USD --timezone=America/Chicago --cleanup-database \
--session-save=db --use-rewrites=1

How to Setup an Ubuntu Server for Magento 2 Open Source

That's all. Our Magento 2 Open source is installed and ready to use.

Getting Started with Magento 2

In the Getting Started with Magento 2 you will learn how to install Magento 2 Open Source on your environment.

Sign up and don't miss our awesome Mage Mastery lessons and updates

Looking for Magento 2 Development Partner?

Hire Pronko Consulting

Magento 2 development and consulting agency
Our Services
If you like this blog post, you may want to watch
New Lessons

Magento 2 for Beginners

description
10 lessons
equalizer
Beginner
access_time
1 hours

This course is for developers who want to start developing with Magento 2. The course covers Magento 2 concepts and architecture of the Magento 2 platform.

New Lessons

Magento 2 Command Line Interface (CLI) for Beginners

description
10 lessons
equalizer
Beginner
access_time
18 mins

In this course you will learn what is Magento 2 CLI, understand different CLI commands, its purpose, and syntax.