WEB - a-kalin0/Admin-Projet-CAA GitHub Wiki

Web

Notre conteneur web va permettre à nos Users de pouvoir aller sur un site web créé par nous. Le conteneur est composé de 3 fichiers : Dockerfile, apache2.conf et index.php.


Dockerfile

FROM php:8.0-apache
Maintainer 2TL1-1
COPY apache2.conf /etc/apache/
COPY ./index.php /var/www/html
RUN docker-php-ext-install mysqli
EXPOSE 80
CMD ["apache2ctl","-D","FOREGROUND"]

Explication :

Ce Dockerfile crée une image Docker contenant une installation de PHP 8.0 avec Apache, qui sert une page web à partir du fichier "index.php". L'image expose le port 80 et est configurée pour exécuter Apache en mode "foreground" lorsqu'elle est utilisée pour lancer un conteneur Docker.


Apache2.conf

Listen 80
ServerName www.woodytoys.lab

IncludeOptional mods-enabled/.load
IncludeOptional mods-enabled/.conf

ErrorLog /var/log/apache2/error.log
LogFormat "%h %l %u %t "%r" %>s %O "%{Referer}i" "%{User-Agent}i"" combin>
CustomLog /var/log/apache2/access.log combined
LogLevel debug

Explication :

Notre fichier "apache2.conf" est utilisé pour configurer le serveur Apache en spécifiant le port d'écoute, le nom de domaine, les fichiers de configuration des modules, les emplacements des fichiers journaux d'erreur et d'accès, et le niveau de verbosité des messages dans le fichier journal d'erreur.


Index.php

<?php echo 'Bienvenue sur le site de Woodytoys !'; ?>

<?php

// Connexion à la base de données
$servername = "172.20.1.6";
$username = "roott";
$password = "roott";
$dbname = "db";

$conn = new MySQLi($servername, $username, $password, $dbname);

// Vérification de la connexion
if ($conn->connect_error) {
  die("The connection failed: " . $conn->connect_error);
}

// Récupération des données de la table "inventory"
$sql = "SELECT * FROM inventory";
$result = $conn->query($sql);

// Affichage des données dans un tableau HTML
if ($result->num_rows > 0) {
  echo "<table>";
  echo "<tr><th>ID</th><th>Nom</th><th>Prix</th></tr>";
  while($row = $result->fetch_assoc()) {
    echo "<tr><td>" . $row["id"] . "</td><td>" . $row["name"] . "</td><td>" . $row["price"] . "</td></tr>";
  }
  echo "</table>";
} else {
  echo "0 résultats";
}

// Fermeture de la connexion
$conn->close();
?>

Explication :

La première ligne "" affiche le message de bienvenue sur la page d'accueil du site.

Ensuite, le script PHP établit une connexion à la base de données MySQL en utilisant les informations d'identification de connexion.

Après avoir établi la connexion, le script exécute une requête SQL pour récupérer toutes les données de la table "inventory". Ensuite, il parcourt les résultats de la requête et les affiche dans un tableau HTML en utilisant une boucle while. Chaque ligne du tableau correspond à une entrée dans la table "inventory", et chaque colonne représente un champ dans la table.

Si la requête ne retourne aucun résultat, le script affiche un message indiquant qu'aucun résultat n'a été trouvé.

Enfin, le script ferme la connexion à la base de données.


Lancement du conteneur

Voir : DOCKER-COMPOSE


Test de fonctionnement

image


DB

Notre conteneur DB va nous permettre d'afficher un site web dynamique. Les fichiers de configuration de ce conteneur sont les suivants : Dockerfileet test.sql.


Dockerfile

#Utiliser l'image de base de mysql
FROM mysql:latest
MAINTAINER 2TL1-1

#Lancer la base de données
RUN chown -R mysql:root /var/lib/mysql/

#Passer les variable d'environement en argument pour la ligne de commande
ARG MYSQL_DATABASE
ARG MYSQL_USER
ARG MYSQL_PASSWORD
ARG MYSQL_ROOT_PASSWORD

#Crée une variable d'environement pour le mot de passe de la db
ENV MYSQL_DATABASE=db
ENV MYSQL_USER=roott
ENV MYSQL_PASSWORD=roott
ENV MYSQL_ROOT_PASSWORD=roott

COPY test.sql /mysql/test.sql

RUN sed -i "s/MYSQL_DATABASE/'db'/g" /mysql/test.sql
RUN cp /mysql/test.sql /docker-entrypoint-initdb.d

EXPOSE 3306

Explication :

ce Dockerfile crée une image Docker de la base de données MySQL, crée une base de données vide et charge un script SQL au démarrage pour la remplir avec des données initiales.


Test.sql

-- MySQL dump 10.13  Distrib 8.0.26, for Linux (x86_64)
-- DROP TABLE IF EXISTS Customers;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;

-- Créer la base de données
CREATE DATABASE IF NOT EXISTS db;
USE db;

-- Créer la table
CREATE TABLE IF NOT EXISTS inventory (
  id INT AUTO_INCREMENT PRIMARY KEY,
  name VARCHAR(255) NOT NULL,
  price FLOAT(10, 2) NOT NULL
);

-- Insérer des données dans la table
INSERT INTO inventory (name, price) VALUES
  ('PS5', 11.50),
  ('Balancoire', 5.36),
  ('Dames', 9.99);

-- Créer un utilisateur pour accéder à la base de données
CREATE USER IF NOT EXISTS 'userdb'@'%' IDENTIFIED BY 'Zh0qtDbBRiKsmX4V8dES';

-- Accorder tous les privilèges à l'utilisateur sur la base de données
GRANT ALL PRIVILEGES ON db.* TO 'userdb'@'%';

Explication :

Ce fichier .sql nous permet de tester le service web en créant une base de données. Si le service web fonctionne on devrait retrouvé les données qu'on a insérer dans notre table sur la page 'http://www.woodytoys.lab/index.php'


Lancement du conteneur

Voir : DOCKER-COMPOSE


Test de fonctionnement

Mysql -uroot -p / Mysql -u

image

Show databases;

image

Use ;

image

SELECT * FROM

;

image


Maintenance WEB

Voici un petit guide de maintenance sur la partie web de notre intranet.


  • Ajout / Modification / Suppression d'un site web

    • Créer un fichier HTML ou PHP, modifier ou supprimer le fichier actuellement utilisé
    • Modifier le Dockerfile en fonction des modifications, notamment les liens vers les fichiers

  • Troubleshooting

Les logs de apache se trouvent généralement dans /var/log/apache2/access.log. Utilisez des commandes comme grep, tail, ou less pour consulter et rechercher des erreurs spécifiques dans les logs. Si vous êtes sur docker desktop, les logs se trouvent dans un onglet dédié, vous pouvez voir les logs et les éventuelles erreurs pour chaque conteneurs


  • Mises à jour

    • Connectez-vous au serveur via SSH.
    • Mettez à jour la liste des paquets disponibles : sudo apt-get update.
    • Mettez à jour Apache2 spécifiquement : sudo apt-get install --only-upgrade apache2.
    • Redémarrez le service Apache pour appliquer les changements : sudo systemctl restart apache2.service ou sudo service apache2 restart

  • Erreurs fréquentes et solutions
  1. Problèmes d'affichage du site ou de la DB
  • Analyser l'erreur et aller vérifier dans les logs
  • Vérifier les liens de fichiers, les noms de fichiers, l'adressage IP et si les fichiers sont correctement écrits
⚠️ **GitHub.com Fallback** ⚠️