In this guide, you’ll learn how to install a LAMP (Linux, Apache, MySQL, PHP) server on a Raspberry Pi. LAMP is a software bundle that is used for web development. The Raspberry Pi will have Raspbian OS installed and you’ll use phpMyAdmin to easily manage your database through a web interface.

Prerequisites
Before continuing with this tutorial:
- You should be familiar with the Raspberry Pi board – read Getting Started with Raspberry Pi;
- You should have the Raspbian or Raspbian Lite operating system installed – read Installing Raspbian Lite, Enabling and Connecting with SSH;
- You also need the following hardware:
If you like home automation and you want to build a complete home automation system, I recommend downloading my home automation course.
After having your Raspberry Pi board prepared with Raspbian OS, you can continue with this tutorial.
You can either run the next commands on a Raspberry Pi set as a desktop computer or using an SSH connection.
Updating and Upgrading
Before starting the installation procedure, open a Terminal window and run the following commands to update your Pi:
[email protected]:~ $ sudo apt update && sudo apt upgrade -y
Install Apache2 on Raspberry Pi
Apache2 is the most widely used web server software. Briefly, a web server is the software that handles requests to access a web page. Then, depending on the page you have requested, the server will generate the document to serve you (.html, .php, etc).

To install Apache2 on your Raspberry Pi, run the next command:
[email protected]:~ $ sudo apt install apache2 -y

That’s it! Apache is now installed. To test your installation, change to the /var/www/html directory and list the files:
[email protected]:~ $ cd /var/www/html
[email protected]:/var/www/html $ ls -al
index.html
You should have an index.html file in that folder. To open that page in your browser, you need to know the Raspberry Pi IP address. Use:
[email protected]:/var/www/html $ hostname -I

In my case, the Raspberry Pi IP address is 192.168.1.86. If you open your RPi IP address in any browser in your local network, a similar web page should load (http://192.168.1.86):

Install PHP on Raspberry Pi
PHP is a server side scripting language. PHP (Hypertext Preprocessor) is used to develop dynamic web applications. A PHP file contains <?php … ?> tags and ends with the extension “.php“.
To install PHP on Raspberry Pi, run:
[email protected]:/var/www/html $ sudo apt install php -y
You can remove the index.html and create a PHP script to test the installation:
[email protected]:/var/www/html $ sudo rm index.html
[email protected]:/var/www/html $ sudo nano index.php
In your index.php file add the following code to echo the “hello world” message:
<?php echo "hello world"; ?>

To save your file: press Ctrl+X, followed by y, and press Enter to exit.
Finally, restart Apache2:
[email protected]:/var/www/html $ sudo service apache2 restart
To test if Apache2 is serving .php files, open the Raspberry Pi IP address and it should display the “hello world” message from the index.php script created earlier.

If everything is working, you can remove index.php file from the /var/www/html directory:
[email protected]:/var/www/html $ sudo rm index.php
Install MySQL (MariaDB Server) on Raspberry Pi
MySQL (often pronounced My S–Q–L) is a popular open source relational database.
Install the MySQL Server (MariaDB Server) and PHP-MySQL packages by entering the following command:
[email protected]:/var/www/html $ sudo apt install mariadb-server php-mysql -y
[email protected]:/var/www/html $ sudo service apache2 restart
After installing MySQL (MariaDB Server), it’s recommend to run this command to secure your MySQL installation:
[email protected]:/var/www/html $ sudo mysql_secure_installation
This should appear in your Terminal window:

- You will be asked Enter current password for root (type a secure password): press Enter
- Type in Y and press Enter to Set root password
- Type in a password at the New password: prompt, and press Enter. Important: remember this root password, as you will need it later
- Type in Y to Remove anonymous users
- Type in Y to Disallow root login remotely
- Type in Y to Remove test database and access to it
- Type in Y to Reload privilege tables now
When the installation is completed, you’ll see the message: “Thanks for using MariaDB!”.

If you experience any error login into phpMyAdmin, you might need to create a new user to login. Those commands will create a new user with name (admin) and password (your_password).
[email protected]:/var/www/html $ sudo mysql --user=root --password
> create user [email protected] identified by 'your_password';
> grant all privileges on *.* to [email protected];
> FLUSH PRIVILEGES;
> exit;
Install phpMyAdmin on Raspberry Pi
phpMyAdmin is a free software tool written in PHP, intended to handle the administration of MySQL using a web interface.
To install phpMyAdmin on a Raspberry Pi, type the following command into the terminal:
[email protected]:/var/www/html $ sudo apt install phpmyadmin -y
PHPMyAdmin installation program will ask you few questions. We’ll use the dbconfig-common.
- Select Apache2 when prompted and press the Enter key
- Configuring phpmyadmin? OK
- Configure database for phpmyadmin with dbconfig-common? Yes
- Type your password and press OK

Enable the PHP MySQLi extension and restart Apache2 for changes to take effect:
[email protected]:/var/www/html $ sudo phpenmod mysqli
[email protected]:/var/www/html $ sudo service apache2 restart
When you go to your RPi IP address followed by /phpmyadmin (in my case http://192.168.1.86/phpmyadmin), you’ll probably see the “Not Found” error page in your browser:

If that’s the case, you’ll have to move the phpmyadmin folder to /var/www/html, run the next command:
[email protected]:/var/www/html $ sudo ln -s /usr/share/phpmyadmin /var/www/html/phpmyadmin
Now, if you list the files, it should return the phpmyadmin folder:
[email protected]:/var/www/html $ ls
phpmyadmin

Reload your web page (http://192.168.1.86/phpmyadmin), your should see the login page for phpMyAdmin web interface::

Enter your defined username (it should be Username = root) and the password you defined during the installation.
Press the Go button to login. A new page loads:

That’s it! Your Raspberry Pi board is prepared with a LAMP server: Apache2, MySQL, PHP. We’ve also decided to include phpMyAdmin in this installation for an easier database management through a web interface.
Optional Step (but recommended)
To manage your web pages, you should change the permissions for your /var/www/html/ folder. To do this, run the following commands:
[email protected]:~ $ ls -lh /var/www/
[email protected]:~ $ sudo chown -R pi:www-data /var/www/html/
[email protected]:~ $ sudo chmod -R 770 /var/www/html/
[email protected]:~ $ ls -lh /var/www/
After running these commands, you’ll see something as follows:

Wrapping Up
We hope you found this guide useful! Your Raspberry Pi has a LAMP server with phpMyAdmin that allows you to build interesting IoT projects like these:
- ESP32/ESP8266 Publish Data to Raspberry Pi LAMP Server
- Visualize Your Sensor Readings from Anywhere in the World (ESP32/ESP8266 + MySQL + PHP)
- ESP32/ESP8266 Insert Data into MySQL Database using PHP and Arduino IDE
Learn more about Home Automation with the Raspberry Pi: Build a Home Automation System for $100
Thanks for reading.
Hi, all but completed this, however, I seem to have failed at the last hurdle. I cannot log in to phpMyAdmin with user Root, but I can log on as admin. However, having done so, I don’t have privileges to create a new database. Can you please advise…
Andrew, had the same problem.
Could you issue the following commnd in mysql:
SELECT user,authentication_string,plugin,host FROM mysql.user;
does that show an output in which there is an authentication plugin used for ‘root’?
If so, do the following:
ALTER USER [email protected] IDENTIFIED WITH mysql_native_password;
SET PASSWORD=PASSWORD(‘yourpassword’);
FLUSH PRIVILEGES;
That allowed me to log in as root
No, I don’t show a : “authentication plugin”, only “unix_socket”.
#mysql
MariaDB [(none)]> SELECT user,authentication_string,plugin,host FROM mysql.user;
Output:
| user | authentication_string | plugin | host |
| root | | unix_socket | localhost |
| phpmyadmin | | localhost |
Actually I have the same issue as Andrew: cant log in with root, but can log in with admin
seems solved, I put the solution under Andrews comment
By the way, looking at other guides, they suggest logging in with user phpmyadmin – whilst this login does work, it still doesn’t have privileges…
Hi Ed, sorry, can you please say where I should issue these commands. I’m completely new to sql, etc…
I can log in with user as phpmyadmin and password that i set previously.
What do you meant by still doesn’t have privileges. How to check and confirm the privileges ?
I’ve now sorted this 🙂
In answer to Ong – even though I could log into phpMyAdmin, it wouldn’t allow me to create a database – I basically had read only rights. There was a red warning cross symbol saying No Privileges.
On installing onto a new Pi 3A+ I realised I’d not launched the mysql server using “sudo mysql” and then entered the following code:
[email protected]:/var/www/html $ sudo mysql –user=root –password
> create user [email protected] identified by ‘your_password’;
> grant all privileges on *.* to [email protected];
> FLUSH PRIVILEGES;
> exit;
This then allowed me (logged in as andrew) to create the database and complete the project
thank’s 🙂
ed, thank you, your mysql mumbo jumbo worked for me
Obrigado me ajudou muito!
Can’t log in with either root or admin.
With root:
#1698 – Access denied for user ‘root’@’localhost’
! mysqli_real_connect(): (HY000/1698): Access denied for user ‘root’@’localhost’
With admin:
#1045 – Access denied for user ‘admin’@’localhost’ (using password: YES)
!mysqli_real_connect(): (HY000/1045): Access denied for user ‘admin’@’localhost’ (using password: YES)
Otherwise, fantastic job!!
Did some research on Ask Ubuntu and in 2018 someone suggested using “phpmyadmin” which works.
If you feel more adventurous, you can set up a RPi server with these components running in Docker containers. A South African guy called Graham Garner created a very convenient menu and supporting scripts to initially set up the software stack and manage the containers afterwards.
See https://sensorsiot.github.io/IOTstack/
Once this is in place, it is very easy to add additional containers from
https://hub.docker.com/
Disclaimer:
Totally new to installing and using db’s
Darn, I was getting all the for mentioned errors. And I implemented several of the suggested solutions, but, I was still getting the errors. So, I decided to do the old reboot trick and it worked. Wish I could say what exactly fixed it.
After rebooting, from the browser page, tried to login again and it failed when I used [email protected] and my password. I dropped the “@localhost”, which I had tried prior to the reboot, off the user name and only used “root” and the password. And up came the phpmyadmin home page. BTW, I never was able to login using “admin”
one thing I did figure out was, to verify if you are using the correct root password, you can re-issue the cmd:
“sudo mysql_secure_installation”.
If you just hit ENTER, you will get an error if the root password has been set somehow.
You can then type the password which you “think” is the correct one, if it is, the script continues and you can ^C’d out of it.
then I rebooted, tried to log
Best thing about a raspberry pi is you can do this tutorial over and over again :). I almost have this memorized. Thank you Ed for your work you put into this. I have become a little big less stressed in the shell!
Great tutorial. Just works! Thanks!