How to Install LEMP on Ubuntu

LEMP stands for Linux, Nginx, MySQL, PHP

A server cannot be fulfill without a web server. This article will help you to setup LEMP on your Ubuntu. We will use MariaDB instead of MySQL.

Firstly, we will install nginx, to do this just type this command on your server’s terminal/shell

sudo apt-get install nginx

When you’re done you will see a default page of nginx on your domain/ip. eg. example.com or example.com:80

Now we will install mariadb as a database server by these commands:

sudo apt-get install mariadb-server
sudo mysql_secure_installation

Meanwhile, the installation process just keep agree and choose what option you prefer and it will ask a root password for the database access once.

Then we will install the PHP with it’s necessary extensions, before that we will use ondrej’s ppa by this

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

Now run this for PHP

sudo apt-get install php7.1-fpm php7.1-cli php7.1-common php7.1-mysql php7.1-xdebug php7.1-opcache php7.1-phpdbg php7.1-mbstring php7.1-gd php7.1-imap php7.1-ldap php7.1-pgsql php7.1-soap php7.1-curl php7.1-zip php7.1-xml php7.1-json

Then we will change a setting into the file /etc/php/7.1/fpm/php.ini for some security reasons. Just find it and make it like this

cgi.fix_pathinfo=0

After that restart the php-fpm service by this

sudo service restart php7.1-fpm

Now you can add your nginx virtual hosts/block as needed. I will show an example below.
At first, remove the default block by this command

sudo rm /etc/nginx/sites-available/default
sudo rm /etc/nginx/sites-enabled/default

Then make a block for yours

sudo nano /etc/nginx/sites-available/example.com

Write the codes same as below

server {
    listen 80 default_server;
    listen [::]:80 default_server;

    root /var/www/example.com/public_html;
    index index.php index.html index.htm;

    server_name example.com;

    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php7.1-fpm.sock;
    }

    location ~ /\.ht {
        deny all;
    }
}

The block is ready now, need to enable it by this.

sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/example.com

Reload the nginx and you’re done with the server configuration.

sudo service reload nginx

Enabling Xdebug

If you like to enable the Xdebug on your LEMP environment just edit the file /etc/php/7.1/mods-available/xdebug.ini and put the below codes at the end.

zend_extension=xdebug.so
xdebug.remote_enable=1
xdebug.remote_handler=dbgp
xdebug.remote_mode=req
xdebug.remote_host=localhost
xdebug.remote_port=9000
xdebug.var_display_max_depth=-1
xdebug.var_display_max_children=-1
xdebug.var_display_max_data=-1

Then restart both nginx & php-fpm

sudo service reload nginx
sudo service restart php7.1-fpm