Serveur Web et WordPress sur Raspberry Pi

nginx_WP_titre

Pourquoi ?

Pour apprendre à faire et avoir son propre hébergement sur lequel on peut bidouiller, faire des audits de sécurité, tester des outils,… sans peur de tout casser ou de se faire taper sur les doigts par un hébergeur officiel et le tout à moindre coût.

La configuration choisie pour le serveur Web:

– Raspbian

– Nginx (moins gourmand qu’Apache)

– mySQL et PHP5

– pure-FTP

I – Installation et configuration de Raspbian

Démarrer le Raspberry avec un écran en HDMI et appuyer sur la touche majuscule pour accéder au mode installation.

Cocher Raspbian et cliquer sur Install.

A la fin de l’installation, le menu de configuration (raspi-config) apparaît. Dans les options d’internationalisation, basculer tout en français (langue fr-UTF8, timezone Europe / Paris et clavier french alternative). Dans les options avancées, activer (enable) le SSH ce qui permettra d’accéder au Raspberry à distance plus tard.

Rebooter.

Se connecter via le terminal : saisir le login (pi) puis le mot de passe (raspberry).

Pour que le serveur Web ait toujours la même adresse, terminer en passant le Raspberry en IP fixe. Pour cela éditer le fichier /etc/network/interfaces ( ligne de commande et éditeur nano).

pi@raspberrypi ~ $ sudo nano /etc/network/interfaces

Dans cet exemple, l’appareil est branché en filaire sur un réseau en 192.168.1.X avec une sortie vers Internet en 192.168.1.1, modifier donc l’interface eth0 en remplaçant :

iface eth0 inet manual

par

iface eth0 inet static
address 192.168.1.100
netmask 255.255.255.255
gateway 192.168.1.1

Sauvegarder (Control+O) et quitter (Control+X)

Redémarrer le service réseau pour que les modifications soient prises en compte

pi@raspberrypi ~ $ sudo service networking restart

Vérification

pi@raspberrypi ~ $ ifconfig

eth0 doit être en 192.168.1.100 – on peut accéder au Raspberry depuis n’importe quel poste du réseau en utilisant cette adresse.

A partir de là, manipuler directement sur le Raspberry ou depuis un poste en ssh (ssh pi@192.168.1.100).

Si le PC sur lequel on travaille est sous Linux, on peut lui expliquer que l’IP 192.168.1.100 est celle de raspberry.
– éditer le fichier /etc/hosts et ajouter la ligne 192.168.1.100 raspberry
– vérifier : ping raspberry
On pourra maintenant taper ssh pi@raspberry

II – Installation de Nginx (se prononce N-gine-x)

On peut effectuer une mise à jour de son Raspberry avant :

pi@raspberrypi ~ $ sudo apt-get update
pi@raspberrypi ~ $ sudo apt-get upgrade

Installation :

pi@raspberrypi ~ $ sudo apt-get install nginx
pi@raspberrypi ~ $ sudo service nginx start

Vérification : se connecter à l’IP 192.168.1.100 depuis un navigateur sur un ordinateur du réseau. La page Welcome to nginx ! doit s’afficher.

Par défaut, les fichiers du site web sont dans le répertoire /usr/share/nginx/www

Plutôt que de laisser les droits de ce répertoire à l’administrateur du système (root), les limiter à l’utilisateur Apache qui est défini dans le système (www-data):

pi@raspberrypi ~ $ sudo chown -R www-data:www-data /usr/share/nginx/www

Vérification :

pi@raspberrypi ~ $ ls -la /usr/share/nginx/

III – Installation de PHP

pi@raspberrypi ~ $ sudo apt-get install php5-fpm

Configurer ensuite nginx pour qu’il puisse interpréter le PHP

pi@raspberrypi ~ $ sudo nano /etc/nginx/sites-enabled/default

Décommenter certaines lignes pour avoir quelquechose qui ressemble à ce qui suit :

location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
# # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
#
# # With php5-cgi alone:
# fastcgi_pass 127.0.0.1:9000;
# # With php5-fpm:
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}

Sauvegarder (Control+O) et quitter (Control+X)

Redémarrage des services :

pi@raspberrypi ~ $ sudo service php5-fpm restart 
pi@raspberrypi ~ $ sudo service nginx restart

Vérification : pour cela créer un script PHP appelé phpinfo.php que l’on va exécuter ensuite :

pi@raspberrypi ~ $ sudo nano /usr/share/nginx/www/phpinfo.php

Dans ce fichier, copier / coller ce qui suit :

<?php
phpinfo();
?>

Sauvegarder et quitter.

Dans le navigateur d’un ordinateur du réseau, taper http://192.168.1.1/phpinfo.php pour vérifier qu’une page PHP contenant les caractéristiques du serveur apparait.

IV – Installation de la base de données mySQL et de phpMyAdmin

pi@raspberrypi ~ $ sudo apt-get install mysql-server mysql-client php5-mysql

Au cours de l’installation, il est demandé de créer un mot de passe pour l’administrateur de la base de données. A conserver précieusement et à noter pendant l’installation (il y aura plusieurs mots de passe à créer, à chaque fois différents pour des raisons de sécurité).

Utiliser l’administrateur système pour accéder à la base de données n’est pas recommandé d’un point de vue sécurité. Il faut créer un administrateur de la base. On créera aussi par la suite un utilisateur de la base par blog, forum, site Internet.Cela fait beaucoup de mots de passe à retenir mais cloisonner est bien plus sûr.

pi@raspberrypi ~ $ sudo mysql -u root -p

Saisir le mot de passe administrateur

Créer un utilisateur adminmysql avec le mot de passe choisi (on peut faire cela aussi avec phpMyAdmin)

mysql> GRANT ALL PRIVILEGES ON *.* TO adminmysql@localhost IDENTIFIED BY 'mot-de-passe' WITH GRANT OPTION;
mysql> FLUSH PRIVILEGES;

Vérification :

mysql> use mysql;
mysql> select * from user where user="adminmysql";
mysql> exit

Installation de phpMyAdmin (interface graphique qui permet d’administrer la base de données mySQL) :

pi@raspberrypi ~ $ sudo apt-get install phpmyadmin

Choisir Apache2 comme serveur à reconfigurer – la base étant déjà configurée, choisir non pour configurer la base de données de phpmyadmin avec dbconfig-common

Créer un lien vers phpmyadmin dans le répertoire du serveur Web :

pi@raspberrypi ~ $ sudo ln -s /usr/share/phpmyadmin /usr/share/nginx/www

Configuration terminée : pour accéder aux bases de données mySQL avec phpMyAdmin, saisir dans le navigateur d’un poste du réseau l’adresse suivante : http://192.168.1.1/phpmyadmin/index.php et s’authentifier avec les identifiants de l’administrateur créé plus haut.

V – Installation d’un serveur FTP

pi@raspberrypi ~ $ sudo apt-get install pure-ftpd

Ajout d’un utilisateur virtuel : plutôt que créer un utilisateur ftpuser dans ftpgroup pour créer les utilisateurs virtuels, utiliser l’utilisateur Apache www-data (id 33) qui a les droits sur /usr/share/nginx/www

pi@raspberrypi ~ $ sudo nano /etc/pure-ftpd/conf/MinUID

Ecrire 33 à la place de 1000 dans le fichier. Sauvegarder et quitter.

Pour que l’utilisateur virtuel puisse s’authentifier :

pi@raspberrypi ~ $ sudo ln -s /etc/pure-ftpd/conf/PureDB /etc/pure-ftpd/auth/50puredb

Création d’un utilisateur virtuel :

pi@raspberrypi ~ $ sudo pure-pw useradd ftpuser -u www-data -d /usr/share/nginx/www/

Saisir deux fois le mot de passe choisi.

Mise à jour de la base de données de Pure-FTPd après création de l’utilisateur :

pi@raspberrypi ~ $ sudo pure-pw mkdb

Redémarrage du service :

pi@raspberrypi ~ $ sudo service pure-ftpd restart

Vérification :

– Utiliser FileZilla

– Hôte : 192.168.1.100  /  Identifiant : ftpuser  /  Mot de passe : celui choisi lors de la création de ftpuser

On accède au répertoire /usr/share/nginx/www

VI – Dernière étape (!) : Installation de WordPress

Télécharger wordpress à l’adresse suivante : http://www.wordpress-fr.net/telechargements/

Dézipper l’archive sur sa machine en local

Se connecter en FTP au Raspberry avec FileZilla (voir ci-dessus).

Copier le dossier wordpress extrait de l’archive depuis la machine en local (à gauche) vers le répertoire web du Raspberry (à droite) juste en le faisant glisser.

Possibilité de le renommer avec un clic droit (remplacer par exemple wordpress par monsite)

Affiner la configuration de Nginx

En tapant http://192.168.1.100/wordpress, on obtient une erreur 403 Forbidden…  Aïe !

Rien à voir avec des droits. Nginx ne sait pas qu’il doit chercher et ouvrir index.php dans un répertoire web. On va lui expliquer !

Se connecter en SSH au Raspberry.

pi@raspberrypi ~ $ sudo nano /etc/nginx/sites-enabled/default

Ajouter index.php aux lignes suivantes pour obtenir la même chose :

root /usr/share/nginx/www;
index index.html index.htm index.php;

# Make site accessible from http://localhost/
server_name localhost;

location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ /index.html /index.php;

Tant qu’on y est, possibilité de configurer les pages d’erreur du serveur Web (erreurs HTTP client ou serveur – voir ici la correspondance des codes utilisés : https://fr.wikipedia.org/wiki/Liste_des_codes_HTTP)

On décommente certaines lignes et on ajoute les manquantes pour obtenir :

error_page 404 /404.html;
location = /404.html {
        root /usr/share/nginx/www;
}

# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
         root /usr/share/nginx/www;
}

ATTENTION : la page 50x.html existe déjà. Mais il faudra créer une page 404.html

Sauvegarder (Control+O) et quitter (Control+X).

Redémarrer le service nginx :

pi@raspberrypi ~ $ sudo service nginx restart

Installation de WordPress

– Création de la base de données

Sur le navigateur de sa machine, taper http://192.168.1.100/phpmyadmin – Entrer le nom de l’administrateur (adminmysql) et son mot de passe.

Cliquer sur Base de données – Entrer un nom de base (éviter wordpress : bof… d’un point de vue sécurité et au cas où on voudrait installer d’autres sites WordPress…**)

Quitter (icône dans la liste en haut à gauche)

– Installation proprement dite

Toujours dans le navigateur, saisir http://192.168.1.100/monsite – Maintenant on accède à la page de configuration.

Nom de la base de données : celui entré juste avant
Identifiant : adminmysql
Mot de passe : celui d'adminmysql
Adresse de la base de données : localhost
Préfixe des tables : wp_nomdemonsite_ (ne pas laisser wp_ pour les mêmes raisons que le nom de la base ci-dessus **)

Lancer l’installation

Saisir enfin les informations du site : nom du site, créer un administrateur du site avec son mot de passe (un de plus !) et une adresse de messagerie. Choisir ou non d’être indexé par les moteurs de recherche.

That’s all folks !!! Votre site Internet sous WordPress est installé sur votre Raspberry.

Pour y accéder : http://192.168.1.100/monsite et pour l’administrer http://192.168.1.100/monsite/wp-admin