How to Install Linux, Apache, MySQL, PHP (LAMP) Stack on Ubuntu Server

After installing Ubuntu Server, and doing the initial Server set-up; You decide you want to turn it into a web server, well here’s how to do just that using the LAMP Stack.

About LAMP

LAMP stack is a group of open source software used to get web servers up and running. The acronym stands for Linux, Apache, MySQL, and PHP. Since we are already running Ubuntu, the first part is already done.

Step One – Install Apache

To install Apache, open up terminal and type in these commands

sudo apt-get update && sudo apt-get upgrade
sudo apt-get install apache2

Throws a small party! You are done. To check if Apache was actually installed, type in your server’s IP address (example: It should display a page with words like “It works!”

Configuring Apache

If you get this error: apache2: Could not determine the server's fully qualified domain name, using for ServerName the following line should fix it for you

Open up the Apache config file

sudo nano /etc/apache2/apache2.conf

Then add a new line

ServerName localhost

How to Find your Server’s IP address

Enter the command:


it would give you a list of your network connections, normally it would be eth0 that you would use or wlan0 if you’re using a wireless connection.

Step Two – Install MySQL

MySQL is a powerful database management system used for organizing and retrieving data

Hopefully you haven’t closed terminal as yet, if you have crack it back open and enter the following commands:

sudo apt-get install mysql-server libapache2-mod-auth-mysql php5-mysql

#NB: Depending on which version of ubuntu (server or desktop) you are using libapache2-mod-auth-mysql would return an error. If it happens just omit it and try the process again.

During the installation, MySQL will ask you to set a root password. If you miss the chance to set the password while the program is installing, do not worry you can do it later and it’s really easy.

Once MySQL is installed, activate it using this command:

sudo mysql_install_db

Finish up by running the MySQL Set-Up script:

sudo /usr/bin/mysql_secure_installation

The prompt will ask you for your current root password. Type it in.

Enter current password for root (enter for none):
OK, successfully used password, moving on...

Then the prompt will ask you if you want to change it, if you have a password setup already, then type N if you don’t you can type Y.

Moving on to the next steps, it’s easiest to say yes to the prompts that follows. At the end, MySQL will reload and implement the new changes.

By default, a MySQL installation has an anonymous user, allowing anyone
to log into MySQL without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] y                                            
 ... Success!

Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] y
... Success!

By default, MySQL comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n] y
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] y
 ... Success!

Cleaning up...

Once you’re done with that its time to install PHP and gloat to your friends about your superior skills.

Step Three – Install PHP

To install PHP, open terminal (honestly if you’re going to keep closing the darn thing, why are you trying to do these kinds of stuff) and type in this command.

sudo apt-get install php5 libapache2-mod-php5 php5-mcrypt

After you sat yes PHP will install itself.

It may also be useful to add php to the directory index to serve the relevant php index files:

sudo nano /etc/apache2/mods-enabled/dir.conf

Add index.php to the beginning of index files. The page should look like this:

<IfModule mod_dir.c>
          DirectoryIndex index.php index.html index.cgi index.php index.xhtml index.htm

If you don’t know how to save this is what I usually do:

After I have finished editing the document I hit Ctrl+X the say Yes and finally hit enter.

PHP Modules
PHP also has a variety of useful libraries and modules that you can add onto your virtual server. To see what libraries are available enter the command:

apt-cache search php5-

Terminal will then display the list of possible modules. The beginning looks a little like this:

php5-cgi - server-side, HTML-embedded scripting language (CGI binary)
php5-cli - command-line interpreter for the php5 scripting language
php5-common - Common files for packages built from the php5 source
php5-curl - CURL module for php5
php5-dbg - Debug symbols for PHP5
php5-dev - Files for PHP5 module development
php5-gd - GD module for php5
php5-gmp - GMP module for php5
php5-ldap - LDAP module for php5
php5-mysql - MySQL module for php5
php5-odbc - ODBC module for php5
php5-pgsql - PostgreSQL module for php5
php5-pspell - pspell module for php5
php5-recode - recode module for php5
php5-snmp - SNMP module for php5
php5-sqlite - SQLite module for php5
php5-tidy - tidy module for php5
php5-xmlrpc - XML-RPC module for php5
php5-xsl - XSL module for php5
php5-adodb - Extension optimising the ADOdb database abstraction library
php5-auth-pam - A PHP5 extension for PAM authentication

Once you decide on the module you want, type:

sudo apt-get install [name of the module]

To install multiple libraries at once, separate the name of each module with a space.

If you have made it this far, you can now breathe easy as You have just installed the LAMP Stack on your server.

Step Four – Verify PHP on your Server

Yes you have finished, but it would be useful to know what version of PHP and MySQL you are running, as well as the components online.

Set up a quick PHP page, by creating the file:

sudo nano /var/www/info.php

Add in the following lines of code

<?php phpinfo(); ?>

Then Save and Exit.

Restart apache so that your changes take effect:

sudo service apache2 restart

Just visit the php page (replace the example IP address with your corrent one):

Reference: Digital Ocean