In this tutorial we will walk you through the steps on how to deploy a LEMP (Linux, Nginx, MySQL and PHP-FPM) stack with PHP-7.1 on a CentOS 7.
A LEMP stack is a synonym of LEMP server or LEMP web server. It refers to a set-up which includes Linux, Nginx, MySQL (MariaDB) and PHP.
1. Update the system
As usual before beginning a new installation on your VPS, update the system first:
# yum update
2. Install MariaDB(MySQL)
MariaDB is a drop-in replacement for MySQL and is the default database server used in CentOS 7 (RHEL7). Install it using yum like this:
# yum -y install mariadb mariadb-server
To stop intruders from trying to access our MariaDB server while we’re setting it up, open the “/etc/my.cnf.d/server.cnf” file for editing and add the “bind-address” directive to have it listen only on the localhost IP address:
# nano /etc/my.cnf.d/server.cnf [mysqld] bind-address = 127.0.0.1
Now, restart the MariaDB server and enable it on startup with the following commands:
# systemctl start mariadb # systemctl enable mariadb
You can also run the mysql_secure_installation script to improve MariaDB (MySQL) security:
# mysql_secure_installation Enter current password for root (enter for none): ENTER Set root password? [Y/n] Y Remove anonymous users? [Y/n] Y Disallow root login remotely? [Y/n] Y Remove test database and access to it? [Y/n] Y Reload privilege tables now? [Y/n] Y
3. Install Nginx
We are going to install Nginx as it is a key component of our LEMP stack and will serve our website to the users.
Nginx is not available in the official CentOS repository so we need to install the EPEL repository first:
# yum install epel-release
Type in the following command to install Nginx:
# yum -y install nginx
Once Nginx is installed, run these two commands to start the web server and enable it on boot:
# systemctl start nginx # systemctl enable nginx
Now, check if Nginx is running by executing this command:
# systemctl status nginx
The output of the command above should be similar to this:
● nginx.service - The nginx HTTP and reverse proxy server Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled) Active: active (running) Main PID: 10092 (nginx) CGroup: /system.slice/nginx.service ├─10092 nginx: master process /usr/sbin/nginx ├─10093 nginx: worker process └─10094 nginx: worker process
You can also check if Nginx is running by going to http://YOUR_IP in your web browser.
4. Install PHP7.1-FPM
Now we are going to install PHP7.1-FPM as we will need it to process the PHP files our website contains.
Because PHP-7.1 is not available in the official CentOS repository we need to install the Remi repository first:
# wget http://rpms.remirepo.net/enterprise/remi-release-7.rpm && rpm -Uvh remi-release-7.rpm
The following command installs PHP7.1-FPM and enables the remi-safe repository which gives priority to the distribution and EPEL repository packages, meaning it won’t conflict with any of these packages if you upgrade your system:
# yum --enablerepo=remi-safe -y install php71-php-fpm
Once PHP7.1-FPM is installed, run these commands to start PHP7.1-FPM and enable it on boot:
# systemctl start php71-php-fpm # systemctl enable php71-php-fpm
Now, check if PHP7.1-FPM is running by executing this command:
# systemctl status php71-php-fpm
The output of the command above should be similar to this:
● php71-php-fpm.service - The PHP FastCGI Process Manager Loaded: loaded (/usr/lib/systemd/system/php71-php-fpm.service; enabled; vendor preset: disabled) Active: active (running) Main PID: 10792 (php-fpm) Status: "Processes active: 0, idle: 5, Requests: 0, slow: 0, Traffic: 0req/sec" CGroup: /system.slice/php71-php-fpm.service ├─10792 php-fpm: master process (/etc/opt/remi/php71/php-fpm.conf) ├─10793 php-fpm: pool www ├─10794 php-fpm: pool www ├─10795 php-fpm: pool www ├─10796 php-fpm: pool www └─10797 php-fpm: pool www
Note: The configuration files for the PHP-7.1 Remi repository package are located in the “/etc/opt/remi/php71” directory.
Next, change the configuration of the default PHP7.1-FPM pool to listen on a unix socket and use Nginx’s user and group:
# nano /etc/opt/remi/php71/php-fpm.d/www.conf ; Unix user/group of processes ; Note: The user is mandatory. If the group is not set, the default user's group ; will be used. ; RPM: apache user chosen to provide access to the same directories as httpd user = nginx ; RPM: Keep a group allowed to write in log dir. group = nginx ; The address on which to accept FastCGI requests. ; Valid syntaxes are: ; 'ip.add.re.ss:port' - to listen on a TCP socket to a specific IPv4 address on ; a specific port; ; '[ip:6:addr:ess]:port' - to listen on a TCP socket to a specific IPv6 address on ; a specific port; ; 'port' - to listen on a TCP socket to all addresses ; (IPv6 and IPv4-mapped) on a specific port; ; '/path/to/unix/socket' - to listen on a unix socket. ; Note: This value is mandatory. listen = /run/php/php7.1-fpm.sock
Save the changes and restart the PHP7.1-FPM service:
# systemctl restart php71-php-fpm
5. Configuring Nginx
Now that you have everything up and running we will create a document root directory and a server block for our site in Nginx, start by typing in the following command:
# mkdir -p /var/www/example.com
We will create the Nginx server block for our domain and configure it to use PHP-7.1:
# nano /etc/nginx/conf.d/example.com.conf server { listen 80; root /var/www/example.com; # Add index.php to the list if you are using PHP index index.php index.html index.htm index.nginx-debian.html; server_name example.com; location / { # First attempt to serve request as file, then # as directory, then fall back to displaying a 404. try_files $uri $uri/ =404; } # pass the PHP scripts to FastCGI server using the /run/php/php7.1-fpm.sock socket # location ~ \.php$ { include fastcgi.conf; fastcgi_pass unix:/run/php/php7.1-fpm.sock; } # deny access to .htaccess files, if Apache's document root # concurs with nginx's one # location ~ /\.ht { deny all; } }
Save the changes and test the configuration:
# nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
If there are no errors copy your website’s contents to the “/var/www/example.com” directory, change the owner of the directory and restart Nginx with the following commands:
# chown -R nginx:nginx /var/www/example.com # systemctl restart nginx
And now you should see your site up and running when you access http://example.com in your web browser.
Note: Remember to replace example.com with your own domain name.
Of course, you don’t have to install a LEMP Stack with PHP-7.1 on CentOS 7, if you use one of our Linux Support Services, in which case you can simply ask our expert Linux admins to install LEMP with PHP-7.1 on a CentOS 7 server for you. They are available 24×7 and will take care of your request immediately.
PS. If you liked this post on how to deploy a LEMP Stack with PHP-7.1 on CentOS 7, please share it with your friends on the social networks using the buttons below or simply leave a comment in the Comments Section below. Thanks