[[raspberrypi:linux:raspilinux|{{ :iconemaison.jpg?nolink&25|Sommaire Raspberry Pi sous Linux}}]]
===== Rpi - Installer un serveur (Apache - PHP - mySQL) =====
[Mise à jour le 9/7/2024]
=== Sources ===
* Tutoriel sur Raspberry Pi FR : "**Installer un serveur Web sur votre Raspberry**"
=== Lectures connexes ===
* Documentation du serveur Apache
* Manuel de PHP
* phpMyAdmin Bringing MySQL to the web
* [[web:accueilweb|Bienvenue sur WebPEM]] - Concevoir un site Web (côté serveur)
=== Mots-clés ===
* **serveur HTTP**, **PHP**, **SQL**, **SQLi**, **mySQL**
----
==== 1. Apache HTTP Server ====
{{ :raspberrypi:linux:apache2.jpg?nolink&150|}}
Le logiciel libre Apache HTTP Server est un serveur HTTP créé et maintenu au sein de la fondation Apache. Jusqu'en avril 2019, ce fut le serveur HTTP le plus populaire du World Wide Web. Il est distribué selon les termes de la licence Apache. Wikipédia
\\
=== 1.1 Mise à jour ===
sudo apt update && sudo apt upgrade -y # A entrer dans une console (mise à jour)
sudo apt update # Vérification de la mise à jour
\\
=== 1.2 Installation ===
* **Ressource** : pour désinstaller Apache voir fremio84
sudo apt install apache2 -y
\\
=== 1.3 Affectation des droits ===
* **Ressource** : "Les utilisateurs et les droits" sur Openclassrooms.
# chown -R [UTILISATEUR]:[GROUPE] Répertoire
# -R change les modes de tous les fichiers dans les sous-répertoires de manière récursive.
sudo chown -R pi:www-data /var/www/html/ # l'utilisateur pi devient propriétaire de /var/www/html/
# www-data devient le groupe avec les droits sur /var/www/html/
sudo chmod -R 770 /var/www/html/ # pi et www-data ont tous les droits sur /var/www/html/, les autres aucun
Exemple
{{ :raspberrypi:linux:droits.png?nolink |}}
* **Lecture de la version**
apt-cache policy apache2
# Exemple d'affichage obtenu
# apache2:
# Installé : 2.4.25-3+deb9u9
# Candidat : 2.4.25-3+deb9u9
# Table de version :
# *** 2.4.25-3+deb9u9 500
# 500 http://raspbian.raspberrypi.org/raspbian stretch/main armhf Packages
# 100 /var/lib/dpkg/status
\\
=== 1.4 Affichage de la page d'accueil dans un navigateur ===
Entrer l'**@IP** du Raspberry dans un navigateur pour afficher la page ci-dessous.
{{ :raspberrypi:linux:headerapache.png?nolink&600 |}}
Apache utilise le répertoire **/var/www/html** comme **racine** pour le **site**. Cela signifie que quand on s'adresse au Raspberry sur le port 80 (HTTP), Apache cherche le fichier dans /var/www/html.
//Exemple// : si on entre l’adresse http://127.0.0.1/example, Apache cherchera le fichier example dans le répertoire /var/www/html.
Pour accéder aux fichiers, sites, etc., on doit les ajouter dans **/var/www/html**.
\\
{{ :raspberrypi:linux:php7.png?nolink&120|}}
==== 2. Langage PHP ====
PHP (officiellement, ce sigle est un acronyme récursif pour **PHP Hypertext Preprocessor**) est un langage de scripts généraliste et Open Source, spécialement conçu pour le développement d'applications Web côté serveur. Il peut être intégré facilement au HTML.
\\
=== 2.1 Installation ===
L'installation de PHP est vérifiable en effectuant le test du §2.4
sudo apt install php php-common -y # installe les extensions communes (bz2, calendar, Core, ctype,
# curl, date, etc.)pour les paquets PHP
\\
=== 2.2 D'autres extensions ===
sudo apt -y install php-mbstring # nécessaire pour le stockage et l'affichage des caractères multioctets
\\
=== 2.3 Version ===
php -v
# Exemple d'affichage obtenu
# PHP 7.3.11-1~deb10u1 (cli) (built: Oct 26 2019 14:14:18) ( NTS )
# Copyright (c) 1997-2018 The PHP Group
# Zend Engine v3.3.11, Copyright (c) 1998-2018 Zend Technologies
# with Zend OPcache v7.3.11-1~deb10u1, Copyright (c) 1999-2018, by Zend Technologies
\\
=== 2.4 Test ===
Créer un fichier index.php dans /var/www/html/ avec **touch** et y placer le code ci-dessous avec **nano**. Le tester dans un navigateur.
Une page ressemblant à la copie d'écran ci-dessous doit s'afficher.
{{ :raspberrypi:linux:phpinfo.png?nolink |}}
{{ :raspberrypi:linux:curl.png?nolink |}}
\\
==== 3. Installation d'une base de données ====
{{ :raspberrypi:linux:mariadb.png?nolink&150|}}
* **Installation de MariaDB (MySQL)**
MariaDB est un système de gestion de base de données édité sous licence GPL. Il s'agit d'un fork communautaire de **MySQL** : la gouvernance du projet est assurée par la fondation MariaDB, et sa maintenance par la société Monty Program AB, créateur du projet. Wikipédia
sudo apt install mariadb-server php-mysql -y # on installe mariadb-server et php-mysql
# (qui servira de lien entre php et mysql)
* **Vérification**
sudo mysql --user=root # Connexion à la base
# Exemple d'affichage obtenu
# Welcome to the MariaDB monitor. Commands end with ; or \g.
# Your MariaDB connection id is 47
# Server version: 10.3.17-MariaDB-0+deb10u1 Raspbian 10
# Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
# Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
# MariaDB [(none)]>
* **Création d'un nouvel utilisateur 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 scripts PHP du serveur.
Pour cela, une fois connecté à mariaDB (invite MariaDB[(none)], lancez les commandes suivantes (remplacez password par le mot de passe de votre choix) :
DROP USER 'root'@'localhost'; # Suppression de root
CREATE USER 'root'@'localhost' IDENTIFIED BY 'password'; # password à remplacer
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION;
# Se déconnecter avec Ctrl-C
Pour se connecter, on utilisera la commande **mysql --user=root --password=motdepasse**. Pour se déconnecter : **Ctrl-C**
Un lien pour voir comment **changer les mots de passe** des utilisateurs et de root ici
\\
==== 4. PHPMyAdmin, gérer facilement ses bases de données ====
{{ :raspberrypi:linux:phpmyadmin.jpg?nolink&150|}}
PHPMyAdmin est une application développée en PHP qui vise à fournir une **interface simplifiée** pour **MariaDB** (MySQL).
Elle permet notamment de voir le contenu d'une base de données, ou de la manipuler sans avoir besoin de faire des requêtes MySQL.
* **Installation**
sudo apt install phpmyadmin -y
* **Réglages**
Choisir l'utilisation de PHPMyAdmin pour un serveur Apache.
{{ :raspberrypi:linux:installeapache.png?nolink&500 |}}
{{ :raspberrypi:linux:installeapache2.png?nolink&500 |}}
Comme la base de données a déjà été configurée, choisir "**NON**" à la question concernant l’utilisation de //**dbconfig-common**//.
{{ :raspberrypi:linux:installeapache3.png?nolink |}}
**Le mot de passe root** est celui défini pour **MariaDB** (MySQL).
Si nécessaire, activer l’extension **mysqli** avec les commandes suivantes :
sudo phpenmod mysqli
sudo /etc/init.d/apache2 restart
***Vérification**
Pour vérifier le bon fonctionnement de PHPMyAdmin, il suffit de s'y connecter avec l'adresse du Raspberry.
//Exemples//
127.0.0.1/phpmyadmin # sur le Raspberry
192.168.x.y/phpmyadmin # sur un réseau local
**Si une erreur se produit**, c'est peut-être dû au fait que PHPMyAdmin est installé dans un autre dossier. Dans ce cas, entrer la commande ci-dessous.
# Création d'un lien symbolique (-s) entre la source et la destination
sudo ln -s /usr/share/phpmyadmin /var/www/html/phpmyadmin
La page de connexion ci-dessous doit s'afficher dans le navigateur.
{{ :raspberrypi:linux:phpmyadmin.png?nolink&300 |}}
\\
==== 5. Extensions pour Apache ====
=== 5.1 PHP cURL ===
* **Documentation** sur le site PHP.
**cURL** est un outil en ligne de commande qui permet de transférer des données depuis ou vers un serveur. Cet outil prend en charge divers protocoles réseau tels que HTTP, HTTPS, FTP, SFTP, SCP, etc. Curl peut être utilisé pour automatiser des tâches Web, télécharger des fichiers, envoyer des requêtes HTTP, pour l'exploration Web, etc. Wikipédia
cURL est installé avec les **extensions communes** en exécutant la commande //sudo apt install php-common// (§2.1).