Initialisation du projet

Écosystème technique

WSL

Travaillant habituellement sous Linux, je me retrouve à utiliser des machines sous Windows dans le cadre de mon stage. Heureusement, il existe WSL (Windows Subsystem for Linux) qui permet de faire coexister une distribution Linux à côté de Windows.

Cet environnement WSL est nécessaire au bon fonctionnement de Docker. IL a été particulièrement compliqué à faire tourner sur ma machine. En effet, si la fonctionnalité était bien disponible, il n'était rien possible d'installer, ni une distribution Linux, ni Docker. En charhchant les causes d'erreur avec une IA et surtout sur les forums, j'ai fin par trouver qu'il fallait, en plus d'activer Subsystem Linux et Virtual Machine Platform Windows, je devais activer Hyper-V (astuce pour accéder à ces réglages rapidement : touche WIN + R et saisir optionalfeatures).

Je peux à présent installer une distribution Linux parmi une petite douzaine disponible :

  • lister les distributions disponibles : wsl --list --online
  • installer une distribution par défaut : wsl --install (c'est Ubuntu)
  • installer une distribution de la liste : wsl --install <nom_distro> par exemple wsl --install archlinux.

Docker

Pour avoir un environnement de travail sécurisé en terme de développement, je vais travailler avec Docker. On me fournit :

  • un fichier compose.yaml déclarant les images nécessaires pour faire tourner le système :
services:

  php:
    build: ../php
    container_name: dev-php
    ports:
      - "8081:80"
    volumes:
      - ../www:/var/www/html:cached
    environment:
      TZ: UTC
    depends_on:
      - mysql
    networks:
      - devnet

  mysql:
    image: mysql:8.0
    container_name: dev-mysql
    restart: unless-stopped
    environment:
      MYSQL_ROOT_PASSWORD: root
      TZ: UTC
    ports:
      - "3306:3306"
    volumes:
      - ../mysql/data:/var/lib/mysql
    command: --default-authentication-plugin=mysql_native_password --max_allowed_packet=1G --default-time-zone='+00:00'
    networks:
      - devnet

  phpmyadmin:
    image: phpmyadmin:latest
    container_name: dev-phpmyadmin
    restart: unless-stopped
    depends_on:
      - mysql
    ports:
      - "8082:80"
    environment:
      PMA_HOST: mysql
      PMA_USER: root
      PMA_PASSWORD: root
      UPLOAD_LIMIT: 2G
    networks:
      - devnet

networks:
  devnet:
    driver: bridge
  • un fichier Dockerfile pour le serveur Apache et PHP :
FROM php:8.2-apache

# Installation librairies système
RUN apt-get update && apt-get install -y \
    git \
    unzip \
    libzip-dev \
    libpng-dev \
    libjpeg62-turbo-dev \
    libfreetype6-dev \
    libonig-dev \
    libxml2-dev \
    libicu-dev \
    libcurl4-openssl-dev \
    pkg-config \
    libssl-dev \
    gettext \
    libxslt1-dev \
    && rm -rf /var/lib/apt/lists/*

# Configuration GD
RUN docker-php-ext-configure gd \
    --with-freetype \
    --with-jpeg

# Installation extensions PHP
RUN docker-php-ext-install \
    pdo \
    pdo_mysql \
    mysqli \
    intl \
    zip \
    opcache \
    gettext \
    gd \
    bcmath \
    soap

# Activation Apache
RUN a2enmod rewrite

# Configuration PHP personnalisée
COPY php.ini /usr/local/etc/php/php.ini

WORKDIR /var/www/html
  • tout ceci dans une arborescence type :
    • mysql pour recevoir les données de la base ;
    • php pour le Dockerfile et le php.ini ;
    • stack pour le compose.yml ;
    • www pour le code du projet TODD (environnement de fonctionnement et plugin TODD).

Trois serveurs sont disponibles :

  1. le serveur pour la base de donnée MySQL ;
  2. un serveur pour phpMyAdmin, accessible à l'adresse 127.0.0.1:8082 ;
  3. un serveur pour le service web, accessible à l'adresse 127.0.0.1:8081

TODD

Je clone un écosystème maison type dans lequel le module TODD sur lequel je vais travailler est présent. Un mécanisme d'installation plutôt malin, basé sur la détection d'un fichier site.conf.php. Si ce fichier n'existe pas, un fichier install.php prend le relai et demande à l'utilisateur les éléments nécessaire pour fonctionner (adresse du serveur mysql, nom et mot de passe d'utilisateur, etc.). Le fichier site.conf.php est donc créé à la volée et contiendra tous les paramètres.