Skip to content

Web : Analyse technique

D34DPlayer edited this page Mar 24, 2021 · 6 revisions

Objectif

L'objectif de ce service est de fournir 3 sites web, chacun avec différents contraintes :

Site interne (ERP)

  • PHP
  • MySQL
  • Seulement disponible depuis le réseau local

Site vitrine

Site vente (B2B)

  • PHP
  • MySQL
  • url : b2b.woodytoys.be

Application technique

Solutions possibles

Au minimum 2 services devront être mis en place, un serveur web et une base de données.

La base de données doit être MySQL, mais il y a toujours la possibilité d'utiliser MariaDB à la place, qui est bien plus récent mais toujours rétrocompatible avec MySQL. Comparaison

Pour les serveurs web, on a différentes possibilités :

  • Apache : Serveur web le plus utilisé, rapide et performant. De part sa grande utilisation il est très bien documenté avec beaucoup d'examples. Mais peut être un peu lourd à configurer.
  • Nginx : Deuxième serveur web le plus utilisé, léger et très rapide. Tout comme apache, on retrouve beaucoup de documentation et exemples dessus. Mais il est un peu bizarre à faire fonctionner avec PHP.
  • Caddy : Serveur web avec une configuration simple et saine, et avec support intégré de HTTPS. Assez nouveau donc il n'y a pas beaucoup d'exemples avec.

Comparaison

À côté de cette configuration minimale (ou plutôt par dessus) un reverse proxy peut être mis en place pour plusieurs raisons :

  • Garder le serveur cachés dans le réseau interne et n'exposer que ce reverse proxy pour réduire la surface du DMZ.
  • Centraliser la gestion des certificats du HTTPS.
  • Faire du load balancing.
  • Les trois serveurs web expliqués au dessus peuvent aussi faire ce rôle de reverse proxy.

Solution choisie

On a décidé d'ajouter un reverse proxy même s'il n'est pas obligatoire, pour les avantages qu'il offre expliqués précédemment. Vu que le reverse proxy n'aura qu'à rediriger le trafic en fonction du nom de domaine, et se charger de l'HTTPS. Caddy semble être le plus approprié, de par sa configuration simple et son support natif de l'HTTPS.

Pour rendre la configuration uniforme, les 3 sites web se trouvent dans un même serveur avec des virtual hosts, et on a choisi Apache car une gestion de l'HTTPS n'est plus nécessaire grâce au reverse proxy et que les sites sont soit statiques soit en PHP.

Pour la base de données, on a décidé de partir sur MariaDB, car il n'y a pas de raison de pas s'en servir. Mais vu que le client fournira la DB lui-même, ce service est interchangeable avec un service MySQL si besoin.

Pour les sites sur le prototype, celui statique sera des simples fichiers html et les deux en php qui se connecteront à la db seront phpmyadmin

Configuration en détail

Il nous faut donc 4 services:

  • Caddy (reverse proxy) :
    • Caddyfile qui redirige le trafic https vers le web server.
  • MariaDB (DB) :
    • Les tables nécessaires seront configurées à l'avance.
    • Un utilisateur avec un accès limité sera créé pour les interactions des sites web.
    • N'accepter que des requêtes SSL, avec les clés et CA dans /etc/mysql/ssl/
  • Apache
    • Site statique (vitrine) :
      • Écoute les requêtes HTTP du reverse proxy vers www.${DOMAIN_NAME}
      • Délivre les fichiers dans le dossier /ver/www/html/vitrine
    • Site dynamique publique (B2B) :
      • Configuré pour interpréter le php
      • Écoute les requêtes HTTP du reverse proxy vers b2b.${DOMAIN_NAME}
      • Délivre les fichiers dans le dossier /ver/www/html/b2b
    • Site dynamique privé (ERB) :
      • Configuré pour interpréter le php
      • Écoute les requêtes HTTP et HTTPS vers www.local
      • Délivre les fichiers dans le dossier /ver/www/html/interne
      • Les requêtes HTTP redirigent vers HTTPS
      • Les clés SSL pour le HTTPS se trouvent dans /etc/apache2/certificate/
    • Config phpadmin
      • Pointe vers l'addresse de la db
      • Utilise du SSL, avec les clés dans /etc/apache2/certificate/

Clone this wiki locally