LAMP is brief for Linux, Apache, MySQL, PHP. This tutorial exhibits how one can set up an Apache net server on an Ubuntu 18.04 LTS (Bionic Beaver) server with PHP 7.2 (mod_php) and MySQL / MariaDB help and methods to setup an SSL certificates with Let’s encrypt. Moreover, I’ll set up PHPMyAdmin to make MySQL administration simpler. A LAMP setup is an ideal foundation for standard CMS programs like Joomla, WordPress or Drupal.

Preliminary Be aware

On this tutorial, I’ll use the hostname server1.instance.com with the IP tackle These settings may differ for you, so it’s important to exchange them the place applicable.

I like to recommend to make use of a minimal Ubuntu server setup as foundation for the tutorial, that may be a virtual- or root server picture with an Ubuntu 18.04 minimal set up from a website hosting firm otherwise you use our minimal server tutorial to put in a server from scratch.

I am working all of the steps on this tutorial with root privileges, so ensure you’re logged in as root:

sudo -s

1. Putting in MySQL or MariaDB Database

There are at the moment two broadly used MySQL database programs obtainable, the traditional “MySQL” server which is developed by Oracle and is offered in model 5.7 now and the MySQL fork named MariaDB which is developed by the unique MySQL developer Monty Widenius.

I’ll present you methods to set up each alternate options beneath. Simply observe both chapter 1.1 or 1.2 however not each. I’ll use MySQL 5.7 for the digital machine picture that may be downloaded from Howtoforge.

1.1 Set up MySQL 5.7

To put in MySQL 5.7, execute this command:

apt-get -y set up mysql-server mysql-client

The packages mysql-server and mysql-client are so-called ‘meta-packages’, they set up all the time the newest MySQL model that’s obtainable from Ubuntu. The most recent model is at the moment MySQL 5.7.

We’ve got set the basis password for MySQL already throughout set up, however I want to take away the nameless consumer and take a look at database for safety causes. Run the mysql_secure_installation command beneath to attain that.


You may be requested these questions:

Securing the MySQL server deployment.

Enter password for consumer root: <– Enter the MySQL root password

VALIDATE PASSWORD PLUGIN can be utilized to check passwords
and enhance safety. It checks the energy of password
and permits the customers to set solely these passwords that are
safe sufficient. Would you wish to setup VALIDATE PASSWORD plugin?

Press y|Y for Sure, some other key for No:
Utilizing current password for root.
Change the password for root ? ((Press y|Y for Sure, some other key for No) : <– Select ‘y’ right here should you wish to allow the password validation, I do not want that perform, so I select ‘n’ right here.

… skipping.
By default, a MySQL set up has an nameless consumer,
permitting anybody to log into MySQL with out having to have
a consumer account created for them. That is supposed just for
testing, and to make the set up go a bit smoother.
It is best to take away them earlier than shifting right into a manufacturing

Take away nameless customers? (Press y|Y for Sure, some other key for No) : <– y

Usually, root ought to solely be allowed to attach from
‘localhost’. This ensures that somebody can’t guess at
the basis password from the community.

Disallow root login remotely? (Press y|Y for Sure, some other key for No) : <– y

By default, MySQL comes with a database named ‘take a look at’ that
anybody can entry. That is additionally supposed just for testing,
and ought to be eliminated earlier than shifting right into a manufacturing

Take away take a look at database and entry to it? (Press y|Y for Sure, some other key for No) : <– y
– Dropping take a look at database…

– Eradicating privileges on take a look at database…

Reloading the privilege tables will be certain that all adjustments
made to date will take impact instantly.

Reload privilege tables now? (Press y|Y for Sure, some other key for No) : <– y

All carried out!

The MySQL setup has been secured now.

1.2 Set up MariaDB 10

Run the next command to put in MariaDB-server and consumer:

apt-get -y set up mariadb-server mariadb-client

Now we set a root password for MariaDB.


You may be requested these questions:

Enter present password for root (enter for none): <– press enter
Set root password? [Y/n] <– y
New password: <– Enter the brand new MariaDB root password right here
Re-enter new password: <– Repeat the password
Take away nameless customers? [Y/n] <– y
Disallow root login remotely? [Y/n] <– y
Reload privilege tables now? [Y/n] <– y

1.Three Take a look at  the MySQL/MariaDB root login

Take a look at the login to MariaDB with the “mysql command”

mysql -u root -p

and enter the MariaDB root password that you’ve got set above. The consequence ought to be much like the screenshot beneath:

Testing the MySQL root login on Ubuntu 18.04 LTS

To depart the MySQL/MariaDB shell, enter the command “quit” and press enter.

2. Set up Apache Web Server

Apache 2 is offered as an Ubuntu bundle, due to this fact we are able to set up it like this:

apt-get -y set up apache2

Now direct your browser to, and it’s best to see the Apache2 default web page (It really works!):

The Apache default page

The doc root of the apache default vhost is /var/www/html on Ubuntu and the primary configuration file is /and many others/apache2/apache2.conf. The configuration system is absolutely documented in /usr/share/doc/apache2/README.Debian.gz.

3. Set up PHP 7.2

We are able to set up PHP 7.2 and the Apache PHP module as follows:

apt-get -y set up php7.2 libapache2-mod-php7.2

Then restart Apache:

systemctl restart apache2

4. Take a look at PHP and get particulars about your PHP set up

The doc root of the default website is /var/www/html. We’ll now create a small PHP file (data.php) in that listing and name it in a browser. The file will show plenty of helpful particulars about our PHP set up, such because the put in PHP model.

nano /var/www/html/data.php


Then change the proprietor of the data.php file to the www-data consumer and group.

chown www-data:www-data /var/www/html/data.php

Now we name that file in a browser (e.g.

Ubuntu 18.04 PHP 7.2 info

As you see, PHP 7.2 is working, and it is working by way of the Apache 2.Zero Handler, as proven within the Server API line. For those who scroll additional down, you will note all modules which might be already enabled in PHP. MySQL is just not listed there which implies we do not have MySQL / MariaDB help in PHP but.

5. Get MySQL / MariaDB help in PHP

To get MySQL help in PHP, we are able to set up the php7.2-mysql bundle. It is a good suggestion to put in another PHP modules in addition to you may want them to your purposes. You’ll be able to seek for obtainable PHP modules like this:

apt-cache search php7.2


apt-cache search php-

as not all PHP packages have the model quantity 7.2 of their identify.

Choose those you want and set up them like this:

apt-get -y set up php7.2-mysql php7.2-curl php7.2-gd php7.2-intl php-pear php-imagick php7.2-imap php-memcache  php7.2-pspell php7.2-recode php7.2-sqlite3 php7.2-tidy php7.2-xmlrpc php7.2-xsl php7.2-mbstring php-gettext

Now restart Apache2:

systemctl restart apache2

PHP 7.2  with MySQL extension loaded

PHP 7.2 has now MySQL / MariaDB help as proven in phpinfo() above.

6. Set up the Opcache + APCu PHP cache to hurry up PHP

PHP 7 ships with a built-in opcode cacher for caching and optimizing PHP intermediate code, it has the identify ‘opcache’ and is offered within the bundle php7.0-opcache. It’s strongly beneficial to have an Opcache put in to hurry up your PHP web page. Moreover opcache, I’ll set up APCu which is a compatibility wrapper for opcache to supply the features of the APC cache, an typically used caching system in PHP 5.x variations and lots of CMS programs nonetheless use it.

Opcache and APCu will be put in as follows:

apt-get -y set up php7.2-opcache php-apcu

Don’t be concerned if it exhibits that Opcache is already put in.

Now restart Apache:

systemctl restart apache2

Now reload in your browser and scroll right down to the modules part once more. It is best to now discover plenty of new modules there:

APC and APCu enabled in PHP 7.2

Please do not forget to delete the data.php file when you do not want it anymore because it supplies delicate particulars of your server. Run the next command to delete the file.

rm -f /var/www/html/data.php

7. Allow the SSL web site in apache

SSL/ TLS is a safety layer to encrypt the connection between the net browser and your server. Most net browsers begin to present websites as insecure in the present day when the connection between the server and the net browser is just not encrypted with SSL. On this chapter, I’ll present you methods to safe your web site with SSL.

Execute the next instructions in your server to allow SSL (https://) help. Run:

a2enmod ssl
a2ensite default-ssl

which allows the SSL module and provides a symlink within the /and many others/apache2/sites-enabled folder to the file /and many others/apache2/sites-available/default-ssl.conf to incorporate it into the lively apache configuration. Then restart apache to allow the brand new configuration:

systemctl restart apache2

Now take a look at the SSL connection by opening in an internet browser.

Self-signed SSL certificate warning

You’ll obtain an SSL warning because the SSL certificates of the server is a “self-signed” SSL certificates, which means the browser doesn’t belief this certificates by default and it’s important to settle for the safety warning first. After accepting the warning, you will note the apache default web page.

Apache with SSL enabled

The closed “Green Padlock” in entrance of the URL within the browser exhibits that the connection is encrypted.

There are two methods to do away with the SSL warning, both exchange the self-signed SSL certificates /and many others/ssl/certs/ssl-cert-snakeoil.pem with an formally signed SSL certificates that you simply purchase from an SSL Authority otherwise you get a free SSL certificates from Let’s encrypt, which I’ll describe in chapter 8.

8. Get a free SSL Certificates from Let’s Encrypt

Step one to safe the web site with a Let’s Encrypt SSL Certificates is to put in the python3-certbot-apache bundle. Run the next command:

apt-get -y set up python3-certbot-apache

Within the subsequent step, we are going to request an SSL cert from Let’s Encrypt by utilizing the certbot consumer program, throughout this course of, the Let’s Encrypt server tries to hook up with your server by way of the area identify that you simply present to the certbot command. It is vital that this area identify factors to your server in DNS already in order that the web site is reachable by its area identify on port 80 (http) already. If the web site is just not reachable from the web, then the creation of the Let’s Encrypt SSL certificates will fail.

Earlier than we are able to begin to create the SSL cert, set the area identify within the vhost configuration file. Open the default vhost file with an editor:

nano /and many others/apache2/sites-available/000-default.conf

and add the road:

ServerName instance.com

Proper beneath the ‘DocumentRoot’ line. Exchange instance.com with the area identify of your individual web site.

Then create the SSL Certificates with this command:

certbot –apache -d instance.com

Exchange instance.com along with your area identify right here once more. The command will begin a wizard that asks you many questions.

Enter the e-mail tackle the place the administrator who’s chargeable for this web site will be reached.

Set Email address

Settle for the phrases and situations of the Let’s Encrypt SSL authority.

Accept terms and conditions

Certbot will ask you now should you wish to share your e-mail tackle with the Digital Frontier Basis. Select right here no matter you like.

Email address FSF

Then select if you wish to redirect non-SSL requests to https:// routinely. I will choose sure right here to keep away from duplicate content material issues when the web site is offered as http:// and https:// model.

Redirect HTTP requests

The SSL certificates has been issued efficiently.

SSL cert issued successfully

Once you entry the web site now with a browser, you’re going to get redirected routinely to SSL and the inexperienced padlock in entrance of the URL bar within the browser exhibits that we’re utilizing a trusted SSL certificates now.

SSL Protected website

8.1 Let’s encrypt Auto Renewal

Let’s Encrypt SSL certificates are legitimate for a brief interval of 80 days solely. Subsequently a cronjob to auto-renew the SSL certificates is critical that runs the certbot –renew command.

This cronjob get setup routinely while you set up certbot, the cron file is /and many others/cron.d/certbot. So there’s nothing extra to do right here. For those who wish to know what the cronjob seems like, run the command:

/and many others/cron.d/certbot

The result’s:

[email protected]:~# cat /and many others/cron.d/certbot
# /and many others/cron.d/certbot: crontab entries for the certbot bundle
# Upstream recommends making an attempt renewal twice a day
# Ultimately, this might be a possibility to validate certificates
# have not been revoked, and many others. Renewal will solely happen if expiration
# is inside 30 days.

0 */12 * * * root take a look at -x /usr/bin/certbot -a ! -d /run/systemd/system && perl -e ‘sleep int(rand(43200))’ && certbot -q renew

9. Set up phpMyAdmin

phpMyAdmin is an internet interface by way of which you’ll be able to handle your MySQL databases. It is a good suggestion to put in it:

apt-get -y set up phpmyadmin

IMPORTANT: The apt installer will ask you many questions now, considered one of them is to pick the net server sort. A standard mistake is that the net server sort is simply highlighted however not chosen. To pick out an merchandise in an apt menu it’s important to press the house bar on the keyboard after you navigated to the merchandise with tab or cursor keys. Simply highlighting it’s not sufficient!

You will note the next questions:

Web server to configure routinely: <– Choose the choice: apache2
Configure database for phpmyadmin with dbconfig-common? <– Sure
MySQL utility password for phpmyadmin: <– Press enter, apt will create a random password routinely.

9.1 Root entry to PHPMyAdmin

MariaDB and MySQL allow a plugin referred to as “unix_socket” for the basis consumer by default, this plugin prevents that the basis consumer can log into PHPMyAdmin and that TCP connections to MySQL are working for the basis consumer. To get a consumer with privileges to create different customers and databases in PHPMyAdmin, I’ll create a brand new MySQL consumer with the identify “admin” with the identical privileges than the basis consumer.

Login to the MySQL database as root consumer on the shell:

mysql -u root

Create a brand new consumer with the identify “admin” and password “howtoforge”. Exchange the password “howtoforge” with a safe password within the instructions beneath!

CREATE USER ‘admin’@’localhost’ IDENTIFIED BY ‘howtoforge’;

Afterward, you possibly can entry phpMyAdmin below

phpMyAdmin Login

Login asadministrative user to phpMyAdmin

10 Digital machine picture obtain of this tutorial

This tutorial is offered as prepared to make use of digital machine picture in ovf/ova format that’s appropriate with VMWare and Virtualbox. The digital machine picture makes use of the next login particulars:

SSH / Shell Login

Username: administrator
Password: howtoforge

This consumer has sudo rights.

MySQL Login

Username: root
Password: howtoforge

The IP of the VM is, it may be modified within the file /and many others/community/interfaces. Please change all of the above passwords to safe the digital machine.

How To Set up and Use PostgreSQL on Ubuntu 18.04

Previous article

Greatest Mom’s Day tech reward concepts: Webilicious

Next article

You may also like


Leave a Reply

More in Apache