Raspberry Pi LAMP Server

May 07, 2018

Things used in this project

Recommended:

As it is a server, you may want to run it headless (i.e., without display, no GUI). Hence, you could download the Noobs lite version and install the minimum Raspbian OS (without Desktop GUI). Add an empty file 'ssh' to the root folder of your mini sd card to enable SSH access. Find your pi's IP address from your router, then you can access it headlessly by

ssh pi@your-pi-local-ip-address

Default password is 'raspberry'. Change your 'pi' password as soon as you get in

sudo passwd pi

Optional:

Install Apache web

Run the following commands:

sudo apt-get install apache2 -y
sudo nano /etc/apache2/sites-enabled/000-default.conf 

You must update the domain name of the website you are building at this time. If you are content to host this internally, then you may skip this, but you will always have to use the IP address of the Raspberry Pi to access the site.

ServerName example.com 
ServerAdmin [email protected] 

Then enable apache and check status by these commands:

sudo systemctl enable apache2
sudo systemctl start apache2
sudo systemctl status apache2

You can test the web server by enter the address http://localhost or the IP address of your Pi into Web Browser. You should see this in your browser window:

Apache2 Debian Default Page

Install PHP

Install the PHP and Apache packages with the following command:

sudo apt-get install php -y
sudo service apache2 restart
sudo nano /var/www/html/info.php

Add the following into the newly created file:

<?php
phpinfo();
?>

Ctrl-X to exit, Y to save. Test that you have successfully set up PHP by entering your browser and using http://localhost/info.php

sudo mv /var/www/html/index.html /var/www/html/index.old

Install MySQL

sudo apt-get install mysql-server php-mysql -y
sudo systemctl start mysql
sudo systemctl status mysql
sudo service apache2 restart
sudo mysql_secure_installation

I changed the root password, removed test database, and removed the anonymous user access. The rest I did not change. You can test that MySQL is running by entering:

sudo mysql -u root -p

Type quit to exit MySQL.

SSL Encryption Certificate with Let's Encrypt

Also, give Lets Encrypt a go!

sudo apt-get install git
sudo git clone https://github.com/letsencrypt/letsencrypt /opt/letsencrypt
cd /opt/letsencrypt
./letsencrypt-auto --apache -d example.com -d www.example.com

To renew the certificate (when you receive a reminder email that your certificate is expiring), I just ran:

cd /opt/letsencrypt
./letsencrypt-auto renew

Optional: Install PhpMyAdmin

During the setup of PHPMyAdmin, you will be asked some questions; choose Apache and No to the DB Common.

sudo apt-get -y install phpmyadmin
sudo nano /etc/apache2/apache2.conf

You must add an include to the end of the apache.conf file:

Include /etc/phpmyadmin/apache.conf

Ctrl-X to exit, Y to save.

sudo systemctl restart apache2.service

You are no longer able to log in to PHPMyAdmin using root, so you will need to create an alternate user with full admin rights as follows:

sudo mysql -u root -p
CREATE USER 'admin'@'localhost' IDENTIFIED BY 'some_pass';
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost' WITH GRANT OPTION;
FLUSH PRIVILEGES;
quit

Then you must reference the new user name in the config file as follows:

sudo nano /etc/dbconfig-common/phpmyadmin.conf

Replace phpmyadmin user name with just admin:

# dbc_dbuser: database user
#       the name of the user who we will use to connect to the database.
dbc_dbuser='admin'

To access PHPMyAdmin, you can access using the new link: http://your-IP-address/phpmyadmin

Enjoy!

##What's next

With this minimal LAMP server you can setup:

  • WordPress: Web content management
  • Cloud storage: Owncloud, Nextcloud, Seafile, etc.
  • Email Server
  • Git Server: Bitbucket, Gitlab, etc.
  • Media Server: Plex, Emby, Kodi, etc.
  • Torrent server
  • SVN
  • Jira
  • etc...


Have a project in mind?
Let's create something together.