blog_tech/i18n/en/docusaurus-plugin-content-docs/current/projets-openclassrooms/p04-architecture-ntiers.md
Tellsanguis ed989ff004 Ajout documentation projets OpenClassrooms (P02-P13) avec support bilingue
- Add all project documentation pages in French and English
- Include PDF viewers for presentations and documents (P10, P12)
- Add collapsible sections for scripts and logs (P10)
- Add static assets for all projects
- Update sidebars with new projets-openclassrooms category
- Add npm start:en script for testing English locale
2025-11-22 16:18:20 +01:00

3.1 KiB

sidebar_position
4

P4 - Docker N-tier Architecture

Context

Deployment of a containerized n-tier architecture for BeeSafe company, including a web server, database and DNS server.

Objectives

  • Containerize a LAMP web application
  • Configure a DNS server with Bind9
  • Set up a reverse proxy
  • Document the technical architecture

Technologies Used

  • Docker / Docker Compose: containerization
  • Apache/PHP: web server
  • MySQL: database
  • Bind9: DNS server

Deployed Architecture

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

Deliverables

Architecture Diagram (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

# Update and install dependencies
RUN apt-get update && apt-get install -y \
    libzip-dev \
    unzip \
    && docker-php-ext-install mysqli \
    && docker-php-ext-enable mysqli

# Enable beesafe.conf site and disable default 000-default.conf site
RUN a2ensite beesafe.conf && \
    a2dissite 000-default.conf && \
    service apache2 reload

# Clean unnecessary files to reduce image size
RUN apt-get clean && rm -rf /var/lib/apt/lists/*

# Command to keep Apache running
CMD ["apache2-foreground"]

Skills Acquired

  • Multi-tier application containerization
  • DNS server configuration
  • Orchestration with Docker Compose
  • Decoupled application architecture