AdminII TP05 Configuration du service web public - dudleydehenau/Ephec GitHub Wiki
Documentation de la première version de ma configuration Web avec :
- La première configuration de notre Nginx était la suivante.
user nginx;
worker_processes auto;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format log_per_virtualhost '[$host] $remote_addr [$time_local] $status ' '"$request" $body_bytes_sent';
access_log /dev/stdout log_per_virtualhost;
include /etc/nginx/conf.d/*.conf;
server {
listen 80;
server_name hello.l2-6.ephec-ti.be;
root /var/www/html/accueil;
index index.html;
location / {
try_files $uri $uri/ =404;
}
access_log /dev/stdout log_per_virtualhost;
}
server {
listen 80;
server_name blog.l2-6.ephec-ti.be;
root /var/www/html/blog;
index index.html;
location / {
try_files $uri $uri/ =404;
}
access_log /dev/stdout log_per_virtualhost;
}
server {
listen 80;
server_name www.l2-6.ephec-ti.be;
root /var/www/html/www;
index index.html;
location ~*\.php$ {
fastcgi_pass php:9000;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
}
La configuration est validée par l'outil de test Nginx.
- Le Virtual Hosting est fonctionnel. En utilisant les différents noms de domaine, on est bien redirigé vers les différents sites.
- Pour les logs, il suffit de rajouter ceci au fichier de configuration Nginx.
Et cela fonctionne, on a accès aux logs depuis la commande docker logs <container>
.
- Pour la mise en place du site web, il a fallu préciser la page PHP dans la configuration Nginx.
server {
server_name www.l2-6.ephec-ti.be;
root /var/www/html/www;
index index.html;
location ~*\.php$ {
fastcgi_pass php:9000;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
location /.well-known/acme-challenge/ {
root /var/www/html;
}
}
Et créer les mêmes répertoires pour le PHP ainsi qu'un conteneur destiné à la base de données. Pour plus de sécurité, nous avons utilisé des fichiers .env
pour garder nos données sensibles privées. Nous avons aussi limité le nombre de ports à ouvrir en utilisant des réseaux Docker, ce qui réduit également le nombre de failles d'entrée possibles. Voici le fichier docker-compose.yml
:
services:
nginx:
image: nginx:latest
container_name: nginx_web
restart: always
ports:
- "80:80"
- "443:443"
volumes:
- letsencrypt:/etc/letsencrypt
- ./www/html:/var/www/html
- ./config/nginx.conf:/etc/nginx/nginx.conf
networks:
- dmz
php:
build:
context: ./php
dockerfile: Dockerfile
container_name: php
volumes:
- ./www/html:/var/www/html
networks:
- dmz
- db_net
env_file:
- env/db.env
mariadb:
container_name: mariadb
image: mariadb
volumes:
- db-data:/var/lib/mysql
- ./woodytoys.sql:/docker-entrypoint-initdb.d/woodytoys.sql
- ./my-resolve.cnf:/etc/mysql/conf.d/my-resolve.cnf
env_file:
- env/root.env
- env/db.env
restart: unless-stopped
networks:
- db_net
networks:
db_net:
driver: bridge
dmz:
driver: bridge
volumes:
db-data:
letsencrypt:
Et nous ajoutons un fichier products.php
pour afficher notre page dynamique :
<html>
<style>
table,
th,
td {
padding: 10px;
border: 1px solid black;
border-collapse: collapse;
}
</style>
<head>
<title>Catalogue WoodyToys</title>
</head>
<body>
<h1>Catalogue WoodyToys</h1>
<?php
// Paramètres de connexion à la base de données
$dbname = getenv('MARIADB_DATABASE');
$dbuser = getenv('MARIADB_USER');
$dbpass = getenv('MARIADB_PASSWORD');
$dbhost = getenv('MARIADB_HOST');
// Connexion à la base de données
$connect = mysqli_connect($dbhost, $dbuser, $dbpass, $dbname)
or die("Impossible de se connecter à '$dbhost'");
// Requête pour récupérer les produits
$result = mysqli_query($connect, "SELECT id, product_name, product_price FROM products");
?>
<!-- Tableau pour afficher les produits -->
<table>
<tr>
<th>Numéro de produit</th>
<th>Descriptif</th>
<th>Prix</th>
</tr>
<?php
// Affichage des produits dans le tableau
while ($row = mysqli_fetch_array($result)) {
printf("<tr><td>%s</td><td>%s</td><td>%s</td></tr>", $row[0], $row[1], $row[2]);
}
?>
</table>
</body>
</html>
- Pour vérifier que cela fonctionne, on se rend sur la page web fraîchement créée.
Et par acquis de confiance, on vérifie la communication avec le conteneur PHP :
Ce qui fonctionne parfaitement.