DEV Community

Cover image for Installing the LAMP Stack on Ubuntu 26.04
Sanskriti Harmukh for Vultr

Posted on • Originally published at docs.vultr.com

Installing the LAMP Stack on Ubuntu 26.04

The LAMP stack — Linux, Apache, MySQL, and PHP — powers a large portion of the web, including WordPress, Laravel, and Drupal. Ubuntu 26.04 ships with PHP 8.5, giving you a modern base to build on. This guide sets up a production-ready stack using Apache with PHP-FPM, secures it with a Let's Encrypt certificate, and verifies the full setup with a PHP page that reads from MySQL. By the end, you'll have a fully operational LAMP server ready to host web applications.


Install Apache

Apache is available directly from Ubuntu 26.04's default APT repository.

1. Update the APT package index:

$ sudo apt update
Enter fullscreen mode Exit fullscreen mode

2. Install Apache:

$ sudo apt install apache2 -y
Enter fullscreen mode Exit fullscreen mode

3. Enable and start the service:

$ sudo systemctl enable apache2
$ sudo systemctl start apache2
Enter fullscreen mode Exit fullscreen mode

Install MySQL

MySQL is installed from Ubuntu's default repository and secured with the built-in security script before any application connects to it.

1. Install the MySQL server package:

$ sudo apt install mysql-server -y
Enter fullscreen mode Exit fullscreen mode

2. Enable and start the service:

$ sudo systemctl enable mysql
$ sudo systemctl start mysql
Enter fullscreen mode Exit fullscreen mode

3. Run the security script:

$ sudo mysql_secure_installation
Enter fullscreen mode Exit fullscreen mode

4. Set the root password in the MySQL shell:

$ sudo mysql
Enter fullscreen mode Exit fullscreen mode
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_strong_password';
mysql> FLUSH PRIVILEGES;
mysql> EXIT;
Enter fullscreen mode Exit fullscreen mode

Install PHP and PHP-FPM

PHP-FPM handles PHP execution through a FastCGI process pool, offering better performance and process isolation compared to the traditional mod_php approach.

1. Install PHP and required extensions:

$ sudo apt install php php-fpm php-mysql php-cli libapache2-mod-php -y
Enter fullscreen mode Exit fullscreen mode

2. Enable and start PHP-FPM:

$ sudo systemctl enable php8.5-fpm
$ sudo systemctl start php8.5-fpm
Enter fullscreen mode Exit fullscreen mode

Configure Firewall Rules

Open ports 80 and 443 to allow HTTP and HTTPS traffic through the firewall.

$ sudo ufw allow 80/tcp
$ sudo ufw allow 443/tcp
Enter fullscreen mode Exit fullscreen mode

Configure a Virtual Host

Virtual hosts allow Apache to serve domain-specific content and are required before issuing an SSL certificate. Replace app.example.com with your actual domain throughout this section.

1. Create the web root directory:

$ sudo mkdir -p /var/www/app.example.com
$ sudo chown -R www-data:www-data /var/www/app.example.com
Enter fullscreen mode Exit fullscreen mode

2. Create a test HTML page:

$ echo "<h1>Hello from LAMP on Ubuntu 26.04</h1>" | sudo tee /var/www/app.example.com/index.html
Enter fullscreen mode Exit fullscreen mode

3. Disable the default Apache site:

$ sudo a2dissite 000-default.conf
Enter fullscreen mode Exit fullscreen mode

4. Create the virtual host configuration:

$ sudo nano /etc/apache2/sites-available/app.example.com.conf
Enter fullscreen mode Exit fullscreen mode
<VirtualHost *:80>
    ServerName app.example.com
    DocumentRoot /var/www/app.example.com

    <Directory /var/www/app.example.com>
        AllowOverride All
        Require all granted
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/app.example.com-error.log
    CustomLog ${APACHE_LOG_DIR}/app.example.com-access.log combined
</VirtualHost>
Enter fullscreen mode Exit fullscreen mode

5. Enable the site and reload Apache:

$ sudo a2ensite app.example.com.conf
$ sudo apachectl configtest
$ sudo systemctl restart apache2
Enter fullscreen mode Exit fullscreen mode

Secure with Let's Encrypt SSL

Certbot automates certificate issuance and renewal through Let's Encrypt, with an Apache plugin that handles virtual host configuration directly.

1. Install Certbot with the Apache plugin:

$ sudo apt install certbot python3-certbot-apache -y
Enter fullscreen mode Exit fullscreen mode

2. Generate and install the certificate:

$ sudo certbot --apache -d app.example.com --agree-tos
Enter fullscreen mode Exit fullscreen mode

Certbot updates the virtual host to redirect HTTP to HTTPS automatically.

3. Test the auto-renewal timer:

$ sudo certbot renew --dry-run
Enter fullscreen mode Exit fullscreen mode

A dry run without errors confirms automatic renewal is configured correctly.


Test the LAMP Stack

A PHP script that connects to MySQL and retrieves data confirms all three layers of the stack are communicating correctly.

1. Create the test database:

$ mysql -u root -p
Enter fullscreen mode Exit fullscreen mode
mysql> CREATE DATABASE lamp_test;
mysql> CREATE USER 'lamp_user'@'localhost' IDENTIFIED BY 'secure_password';
mysql> GRANT ALL PRIVILEGES ON lamp_test.* TO 'lamp_user'@'localhost';
mysql> USE lamp_test;
mysql> CREATE TABLE greetings (id INT AUTO_INCREMENT PRIMARY KEY, message VARCHAR(255));
mysql> INSERT INTO greetings (message) VALUES ('LAMP stack is working!');
mysql> FLUSH PRIVILEGES;
mysql> EXIT;
Enter fullscreen mode Exit fullscreen mode

2. Create the PHP test page:

$ sudo nano /var/www/app.example.com/test.php
Enter fullscreen mode Exit fullscreen mode
<?php
$conn = new mysqli('localhost', 'lamp_user', 'secure_password', 'lamp_test');
if ($conn->connect_error) { die('Connection failed: ' . $conn->connect_error); }
$result = $conn->query('SELECT message FROM greetings');
while ($row = $result->fetch_assoc()) { echo $row['message']; }
$conn->close();
?>
Enter fullscreen mode Exit fullscreen mode

3. Visit the test page:

Open https://app.example.com/test.php in a browser. The text LAMP stack is working! confirms Apache, PHP, and MySQL are communicating correctly.

4. Remove the test file:

$ sudo rm /var/www/app.example.com/test.php
Enter fullscreen mode Exit fullscreen mode

Next Steps

The LAMP stack is now running and serving requests over HTTPS. From here you can:

  • Deploy WordPress or Laravel on this stack
  • Add phpMyAdmin for a browser-based database management interface
  • Enable mod_rewrite for clean URL support with sudo a2enmod rewrite

For the full guide with additional tips, visit the original article on Vultr Docs.

Top comments (0)