Skip to main content

Quick Setup LEMP

This is a quick guide on how to setup a LEMP stack. The following assumes you are using Debian 11 and have a user with sudo privileges.

Installing Packages

First update the repos and upgrade any packages to ensure everything is in sync:

sudo apt update
sudo apt upgrade

Then we move onto installing all the necessary packages required for the LEMP Stack.

sudo apt install php php-fpm nginx mariadb-server
Different PHP version requirements on Debian

As of writing, the Debian repos only have version 7.4. Verify what version you need before installation. If you require a newer (8.0 - 8.1) or earlier (5.6-7.3) version of PHP, you can add the Sury Debian repo using the following commands:

sudo apt-get update
sudo apt-get -y install apt-transport-https lsb-release ca-certificates curl
sudo curl -sSLo /usr/share/keyrings/
sudo sh -c 'echo "deb [signed-by=/usr/share/keyrings/] $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list'
sudo apt-get update

To install the version of your choice, append the version number you require to php e.g. php8.1, php7.3. It is also the same for installing extensions e.g. php8.1-xml, php7.3-xml

sudo apt install php8.1 php8.1-xml

MariaDB is an Open Source drop in replacement for MySQL. Most commands that work on MySQL will work on MariaDB. Unless you have a particular reason to use MySQL then it's preferred to install MariaDB.

Setting up NGINX

NGINX should be enabled and active upon installation. No further action is required to setup NGINX.

To verify it is working, enter your server's IP address into your favourite browser.

What is the local network IP Address

You can check the server's local network IP address by typing:

ip a

This will give you a list of interfaces, typically the IP address will be under the interface called enp3s0 or something similar. In the output below, the IPv4 address is

2: enp2s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether d8:cb:8a:e7:7a:81 brd ff:ff:ff:ff:ff:ff
inet brd scope global dynamic enp2s0
valid_lft 31149sec preferred_lft 31149sec
inet6 fe80::dacb:8aff:fee7:7a81/64 scope link
valid_lft forever preferred_lft forever
What is the Public IP Address

The server may also have a Public IP address assigned to it's interface which can be checked in the above method.

You can tell if it's a Public IP address if it isn't in the RFC1918 private address ranges: - - -

Another easy method to figure out the Public IP is to type in the following command:

curl -4

 This will reply back with your Public IPv4 address.


If you see the above page appear in your browser, then NGINX has been successfully installed.

Setting up MariaDB

Your MariaDB server is ready to go. A recommended procedure is to secure your MariaDB instance which can be invoked with:

sudo mysql_secure_installation

It will then take you through a small script to secure your MariaDB server for production. Adjust accordingly if you have different needs.

Enter current password for root (enter for none): [ENTER]
Switch to unix_socket authentication [Y/n] n
Change the root password? [Y/n] n
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

To verify MariaDB is running, type in the following:

sudo mysql -u root

Then you should be brought to the MariaDB prompt, MariaDB [(none)]> will show at the cursor. If so, then you have successfully setup MariaDB.

Setting up PHP

Once the packages are installed for PHP, all that's left to do is to verify that PHP Processing is working.

First create a PHP file in the /var/www/html/ directory to display information about the current PHP configuration.

Using your favourite editor make a file called test.php and enter the following contents:


From there, you will need to edit your server block in NGINX to process PHP files. Add the following code snippet into the default server block located at /etc/nginx/sites-available/default:

server {
# ...

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


Reload the NGINX service with sudo service nginx reload to apply the changes.

Then go to http://<IP-of-server>/test.php and it should display the your PHP configuration as shown below.

If configuration page doesn't display, ensure the PHP version for the socket is correct in the NGINX server block and double check that the php-fpm.service is enabled and is active.


Don't forget to delete the test.php file once you've confirmed that it is working.

If you see this page, then you know that PHP-FPM has been setup correctly.


You have successfully setup a LEMP stack, which is the basis of many web services out there. All that's left to do is to start hosting your own services or create something new.