Skip to main content
Redhat Developers  Logo
  • Products

    Platforms

    • Red Hat Enterprise Linux
      Red Hat Enterprise Linux Icon
    • Red Hat AI
      Red Hat AI
    • Red Hat OpenShift
      Openshift icon
    • Red Hat Ansible Automation Platform
      Ansible icon
    • View All Red Hat Products

    Featured

    • Red Hat build of OpenJDK
    • Red Hat Developer Hub
    • Red Hat JBoss Enterprise Application Platform
    • Red Hat OpenShift Dev Spaces
    • Red Hat OpenShift Local
    • Red Hat Developer Sandbox

      Try Red Hat products and technologies without setup or configuration fees for 30 days with this shared Openshift and Kubernetes cluster.
    • Try at no cost
  • Technologies

    Featured

    • AI/ML
      AI/ML Icon
    • Linux
      Linux Icon
    • Kubernetes
      Cloud icon
    • Automation
      Automation Icon showing arrows moving in a circle around a gear
    • View All Technologies
    • Programming Languages & Frameworks

      • Java
      • Python
      • JavaScript
    • System Design & Architecture

      • Red Hat architecture and design patterns
      • Microservices
      • Event-Driven Architecture
      • Databases
    • Developer Productivity

      • Developer productivity
      • Developer Tools
      • GitOps
    • Automated Data Processing

      • AI/ML
      • Data Science
      • Apache Kafka on Kubernetes
    • Platform Engineering

      • DevOps
      • DevSecOps
      • Ansible automation for applications and services
    • Secure Development & Architectures

      • Security
      • Secure coding
  • Learn

    Featured

    • Kubernetes & Cloud Native
      Openshift icon
    • Linux
      Rhel icon
    • Automation
      Ansible cloud icon
    • AI/ML
      AI/ML Icon
    • View All Learning Resources

    E-Books

    • GitOps Cookbook
    • Podman in Action
    • Kubernetes Operators
    • The Path to GitOps
    • View All E-books

    Cheat Sheets

    • Linux Commands
    • Bash Commands
    • Git
    • systemd Commands
    • View All Cheat Sheets

    Documentation

    • Product Documentation
    • API Catalog
    • Legacy Documentation
  • Developer Sandbox

    Developer Sandbox

    • Access Red Hat’s products and technologies without setup or configuration, and start developing quicker than ever before with our new, no-cost sandbox environments.
    • Explore Developer Sandbox

    Featured Developer Sandbox activities

    • Get started with your Developer Sandbox
    • OpenShift virtualization and application modernization using the Developer Sandbox
    • Explore all Developer Sandbox activities

    Ready to start developing apps?

    • Try at no cost
  • Blog
  • Events
  • Videos

Quickly set up a LAMP stack on Red Hat Enterprise Linux 8

July 3, 2019
Maxim Burgerhout
Related topics:
Linux
Related products:
Red Hat Enterprise Linux

Share:

    Have you tried Red Hat Enterprise Linux 8 (RHEL8) yet? Read on to learn how to quickly set up a LAMP stack on RHEL8 so you can play around with the new features built into the operating system.

    A LAMP stack is made up of four main components and some glue. The first main component in a LAMP stack (the "L") is Linux. In my example, I’m using Red Hat Enterprise Linux 8 for that, which gives me a secure operating system, a modern programming environment, and a user-friendly set of tools to control it.

    As for the web server, traditionally the “A” in LAMP stood for Apache, but in Red Hat Enterprise Linux 8, we actually have options here. We ship Apache httpd with RHEL8, but we also ship NGINX. Because I’m a bit traditional here, I’ll opt for Apache.

    In RHEL8, Apache ships as an AppStream, which—among other things—allows us to provide content with varying life cycles. With AppStreams, we can, for example, ship multiple versions of Python and add new versions of programming environments outside of the normal RHEL release cadence.

    Installing Apache on RHEL8 as easy as it was on earlier versions of Red Hat Enterprise Linux. Run:

    $ sudo yum -y install httpd

    (You are using sudo, right? If you didn't set your user ID to be an administrator during installation, see How to enable sudo on Red Hat Enterprise Linux.) This command enables the Apache 2.4 AppStream and installs the httpd package, including its default dependencies.

    To start this newly installed web server and make sure it will automatically start after a reboot, I’ll need to run:

    $ sudo systemctl enable --now httpd

    And, because I’ll want my server to be reachable over the network, I’ll need to open ports 80 and 443 on my system. We can do that from the Red Hat Enterprise Linux 8 Web Console (see the DevNation video at the end of this article for a demo), but for now, let’s use the command-line tools provided with RHEL8. They are quite easy:

    $ sudo firewall-cmd --add-service=http --add-service=https
    $ sudo firewall-cmd --add-service=http --add-service=https --permanent

    That’s it. The first command opens ports 80 and 443 right now, and the second command makes sure that, after a reboot or firewall restart, the ports remain open.

    Now for the database part. Again, traditionally, the “M” in LAMP stood for MySQL. However, nowadays, it can also mean MariaDB, MongoDB, or even PostgreSQL. You can see what databases RHEL8 ships with by running:

    sudo yum module list

    (I’ve stripped the non-database AppStreams from the output in Figure 1 for brevity.)

    RHEL8 release notes

    As you can see, MongoDB is not an option for RHEL8. You can read the RHEL8 release notes for a little background on why that is. What we do have, though, is MySQL 8, MariaDB 10.3, PostgreSQL 9.6 and 10, and Redis 5. That’s a lot to choose from!

    I want to build a fairly traditional LAMP stack here, so I’ll opt for MariaDB, which is a drop-in replacement for MySQL. I want to install a database server, so the default profile (‘server’, indicated by the [d] in the output above) will work for me. If I only wanted the client bits, I could have installed the client profile, saving me a bit of disk space, and giving me, obviously, only the client bits of MariaDB.

    For now, however, I’ll run:

    $ sudo yum -y module install mariadb

    By the way, a standard sudo yum -y install mariadb-server will work just as well.

    A database that’s not running is of little use, so let’s start it with:

    $ sudo systemctl enable --now mariadb

    I don’t need to open firewall ports, because my web server and database server run on the same machine. If you have separate machines for Apache and MariaDB, you’ll need to add the MySQL service to the firewall, using the firewall-cmd command I showed above. You would also need to tune the SELinux policy to allow Apache to make network connections to a database (safety first!), by running:

    $ sudo setsebool -P httpd_can_network_connect_db on

    Finally, because I take my lessons around security to heart, I’ll run the mysql_secure_installation script:

    $ sudo mysql_secure_installation

    We are almost there. I have a proper Linux machine, I have my web server, and I have my database server. What’s still missing is a programming environment and some glue. Let’s see what programming environments are available for the "P" in LAMP:

    $ sudo yum module list

    I’ll not show the whole output again here, but we have PHP, we have Python in two major versions, we have Ruby, and a plethora of other options. Traditional LAMP means PHP for me, though, so that’s what I’ll be installing. One simple command should that care of it:

    $ sudo yum -y module install php

    Two final steps remain. First, there's the glue. To enable connecting to the MariaDB database from my PHP pages, I need to install a tiny library:

    $ sudo yum -y install php-mysqlnd

    Then, as the final step, I’ll restart Apache to pick up my newly installed PHP and the PHP MySQL library:

    $ sudo systemctl restart httpd

    That’s it, we are done. We can go into /var/www/html and drop a PHP application in it and everything should work.

    Some months back, Burr Sutter hosted me on DevNation Live, and we recorded an overview of RHEL8 from a developer point of view. We covered installing and using programming environments, managing your development systems, and much more. Interested? Watch the video:

    I hope this overview is helpful when you're ready to set up a LAMP stack on RHEL8. Let me know what you think in the comments or on Twitter at @MaximBurgerhout.

    Last updated: August 11, 2023

    Recent Posts

    • Cloud bursting with confidential containers on OpenShift

    • Reach native speed with MacOS llama.cpp container inference

    • A deep dive into Apache Kafka's KRaft protocol

    • Staying ahead of artificial intelligence threats

    • Strengthen privacy and security with encrypted DNS in RHEL

    Red Hat Developers logo LinkedIn YouTube Twitter Facebook

    Products

    • Red Hat Enterprise Linux
    • Red Hat OpenShift
    • Red Hat Ansible Automation Platform

    Build

    • Developer Sandbox
    • Developer Tools
    • Interactive Tutorials
    • API Catalog

    Quicklinks

    • Learning Resources
    • E-books
    • Cheat Sheets
    • Blog
    • Events
    • Newsletter

    Communicate

    • About us
    • Contact sales
    • Find a partner
    • Report a website issue
    • Site Status Dashboard
    • Report a security problem

    RED HAT DEVELOPER

    Build here. Go anywhere.

    We serve the builders. The problem solvers who create careers with code.

    Join us if you’re a developer, software engineer, web designer, front-end designer, UX designer, computer scientist, architect, tester, product manager, project manager or team lead.

    Sign me up

    Red Hat legal and privacy links

    • About Red Hat
    • Jobs
    • Events
    • Locations
    • Contact Red Hat
    • Red Hat Blog
    • Inclusion at Red Hat
    • Cool Stuff Store
    • Red Hat Summit
    © 2025 Red Hat

    Red Hat legal and privacy links

    • Privacy statement
    • Terms of use
    • All policies and guidelines
    • Digital accessibility

    Report a website issue