Install LEMP Stack on CentOS 7

The term LEMP is an acronym of the names of its four open-source components:

  • L - Linux operating system
  • E - Nginx [engine x] a HTTP and reverse proxy server
  • M - MySQL or MariaDB relational database management system
  • P - PHP programming language.

This series of tutorials will show you how to install Nginx, generate a free Let’s Encrypt SSL certificate, install and secure MySQL and install PHP 7.

The detailed tutorials that are part of these series are listed at the end of this page.

If you are in a hurry and don’t want to read more detailed documentation you can install LEMP Stack on your CentOS 7 server by following our Quickstart section.

Install LEMP Stack on CentOS 7 [Quickstart]

This quickstart will show you the basic steps required to get a LEMP stack installed on an CentOS 7 server.

Prerequisites

The user you are logged in as must have sudo privileges to be able to install packages.

Step 1. Installing Nginx

Nginx is not available in the default CentOS 7 repository so we will use the EPEL repositories. To add the EPEL repository to your system, use the following command:

sudo yum install epel-release

Now that the EPEL repository is enabled, install the Nginx package with:

sudo yum install nginx

Once it is installed, start and enable the Nginx service by typing:

sudo systemctl start nginx
sudo systemctl enable nginx

Step 2. Installing MariaDB

The next step is to install the MariaDB packages. To do so type:

sudo yum install mariadb-server

Once MariaDB server is installed, start and enable the service with:

sudo systemctl start mariadb.service
sudo systemctl enable mariadb.service
  • At the time of writing, MariaDB 5.5 is available in the official CentOS 7 repository. If you want to install a newer version please refer to this tutorial.
  • If you want to install MySQL instead of MariaDB, check our tutorial for installation instructions.

Step 3. Installing PHP

CentOS 7 ships with PHP version 5.4 which is EOL-ed for quite some time so we’ll use the Remi repository to install PHP 7.2.

Run the following command to add the Remi repository to your system:

sudo yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm

Once it is added, install the yum-utils package and enable the remi-php72 repository:

sudo yum install yum-utils
sudo yum-config-manager --enable remi-php72

Now that we have Remi repository enabled, we can install PHP FPM and several most common PHP modules with:

sudo yum install php-fpm php-opcache php-cli php-gd php-curl php-mysql

By default PHP FPM will run as user apache on port 9000. We’ll change the user to nginx and switch from TCP socket to Unix socket. To do so edit the lines highlighted in yellow:

<div class="code-label">/etc/php-fpm.d/www.conf</div>
...
user = nginx
...
group = nginx
...
listen = /run/php-fpm/www.sock
...
listen.owner = nginx
listen.group = nginx

Make sure the /var/lib/php directory has the correct permissions:

chown -R root:nginx /var/lib/php

Save the file, enable and start the PHP FPM service with:

sudo systemctl enable php-fpm
sudo systemctl start php-fpm

Step 4. Configuring Nginx to Process PHP Pages

Now that we have all of the LEMP components installed, we can edit the Nginx virtual host configuration file and add the following lines so Nginx can process PHP files:

server {

    # . . . other code

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_pass unix:/run/php-fpm/www.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

Do not forget to restart the Nginx service for the changes to take effect:

sudo systemctl restart nginx

More Information

For more detailed instructions about each step, please consult the following tutorials.

Tutorials