Last updated on 05 November 2013:
LEMP is a combination of the operating system and open-source software stack. The acronym LEMP is derived from first letters of Linux, Nginx HTTP Server, MySQL database, and PHP, Perl or Python. We already have shown you how to install LEMP and LAMP servers on many platforms.
Here my testbox hostname is server.unixmen.local and IP address is 192.168.1.101/24. Change these values with your own where it appropriate.
Install Nginx
Nginx (pronounced engine-x) is a free, open-source, high-performance HTTP server and reverse proxy, as well as an IMAP/POP3 proxy server written by Igor Sysoev.
To install Nginx enter the following command in your terminal:
Note: If you have installed apache2 in your system, remove it first to avoid conflicts. To uninstall apache, run the following commands:
sudo apt-get purge apache2* sudo apt-get autoremove
Now install nginx using command:
sudo apt-get install nginx
Start Nginx service using the command:
sudo service nginx start
Test nginx
Open up your web browser and navigate to http://ip-address/ or http://localhost/. You will see a screen something like below.
Open the file /etc/nginx/nginx.conf in any editor:
sudo nano /etc/nginx/nginx.conf
Set the worker_processes (i.e No. of CPU’s in your system). To see the no. of CPU’s, use the command “lscpu”. In my case it’s “1″. So I set this as ’1′.
worker_processes 1;
Restart Nginx service:
sudo service nginx restart
The default vhost is defined in the file /etc/nginx/sites-available/default.
Open the file /etc/nginx/sites-available/default in any editor. Under the Server section, match your configuration as shown below. The modifications are shown in red color.
[...]
server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;
root /usr/share/nginx/html;
index index.php index.html index.htm;
# Make site accessible from http://localhost/
server_name server.unixmen.local;
[...]
Here,
listen 80; –> listen for ipv4
listen [::]:80 default_server ipv6only=on; –> listen for ipv6
root /usr/share/nginx/html; –> document root directory.
server_name server.unixmen.local; –> virtualhost name.
Now scroll down further and find the section #location ~ \.php$. Uncomment and modify as shown below.
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
# # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
#
# # With php5-cgi alone:
# fastcgi_pass 127.0.0.1:9000;
# # With php5-fpm:
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
Here i added an extra line ‘try_files $uri =404;’ to prevent zero day exploits.
Save and exit the file.
Test nginx configuration
Test the nginx configuration for any syntax errors using command:
sudo nginx -t
Sample output:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
Finally restart nginx service
sudo service nginx restart
Install MySQL
MySQL is a relational database management system (RDBMS) that runs as a server providing multi-user access to a number of databases, though SQLite probably has more total embedded deployments
sudo apt-get install mysql-server mysql-client
During installation, you’ll be asked to setup the MySQL root user password. Enter the password and click Ok.
Now MySQL server has been installed.
You can verify the MySQL server status using command:
sudo service mysql status
Sample output:
mysql start/running, process 3901
Note: If you want to use MariaDB instead of MySQL, then follow these steps to install MariaDB on Ubuntu 13.10 server.
Install MariaDB
MariaDB is a drop in replacement for MySQL. It is a robust, scalable and reliable SQL server that comes rich set of enhancements.
First you have to remove existing MySQL packages if any. To completely uninstall MySQL with configuration files, enter the following command:
sudo apt-get purge mysql*
Run the following command to remove unwanted packages.
sudo apt-get autoremove
Now add MariaDB PPA to install it. Run the following commands to add PPA.
sudo apt-get install software-properties-common
sudo apt-key adv –recv-keys –keyserver hkp://keyserver.ubuntu.com:80 0xcbcb082a1bb943db
sudo add-apt-repository ‘deb http://mariadb.biz.net.id//repo/5.5/ubuntu saucy main
Update the software sources list and install MariaDB using following commands:
sudo apt-get update sudo apt-get install mariadb-server mariadb-client
During installation you will be asked to set mysql ‘root’ user password.
You can check the MariaDB version using command:
mysql -v
Sample output:
Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 34 Server version: 5.5.33a-MariaDB-1~raring-log mariadb.org binary distribution Copyright (c) 2000, 2013, Oracle, Monty Program Ab and others. Reading history-file /home/sk/.mysql_history Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
Check if mariadb is running or not, using the following command:
sudo service mysql status
Sample output:
* /usr/bin/mysqladmin Ver 9.0 Distrib 5.5.33a-MariaDB, for debian-linux-gnu on i686 Copyright (c) 2000, 2013, Oracle, Monty Program Ab and others. Server version 5.5.33a-MariaDB-1~raring-log Protocol version 10 Connection Localhost via UNIX socket UNIX socket /var/run/mysqld/mysqld.sock Uptime: 1 min 53 sec Threads: 1 Questions: 550 Slow queries: 0 Opens: 314 Flush tables: 4 Open tables: 22 Queries per second avg: 4.867
Install PHP
PHP (recursive acronym for PHP: Hypertext Preprocessor) is a widely used open-source general purpose scripting language that is especially suited for web development and can be embedded into HTML.
Install PHP with following command:
sudo apt-get install php5 php5-fpm php5-mysql
Configure PHP
We have to do a small change in php.ini file. Open php.ini file in any editor:
sudo nano /etc/php5/fpm/php.ini
Find the line ‘cgi.fix_pathinfo=1’, uncomment it and change the value 1 to 0.
cgi.fix_pathinfo=0
Now restart php-fpm service.
sudo service php5-fpm restart
Test PHP
Create a sample “testphp.php” file in nginx document root folder.
sudo nano /usr/share/nginx/html/testphp.php
Add the following lines in it.
<?php phpinfo(); ?>
Save and exit the file.
Navigate to http://server-ip-address/testphp.php. It will display all the details about php such as version, build date and commands etc.
PHP-FPM listens on the socket /var/run/php5-fpm.sock by default. If you want to make PHP-FPM use a TCP connection, open the file /etc/php5/fpm/pool.d/www.conf,
sudo nano /etc/php5/fpm/pool.d/www.conf
Find the line listen = /var/run/php5-fpm.sock, modify it as listen = 127.0.0.1:9000.
;listen = /var/run/php5-fpm.sock listen = 127.0.0.1:9000
Save and exit the file. Restart php5-fpm service.
sudo service php5-fpm restart
Now open the nginx configuration file:
sudo nano /etc/nginx/sites-available/default
Find the line fastcgi_pass unix:/var/run/php5-fpm.sock; and change it to fastcgi_pass 127.0.0.1:9000;, as shown below.
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
# # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
#
# # With php5-cgi alone:
fastcgi_pass 127.0.0.1:9000;
# # With php5-fpm:
# fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
Save and exit the file. Finally restart nginx service.
sudo service nginx restart
Manage MySQL Databases (Optional)
phpMyAdmin:
phpMyAdmin is a free open-source web interface tool used to manage your MySQL databases.
Install phpMyAdmin
It is available in the Official Debian repositories. So install it with command:
sudo apt-get install phpmyadmin
Select any webserver. Here nginx will not be displayed. Let us link phpmyadmin to work with nginx webserver later.
Select Yes to configure database for phpmyadmin wjth dbconfig-common.

Enter password of the database’s administrative user.
Enter MySQL application password phpmyadmin.
The phpMyAdmin installation has been completed.
Create a symbolic link between phpMyAdmin and the website root directory. Here our website root document directory is /usr/share/nginx/html/.
sudo ln -s /usr/share/phpmyadmin/ /usr/share/nginx/html/
Restart nginx server.
sudo service nginx restart
Access phpMyAdmin Web Console
Now you can access the phpmyadmin console by navigating to http://server-ip-address/phpmyadmin/ from your browser.
Enter your MySQL username and password which you have given in previous steps. In my case its “root” and “ubuntu”.
You will be redirected to PhpMyAdmin main web interface.
Now you can manage your MySQL databases from phpMyAdmin web interface.
That’s it. Your LEMP server is up and running now.
https://mariadb.com/kb/en/installing-mariadb-deb-files/







