Projecte PHP + MariaDB a Dockers

De Wiki personal d'en Guillem Serrat

Estructura de directoris i fitxers

Un cop hem vist com funciona Docker Compose, farem servir la mateixa eina per allotjar el projecte de PHP + MariaDB en Dockers.

Aprofitarem l’estructura de directoris de la pràctica anterior, replicant-los a un nou directori i copiarem tot el contingut del projecte de PHP + MariaDB dins el directori php-files (fitxers que presenta nginx)

6.5
└── lempPj
    ├── docker-compose.yml
    ├── nginx-conf
    │   └── nginx.conf
    ├── php-dockerfile
    └── php-files  # Fitxers del projecte PHP + MariaDB
        ├── administracioDB
        │   ├── creacioBD.php
        │   ├── creacioTaula.php
        │   ├── descarregarPDF.php
        │   ├── eliminacioBD.php
        │   └── totsDB.php
        ├── codis_pj_php_mariadb.zip
        ├── condicions
        │   └── condicions.html
        ├── formularis
        │   ├── actualitzaUsuari.php
        │   ├── altaUsuari.html
        │   ├── altaUsuari.php
        │   ├── consultaUsuari.php
        │   └── esborramentUsuari.php
        ├── index.html
        ├── pdf
        │   ├── 04387718P
        │   ├── 12345678Z
        │   └── AIY393978Q
        │       └── juan_lazarotrianni.pdf
        └── php
            ├── actualitzarConfirmar.php
            ├── connexioR.php
            ├── connexioRW.php
            ├── descarregarPDF.php
            ├── esborrarConfirmar.php
            ├── exercicis
            │   └── pj_php_mariadb
            │       └── pdf
            │           └── 12345678Z
            │               └── guillem_serrat.pdf
            ├── funcions.php
            └── validacioDades.php

Modificació de fitxers

Modificació del compose

En el compose haurem de modificar certs aspectes a partir del compose de la pràctica 6.5

  • El nom dels contenidors
    • No poden existir dos dockers amb el mateix nom, per tant afegirem “_pj” al nom de tots els contenidors
    • Tots els paràmetres que s'hagin establer amb noms de docker, s'hauràn de canviar pel mateix nom amb "_pj" al darrera
  • Els ports exposats
    • Els ports de l’actual compose ja s’estan fent servir pels dockers de la pràctica 6.3 i per tant els hem de modificar
      • Nginx exportarà el port 8095
      • PhpMyAdmin exportarà el port 8096

Modificació de la configuració d'Nginx

Ja que hem modificat el nom del contenidor al docker compose, haurem de modificar el fitxer de configuració d'Nginx. Dins de la configuració definim el host el qual treballa amb codis PHP. Actualment té el nom de l'anterior contenidor i l'hem de modificar pel nom de l'actual contenidor

server {
   listen 80 default_server; # Escoltem pel port 80, tot i que després el port 80 del Docker es converteix en el 8090 del host
   listen [::]:80 default_server;

   server_name localhost;

   root /var/www/html;
   index index.php index.html;

   location / {
       try_files $uri $uri/ /index.php?$args;
   }

   location ~* \.php$ {
       fastcgi_pass php_pj:9000;
       include fastcgi_params;
       fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
       fastcgi_param SCRIPT_NAME $fastcgi_script_name;
   }
}

Modificació dels codis del projecte

En el projecte hem definit com a BD el localhost, ja que la BD i el PHP estava en el mateix host. Actualment, al tenir la BD i el codi PHP en hosts (contenidors) diferents, haurem d'especificar la IP del Docker de la BD

Per exemple, en les connexions a la BD especificarem

$servidor = "lemppj-mariadb_pj-1";  # Enlloc de "localhost"
$usuari = "convidat";
$contrasenya = "benvingut";
$nomDB = "Usuaris";
$nomTaula = "Usuaris";

Gestió de la BD

Durant el projecte fem servir dos usuaris per connectar-nos a la BD: iot i convidat. Aquests usuaris s'han de crear dins la BD ja que no ho estàn.

Fins ara, els usuaris només podien accedir a la BD des del localhost. Com ara la BD està en un host a part que el PHP, haurem d'especificar que els usuaris puguin autenticar-se des de qualsevol host. Això ho aconseguim especificant el símbol "%" enlloc de localhost

# Dins del docker de MariaDB
CREATE USER 'iot'@'%' IDENTIFIED BY 'iot'
CREATE USER 'convidat'@'%' IDENTIFIED BY 'benvingut'

La BD i la taula es crea a partir d'un codi PHP, per tant no cal fer-ho dins del Docker

Accés a PhpMyAdmin

Dins del docker compose hem especificat un servei PhpMyAdmin, el qual és una interfície gràfica per administrar bases de dades. En aquest cas hem especificat que PhpMyAdmin administri la base de dades del contenidor amb MariaDB i exposarà el port 8096.

Per tant, si accedim al servidor pel port 8096, podrem visualitzar el tauler de PhpMyAdmin

Un cop hem iniciat sessió (amb les mateixes credencials que MariaDB, ja sigui amb root, iot o convidat) podrem comprobar les BD creades, les seves taules i els seus registres