Perhaps you are wondering why use a Raspberry as a web server, rather than using services providers specialized in web hosting?
Firstly, from an economic point of view, web hosting services are not free and you have to pay every month / year. Unlike the Raspberry which has an initial cost of around 30gbp plus the cost of the power consumption that is similar to charging a smartphone.
In addition, by choosing Raspberry, you have the possibility to modify your services like you want (examples: the size of the disk, the hosting of Database, etc.), which is generally not the case with specialized hosts , Which often sell shared hosting with low configuration capacity.
The question that now arises is, how to make a web server on Raspeberry Pi ?
WHAT IS APACHE?
First, we will install Apache, which is the web server therefore the backbone of your Raspberry Pi Web Server.
When we speak of a web server, we often think about the machine, but this term also refers to the software that allows the machine to analyse user requests (in http form), and to return the file corresponding to the request (Or an error if the file isn't found, or the query incorrectly formulated).
As part of Apache, it's software that we talk about.
At the moment, Apache is the most used web server, with about 60% market share. Apache has its own license, used by many other projects. In addition, the massive use of Apache (which has become the standard for web servers), coupled with its high popularity, has led to a tremendous abundance of documentation, courses, and other books dealing with its use, and his security.
Whether it is for the Raspberry Pi and Raspbian, or for a more general-purpose machine, Apache is therefore a safe choice, and the skills you will be able to acquire on the subject will always be useful.
Before installing the server, make sure we have an up-to-date machine. To do this we must have administrator rights, because of the sudo command we will use.sudo apt
By the way, we'll take advantage of it to give rights to the apache file that you can easily manage your sites. To do this, run the following commands:sudo chown -R pi:www-data /var/www/html/
sudo chmod -R 770 /www/html/
Check if Apache is working
Once the installation completed, we can test that Apache is working properly by going to the Raspberry address.
To do this, it's necessary to try to access to the Raspberry from port 80. Do not worry, it's very easy. Simply open the Raspberry web browser, and go to "http://127.0.0.1". You should then get a page with a message like "It works! "And plenty of other text.
If you do not already have a GUI on your Raspbian, or you use SSH to connect to your Raspberry, you can use the following command:wget -O check_apache.html http://127.0.0.1
This command will save the HTML code of the page in the file "check_apache.html" in the current directory.
So you only have to read the file with the commandcat ./check_apache.html
If you see marked at a location in the code "It works! " is that Apache is working.
Apache uses the directory "/var/www/html" as the root for your site. This means that when you call your Raspberry on port 80 (http), Apache looks for the file in "/var/www/html".
For example, if you call the address "http://127.0.0.1/example", Apache will look for the "example" file in the "/var/www/html" directory.
To add new files, sites, etc., you will need to add them to this directory.
However, you may want to quickly allow interactions between the site and the user. For example, to allow the user to register, etc. For this, you are going to need PHP.
PHP INSTALLATION ON YOUR RASPBERRY PI
What is PHP ?First of all, you should know that PHP is an interpreted language. And as in the case of servers, the acronym PHP can have several meanings. In fact, when we talk about PHP, we can talk about either the language or the interpreter.
Here, when we talk about installing PHP, it means that we will install the interpreter, in order to use the language.
PHP (the language this time) is mainly used to make a site dynamic, that is to say that the user sends information to the server which returns the modified results according to this information. Conversely, a static site doesn't adapt to information provided by a user. It's saved as a file once for all, and will always deliver the same content.
PHP is free, and maintained by the PHP Foundation, as well as Zend Enterprise, and various other companies (it should be noted that Zend is also the author of the famous Zend PHP framework, widely used and recognized in the world of business).
It's one of the most widely used programming languages, and it is even the most used for web programming, with about 79% market share.
Again, all the skills you can acquire, on the language, or on the installation and configuration of the interpreter, will always be useful. So we can only advise you to learn the PHP, which is really a wonderful language and too often underestimated.
HOW TO INSTALL PHP
We will again use the administrator to install PHP with the command line.sudo apt install php php-mbstring
To know if PHP is working properly, it's not very complicated, and the method is quite similar to the one used for Apache.
You will first delete the file "index.html" in the directory "/var/www/html".sudo rm /var/www/html/index.html
Then create an "index.php" file in this directory, with this command lineecho "" > /var/www/html/index.php
From there, the operation is the same as for the Apache check. You try to access your page which will display the PHP logo, version, etc (if you do not have an interface, use the same method as before, and look for the words "PHP Version").
Table generated by the phpinfo command on a raspberry.
A MySQL DATABASE FOR YOUR SERVER
A DBMS what is it? Why MySQL?
Now that we have set up PHP, you will probably want to store information for use in your sites. For this purpose, databases are most often used.
We will therefore set up a DBMS (Database Management System), namely MySQL.
MySQL is a free, powerful, massively used DBMS (about 56% market share of free DBMS). Here again, MySQL is so essential to development, whatever the language, that you must absolutely learn and master it, with this book for example.
HOW TO INSTALL MYSQL
To do this, we will install mysql-server and php-mysql (which will serve as a link between php and mysql)sudo apt install mysql server php-mysql
Verify that MySQL is working correctly
To check the operation of MySQL, this time we will only use the command line. To do this, we will simply connect via the command:sudo mysql --user=root
We will no delete the default mysql root user and create a new mysql root user, because the default one can only be used with Linux root account, and so not available for the webserver and php scripts.
To do so, once your connect to MySQL, simply run thoses commands (replace password with the password you want) :DROP USER 'root'@'localhost';
CREATE USER 'root'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost'
So you now have a web server, connected to PHP and MySQL. That's all it takes.
(On your nexts connections, you will be able to connect to mysql without using sudo, with the command mysql –user=root –password=yourmysqlpassword).
The installation of PHPMyAdmin is absolutly not necessary. In this installation, we will not take care about any special security settings !
The PHPMyAdmin installation is pretty quick and easy, we simply have to use the packet manager with this command :sudo apt install phpmyadmin
PHPMyAdmin installation program will ask you few question. About the dbconfig-common part, choose to not use it (as we have already configure our database). About the server to configure PHPMyAdmin for, choose Apache. And the root password is the one you set for MySQL.
Check that PHPMyAdmin is working properly
To check that PHPMyAdmin works, you will simply try to access it, using the address of your Raspberry followed by /phpmyadmin. For example, locally it will be http://127.0.0.1/phpmyadmin
If you still get an error, it could be because PHPMyAdmin has moved to another directory. In this case, try the commandsudo ln -s /usr/share/phpmyadmin /var/www/html/phpmyadmin
Now, we can access to PHPMyAdmin from Raspberry Pi's browser, with the url : http://127.0.0.1/phpmyadmin
MAKING THE SERVER THE SERVER ACCESSIBLE FROM THE WEB
Your web server is ready. However, you probably can not access it from the internet. Indeed, it would be necessary for that your modem to redirects the requests to your Raspberry, the good ports.
To put these redirections in place, and even get a URL, you should look to DynDNS and port forwarding !