How to install and set up PHP and Apache(LAMP stack) on Debian 11

In this guide we are going to Install and set up Apache virtual host to serve PHP content on a Debian 11 system.

The Apache HTTP Server(Apache), is one of the most popular free and open-source cross-platform web server software, released under the terms of Apache License 2.0. Apache is popular as part of the LAMP setup, being the A in the Acronym. The apache server functionality can be extended with the many available modules.

PHP is a general-purpose scripting language geared towards web development. It is one of the popular programming languages for the web. Popular tools such as WordPress are coded using php. Big companies like Facebook also uses php heavily.

Related Content

# Prerequisites

To follow along this guide, please ensure you have the following:

  • An uodated Debian 11 server
  • Root access to the server or User with sudo access
  • Internet access

# Table of Content

  1. Ensuring that the server is up to date
  2. Installing PHP on Debian 11
  3. Installing Apache on Debian 11
  4. Configuring virtual host

# 1. Ensuring that the server is up to date

Before proceeding, it is always a good practice to ensure that the server is up to date. Use these commands to achieve this

sudo apt update
sudo apt upgrade -y

# 2. Installing PHP on Debian 11

PHP is available in the default Debian 11 repos. The latest version of PHP as of writing this blog is PHP 7.4.

Install PHP and some common packages using this command:

sudo apt install -y \
    php \
    php-common \

Check the installed version of PHP

$ apt-cache policy php
  Installed: 2:7.4+76
  Candidate: 2:7.4+76
  Version table:
 *** 2:7.4+76 500
        500 bullseye/main amd64 Packages
        100 /var/lib/dpkg/status

Check the installed php version using this command:

$ php -v
PHP 7.4.25 (cli) (built: Oct 23 2021 21:53:50) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
    with Zend OPcache v7.4.25, Copyright (c), by Zend Technologies

# 3. Installing apache on Debian 11

Apache packages are available in the default Debian 11 repositories as apache2. Install it using this command:

sudo apt install -y apache2

Confirm the installed packages using this command:

$ apt-cache policy apache2
  Installed: 2.4.51-1~deb11u1
  Candidate: 2.4.51-1~deb11u1
  Version table:
 *** 2.4.51-1~deb11u1 500
        500 bullseye-security/main amd64 Packages
        100 /var/lib/dpkg/status
     2.4.48-3.1+deb11u1 500
        500 bullseye/main amd64 Packages

The service will be started by default. Check the status using this command:

$ sudo systemctl status apache2
● apache2.service - The Apache HTTP Server
     Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
     Active: active (running) since Tue 2021-12-14 03:01:04 UTC; 5min ago
   Main PID: 19103 (apache2)
      Tasks: 6 (limit: 4626)
     Memory: 12.8M
        CPU: 59ms
     CGroup: /system.slice/apache2.service
             ├─19103 /usr/sbin/apache2 -k start
             ├─19105 /usr/sbin/apache2 -k start
             ├─19106 /usr/sbin/apache2 -k start
             ├─19107 /usr/sbin/apache2 -k start
             ├─19108 /usr/sbin/apache2 -k start
             └─19109 /usr/sbin/apache2 -k start

Dec 14 03:01:04 ip-10-2-40-188 systemd[1]: Starting The Apache HTTP Server...
Dec 14 03:01:04 ip-10-2-40-188 systemd[1]: Started The Apache HTTP Server.

To enable the service on boot, use this command

sudo systemctl enable apache2

To confirm that Apache is installed and working fine, please visit the server’s IP address in the browser (http://server_ip). If you don’t know the server IP, get it using this command in your terminal:

curl -4

If all is well, you should see the Apache2 Debian Default Page.

# 4. Configuring virtual hosts

With Apache, it is possible to host multiple sites on the same server where the Apache is running. This can always be achieved using multiple domains each representing a site that the server is hosting.

Apache virtual hosts are similar to Nginx server blocks. Each virtual host will have configuration details for a single host. You can have as many virtual hosts as you want.

In this example, we will use the domain for the virtual host but be free to use the domain of your choice. Please note that the DNS for the domain to be used should already be configured to point to the IP address of the server.
Confirm that with:

dig -t A

# Creating directory and sample content

The default page of apache is configured as a default virtual host serving content from /var/www/html. It’s a best practice to create the directory of your site in the /var/www directory since its a best practice to serve from there.

Lets create a directory for our site with the following command:

sudo mkdir /var/www/

Lets create a simple index.php page to serve from our site. You will require vim installed for this to work, if not use this command:

sudo apt install -y vim

Edit the file:

sudo vim /var/www/

Add content to the file:

<?php phpinfo(); ?>

Finally, lets make sure that the$USER user owns the site directory:

sudo chown -R $USER:$GROUP /var/www/

# Creating virtual host

Apache Virtual host files specifies the configuration of each sites and tell the Apache web server how to respond to various domain requests.

The Apache configurations will be stored in the directory /etc/httpd/conf.d/. Let us create a config for our site:

sudo vim /etc/apache2/sites-available/

Add the following content:

<VirtualHost *:80>
    DocumentRoot /var/www/
    DirectoryIndex index.php
    ErrorLog /var/log/apache2/
    CustomLog /var/log/apache2/ combined

This will tell Apache the following:

  • ServerName and ServerAlias – name of the host to serve
  • DocumentRoot – where to find the root directly that holds the publicly accessible web documents
  • DirectoryIndex – The file that apache will serve when the site is accessed
  • ErrorLog – where to store error logs for this site
  • CustomLog – where to store request logs for this particular site

Save and close the file when you are finished

Enable the site

$ sudo a2ensite
Enabling site
To activate the new configuration, you need to run:
  systemctl reload apache2

Then reload apache2 config

sudo systemctl reload apache2

# Testing the Virtual Host

Now that the configuration is in place, we need to test that everything is working as expected. Since we created the index.php file above, let us access it by going to http://server_url/. In my case this is You should see the php info page.

# Conclusion

In this guide, we managed to set up Apache to serve PHP site on a Debian 11 server.

comments powered by Disqus
Citizix Ltd
Built with Hugo
Theme Stack designed by Jimmy