Installing a LEMP Stack on Ubuntu Linux

45 minutes
  • 8 Learning Objectives

About this Hands-on Lab

Before we can start building our world-changing website or application on LEMP, we have to lay the foundation for the stack. In this hands-on lab, we will walk through the installation of the components that make up the LEMP stack on Ubuntu Linux. We will also configure th eUbuntu Linux environment to host the LEMP stack.

When we have completed this lab, we will have a running LEMP stack on Ubuntu. We will also have a better understanding of how a LEMP installation is configured on Ubuntu Linux.

Learning Objectives

Successfully complete this lab by achieving the following learning objectives:

Install NGINX Using the Default Ubuntu Package Repositories

Become the root user:

sudo su -

Install NGINX from the Ubuntu repositories using apt-get:

apt-get -y install nginx

Check the status of the NGINX service with systemctl:

systemctl status nginx

The NGINX service should be enabled and active.

Configure HTTP Access Through the Firewall

Check the initial status of the firewall:

ufw status

Open port 80 to allow inbound HTTP traffic:

ufw allow 'Nginx HTTP'

Recheck the status of the firewall:

ufw status

HTTP traffic is now allowed through the firewall.

Verify Basic HTTP Functionality in NGINX

Verify that we can load the default NGINX web page using curl:

curl http://`curl`

Use a web browser to go to the default NGINX web page at http://OUR_PUBLIC_IP_ADDRESS or http://OUR_PUBLIC_DNS. We should see the default NGINX page. We can find the public IP address and DNS of our instance in the /home/cloud_user/server_info.txt file.

Install the PHP Components

Install the PHP components using apt-get:

apt-get -y install php-fpm php-mysql
Activating the Virtual Host Configuration

To make the virtual host active, we create a symlink to the appropriate configuration file in the sites-enabled directory:

ln -s /etc/nginx/sites-available/ /etc/nginx/sites-enabled/

Validate the NGINX configuration before reloading the NGINX service:

nginx -t
systemctl reload nginx

Restart the php-fpm service:

systemctl restart php7.2-fpm.service
Verifying PHP Functionality in NGINX

Test PHP by loading the phpinfo page on We are providing a header (via the -H switch) so NGINX knows to route the request to the virtual host:

curl -H ""

We can add our server’s public IP address, pointing at, to our computer’s hosts file if we want to access the phpinfo page at with a web browser.

Install MariaDB

Install MariaDB using apt-get:

apt-get -y install mariadb-server

Check the status of the MariaDB server using systemctl:

systemctl status mariadb

The server should be enabled and running.

Verify the Installed Version of MariaDB

Check the version of MariaDB:

mysql -V

root@ip-10-0-1-113:~# mysql -V
mysql Ver 15.1 Distrib 10.1.41-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2

Additional Resources

Big State College (BSC) is a Large Ten Conference school in a Midwestern state. BSC is looking to deploy a centralized web hosting service using the LEMP stack.

As the engineers tasked with executing this project, we will be deploying a LEMP stack on a single Ubuntu server for testing LEMP concepts before deploying the new environment. Let's begin!

Connecting to the Lab Server

Use the credentials provided on the hands-on lab overview page, and log in using an SSH connection to the Public IP or DNS of the server as cloud_user.

Making a SSH connection using the ssh command. Replace <<public_IP_or_DNS>> with the Public IP or DNS provided on the overview page.

ssh cloud_user@<<public_IP_or_DNS>>

If you can't use ssh or prefer a GUI client, use the credentials provided on the hands-on lab overview page to configure your SSH connection to the lab server.

Lab Git Repository

Feel free to explore the configurations and code from the lab at: GitHub - linuxacademy/content-lemp-deep-dive

What are Hands-on Labs

Hands-on Labs are real environments created by industry experts to help you learn. These environments help you gain knowledge and experience, practice without compromising your system, test without risk, destroy without fear, and let you learn from your mistakes. Hands-on Labs: practice your skills before delivering in the real world.

Get Started
Who’s going to be learning?

How many seats do you need?

  • $499 USD per seat per year
  • Billed Annually
  • Renews in 12 months

Ready to accelerate learning?

For over 25 licenses, a member of our sales team will walk you through a custom tailored solution for your business.


Sign In
Welcome Back!

Psst…this one if you’ve been moved to ACG!