Installation du serveur Apache avec Raspbian
Apache, c’est quoi ?
Tout d’abord, nous allons installer Apache, qui est le serveur web en tant que tel.
Quand on parle de serveur web, on pense souvent à la machine, mais ce terme désigne aussi le logiciel qui permet à la machine d’analyser les requêtes d’un utilisateur (sous forme http), et de retourner le fichier correspondant à la requête (ou une erreur si le fichier n’est pas trouvé, ou la requête mal formulée).
Dans le cadre d’Apache, c’est donc du logiciel que l’on parle.
À l’heure actuelle, Apache est le serveur web le plus utilisé, avec environ 60 % de parts de marché. Apache possède même sa propre licence, utilisée par de nombreux autres projets. De plus, l’utilisation massive d’Apache (devenu le standard des serveurs web), couplée à sa forte popularité, à amener à une formidable abondance de documentation, de cours, et autres livres traitant de son utilisation, depuis l’installation jusqu’à la sécurisation.
Que ce soit pour la Raspberry Pi et Raspbian, ou pour une machine plus généraliste, Apache est donc un choix sûr, et les compétences que vous pourrez acquérir sur le sujet vous seront toujours utiles.
Installation d’Apache
Avant d’installer le serveur, assurons nous d’avoir une machine bien à jour. Pour ce faire nous devons posséder les droits administrateur, soit en étant connecté en root, soit via la commande sudo.
sudo apt update sudo apt upgrade sudo apt update
Une fois la Raspberry Pi à jour, nous allons installer le serveur Apache.
sudo apt install apache2
Au passage, nous allons en profiter pour donner des droits au dossier d’apache qui vous permettra de facilement administrer les sites. Pour cela, lancez les commandes suivantes :
sudo chown -R pi:www-data /var/www/html/ sudo chmod -R 770 /var/www/html/
Vérifier qu’Apache fonctionne
Une fois l’installation terminée, nous pouvons tester qu’Apache fonctionne correctement en nous rendant sur l’adresse de la Raspberry.
Pour cela, il faut tenter d’accéder à la Raspberry depuis le port 80 (ce port n’étant pas encore ouvert depuis l’extérieur, il faudra le faire depuis la Raspberry elle-même). Ne vous inquiétez pas, c’est très facile. Il vous suffit d’ouvrir le navigateur web de la Raspberry (par défaut Midori sous Raspbian), et d’aller à l’adresse « http://127.0.0.1 ». Vous devriez alors obtenir une page avec un message du genre « It works! » et plein d’autre texte.
Si jamais vous ne possédez pas d’interface graphique sur votre Raspbian, ou que vous utilisez le SSH pour vous connecter à votre Raspberry, vous pouvez utiliser la commande suivante :
wget -O verif_apache.html http://127.0.0.1
Cette commande va enregistrer le code HTML de la page dans le fichier « verif_apache.html » dans le répertoire courant.
Vous n’avez donc plus qu’à lire le fichier avec la commande
cat ./verif_apache.html
Si vous voyez marqué à un endroit dans le code « It works! », c’est qu’Apache fonctionne.
Apache utilise le répertoire /var/www/html comme racine pour votre site. Cela signifie que quand vous appelez votre Raspberry sur le port 80 (http), Apache cherche le fichier dans /var/www/html.
Par exemple, si vous appelez l’adresse http://127.0.0.1/example, Apache cherchera le fichier example dans le répertoire /var/www/html.
Pour ajouter de nouveaux fichiers, sites, etc., vous devrez donc les ajouter dans ce répertoire.
Vous pouvez dès à présent utiliser votre Raspberry pour faire un site en HTML, CSS et JavaScript pur, en interne.
Cependant, vous voudrez sans doute rapidement permettre des interactions entre le site et l’utilisateur. Par exemple permettre à l’utilisateur de s’inscrire, etc. Pour cela, vous allez avoir besoin de PHP.
Installation de PHP sur la Raspberry
Qu’est-ce que PHP ?
Tout d’abord, il faut savoir que le PHP est un langage interprété. Et comme dans le cas des serveurs, l’acronyme PHP peut avoir plusieurs sens. En fait, quand l’on parle de PHP, on peut parler soit du langage, soit de l’interpréteur.
Ici, quand nous parlons d’installer PHP, cela signifie que nous allons installer l’interpréteur, afin d’utiliser le langage.
PHP (le langage cette fois) est principalement utilisé pour rendre un site dynamique, c’est-à-dire que l’utilisateur envoie des informations au serveur qui lui renvoie les résultats modifiés en fonction de ces infos. A contrario, un site statique ne s’adapte pas aux informations fournies par un utilisateur. Il est enregistré sous forme de fichier une fois pour toute, et livrera toujours le même contenu.
PHP est libre, et maintenu par la fondation PHP, ainsi que l’entreprise Zend, et diverses autres entreprises (il est à noter que Zend est aussi l’auteur du célèbre framework Zend PHP, très utilisé et reconnu dans le monde de l’entreprise).
C’est un des langages de programmation les plus utilisés, et c’est même le plus utilisé pour la programmation destinée au web, avec environ 79 % de parts de marché.
Là encore, l’ensemble des compétences que vous pourrez acquérir, sur le langage ou sur l’installation et la configuration de l’interpréteur, vous seront toujours utiles. Nous ne pouvons donc que vous conseiller d’apprendre le PHP, qui est vraiment un langage merveilleux et trop souvent sous-estimé.
Installer PHP
On va encore une fois faire appel à l’administrateur pour installer PHP avec la ligne de commande.
sudo apt install php php-mbstring
Vérifier que PHP fonctionne
Pour savoir si PHP fonctionne correctement, ce n’est pas très compliqué, et la méthode est relativement proche de celle employée pour Apache.
Vous allez en premier lieu supprimer le fichier « index.html » dans le répertoire « /var/www/html ».
sudo rm /var/www/html/index.html
Puis créez un fichier « index.php » dans ce répertoire, avec cette ligne de commande
echo "<?php phpinfo(); ?>" > /var/www/html/index.php
À partir de là, le fonctionnement est le même que pour la vérification d’Apache. Vous tentez d’accéder à votre page, et vous devriez avoir un résultat proche de cette image (si vous n’avez pas d’interface, utilisez la même méthode que précédemment, et cherchez les mots « PHP Version »).

Tableau généré par la commande phpinfo sur une raspberry.
Une base de données MySQL pour votre serveur
Un SGBD c’est quoi ? Pourquoi MySQL ?
Maintenant que nous avons mis en place PHP, vous allez sans doute vouloir stocker des informations pour les utiliser dans vos sites. Pour cela, on utilise le plus souvent des bases de données.
Nous allons donc mettre en place un SGBD (Système de Gestion de Bases de Données), à savoir MySQL.
MySQL est un SGBD libre, puissant, massivement utilisé (environ 56 % de parts de marché des SGBD libres). Là encore, MySQL est tellement un incontournable du développement, quelle qu’en soit la branche, que vous devez absolument l’apprendre et le maitriser.
Installer MySQL
Pour ce faire, nous allons installer mysql-server et php-mysql (qui servira de lien entre php et mysql)
sudo apt install mariadb-server php-mysql
Vérifier que MySQL marche correctement
Pour vérifier le fonctionnement de MySQL, cette fois nous utiliserons uniquement la ligne de commande. Pour cela, nous allons simplement nous connecter via la commande :
sudo mysql --user=root
Nous allons maintenant supprimer l’utilisateur root et créer un nouvel utilisateur root, car celui par défaut n’est utilisable que par le compte administrateur du système, et n’est donc pas accessible aux script PHP du serveur.
Pour cela, une fois connecté à MySQL, lancez les commandes suivantes (remplacez password par le mot de passe de votre choix) :
DROP USER 'root'@'localhost';
CREATE USER 'root'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTIONS;
flush privileges
Vous avez donc maintenant un serveur web, relié à PHP et à MySQL. Soit tout ce qu’il faut. Vous pouvez donc vous arrêter ici.
(Lors de vos prochaine connections, vous pourrez donc utilisez la commande mysql --user=root --password=votremotdepasse).
PHPMyAdmin, gérer facilement ses bases de données
Toutefois, vous pourriez vouloir une interface un peu plus simple pour administrer vos bases de données qu’une simple console MySQL. Pour cela, vous pouvez installer PHPMyAdmin.
PHPMyAdmin, c’est quoi ?
PHPMyAdmin est une application développée en PHP, et qui vise à fournir une interface simplifiée pour MySQL.
Elle vous permet par exemple de voir rapidement et de façon lisible le contenu de votre base de données, ou de la manipuler sans avoir besoin de faire vous-mêmes vos requêtes MySQL.
Installer PHPMyAdmin
L’installation de PHPMyAdmin n’est pas du tout obligatoire. Nous ferons ici une installation sans paramètres de sécurité particuliers.
L’installation de PHPMyAdmin se fait très simplement, via le gestionnaire de paquets, en utilisant la commande suivante :
sudo apt install phpmyadmin
PHPMyAdmin vous posera plusieurs questions concernant ses réglages.
Comme nous avons déjà configurez la base de données, choisissez no à la question concernant l’utilisation de dbconfig-common. Choisissez d’utiliser PHPMyAdmin pour un serveur Apache. Pour le mot de passe root, il s’agit de celui que vous aviez utilisé pour MySQL.
Vous devez aussi activer l’extension mysqli si cela n’est pas encore fait. Pour cela, utilisez les commandes ci-dessous.
sudo phpenmod mysqli sudo /etc/init.d/apache2 restart
Vérifier l’installation de PHPMyAdmin
Pour vérifier le bon fonctionnement de PHPMyAdmin, vous allez simple tenter d’y accéder, en utilisant l’adresse de votre Raspberry suivi de /phpmyadmin. Par exemple, en local ce sera « http://127.0.0.1/phpmyadmin ».
Si jamais vous avez une erreur, cela peut venir du fait que PHPMyAdmin se soit installé dans un autre dossier. Dans ce cas, essayez la commande
sudo ln -s /usr/share/phpmyadmin /var/www/html/phpm
========== Comment changer le mot de passe root perdu de MySQL ========
/etc/init.d/mysql stop
Puis on va relancer MySQL sans mot de passe
mysqld_safe --skip-grant-tables &
On va ensuite se connecter à MySQL avec le client en ligne de commande
mysql -u root
Une fois que vous avez l’invite de commande, entrez les commandes suivantes à la suite en changeant « votrenouveaumotdepasse » par le mot de passe de votre choix…
mysql> use mysql;
mysql> update user set password=PASSWORD(é?votrenouveaumotdepasseé?) where user=’root’;
mysql> flush privileges;
mysql> quit
Arrêtez ensuite à nouveau MySQL
/etc/init.d/mysql stop
Et relancez le…
/etc/init.d/mysql start
Connectez vous ensuite avec le client MySQL
mysql -u root -p
Et on vous demandera alors votre mot de passe. Tapez celui que vous avez précisé un peu avant et le tour sera joué !
========= No Privileges To Create MySQL Database on PHPMyAdmin=============
Setting MySQL/MariaDB root password
$ sudo mysql_secure_installation
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!
In order to log into MariaDB to secure it, we'll need the current
password for the root user. If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.
Enter current password for root (enter for none):
Just press Enter because we just installed MySQL/MariaDB server. Next step is:
OK, successfully used password, moving on...
Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.
Set root password? [Y/n]
Press Y and enter your password twice. The passwords aren’t visible on the screen. This is normal behavior.
Set root password? [Y/n] Y
New password:
Re-enter new password:
Password updated successfully!
Reloading privilege tables..
... Success!
By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
hem. This is intended only for testing, and to make the installation
go a bit smoother. You should remove them before moving into a
production environment.
Remove anonymous users? [Y/n]
Press Y to remove anonymous users.
Remove anonymous users? [Y/n] Y
... Success!
Normally, root should only be allowed to connect from 'localhost'. This
ensures that someone cannot guess at the root password from the network.
Disallow root login remotely? [Y/n]
Press Y to disallow root login remotely.
Disallow root login remotely? [Y/n] Y
... Success!
By default, MariaDB comes with a database named 'test' that anyone can
access. This is also intended only for testing, and should be removed
before moving into a production environment.
Remove test database and access to it? [Y/n]
Press Y to remove test database and user
Remove test database and access to it? [Y/n] Y
- Dropping test database...
... Success!
- Removing privileges on test database...
... Success!
Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.
Reload privilege tables now? [Y/n]
Press Y to reload privilege tables. This is the last step of MySQL/MariaDB interactive installation process.
Reload privilege tables now? [Y/n] Y
... Success!
Cleaning up...
All done! If you've completed all of the above steps, your MariaDB
installation should now be secure.
Thanks for using MariaDB!
hat’s it. Installation process is complete. Next step we will try to connect to our newly installed server.
Connect to Database
Here we are, the moment of truth. Now let’s try connecting to our server using the client installed at the same time as the server. Type the following command:
$ mysql -u root -p
The -p parameter means it will ask for password. Enter your password and if everything is installed correctly, you will see:
$ mysql -u root -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 9
Server version: 10.1.23-MariaDB-9+deb9u1 Raspbian 9.0
Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
Congratulations, your MySQL/MariaDB server is installed successfully. Have fun!
Access Denied Error
If you tried to login with correct credentials but it keeps saying like this:
ERROR 1698 (28000): Access denied for user 'root'@'localhost'
You can try to disable MySQL from trying to authenticate root user using plugin:
$ sudo mysql -u root
[mysql] use mysql;
[mysql] update user set plugin='' where User='root';
[mysql] flush privileges;
[mysql] \q