Documentation Technique : Web Service SOAP –
Gestion des Étudiants, Filières et Nationalités
Table des matières
1. Introduction
2. Architecture du système
3. Structure des données
4. Services SOAP implémentés
5. Installation et configuration de l’infrastructure
6. Déploiement du web service
7. Guide de test avec SoapUI
8. Résolution des incidents
9. Commandes utiles
10. Conclusion
1. Introduction
Ce document décrit l’ensemble du processus de déploiement d’un serveur web exposant
un service SOAP permettant de consulter et gérer des données relatives aux étudiants,
filières et nationalités. Le service a été développé dans le cadre du projet
webservISISUPTECH et déployé sur une machine virtuelle Ubuntu 24.04 LTS,
accessible depuis un poste Windows via SoapUI.
Le document intègre :
• l’architecture matérielle et logicielle,
• les choix techniques (LEMP vs LAMP, redirection de ports, etc.),
• la structure de la base de données,
• la description des méthodes SOAP,
• la procédure d’installation et de configuration,
• les tests de validation,
• les problèmes rencontrés et leurs solutions.
2. Architecture du système
Élément Description
Hôte Windows 10/11 avec SoapUI et VirtualBox
Machine virtuelle Ubuntu 24.04 LTS (kernel 6.8.0-106)
Serveur web Nginx (port 80)
Interpréteur PHP PHP 8.3-FPM (écoute sur [Link]:9000)
Base de données MySQL 8.0
Communication Redirection de ports VirtualBox : [Link]:2020 → [Link]:80
Protocole SOAP via WSDL
3. Structure des données
La base de données utilisée s’appelle demol32026. Les tables suivantes ont été créées :
3.1 Table Nationalite
Champ Type Description
id INT Clé primaire
nom VARCHAR(100) Nom de la nationalité
3.2 Table Niveau
Champ Type Description
id INT Clé primaire
nom VARCHAR(50) Niveau d’étude (L1, L2, …)
3.3 Table Filiere
Champ Type Description
id INT Clé primaire
nom VARCHAR(100) Nom de la filière
date DATE Date de création / session
3.4 Table Classe
Champ Type Description
id INT Clé primaire
nom VARCHAR(100) Nom de la classe
filiere_id INT Clé étrangère vers Filiere
niveau_id INT Clé étrangère vers Niveau
3.5 Table Etudiant
Champ Type Description
id INT Clé primaire
nom VARCHAR(100) Nom de l’étudiant
image VARCHAR(255) Chemin ou URL de l’image
adresse TEXT Adresse postale
latitude DECIMAL(10,8) Latitude géographique
longitude DECIMAL(11,8) Longitude géographique
nationalite_id INT Clé étrangère vers Nationalite
classe_id INT Clé étrangère vers Classe
4. Services SOAP implémentés
Le web service expose cinq méthodes via le fichier WSDL [Link]. Toutes les méthodes
retournent des objets ou des listes d’objets au format XML.
4.1 getEtudiantByNom($nom)
• Description : Recherche un étudiant par son nom (correspondance exacte).
• Entrée : $nom (string)
• Sortie : Un objet Etudiant contenant tous les champs de la table, avec les
informations de nationalité et de classe associées.
4.2 getEtudiantById($id)
• Description : Récupère un étudiant à partir de son identifiant.
• Entrée : $id (int)
• Sortie : Un objet Etudiant (complet).
4.3 getListeStr()
• Description : Retourne la liste des noms des étudiants (simples chaînes).
• Entrée : Aucune.
• Sortie : Un tableau de chaînes de caractères.
4.4 getListeEtudiant()
• Description : Retourne la liste complète de tous les étudiants avec tous leurs
attributs.
• Entrée : Aucune.
• Sortie : Un tableau d’objets Etudiant.
4.5 getListeFiliere()
• Description : Retourne la liste de toutes les filières.
• Entrée : Aucune.
• Sortie : Un tableau d’objets Filiere (id, nom, date).
4.6 getListeNationalite()
• Description : Retourne la liste des nationalités.
• Entrée : Aucune (les paramètres $id, $nom, $codePays mentionnés dans
l’énoncé ne sont pas utilisés dans la version déployée).
• Sortie : Un tableau d’objets Nationalite (id, nom).
5. Installation et configuration de l’infrastructure
5.1 Mise en place de la machine virtuelle
• Ubuntu 24.04 LTS installée sous VirtualBox.
• Configuration réseau : NAT avec redirection de ports.
• Ports redirigés : hôte [Link]:2020 → invité [Link]:80.
• Accès SSH : ssh -p 2020 kola_kola@[Link]
5.2 Conflit initial : Apache vs Nginx
Lors de l’installation initiale d’Apache2 (dans une approche LAMP), le port 80 était déjà
utilisé par Nginx. Pour simplifier et optimiser, nous avons choisi de désinstaller
Apache2 et de basculer sur une pile LEMP (Nginx + PHP-FPM).
bash
sudo apt purge apache2 apache2-* -y
sudo apt autoremove -y
5.3 Installation des composants LEMP
bash
sudo apt update
sudo apt install nginx mysql-server php8.3-fpm php8.3-mysql php-xml php-soap -y
5.4 Configuration de Nginx
Fichier de site : /etc/nginx/sites-available/webservISISUPTECH
nginx
server {
listen 80;
server_name _;
root /var/www/html;
index [Link] [Link] [Link];
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
include snippets/[Link];
fastcgi_pass [Link]:9000; # important : port TCP
}
}
Activation :
bash
sudo ln -s /etc/nginx/sites-available/webservISISUPTECH /etc/nginx/sites-enabled/
sudo rm /etc/nginx/sites-enabled/default
sudo nginx -t && sudo systemctl reload nginx
5.5 Configuration de PHP-FPM
Le fichier /etc/php/8.3/fpm/pool.d/[Link] a été modifié pour que PHP écoute
sur le port 9000 au lieu d’un socket Unix :
ini
; listen = /run/php/[Link]
listen = [Link]:9000
listen.allowed_clients = [Link]
Redémarrage :
bash
sudo systemctl restart php8.3-fpm
Vérification de l’écoute :
bash
ss -ant | grep 9000
5.6 Configuration de MySQL
Problème : PHP ne parvenait pas à se connecter à MySQL en raison du plugin
auth_socket et de la politique validate_password.
Solutions appliquées :
1. Désactivation temporaire du composant validate_password (en
développement) :
sql
UNINSTALL COMPONENT '[Link]
2. Modification du compte root pour utiliser mysql_native_password avec un
mot de passe vide (à adapter en production) :
sql
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '';
FLUSH PRIVILEGES;
3. Création de la base de données :
sql
CREATE DATABASE demol32026;
USE demol32026;
-- Exécution du script SQL de création des tables et insertion des données
5.7 Redirection de ports VirtualBox
Pour que l’hôte Windows puisse joindre le serveur web de la VM, une redirection de
ports a été configurée dans VirtualBox :
• Nom : SOAP
• Protocole : TCP
• IP hôte : [Link]
• Port hôte : 2020
• IP invité : [Link]
• Port invité : 80
6. Déploiement du web service
6.1 Fichiers du projet
Les fichiers suivants ont été placés dans /var/www/html :
• [Link] : point d’entrée du service SOAP.
• [Link] : définition du service (WSDL).
• [Link] : classe de connexion à MySQL.
• [Link], [Link], [Link] : classes métier.
• [Link] : implémentation des méthodes SOAP.
6.2 Adaptation du WSDL pour la redirection de ports
Le fichier [Link] a été modifié pour que l’adresse de l’endpoint pointe sur l’URL
accessible depuis Windows :
xml
<soap:address location="[Link]
Sans cette modification, SoapUI tentait d’accéder à [Link]
(inaccessible depuis l’hôte) ou à une adresse interne non routée.
6.3 Vérification locale
• Accès depuis la VM : curl [Link]
retourne le WSDL.
• Test simple PHP : curl [Link] avec un <?php
phpinfo(); ?> retourne la page PHPInfo.
7. Guide de test avec SoapUI
7.1 Création d’un projet
1. Ouvrir SoapUI.
2. File > New SOAP Project.
3. Nom du projet : Projet_WebService.
4. URL du WSDL : [Link]
5. Cliquer sur OK. Le client génère automatiquement les requêtes pour chaque
méthode.
7.2 Exécution d’une méthode
• Double-cliquer sur une requête (ex : getEtudiantById).
• Dans le volet Request, modifier la valeur de l’élément id (par défaut ?).
• Cliquer sur l’icône Envoyer (flèche verte).
• La réponse XML apparaît dans le volet Response.
Exemple de requête pour getEtudiantById :
xml
<soapenv:Envelope xmlns:soapenv="[Link]
xmlns:web="[Link]
<soapenv:Header/>
<soapenv:Body>
<web:getEtudiantById>
<web:id>1</web:id>
</web:getEtudiantById>
</soapenv:Body>
</soapenv:Envelope>
La réponse doit contenir les informations de l’étudiant correspondant.
7.3 Vérification des autres méthodes
• getEtudiantByNom : fournir un nom.
• getListeStr : retourne une liste de noms.
• getListeEtudiant : retourne tous les étudiants.
• getListeFiliere : liste des filières.
• getListeNationalite : liste des nationalités.
8. Résolution des incidents
Incident Cause Solution
Apache ne démarre pas (port Désinstallation d’Apache,
Nginx déjà présent
80 occupé) conservation de Nginx
PHP-FPM écoutait
sur socket alors que Modification de [Link] pour
ERR_INVALID_HTTP_RESPONSE
Nginx envoyait sur écouter sur [Link]:9000
port 9000
WSDL pointait sur
Redirection de port VirtualBox +
SoapUI ne peut pas joindre le localhost:80,
modification de l’adresse dans le
service inaccessible depuis
WSDL
Windows
Plugin auth_socket Passer à mysql_native_password
Access denied MySQL ou mot de passe et désactiver temporairement
trop complexe validate_password
Consulter
Erreur PHP dans les /var/log/nginx/[Link] et
Réponse vide ou erreur 500
logs /var/log/[Link] pour
corriger le code
9. Commandes utiles
Tâche Commande
Tester la syntaxe Nginx sudo nginx -t
Recharger Nginx sudo systemctl reload nginx
Redémarrer PHP-FPM sudo systemctl restart php8.3-fpm
Voir les ports en écoute ss -tlnp
Vérifier les logs Nginx sudo tail -f /var/log/nginx/[Link]
Vérifier les logs PHP-FPM sudo tail -f /var/log/[Link]
Se connecter à MySQL sudo mysql -u root -p
Vérifier la base de données SHOW DATABASES;
10. Conclusion
Le web service SOAP a été déployé avec succès sur une infrastructure LEMP (Nginx +
PHP-FPM + MySQL), rendu accessible depuis l’extérieur grâce à une redirection de ports
VirtualBox. Les six méthodes demandées ont été implémentées et testées avec SoapUI.
L’architecture choisie permet une séparation efficace des rôles (serveur web, traitement
PHP, base de données) et offre une base solide pour une éventuelle évolution (HTTPS,
authentification, etc.).
Prochaines améliorations possibles :
• Activer HTTPS via Let’s Encrypt.
• Remplacer l’utilisateur root de MySQL par un utilisateur dédié avec des droits
limités.
• Mettre en place un mécanisme de logging des appels SOAP.
Rédacteur : kola_kola
Date : 23 mars 2026
Version : 1.0