SPARQL Protocol and RDF Query Language/Travail pratique/Faire un serveur Web
Pourquoi faire un serveur Web ?
modifierDans ce TP, nous allons installer un serveur Web fonctionnel classique qui nous servira de base dans les prochains TP pour utiliser SPARQL.
À savoir avant de commencer
modifierOn peut mettre en place un serveur de deux manières : comme une recette de cuisine ou comme un chimiste.
Le chimiste va essayer de comprendre ce qu’il fait avant de le faire. Le cuisinier va dérouler sa recette en espérant que ça fonctionne.
Si vous voulez suivre la recette, vous pouvez passer à la partie suivante, sinon je vous conseille de relire quelques articles de Wikipédia.
C'est quoi un serveur ? Et un client ?
modifierLire l’article Client Serveur de Wikipédia
C'est quoi une architecture trois tiers ?
modifierLire l’article Architecture trois tiers de Wikipédia
C'est quoi un serveur HTTP et un serveur Web ?
modifierLire l’article sur le protocole HTTP de Wikipédia
Un serveur Web utilise le protocole HTTP, cela signifie qu’il utilise :
- le TCP comme couche de transport
- le port 80 (443 pour HTTPS)
Ces deux informations sont indispensables pour configurer votre Firewall et ainsi ouvrir un serveur Web.
De manière générale, la configuration d'un service HTTP pose souvent problème :
- Mauvaise configuration DNS
- Problème de Firewall
- Etc.
Questions qu'on doit se poser avant de faire UN site Web
modifier- Ce site Web est-il visible uniquement sur mon PC de développement ?
- Mon PC de développement a-t-il une IP fixe ou dynamique ?
- Ce site Web est-il visible de l’extérieur ou uniquement dans mon intranet ?
- Si l'ordinateur a une IP dynamique, s’assurer que le nom de l'ordinateur est bien résolu par le serveur DNS de votre réseau
- Si l'ordinateur a une IP fixe, vous pouvez faire un serveur Web sans vous soucier immédiatement du DNS
- Ce site Web est-il visible de l’extérieur ?
- Quelle IP fixe aura mon serveur ?
- Quel nom de domaine aura mon serveur ?
- Mon entreprise a-t-elle déjà un nom de domaine ?
- Demander un sous-domaine ?
Question à se poser avant de faire DES sites Web
modifierUn serveur n’a qu’un seul port 80. En pratique pour héberger plusieurs sites Web sur un serveur, il faut :
- Attribuer au site Web un autre port
- Redirection à faire par un autre composant réseau
- Modifier le Firewall pour ouvrir des ports exotiques
- Faire du Virtual Hosting
Le Virtual Hosting permet de n'utiliser que le port 80 et d’afficher le site Web en fonction du nom de domaine demandé. Ce qui est très pratique quand on doit développer et tester plusieurs sites Web sur son poste de développement.
Configurer un poste de développement Web avec un Virtual Hosting
modifierLe Virtual Hosting permet de :
- travailler sur plusieurs sites Web en même temps
- simuler le nom de domaine comme si le service était en production et éviter d’utiliser des adresses IP (changeante en production et en développement)
Installation : Ouvrir les ports avec Docker
modifierOn suppose que nous sommes dans un environnement de développement :
- Vous ne pouvez pas modifier le DNS de votre réseau
- Votre site tourne sur CentOS dans un conteneur Docker sur votre PC
Ouvrir le port HTTP de votre conteneur Docker
modifierPour un serveur Web, vous devez ouvrir le port 80. Vous devez modifier votre image Docker (reconstruire l’image et recréer le conteneur) afin d'exposer le port 80.
Rajouter dans votre fichier Docker :
EXPOSE 80
Résoudre votre nom de domaine et connecter le port HTTP avec Windows ou Mac
modifierVia Kitematic, vous devez relier le port 80 de votre PC à ce conteneur.
Pour résoudre votre nom de domaine sous Windows, rajouter la ligne suivante dans le fichier c://windows/system32/drivers/etc/hosts :
127.0.0.1 moncv
Quand votre service Web fonctionnera à la fin du TP, vous pourrez consulter votre site Web via l’adresse [1] (ou sinon [2]).
Résoudre votre nom de domaine avec Linux
modifierIl faut résoudre localement votre nom de domaine associé à l’adresse IP de votre conteneur. Ouvrir le fichier sur votre PC :
sudo vim /etc/hosts
Ajouter le nom de domaine moncv avec son IP dans le fichier /etc/hosts de votre PC :
172.17.0.2 moncv
Sur le serveur, il faut résoudre ce nom de domaine. Ajouter le nom de domaine moncv dans le fichier /etc/hosts à la fin de la ligne où se trouve la définition du localhost :
127.0.0.1 localhost moncv
Quand votre service Web fonctionnera à la fin du TP, vous pourrez consulter votre site Web via l’adresse [3] (ou sinon [4]).
Installation : Apache2
modifierInstallation du package
modifierNous installons ce qu’il manque sur le serveur : (souvent, Apache est déjà installé)
Sous Ubuntu
sudo apt-get install apache2
Sous Fedora ou CentOS
yum install httpd
systemctl start httpd
systemctl enable httpd
Activer le mod_rewrite
modifierDe nombreuses applications, comme Mediawiki, ne peuvent fonctionner qu'avec ce mode pour réécrire les URL. (Pour aller plus loin)
On active le mode en lecture et écriture "mod_rewrite" :
Sous Ubuntu
sudo a2enmod rewrite
(A vérifier) Sous Fedora ou CentOS : on vérifie avec cette commande que le "mod_rewrite" est déjà activé.
httpd -M | grep rewrite
Vous devez voir la ligne suivante s'afficher :
... rewrite_module (shared) ...
Activer le Virtual Hosting
modifierOn vérifie la configuration d’Apache pour faire du Virtual Hosting en vérifiant que la ligne suivante n’est pas précédée d'un commentaire (c'est-à-dire qu'elle ne doit pas être précédée d'un #):
NameVirtualHost *:80
- Sous Ubuntu cette ligne se trouve dans le fichier /etc/apache2/ports.conf
- Sous Fedora ou CentOS et les autres distributions Linux c’est dans le fichier /etc/httpd/conf/httpd.conf
Tester votre configuration
modifierOn vérifie la configuration d'Apache pour voir les sites Web déjà fonctionnels :
Sous Ubuntu
apache2ctl -S
Sous Fedora ou CentOS
httpd -S
Vous pouvez voir qu'un site Web "default server" existe déjà.
Vous pouvez taper dans votre navigateur le nom du site Web monCV et vous devriez voir la page "It works!".
L'adresse monCV pointe vers l'adresse 127.0.0.1 comme nous l'avons configurée précédemment ; puisqu’un site Web par défaut existe, il est logique que le site monCV pointe vers ce site Web.
Configuration du site Web monCV
modifierNous allons configurer le site monCV pour qu’il pointe vers un répertoire précis de votre ordinateur.
Création du répertoire qui va contenir le site
modifierNous allons créer le répertoire /var/www/moncv
.
sudo mkdir /var/www/moncv
Sous Ubuntu
modifierPour autoriser le chargement de fichier via SFTP, on change le propriétaire du répertoire.
sudo mkdir /var/www/moncv
sudo chown <mettre_votre_user_id> /var/www/moncv
On duplique le fichier de configuration du site Web par défaut pour servir de modèle à notre nouveau site Web "moncv".
Pour cela, on exécute la commande suivante pour dupliquer le fichier de configuration :
sudo cp /etc/apache2/sites-available/default /etc/apache2/sites-available/moncv
Ensuite, on ouvre ce fichier :
sudo gedit /etc/apache2/sites-available/moncv
On modifie ou on ajoute les lignes suivantes (en gras) dans ce fichier :
<VirtualHost *:80>
ServerAdmin contact@moncv
ServerName moncv
DocumentRoot /var/www/moncv
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/moncv/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access.log combined
Alias /doc/ "/usr/share/doc/"
<Directory "/usr/share/doc/">
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Allow from 127.0.0.0/255.0.0.0 ::1/128
</Directory>
</VirtualHost>
Pour prendre en compte ce fichier de configuration, il faut activer ce site Web avec cette commande :
sudo a2ensite moncv
Pour votre information, vous pouvez à tout moment désactiver ce site Web avec la commande suivante :
sudo a2dissite moncv
Pour prendre en compte la création de ce site Web, il faut redémarrer Apache :
sudo service apache2 reload
apache2ctl -S
Sous Fedora ou CentOS
modifierPour autoriser le chargement de fichier via SFTP, on change le propriétaire du répertoire.
su -
mkdir /var/www/moncv
chown <user_name> /var/www/moncv
Créer le fichier moncv.conf :
vim /etc/httpd/conf.d/moncv.conf
Insérer, dans le fichier moncv.conf, ce contenu :
<VirtualHost *:80>
ServerName moncv
DocumentRoot /var/www/moncv
</VirtualHost>
Pour prendre en compte ces fichiers de configuration :
apachectl restart
Vérifier que votre nouveau site web est dans la liste :
httpd -S
Pour prendre en compte la création de ce site Web, il faut redémarrer Apache :
systemctl reload httpd
httpd -S
Transfert du fichier HTML via SFTP
modifierOn écrit ce texte dans le fichier index.html pour afficher MonCV à l'écran :
<html>
<body>
MonCv
</body>
</html>
Puis avec un logiciel comme Filezilla, vous allez vous connecter au port 22 (ssh) de votre serveur Web puis transférer le fichier index.html dans le répertoire "/var/www/moncv".
Il suffit de tester en accédant à travers un navigateur à l'adresse http://moncv
pour voir s'afficher "moncv" à l'écran.
Maintenant, que votre première page HTML, vous pourrez maintenant essayer de la rendre dynamique en y insérant du PHP pour afficher le contenu d'une base de données MySQL ou SPARQL par exemple. Pour le faire, il faudra installer PHP, MySQL... et un triplestore ! Ce sera pour un autre TP.
Exercices
modifier(1) Fabriquer une image Docker pour construire automatiquement le serveur Web de la même manière que dans ce TP et pour pouvoir mettre à jour le site Web via SFTP.
(A améliorer)
Dans le même répertoire pour fabriquer l’image Docker, il devra y avoir : Fichier : dockerfile (sans extension)
FROM centos/systemd
#update the server
RUN yum -y update; yum clean all;
#Installation du service SSHD
RUN yum -y install openssh-server passwd sudo vim wget curl; yum clean all
EXPOSE 22
# Init the root's password : centos
# Create a sudo user : centos with password centos
RUN echo -e "centos\ncentos" | passwd ; \
useradd centos ; \
SSH_USERPASS=centos ;\
echo -e "centos\ncentos" | (passwd --stdin centos) ; \
usermod -aG wheel centos
# Installation du service Web
RUN yum -y install httpd \
&& yum clean all
RUN systemctl enable httpd
EXPOSE 80
#config site Web
RUN mkdir /var/www/moncv
COPY moncv.conf /etc/httpd/conf.d/moncv.conf
COPY index.html /var/www/moncv/index.html
CMD ["/usr/sbin/init"]
Fichier : moncv.conf
<VirtualHost *:80>
ServerName moncv
DocumentRoot /var/www/moncv
</VirtualHost>
Fichier : index.html
<html>
<body>
MonCv
</body>
</html>
- Trouver les options de démarrage du conteneur Docker afin de partager le répertoire de développement de votre site Web sur votre PC directement au sein du conteneur à l'emplacement du site Web.
- En utilisant Visual Studio Code Review ou votre IDE préféré, activer au travers de l’IDE votre conteneur en partageant la racine de votre projet Web pour tester vos pages Web.
Pour aller plus loin
modifier
Les messages d'erreurs !!
modifierVous rencontrez un message d'erreurs ? Écrivez ici les messages que vous rencontrez et la solution que vous proposez (Désactiver SELinux n'est pas une bonne solution).