J'ai décidé de changer de config pour des petits dév web, dans la précédente config, j'utilisais kvm-qemu avec samba et sur la machine hôte firejail pour isoler le navigateur web et tester en local le fonctionnement d'un site web semi statique avec un peu de php. Garder une vm en fonctionnement continu avec les interfaces réseaux, je trouvais ça un peu trop contraignant

Maintenant, j'ai essayé de tester les conteneurs avec podman qui n'utilise pas un processus permanent. Je me suis rendu compte quand la config tourne que je n'ai pas documenté toutes les étapes et que au cas où il faut refaire les manips, ça serait du temps à reprendre toutes les étapes. Et puis je voudrais voir à partir s'il y des améliorations possibles, les technos évoluent et je ne suis pas au courant de tout. Surtout pour la partie config réseau sur podman, ça a l'air un peu casse tête

Ces infos complètent les infos sur ce site

Pour podman, utilisation en tant qu'utilisateur standard... Il faut prévoir plusieurs go d'espaces libre dans le répertoire utilisateur sur debian c'est dans:
/home/utilisateur/.local/share/containers/storage

🟨 verif que podman est installé

ou

si c'est pas installé

pour debian

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
sudo apt update
sudo apt install podman
ou combiné avec podman compose

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
sudo apt update
sudo apt install podman podman-compose
si c'est installé, regarder s'il n'y a pas déjà des images parce que ça prend de l'espace disque
🟠 lire les discussions suivantes parce que sur debian pour la version linux 6.1 il faut installer un package supplémentaire pour modifier le mode de stockage des images. Si cette étape est ignorée, les images peuvent occuper des dizaines de go au lieu de quelques go

Eventuellement enregistrer les images existantes dans un fichier archive, voir après la partie commit

regarder s'il pas un conteneur en cours de fonctionnement

sinon arrêter les conteneurs actifs

Code : Sélectionner tout - Visualiser dans une fenêtre à part
podman stop -a && podman rm -a
téléchargement de l'image php avec le serveur httpd
Code : Sélectionner tout - Visualiser dans une fenêtre à part
podman pull php:8.2-apache
téléchargement de l'image mysql 8
téléchargement de l'image phpmyadmin
Code : Sélectionner tout - Visualiser dans une fenêtre à part
podman pull phpmyadmin:5.2.2
voir l'espace disque occupé par les conteneurs
démarrage du conteneur avec l'image de php-apache

Code : Sélectionner tout - Visualiser dans une fenêtre à part
podman run -d --name web_server -p 8080:80 docker.io/library/php:8.2-apache
ouvrir le navigateur web ou curl et il doit y avoir "it works" sur http://locahost:8080
il peut aussi il y avoir une erreur de permission... sur l'expérience, de ce tuto, possible d'ignorer cette erreur et de passer aux étapes suivantes et de modifier le fichier de config pour autoriser option indexes dans le directory listing...

on peut entrer dans le conteneur sur le shell bin bash avec l'alias web_server de la commande run
Code : Sélectionner tout - Visualiser dans une fenêtre à part
podman exec -it web_server /bin/bash
ou avec l'id du conteneur

89b...ci-dessous correspond à l'id du conteneur en 1ère colonne de la cde précédente

Code : Sélectionner tout - Visualiser dans une fenêtre à part
podman exec -it 89b... /bin/bash

création d'un fichier html simple, comme il n'y a pas d'éditeur de texte, la commande cat peut servir à écrire dans un fichier à partir de la mémoire tampon (buffer) jusqu'à la saisie de 'EOL'

Code : Sélectionner tout - Visualiser dans une fenêtre à part
cat > index_s1.html<< EOL
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
<html><body><h1>Conteneur/image podman html<h1>
</h1></body></html>
on termine la saisie avec EOL

on fait la meme chose pour tester php

Code : Sélectionner tout - Visualiser dans une fenêtre à part
cat > index_s2.php<< EOL
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
<html><body><h1>Conteneur/image podman php</h1>
<h2>config php</h2>
<br>

<?php phpinfo(); ?>

</h1></body></html>
EOL termine le buffer


on est toujours dans le shell bin/bash du conteneur mais on peut vérifier dans le navigateur que les fichiers index_s1.html et index_s2.php sont acccessibles

http://localhost:8080/index_s1.html
http://localhost:8080/index_s2.php



si c'est bon, on continue

ici, c'est pour modifier le fichier de configuration du serveur avec un affichage du répertoire web

toujours dans le bin bash du conteneur, attention à ne pas être sur le fichier de config de la machine hôte ou d'une éventuelle vm!!!

Code : Sélectionner tout - Visualiser dans une fenêtre à part
cd /etc/apache2/sites-available
copier le contenu ci dessous dans un éditeur de texte de la machine hote
ajouter ou remplacer en dessous de documentroot
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
  <Directory /var/www/html>
    Options +Indexes
    AllowOverride all
    Order allow,deny 
    Allow from all 
    Require all granted
  </Directory>
la commande ci-dessous va effacer le fichier de config et il sera possible de le remplacer par copie avec le fichier de config modifier. Ne pas tenir compte de l'affichage, appuyer sur enter après la copie et saisir EOL pour terminer le buffer

Code : Sélectionner tout - Visualiser dans une fenêtre à part
cat > 000-default.conf << EOL
copier la totalité du fichier de config, attention à ne pas copier autre chose

tester la configuration
dans le navigateur
il devrait s'afficher
index_s1.html
index_s2.php

si c'est bon on peut sortir du shell bin/bash du conteneur maintenant avec exit ou continuer et installer des modules php

📦 config de php dans le conteneur

pour les modules suivants (cde php -m avec transpo en ligne):

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
ctype	curl	date	dom	fileinfo	filter	gd	hash	iconv	json	libxml	
mbstring	mysqli	mysqlnd	openssl	pcre	PDO	pdo_mysql	pdo_pgsql	pdo_sqlite	
pgsql	Phar	posix	random	readline	Reflection	session	SimpleXML	
sodium	SPL	sqlite3	standard	tokenizer	xml	xmlreader	xmlwriter	Zend OPcache	zlib
Toujours dans le conteneur de l'image httpd exec -it

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
  docker-php-ext-install mysqli
  docker-php-ext-enable mysqli
  apache2ctl restart
  docker-php-ext-install intl opcache pgsql pdo pdo_mysql pdo_pgsql gd mbstring zip
  docker-php-ext-install intl
  docker-php-ext-install intl
  docker-php-ext-install opcache
  docker-php-ext-install opcache
  docker-php-ext-enable opcache
  docker-php-ext-enable opcache
  docker-php-ext-install intl
  docker-php-ext-enable intl
  docker-php-ext-install pgsql
  docker-php-ext-enable pgsql
  /usr/local/bin/docker-php-ext-enable gd mysqli
  /usr/local/bin/docker-php-ext-enable pdo pdo_mysql
  /usr/local/bin/docker-php-ext-enable pgsql
  docker-php-ext-install pdo
  docker-php-ext-enable pdo
  docker-php-ext-install pdo_mysql
  docker-php-ext-enable pdo_mysql
  docker-php-ext-install pdo_pgsql
  docker-php-ext-enable pdo_mysql
 docker-php-ext-install gd
 docker-php-ext-enable gd
 /usr/local/bin/docker-php-ext-enable gd
 docker-php-ext-enable gd
 docker-php-ext-install mbstring
 docker-php-ext-enable mbstring
 docker-php-ext-install zip
 docker-php-ext-enable pdo_pgsql
 docker-php-ext-enable zip
Les modules gd et pgsql ne se sont pas installés alors il faut maj le conteneur

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
apt update

docker-php-ext-install gd
docker-php-ext-enable gd
docker-php-ext-install pgsql
docker-php-ext-enable pgsql
docker-php-ext-install pgsql
docker-php-ext-install pdo_pgsql
ou
docker-php-ext-configure pgsql -with-pgsql=/usr/local/pgsql     && docker-php-ext-install pgsql pdo_pgsql
apt-get install -y libpq-dev     && docker-php-ext-configure pgsql -with-pgsql=/usr/local/pgsql     && docker-php-ext-install pdo pdo_pgsql
pour voir les modules installés
php -m

ou php-info avec http://localhost:8080/index_s2.php

si c'est bon on peut sortir du shell bin/bash du conteneur maintenant avec exit ou continuer ...

et on peut enregistrer le conteneur dans une nouvelle image
d'abord, récupérer l'id du conteneur en 1ère colonne ou le nom alias de la cde run

enregistrement avec l'id
Code : Sélectionner tout - Visualiser dans une fenêtre à part
podman commit f580f66abe50 localhost/httpd-php:8.2
enreg avec l'alias
Code : Sélectionner tout - Visualiser dans une fenêtre à part
podman commit web_server localhost/httpd-php:8.2
on arrête les conteneurs actifs
Code : Sélectionner tout - Visualiser dans une fenêtre à part
podman stop -a && podman rm -a
📍️si l'image a bcp été modifiée ou pour déplacer sur une autre machine il est possible d'enregistrer l'image modifiée dans une archive ou d'enregistrer n'importe quelle image pour éviter podman pull...il est également possible d'enregistrer plusieurs images dans la même archive, il faut juste séparer les images par un espace

par exemple dans le répertoire courant pour l'image docker.io/library/mariadb:latest

Code : Sélectionner tout - Visualiser dans une fenêtre à part
podman save --output image_mariadb_12_0.tar docker.io/library/mariadb:latest
on peut supprimer l'image pour par exemple économiser de l'espace disque

podman rmi docker.io/library/mariadb:latest

et plus tard recharger l'image depuis le répertoire d'enregistrement

Code : Sélectionner tout - Visualiser dans une fenêtre à part
podman load --input image_mariadb_12_0.tar
test de la nouvelle image

Code : Sélectionner tout - Visualiser dans une fenêtre à part
podman run -d --name serveur_web -p 8080:80 localhost/httpd-php:8.2
dans le navigateur
🟢il est possible de supprimer la première image pour économiser de l'espace disque avec la commande "podman rmi"

cette commande map un répertoire web avec le serveur web php de podman
Code : Sélectionner tout - Visualiser dans une fenêtre à part
podman run -d --name php-dev -v /media/DOSSIER_WEB_ORDI_HOTE:/var/www/html:Z localhost/httpd-php:8.2
normalement les fichiers web s'affichent dans le navigateur

avec podman run pour lancer un serveur lamp
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
podman pod create --name db0 --publish 8080:80 && 
podman run -d --name php8-dev --pod db0 -v /media/DOSSIER_WEB_ORDI_HOTE:/var/www/html:Z httpd-php:8.2 && 
podman pod create --name db1 --publish 8000:80 --publish 3306:3306 && podman run --name mysql-dev --pod db1 -v /media/DOSSIER_BDD_HOTE:/var/lib/mysql:Z -e MYSQL_ROOT_PASSWORD="mdp" -e MYSQL_USER="utilisateur_bdd" -e MYSQL_PASSWORD="mdpbdd" -d mysql:8 && 
podman run --name pma --pod db1 -d -e PMA_HOST=127.0.0.1 -e PMA_PORT=3306 phpmyadmin:latest && 
echo -e '\n' && podman pod ps && 
echo -e '\n' && podman ps && 
echo -e '\n'

phpmyadmin sur port 8000


mais avec podman-compose le réseau fonctionne mieux
il faut installer podman-compose et créer des fichier yml

pour installer podman compose

sur debian
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
sudo apt update
sudo apt install podman-compose

ci-dessous le fichier podman-compose.yml équivalent à podman run mais fonctionne mieux au niveau du réseau, accès possible simultanément au web, bdd et pma

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
version: '3.8'
services:
  php-apache-environment:
    image: httpd-php:8.2
    container_name: httpd-php8
    volumes:
      - /media/DOSSIER_WEB_ORDI_HOTE:/var/www/html
    ports: 
      - 8080:80
  db:
    image: mysql:8
    container_name: db-mysql8
    environment:
      MYSQL_ROOT_PASSWORD: mdp
      MYSQL_DATABASE: demo
      MYSQL_USER: utilisateur_bdd
      MYSQL_PASSWORD: mdpbdd
      restart: unless-stopped
    volumes:
      - /media/DOSSIER_BDD_HOTE:/var/lib/mysql
    ports:
      - "3306:3306"
  phpmyadmin:
    image: phpmyadmin:5.2.2
    container_name: pma
    environment:
      PMA_HOST: db
      MYSQL_ROOT_PASSWORD: rootpassword
    ports:
      - "8000:80"

dans le répertoire du fichier yml podman-compose.yml , démarrer avec
et éteindre avec
Il est aussi possible d'utiliser podman-desktop mais en ligne de cde on peut voir pas mal de chose d'un coup


Pascal
info2gestion📍️