blog_tech/docs/projets-openclassrooms/p04-architecture-ntiers.md
Tellsanguis 3c18e17224 Ajout dates de dernière modification dans la documentation
- Ajouter champ last_update dans le frontmatter de tous les fichiers de documentation
- Dates extraites de l'historique git (en excluant le commit de modification des tags)
- Résout le problème des dates incorrectes sur Cloudflare Pages (shallow clone)
- Projets OpenClassrooms: 22 novembre 2025
- Homelab actuel: 25-30 novembre 2025
- OpenWRT et autres: 2-3 décembre 2025
2025-12-06 14:59:57 +01:00

3.3 KiB

sidebar_position tags last_update
4
docker
conteneurisation
architecture-ntiers
date
2025-11-22

Architecture n-tiers Docker

Contexte

Déploiement d'une architecture n-tiers conteneurisée pour l'entreprise BeeSafe, comprenant un serveur web, une base de données et un serveur DNS.

Objectifs

  • Conteneuriser une application web LAMP
  • Configurer un serveur DNS avec Bind9
  • Mettre en place un reverse proxy
  • Documenter l'architecture technique

Technologies utilisées

  • Docker / Docker Compose : conteneurisation
  • Apache/PHP : serveur web
  • MySQL : base de données
  • Bind9 : serveur DNS

Architecture déployée

                    +-------------+
                    |   Client    |
                    +------+------+
                           |
                    +------v------+
                    |  DNS Bind9  |
                    +------+------+
                           |
                    +------v------+
                    |   Apache    |
                    |    + PHP    |
                    +------+------+
                           |
                    +------v------+
                    |    MySQL    |
                    +-------------+

Livrables

Schéma d'architecture (PDF)
Docker Compose
services:
  web:
    build:
      context: .
      dockerfile: Dockerfile
    container_name: apache_php
    ports:
      - "80:80"
    volumes:
      - ./web:/var/www/html
      - ./apache/beesafe.conf:/etc/apache2/sites-available/beesafe.conf
    depends_on:
      - db
      - dns
    networks:
      - backend
    restart: unless-stopped

  db:
    image: mysql:8.0
    container_name: mysql
    environment:
      MYSQL_ROOT_PASSWORD: rootclassroom
      MYSQL_DATABASE: beesafe_db
    volumes:
      - db_data:/var/lib/mysql
      - ./sql:/docker-entrypoint-initdb.d
    networks:
      - backend
    restart: unless-stopped

  dns:
    image: internetsystemsconsortium/bind9:9.18
    container_name: bind9
    ports:
      - "53:53/tcp"
      - "53:53/udp"
    volumes:
      - ./bind9/etc:/etc/bind
      - ./bind9/cache:/var/cache/bind
      - ./bind9/lib:/var/lib/bind
      - ./bind9/log:/var/log
    command: ["-g"]
    networks:
      - backend
    restart: unless-stopped

networks:
  backend:
    driver: bridge

volumes:
  db_data:
Dockerfile
FROM php:8.0-apache

# Mise à jour et installation des dépendances
RUN apt-get update && apt-get install -y \
    libzip-dev \
    unzip \
    && docker-php-ext-install mysqli \
    && docker-php-ext-enable mysqli

# Activer le site beesafe.conf et désactiver le site par défaut 000-default.conf
RUN a2ensite beesafe.conf && \
    a2dissite 000-default.conf && \
    service apache2 reload

# Nettoyage des fichiers inutiles pour réduire la taille de l'image
RUN apt-get clean && rm -rf /var/lib/apt/lists/*

# Commande pour garder Apache en fonctionnement
CMD ["apache2-foreground"]

Compétences acquises

  • Conteneurisation d'applications multi-tiers
  • Configuration de serveurs DNS
  • Orchestration avec Docker Compose
  • Architecture applicative découplée