How to Install LAMP with RDS on Ubuntu with Let’s Encrypt SSL – AWS. In this guide you will learn how to install Apache2, PHP 7.4 and configure MySQL in Amazon RDS.
You will also install some common PHP extensions and adjust the PHP configurations. Finally you will install Let’s Encrypt SSL and configure HTTPS
This setup is tested on an EC2 Instance with Ubuntu 18.04 OS.
Prerequisites
- A running EC2 Instance. Learn how to create an AWS EC2 instance.
- Assigned a Elastic IP to your EC2 Instance.
- Setup Amazon RDS and connect it with EC2 Instance.
- Setup and configure Route 53 and point your domain to AWS.
- Successful SSH connection to your EC2 Instance.
SSH to your EC2 Instance and perform the steps listed below.
Step 1: Initial Server Setup
Let’s start by updating the local package index with the following command to the latest available version.
sudo apt update
sudo apt upgrade
Once the update is done you can start installing the required packages.
Step 2: Install Apache
Apache2 is available by default in the Ubuntu repository, so you can install it directly using the apt
command.
sudo apt install apache2
This will install apache2
and all required dependencies.
Step 3: Setup Firewall
Now you can set up Uncomplicated Firewall (UFW) with Apache to allow public access on default web ports for HTTP
and HTTPS
sudo ufw app list
You will see all listed applications.
Output
Available applications:
Apache
Apache Full
Apache Secure
OpenSSH
- Apache: This profile opens port
80
(normal, unencrypted web traffic) - Apache Full: This profile opens both port
80
(normal, unencrypted web traffic) and port443
(TLS/SSL encrypted traffic) - Apache Secure: This profile opens only port
443
(TLS/SSL encrypted traffic) - OpenSSH: This profile opens port
22
for SSH access.
If you are not going to use SSL you need to enable only the Apache profile.
Now we will enable Apache Full.
sudo ufw allow 'Apache Full'
With this command you can view the status of UFW.
sudo ufw status
You will see the output as follows.
Output
Status: active
To Action From
-- ------ ----
Apache Full ALLOW Anywhere
OpenSSH ALLOW Anywhere
Apache Full (v6) ALLOW Anywhere (v6)
OpenSSH (v6) ALLOW Anywhere (v6)
Step: 4 Check Apache Installation
Once Apache is installed is is started automatically and already be up and running.
Every process in Apache is managed with the systemctl
command. Check the status of Apache with the following command.
sudo systemctl status apache2
Output
● apache2.service - The Apache HTTP Server
Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
Drop-In: /lib/systemd/system/apache2.service.d
└─apache2-systemd.conf
Active: active (running) since Tue 2020-01-06 03:59:34 UTC; 5min ago
Main PID: 10617 (apache2)
Tasks: 55 (limit: 667)
CGroup: /system.slice/apache2.service
├─10617 /usr/sbin/apache2 -k start
├─10619 /usr/sbin/apache2 -k start
└─10620 /usr/sbin/apache2 -k start
Jan 06 03:59:34 apache systemd[1]: Starting The Apache HTTP Server…
Jan 06 03:59:34 apache systemd[1]: Started The Apache HTTP Server.
Now we have Apache installed and configured Firewall.
Step 5: Install PHP 7.4
Here we will install PHP 7.4 the current latest version available. Add the ondrej/php
which has PHP 7.4 package and other required PHP extensions.
sudo apt install software-properties-common
sudo add-apt-repository ppa:ondrej/php
sudo apt update
Once you have added the PPA you can install PHP 7.4.
Execute the following command to install PHP 7.4
sudo apt install php7.4
After the installation has completed, you can confirm the installation using the following command
php -v
Step 6: Install PHP 7.4 Extensions
Installing PHP extensions are simple with the following syntax.
sudo apt install php7.4-extension_name
Now, install some commonly used php-extensions
with the following command.
sudo apt install php7.4-common php7.4-mysql php7.4-xml php7.4-xmlrpc php7.4-curl php7.4-gd php7.4-imagick php7.4-cli php7.4-dev php7.4-imap php7.4-mbstring php7.4-opcache php7.4-soap php7.4-zip php7.4-intl -y
Step 7: Configure PHP 7.4
Now we configure PHP for Web Applications by changing some values in php.ini
file.
For PHP 7.4 with Apache the php.ini
location will be in following directory.
sudo nano /etc/php/7.4/apache2/php.ini
Hit F6
for search inside the editor and update the following values for better performance.
upload_max_filesize = 32M
post_max_size = 48M
memory_limit = 256M
max_execution_time = 600
max_input_vars = 3000
max_input_time = 1000
Once you have modified your PHP settings you need to restart your Apache for the changes to take effect.
Step 8: Setup Amazon RDS and connect with EC2
Now you can create an RDS database server with MySQL engine and configure security groups to allow connections from EC2 Instance.
Follow the RDS setup guide to configure it with MySQL.
Step 9: Configure Apache
Disable default Apache configuration.
sudo a2dissite 000-default
Create website directories.
sudo mkdir -p /var/www/html/domainname/public
Setup correct permissions.
sudo chmod -R 755 /var/www/html/domainname sudo chown -R www-data:www-data /var/www/html/domainname
Create a new virtual host configuration.
sudo nano /etc/apache2/sites-available/domainname.conf
Paste the following configurations in the new file.
<VirtualHost *:80> ServerAdmin admin@domainname.com ServerName domainname.com ServerAlias www.domainname.com DocumentRoot /var/www/html/domainname/public <Directory /var/www/html/domainname/public> Options Indexes FollowSymLinks AllowOverride All Require all granted </Directory> ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost>
Enable the new configuration.
sudo a2ensite domainname.conf
Step 10: Install Let’s Encrypt SSL
HTTPS is a protocol for secure communication between a server (instance) and a client (web browser). Due to the introduction of Let’s Encrypt, which provides free SSL certificates, HTTPS are adopted by everyone and also provides trust to your audiences.
sudo add-apt-repository ppa:certbot/certbot
sudo apt update
sudo apt install python-certbot-apache
Now we have installed Cert bot by Let’s Encrypt for Ubuntu 18.04, run this command to receive your certificates.
sudo certbot --apache --agree-tos --redirect -m [email protected] -d domainname.com -d www.domainname.com
Select the appropriate option and hit Enter
This command will install Free SSL, configure redirection to HTTPS and restarts the Apache server.
Step 11: Renewing SSL Certificate
Certificates provided by Let’s Encrypt are valid for 90 days only, so you need to renew them often. So, let’s test the renewal feature using the following command.
sudo certbot renew --dry-run
This command will test the certificate expiry and configures the auto-renewable feature.
Step: 12: Test the Setup
Once you have done the able steps you can create a new test PHP file in your web directory.
sudo nano /var/www/html/domainname/public/info.php
Paste the below code inside the file.
<?php phpinfo();
Save the file.
Now go ahead and check your domain name with the info.php
in the url (domainname.com/info.php
).
You will see that your domain got redirected to HTTPS and see the PHP information details.
Become a Certified AWS Professional with this easy to learn course now.
Conclusion
Now you have learned how to install LAMP stack with RDS database setup on Amazon EC2 Instance with Ubuntu 18.04.
Thanks for your time. If you face any problem or any feedback, please leave a comment below.