Posted on
Software

How To Setup an Apache Web Server With PHP and MySQL On Linux

Author
  • User
    Linux Bash
    Posts by this author
    Posts by this author

How to Install an Apache Web Server Powered by PHP and MySQL on Linux CLI Using Package Managers

This guide outlines the steps to install Apache, PHP, and MySQL (often referred to as the LAMP stack: Linux, Apache, MySQL, and PHP) on a Linux system using package managers such as APT (for Debian/Ubuntu-based distributions) and DNF (for CentOS/RHEL-based distributions).

Prerequisites

  • A Linux server (Debian/Ubuntu/CentOS 8+).
  • Root or sudo privileges to install and configure packages.
  • Access to the command line or SSH.

Step-by-Step Installation:


Step 1: Update the System

Before installing any packages, it’s important to ensure that your system is up to date.

For Debian/Ubuntu (APT)

sudo apt update
sudo apt upgrade -y

For CentOS 8+ (DNF)

sudo dnf update -y

Step 2: Install Apache Web Server

Apache is the most widely used web server to serve static and dynamic content.

For Debian/Ubuntu (APT)

Install Apache with the following command:

sudo apt install apache2 -y

Enable Apache to start on boot:

sudo systemctl enable apache2

Start Apache:

sudo systemctl start apache2

Verify that Apache is running:

sudo systemctl status apache2

For CentOS 8+ (DNF)

Install Apache (httpd) using the following:

sudo dnf install httpd -y

Enable Apache to start on boot:

sudo systemctl enable httpd

Start Apache:

sudo systemctl start httpd

Verify that Apache is running:

sudo systemctl status httpd

To ensure Apache is accessible through the firewall, run:

sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --reload

Step 3: Install PHP

Apache alone can serve static content, but to serve dynamic content (such as web applications), we need PHP.

For Debian/Ubuntu (APT)

Install PHP and the required Apache module:

sudo apt install php libapache2-mod-php -y

Restart Apache to load the PHP module:

sudo systemctl restart apache2

For CentOS 8+ (DNF)

On CentOS 8+, PHP can be installed from the default CentOS repositories or from the Remi repository if you need a more recent version of PHP. To install PHP from the default CentOS 8+ repositories:

sudo dnf install php php-mysqlnd php-fpm -y

After installation, restart Apache to apply the PHP configuration:

sudo systemctl restart httpd

Step 4: Install MySQL (or MariaDB)

MySQL (or MariaDB, which is a drop-in replacement for MySQL) is needed to store and retrieve data for web applications.

For Debian/Ubuntu (APT)

Install MySQL:

sudo apt install mysql-server -y

Secure the MySQL installation:

sudo mysql_secure_installation

Start MySQL:

sudo systemctl start mysql

Enable MySQL to start on boot:

sudo systemctl enable mysql

Verify MySQL is running:

sudo systemctl status mysql

For CentOS 8+ (DNF)

CentOS 8 comes with MariaDB as the default MySQL-compatible database server. To install MariaDB:

sudo dnf install mariadb-server -y

Start MariaDB:

sudo systemctl start mariadb

Enable MariaDB to start on boot:

sudo systemctl enable mariadb

Secure the MariaDB installation:

sudo mysql_secure_installation

Verify MariaDB is running:

sudo systemctl status mariadb

Step 5: Verify the Installation of Apache, PHP, and MySQL

Now that Apache, PHP, and MySQL/MariaDB are installed, it’s important to verify that everything is working correctly.

Check Apache and PHP Integration

  1. Create a PHP info file to check if PHP is correctly integrated with Apache:
sudo nano /var/www/html/info.php
  1. Add the following PHP code:
<?php
phpinfo();
?>
  1. Save and exit the file (Press CTRL+X, then Y, then Enter).

  2. In your web browser, visit:

http://localhost/info.php

You should see a page displaying detailed PHP configuration information, confirming that Apache and PHP are working together.

Check MySQL/MariaDB Connection

To check if MySQL/MariaDB is working, log into the database:

sudo mysql -u root -p

Enter your root password when prompted, and if you see the MariaDB/MySQL prompt (MariaDB [(none)]>), then the installation was successful.


Step 6: Configure Apache to Use PHP

If you haven’t already, ensure Apache is configured to handle PHP files.

For Debian/Ubuntu (APT)

Apache should automatically be configured to use PHP after installing the libapache2-mod-php module. If it's not, you can enable the PHP module manually with:

sudo a2enmod php7.x  # Replace 7.x with your PHP version
sudo systemctl restart apache2

For CentOS 8+ (DNF)

CentOS 8 will automatically configure Apache to work with PHP. If it's not working, you can ensure that PHP is set up with the following command:

sudo systemctl restart httpd

Step 7: Remove the PHP Info File (Optional)

After verifying PHP is working, it's a good idea to delete the info.php file for security reasons:

sudo rm /var/www/html/info.php

Step 8: Additional Configuration (Optional)

You may want to configure Apache to serve multiple websites or adjust certain PHP settings.

Set Up Virtual Hosts (Optional)

If you want to serve multiple websites, create a configuration file for each site.

  1. Create a new configuration file for your site:
sudo nano /etc/httpd/conf.d/mywebsite.conf  # CentOS
  1. Add the virtual host configuration:
<VirtualHost *:80>
    ServerAdmin webmaster@mywebsite.com
    DocumentRoot /var/www/mywebsite
    ServerName mywebsite.com
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
  1. Create the directory for the site:
sudo mkdir /var/www/mywebsite
  1. Restart Apache to apply the changes:
sudo systemctl restart httpd  # CentOS

Conclusion

You now have a fully functional LAMP stack (Apache, PHP, and MySQL/MariaDB) on your Linux system, ready to serve dynamic websites. Here's a recap of what we did:

  • Installed Apache to serve web content.

  • Installed PHP for dynamic content.

  • Installed MySQL/MariaDB for database management.

  • Configured Apache and PHP to work together.

  • Created virtual hosts for managing multiple sites (optional).

With Apache, PHP, and MySQL/MariaDB running, your server is ready for hosting web applications, whether it's for a simple website or a full-fledged content management system (CMS).