<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">
	<id>https://wiki.lesitadom.fr/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Domi</id>
	<title>Documentation - Contributions [fr]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.lesitadom.fr/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Domi"/>
	<link rel="alternate" type="text/html" href="https://wiki.lesitadom.fr/index.php/Sp%C3%A9cial:Contributions/Domi"/>
	<updated>2026-07-01T03:19:30Z</updated>
	<subtitle>Contributions</subtitle>
	<generator>MediaWiki 1.43.1</generator>
	<entry>
		<id>https://wiki.lesitadom.fr/index.php?title=Proxy&amp;diff=1658</id>
		<title>Proxy</title>
		<link rel="alternate" type="text/html" href="https://wiki.lesitadom.fr/index.php?title=Proxy&amp;diff=1658"/>
		<updated>2026-04-01T17:17:50Z</updated>

		<summary type="html">&lt;p&gt;Domi : /* Certificats Let&amp;#039;sEncrypt avec Certbot */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
----&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Installation de nginx et de certbot dans un conteneur Alpine léger&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Pour que la redirection fonctionne, il faut ajouter un CNAME aux sous-domaines et non les rediriger (réécriture de la requête sinon, et échec !)&lt;br /&gt;
&lt;br /&gt;
=Création du conteneur et installation d&#039;Nginx=&lt;br /&gt;
Création et mise à jour du conteneur :&lt;br /&gt;
 lxc launch proxy locale:alpineLe&lt;br /&gt;
 lxc exec proxy apk update&lt;br /&gt;
 lxc exec proxy apk upgrade&lt;br /&gt;
&lt;br /&gt;
Installation de nginx et démarrage auto du service :&lt;br /&gt;
 lxc exec proxy apk add nginx&lt;br /&gt;
 lxc exec proxy rc-update add nginx&lt;br /&gt;
&lt;br /&gt;
Mettre le conteneur en frontal &#039;&#039;(à partir de l&#039;hôte)&#039;&#039;&lt;br /&gt;
 lxc config device add &#039;&#039;nom_du_conteneur&#039;&#039; myport80 proxy listen=tcp:0.0.0.0:80 connect=tcp:127.0.0.1:80 proxy_protocol=true&lt;br /&gt;
 lxc config device add &#039;&#039;nom_du_conteneur&#039;&#039; myport443 proxy listen=tcp:0.0.0.0:443 connect=tcp:127.0.0.1:443 proxy_protocol=true&lt;br /&gt;
&lt;br /&gt;
Annuler le fichier de conf par défaut :&lt;br /&gt;
 lxc shell proxy&lt;br /&gt;
 mv /etc/nginx/http.d/default.conf /etc/nginx/http.d/default.conf.sav&lt;br /&gt;
&lt;br /&gt;
Créer les fichiers de configuration : &amp;lt;br&amp;gt;&lt;br /&gt;
:* /etc/nginx/[[#le.conf|&#039;&#039;&#039;le.conf&#039;&#039;&#039;]]&lt;br /&gt;
:* /etc/nginx/[[#realip.conf|&#039;&#039;&#039;realip.conf&#039;&#039;&#039;]]&lt;br /&gt;
:* /etc/nginx/[[#proxy_params|&#039;&#039;&#039;proxy_params&#039;&#039;&#039;]]&lt;br /&gt;
&lt;br /&gt;
Configurer les redirections (voir fichier complet [[#proxy.conf|plus bas]]) :&lt;br /&gt;
 vi /etc/nginx/http.d/&#039;&#039;&#039;proxy.conf&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 server {&lt;br /&gt;
       listen 80 proxy_protocol;&lt;br /&gt;
       listen [::]:80 proxy_protocol;&lt;br /&gt;
 &lt;br /&gt;
       server_name tables.lesitadom.fr;&lt;br /&gt;
 &lt;br /&gt;
       location / {&lt;br /&gt;
               include /etc/nginx/proxy_params;&lt;br /&gt;
               proxy_pass &amp;lt;nowiki&amp;gt;http://tables.lxd&amp;lt;/nowiki&amp;gt;;&lt;br /&gt;
       }&lt;br /&gt;
 &lt;br /&gt;
       include /etc/nginx/realip.conf;&lt;br /&gt;
 }&lt;br /&gt;
...etc&lt;br /&gt;
&lt;br /&gt;
À l&#039;usage, le module H5P de wordpress rame. Il semble qu&#039;il faille charger le module de compression zip et configurer nginx :&lt;br /&gt;
 apk add nginx-mod-http-zip&lt;br /&gt;
&lt;br /&gt;
Dans le fichier /etc/nginx/&#039;&#039;&#039;nginx.conf&#039;&#039;&#039;, ajouter :&lt;br /&gt;
 gzip on;&lt;br /&gt;
 gzip_types text/plain text/css application/json application/javascript application/xml application/xhtml+xml image/svg+xml;&lt;br /&gt;
 gzip_comp_level 5;&lt;br /&gt;
 gzip_vary on;&lt;br /&gt;
 gzip_min_length 1000;&lt;br /&gt;
&lt;br /&gt;
Démarrer nginx&lt;br /&gt;
 rc-service nginx start&lt;br /&gt;
&lt;br /&gt;
Reconfigurer les autres conteneurs pour mettre la nouvelle adresse (fichier remoteip.conf)&lt;br /&gt;
Sur chaque conteneur client :&lt;br /&gt;
création du fichier /etc/apache2/conf.d/&#039;&#039;&#039;remoteip.conf&#039;&#039;&#039; avec :&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
/etc/apache2/conf.d/&#039;&#039;&#039;remoteip.conf&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
  RemoteIPHeader X-Real-IP&lt;br /&gt;
  RemoteIPTrustedProxy 10.178.91.45 fd42:b9ca:1a60:95fc:216:3eff:fe71:850f&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Pour une configuration en mode conteneur :&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
/etc/apache2/conf.d/&#039;&#039;&#039;remoteip.conf&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
  RemoteIPHeader X-Real-IP&lt;br /&gt;
  RemoteIPTrustedProxy proxy.lxd &lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
	Modification de /etc/apache2/httpd.conf&lt;br /&gt;
décommenter :&lt;br /&gt;
  LoadModule remoteip_module modules/mod_remoteip.so&lt;br /&gt;
&lt;br /&gt;
Relancer les services apache2&lt;br /&gt;
 rc-service apache2 restart&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=Certificats Let&#039;sEncrypt avec Certbot=&lt;br /&gt;
(cf. https://certbot.eff.org/instructions)&lt;br /&gt;
&lt;br /&gt;
Création d&#039;un environnement virtuel pour certbot&lt;br /&gt;
  # apk add python3 augeas-libs&lt;br /&gt;
  # python3 -m venv /opt/certbot/&lt;br /&gt;
  # /opt/certbot/bin/pip install --upgrade pip&lt;br /&gt;
&lt;br /&gt;
Installer certbot dans l&#039;environnement créé :&lt;br /&gt;
  # /opt/certbot/bin/pip install certbot certbot-nginx&lt;br /&gt;
&lt;br /&gt;
Préparer la commande certbot :&lt;br /&gt;
  # ln -s /opt/certbot/bin/certbot /usr/bin/certbot&lt;br /&gt;
&lt;br /&gt;
(Raspberry est configuré pour écouter 80 et 443)&lt;br /&gt;
&lt;br /&gt;
Configuration automatique d&#039;nginx&lt;br /&gt;
  # certbot --nginx&lt;br /&gt;
&lt;br /&gt;
Remarque :	On peut également ne générer qu&#039;un certificat et configurer nginx à la main en lançant :&lt;br /&gt;
  # certbot certonly --nginx&lt;br /&gt;
Cette procédure est préférable. Elle evite de voir Certbot mettre le bazar dans le fichier de configuration d&#039;nginx.&lt;br /&gt;
&lt;br /&gt;
Le processus demande &lt;br /&gt;
 - une adresse mail&lt;br /&gt;
 - l&#039;acceptation des conditions générales d&#039;utilisation&lt;br /&gt;
 - l&#039;autorisation d&#039;envoyer des infos par E-mail&lt;br /&gt;
 - indiquer quels serveurs doivent être en HTTPS (se base sur le fichier de configuration de nginx : proxy.conf ici)&lt;br /&gt;
 &lt;br /&gt;
Automatiser la mise à jour du certificat :&lt;br /&gt;
&lt;br /&gt;
 # echo &amp;quot;0 0,12 * * * root /opt/certbot/bin/python -c &#039;import random; import time; time.sleep(random.random() * 3600)&#039; &amp;amp;&amp;amp; certbot renew -q&amp;quot; |  tee -a /etc/crontabs/root &amp;gt; /dev/null&lt;br /&gt;
ou éditer cron et ajouter : &lt;br /&gt;
  0    0    1    */2    *    certbot renew&lt;br /&gt;
  # crontab -e&lt;br /&gt;
  0    0    1    */2    *    certbot renew -q (pour quiet) --post-hook &amp;quot;rc-service nginx reload&amp;quot;&lt;br /&gt;
(vérifier si certbot ne fout pas le bordel dans le fichier de conf d&#039;nginx : faire un fichier de sauvegarde fonctionnel avant...)&lt;br /&gt;
&lt;br /&gt;
Modifier le fichier /etc/letsencrypt/renewal/lesitadom.fr.conf et passer installer = nginx à installer = none pour que certbot ne cherche pas à modifier proxy.conf à chaque renouvellement.&lt;br /&gt;
&lt;br /&gt;
{{replier | Si on choisit la configuration automatique (à éviter si possible)}}&lt;br /&gt;
==Ajouté automatiquement dans la conf de chaque redirection==&lt;br /&gt;
  listen [::]:443 ssl ipv6only=on; # managed by Certbot&lt;br /&gt;
  listen 443 ssl; # managed by Certbot&lt;br /&gt;
  ssl_certificate /etc/letsencrypt/live/lesitadom.fr/fullchain.pem; # managed by Certbot&lt;br /&gt;
  ssl_certificate_key /etc/letsencrypt/live/lesitadom.fr/privkey.pem; # managed by Certbot&lt;br /&gt;
  include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot&lt;br /&gt;
  ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot&lt;br /&gt;
&lt;br /&gt;
Et pour chaque bloc serveur, la conf correspondante (redirection permanente)&lt;br /&gt;
  server {                                                                                    &lt;br /&gt;
    if ($host = lesitadom.fr) {                                                             &lt;br /&gt;
        return 301 https://$host$request_uri;                                               &lt;br /&gt;
    } # managed by Certbot                                                                  &lt;br /&gt;
                                                                                            &lt;br /&gt;
                                                                                            &lt;br /&gt;
        listen 80 proxy_protocol;                                                           &lt;br /&gt;
        listen [::]:80 proxy_protocol;                                                      &lt;br /&gt;
                                                                                            &lt;br /&gt;
        server_name lesitadom.fr;                                                           &lt;br /&gt;
    return 404; # managed by Certbot                                                        &lt;br /&gt;
 }                     &lt;br /&gt;
&lt;br /&gt;
  !!!! Certbot modifie le fichier de configuration d&#039;nginx, mais ne met pas &#039;proxy_protocol&#039; à la fin des directives d&#039;écoute.&lt;br /&gt;
  ==&amp;gt;&amp;gt; ! il faut le rajouter à la main, sinon rien ne fonctionne et on est bon pour trois jours de recherches sur le net !!!!&lt;br /&gt;
  &amp;quot;Managed by Certbot&amp;quot; comme un con et codé avec les pieds !!!&lt;br /&gt;
{{replier fin}}&lt;br /&gt;
&lt;br /&gt;
==Avec &#039;# certbot certonly --nginx&#039;==&lt;br /&gt;
&lt;br /&gt;
Inclure le.conf et realip.conf dans chaque&lt;br /&gt;
&lt;br /&gt;
  server {&lt;br /&gt;
      listen [::]:443 ssl ipv6only=on proxy_protocol;&lt;br /&gt;
      listen 443 ssl proxy_protocol;&lt;br /&gt;
          &lt;br /&gt;
      include /etc/nginx/le.conf;&lt;br /&gt;
      server_name toto.lesitadom.fr;&lt;br /&gt;
          location / {&lt;br /&gt;
          ...&lt;br /&gt;
          }&lt;br /&gt;
      include /etc/nginx/realip.conf;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
Pour tester la validité des certificats :&lt;br /&gt;
 &lt;br /&gt;
 https://www.ssllabs.com/ssltest/index.html&lt;br /&gt;
 https://www.sslshopper.com/ssl-checker.html&lt;br /&gt;
&lt;br /&gt;
==Commandes utiles==&lt;br /&gt;
Pour &#039;&#039;&#039;lister&#039;&#039;&#039; les certificats :&lt;br /&gt;
  # certbot certificates&lt;br /&gt;
&lt;br /&gt;
pour lister les sous-domaines inclus :&lt;br /&gt;
  # certbot certificates --cert-name lesitadom.fr&lt;br /&gt;
&lt;br /&gt;
Pour &#039;&#039;&#039;ajouter&#039;&#039;&#039; ou &#039;&#039;&#039;retirer&#039;&#039;&#039; un sous-domaine du certificat :&lt;br /&gt;
  # certbot certonly --cert-name &amp;lt;nom du certificat&amp;gt; -d &amp;lt;liste du domaine et des sous-domaines à inclure, séparés par &#039;,&#039;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Exemple :&lt;br /&gt;
  # certbot certonly --cert-name lesitadom.fr -d lesitadom.fr,bcd.lesitadom.fr,phpma.lesitadom.fr&lt;br /&gt;
(ne garde que le domaine principal et les sous-domaines &#039;bcd&#039; et &#039;phpma&#039;)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Renouveler&#039;&#039;&#039; le certificat&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ajouter&#039;&#039;&#039; un sous-domaine&lt;br /&gt;
Impossible simplement, il faut préciser tous les sous-domaines à chaque fois (en rajoutant --expand, on met le certificat à jour)&lt;br /&gt;
Exemple :&lt;br /&gt;
  # certbot certonly --expand --cert-name lesitadom.fr -d lesitadom.fr,bcd.lesitadom.fr,phpma.lesitadom.fr,&#039;&#039;[sous-domaines à ajouter séparés par une &#039;,&#039;]&#039;&#039;&lt;br /&gt;
-&amp;gt; Choix 1 : Nginx web server&lt;br /&gt;
-&amp;gt; Vérifier la mise à jour puis &amp;quot;u&amp;quot; (update)&lt;br /&gt;
Il peut être judicieux d&#039;ajouter &#039;--dry-run -v&#039; pour simuler la commande en mode verbiage avant de lancer une commande effective...&lt;br /&gt;
&lt;br /&gt;
=Procédure pour les sous-domaines=&lt;br /&gt;
&lt;br /&gt;
# Chez l&#039;hébergeur, ajouter une zone dns de type CNAME pour le sous-domaine qui pointe vers le domaine principal.&lt;br /&gt;
# Modifier le fichier de configuration de nginx pour prendre le sous-domaine en compte (server_name ...), redémarrer nginx.&lt;br /&gt;
# Ajouter le sous-domaine au certificat letsencrypt existant (--expand)&lt;br /&gt;
&lt;br /&gt;
=Fichiers de configuration=&lt;br /&gt;
==proxy.conf==&lt;br /&gt;
/etc/nginx/http.d/proxy.conf (copie proxy.sav)&lt;br /&gt;
  #_____________________________&lt;br /&gt;
  #			       |&lt;br /&gt;
  # Redirection http vers https |&lt;br /&gt;
  #_____________________________|&lt;br /&gt;
  &lt;br /&gt;
  server {&lt;br /&gt;
  	listen 80 proxy_protocol;&lt;br /&gt;
  	listen [::]:80 proxy_protocol;&lt;br /&gt;
  &lt;br /&gt;
  	server_name .lesitadom.fr;&lt;br /&gt;
  		return 301 &amp;lt;nowiki&amp;gt;https://$host$request_uri&amp;lt;/nowiki&amp;gt;;&lt;br /&gt;
  	 &lt;br /&gt;
    	server_name serveurdd.ddns.net;&lt;br /&gt;
        		return 301 &amp;lt;nowiki&amp;gt;https://$host$request_uri&amp;lt;/nowiki&amp;gt;;&lt;br /&gt;
    	 &lt;br /&gt;
    	server_name les-bosquets.fr;&lt;br /&gt;
        		return 301 &amp;lt;nowiki&amp;gt;https://$host$request_uri&amp;lt;/nowiki&amp;gt;;&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  #______________________________________________________&lt;br /&gt;
  #                                                      |&lt;br /&gt;
  # Réécriture pour phpmyadmin, wordpress, tables et pmb |&lt;br /&gt;
  #______________________________________________________|&lt;br /&gt;
 &lt;br /&gt;
  server {&lt;br /&gt;
  	listen [::]:443 ssl proxy_protocol;&lt;br /&gt;
  	listen 443 ssl proxy_protocol;&lt;br /&gt;
  &lt;br /&gt;
  	include /etc/nginx/le.conf;&lt;br /&gt;
  	include /etc/nginx/realip.conf;&lt;br /&gt;
  &lt;br /&gt;
         server_name lesitadom.fr;                                                  &lt;br /&gt;
                location /phpma {                                                  &lt;br /&gt;
                        return 302 &amp;lt;nowiki&amp;gt;https://phpma.lesitadom.fr&amp;lt;/nowiki&amp;gt;;                     &lt;br /&gt;
                }                                                                  &lt;br /&gt;
                location /phpmyadmin {                               &lt;br /&gt;
                        return 302 &amp;lt;nowiki&amp;gt;https://phpma.lesitadom.fr&amp;lt;/nowiki&amp;gt;;&lt;br /&gt;
                }                                                    &lt;br /&gt;
                location /wordpress {                          &lt;br /&gt;
                        return 302 &amp;lt;nowiki&amp;gt;https://wp.lesitadom.fr&amp;lt;/nowiki&amp;gt;;   &lt;br /&gt;
                }                                                    &lt;br /&gt;
                location /wp {                                &lt;br /&gt;
                        return 302 &amp;lt;nowiki&amp;gt;https://wp.lesitadom.fr&amp;lt;/nowiki&amp;gt;;   &lt;br /&gt;
                }                                              &lt;br /&gt;
                location /mediawiki {                         &lt;br /&gt;
                        return 302 &amp;lt;nowiki&amp;gt;https://wiki.lesitadom.fr&amp;lt;/nowiki&amp;gt;;        &lt;br /&gt;
                }                                             &lt;br /&gt;
                location /wiki {                              &lt;br /&gt;
                        return 302 &amp;lt;nowiki&amp;gt;https://wiki.lesitadom.fr&amp;lt;/nowiki&amp;gt;;  &lt;br /&gt;
                }                                             &lt;br /&gt;
                location /pmb {                                      &lt;br /&gt;
                        return 302 &amp;lt;nowiki&amp;gt;https://pmb.lesitadom.fr&amp;lt;/nowiki&amp;gt;;  &lt;br /&gt;
                }                                             &lt;br /&gt;
                location /bcd {                                &lt;br /&gt;
                        return 302 &amp;lt;nowiki&amp;gt;https://pmb.lesitadom.fr/opac_css&amp;lt;/nowiki&amp;gt;;&lt;br /&gt;
                }                                                    &lt;br /&gt;
                location /tables {                            &lt;br /&gt;
                        return 302 &amp;lt;nowiki&amp;gt;https://tables.lesitadom.fr&amp;lt;/nowiki&amp;gt;;&lt;br /&gt;
                }                                              &lt;br /&gt;
                location / {                                         &lt;br /&gt;
                        proxy_pass &amp;lt;nowiki&amp;gt;http://192.168.1.21&amp;lt;/nowiki&amp;gt;;              &lt;br /&gt;
                        include /etc/nginx/proxy_params;      &lt;br /&gt;
                }                                              &lt;br /&gt;
                location /*{                                   &lt;br /&gt;
                        return 404;&lt;br /&gt;
                }&lt;br /&gt;
  }&lt;br /&gt;
  #________________________________________________________      &lt;br /&gt;
  #                                                        |           &lt;br /&gt;
  # Conteneur phpMyAdmin : phpma.lesitadom.fr -&amp;gt; phpma.lxd |           &lt;br /&gt;
  #________________________________________________________|    &lt;br /&gt;
                                                                 &lt;br /&gt;
  server {                                                       &lt;br /&gt;
        listen [::]:443 ssl proxy_protocol;                          &lt;br /&gt;
        listen 443 ssl proxy_protocol;                               &lt;br /&gt;
                                                              &lt;br /&gt;
        allow 192.168.1.0/24;                                  &lt;br /&gt;
        deny all;                                              &lt;br /&gt;
                                                                     &lt;br /&gt;
        include /etc/nginx/le.conf;                                  &lt;br /&gt;
        include /etc/nginx/realip.conf;                       &lt;br /&gt;
                                                               &lt;br /&gt;
        server_name phpma.lesitadom.fr;                        &lt;br /&gt;
                                                                     &lt;br /&gt;
        location / {                                                 &lt;br /&gt;
                rewrite ^/$ /phpmyadmin last;                 &lt;br /&gt;
        }                                                      &lt;br /&gt;
                                                               &lt;br /&gt;
        location /phpmyadmin {                                       &lt;br /&gt;
                proxy_pass &amp;lt;nowiki&amp;gt;http://phpma.lxd&amp;lt;/nowiki&amp;gt;;                         &lt;br /&gt;
                include /etc/nginx/proxy_params;              &lt;br /&gt;
        }                                                      &lt;br /&gt;
  }              &lt;br /&gt;
  #______________________________________________________&lt;br /&gt;
  #                                                      |&lt;br /&gt;
  # Conteneur PMB : bcd.lesitadom.fr -&amp;gt; pmb.lxd opac_css |&lt;br /&gt;
  #______________________________________________________|&lt;br /&gt;
  &lt;br /&gt;
  server {&lt;br /&gt;
  	listen [::]:443 ssl proxy_protocol;&lt;br /&gt;
  	listen 443 ssl proxy_protocol;&lt;br /&gt;
  &lt;br /&gt;
  	include /etc/nginx/le.conf;                                                             &lt;br /&gt;
  	include /etc/nginx/realip.conf;&lt;br /&gt;
  &lt;br /&gt;
  	server_name bcd.lesitadom.fr;&lt;br /&gt;
  	location / {&lt;br /&gt;
  		return 302 &amp;lt;nowiki&amp;gt;https://pmb.lesitadom.fr/opac_css/&amp;lt;/nowiki&amp;gt;;&lt;br /&gt;
       	}&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  #___________________________________________________&lt;br /&gt;
  #                                                   |&lt;br /&gt;
  # Conteneur PMB admin : pmb.lesitadom.fr -&amp;gt; pmb.lxd |&lt;br /&gt;
  #___________________________________________________|&lt;br /&gt;
  &lt;br /&gt;
  server {&lt;br /&gt;
  	listen [::]:443 ssl proxy_protocol;&lt;br /&gt;
  	listen 443 ssl proxy_protocol;&lt;br /&gt;
  &lt;br /&gt;
  	include /etc/nginx/le.conf;                                                             &lt;br /&gt;
  	include /etc/nginx/realip.conf;&lt;br /&gt;
  &lt;br /&gt;
  	server_name pmb.lesitadom.fr pmb.les-bosquets.fr;&lt;br /&gt;
  	location / {&lt;br /&gt;
  		proxy_pass &amp;lt;nowiki&amp;gt;http://pmb.lxd&amp;lt;/nowiki&amp;gt;;&lt;br /&gt;
  		include /etc/nginx/proxy_params;&lt;br /&gt;
       	}&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  #______________________________________________________&lt;br /&gt;
  #                                                      |&lt;br /&gt;
  # Conteneur Tables : tables.lesitadom.fr -&amp;gt; tables.lxd |&lt;br /&gt;
  #______________________________________________________|&lt;br /&gt;
  &lt;br /&gt;
  server {&lt;br /&gt;
  	listen [::]:443 ssl proxy_protocol;&lt;br /&gt;
  	listen 443 ssl proxy_protocol;&lt;br /&gt;
  &lt;br /&gt;
  	include /etc/nginx/le.conf;                                                             &lt;br /&gt;
  	include /etc/nginx/realip.conf;&lt;br /&gt;
  &lt;br /&gt;
  	server_name tables.lesitadom.fr tables.les-bosquets.fr;&lt;br /&gt;
  	location / {&lt;br /&gt;
  		proxy_pass &amp;lt;nowiki&amp;gt;http://tables.lxd&amp;lt;/nowiki&amp;gt;;&lt;br /&gt;
  		include /etc/nginx/proxy_params;&lt;br /&gt;
       	}&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  #_____________________________________________________&lt;br /&gt;
  #                                                     |&lt;br /&gt;
  # Conteneur Wikimedia : wiki.lesitadom.fr -&amp;gt; wiki.lxd |&lt;br /&gt;
  #_____________________________________________________|&lt;br /&gt;
  &lt;br /&gt;
  server {&lt;br /&gt;
  	listen [::]:443 ssl proxy_protocol;&lt;br /&gt;
  	listen 443 ssl proxy_protocol;&lt;br /&gt;
  &lt;br /&gt;
  	include /etc/nginx/le.conf;                                                             &lt;br /&gt;
  	include /etc/nginx/realip.conf;&lt;br /&gt;
  &lt;br /&gt;
  	server_name wiki.lesitadom.fr;          &lt;br /&gt;
  	location / {&lt;br /&gt;
  		proxy_pass &amp;lt;nowiki&amp;gt;http://wiki.lxd&amp;lt;/nowiki&amp;gt;;&lt;br /&gt;
  		include /etc/nginx/proxy_params;&lt;br /&gt;
       	}&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  #__________________________________________________&lt;br /&gt;
  #                                                  |&lt;br /&gt;
  # Conteneur Wordrpress : wp.lesitadom.fr -&amp;gt; wp.lxd |&lt;br /&gt;
  #__________________________________________________|&lt;br /&gt;
  &lt;br /&gt;
  server {&lt;br /&gt;
                                          &lt;br /&gt;
  	listen [::]:443 ssl proxy_protocol;&lt;br /&gt;
  	listen 443 ssl proxy_protocol;&lt;br /&gt;
  &lt;br /&gt;
  	include /etc/nginx/le.conf;                                                             &lt;br /&gt;
  	include /etc/nginx/realip.conf;&lt;br /&gt;
  &lt;br /&gt;
  	server_name wp.lesitadom.fr;          &lt;br /&gt;
  	location / {&lt;br /&gt;
  		proxy_pass &amp;lt;nowiki&amp;gt;http://wp.lxd&amp;lt;/nowiki&amp;gt;;&lt;br /&gt;
  		include /etc/nginx/proxy_params;&lt;br /&gt;
       	}&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  #___________________________________________________                 &lt;br /&gt;
  #                                                   |         &lt;br /&gt;
  # Redirection de serveurdd.ddns.net -&amp;gt; lesitadom.fr |                &lt;br /&gt;
  #___________________________________________________|          &lt;br /&gt;
                                                                     &lt;br /&gt;
  server {                                                             &lt;br /&gt;
                                                              &lt;br /&gt;
        listen [::]:443 ssl proxy_protocol;                    &lt;br /&gt;
        listen 443 ssl proxy_protocol;                         &lt;br /&gt;
                                                                     &lt;br /&gt;
        server_name serveurdd.ddns.net;                              &lt;br /&gt;
                if ($request_uri = /tables){                  &lt;br /&gt;
                        return 301 &amp;lt;nowiki&amp;gt;https://tables.lesitadom.fr&amp;lt;/nowiki&amp;gt;;&lt;br /&gt;
                }                                              &lt;br /&gt;
                                                                     &lt;br /&gt;
                if ($request_uri = /pmb){                            &lt;br /&gt;
                        return 301 &amp;lt;nowiki&amp;gt;https://pmb.lesitadom.fr/opac_css/&amp;lt;/nowiki&amp;gt;;&lt;br /&gt;
                }                                              &lt;br /&gt;
                                                               &lt;br /&gt;
                if ($request_uri = /pmb/admin.php){                  &lt;br /&gt;
                        return 301 &amp;lt;nowiki&amp;gt;https://pmb.lesitadom.fr&amp;lt;/nowiki&amp;gt;;         &lt;br /&gt;
                }                                                     &lt;br /&gt;
                                                                      &lt;br /&gt;
                if ($request_uri = /pmb/opac_css/index.php){   &lt;br /&gt;
                        return 301 &amp;lt;nowiki&amp;gt;https://pmb.lesitadom.fr/opac_css/&amp;lt;/nowiki&amp;gt;;&lt;br /&gt;
                }                                                    &lt;br /&gt;
                                                                      &lt;br /&gt;
                if ($request_uri = /mediawiki){                       &lt;br /&gt;
                        return 301 &amp;lt;nowiki&amp;gt;https://wiki.lesitadom.fr&amp;lt;/nowiki&amp;gt;;  &lt;br /&gt;
                }                                                     &lt;br /&gt;
                return 301 &amp;lt;nowiki&amp;gt;https://lesitadom.fr&amp;lt;/nowiki&amp;gt;;                      &lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  #________________________________________________              &lt;br /&gt;
  #                                                |             &lt;br /&gt;
  # Redirection de les-bosquets.fr -&amp;gt; lesitadom.fr |                    &lt;br /&gt;
  #________________________________________________|                   &lt;br /&gt;
                                                                      &lt;br /&gt;
  server {                                                       &lt;br /&gt;
                                                               &lt;br /&gt;
        listen [::]:443 ssl proxy_protocol;                           &lt;br /&gt;
        listen 443 ssl proxy_protocol;                               &lt;br /&gt;
                                                                      &lt;br /&gt;
        server_name les-bosquets.fr;                                  &lt;br /&gt;
                if ($request_uri = /tables){                   &lt;br /&gt;
                        return 302 &amp;lt;nowiki&amp;gt;https://tables.les-bosquets.fr&amp;lt;/nowiki&amp;gt;;    &lt;br /&gt;
                }                                                    &lt;br /&gt;
                                                                      &lt;br /&gt;
                if ($request_uri = /pmb){                             &lt;br /&gt;
                        return 302 &amp;lt;nowiki&amp;gt;https://pmb.les-bosquets.fr/opac_css/&amp;lt;/nowiki&amp;gt;;&lt;br /&gt;
                }                                                        &lt;br /&gt;
                                                                      &lt;br /&gt;
                if ($request_uri = /adminbcd){                        &lt;br /&gt;
                        return 302 &amp;lt;nowiki&amp;gt;https://pmb.les-bosquets.fr&amp;lt;/nowiki&amp;gt;;       &lt;br /&gt;
                }                                              &lt;br /&gt;
                                                                         &lt;br /&gt;
                if ($request_uri = /pmb/opac_css/index.php){          &lt;br /&gt;
                        return 302 &amp;lt;nowiki&amp;gt;https://pmb.les-bosquets.fr/opac_css/&amp;lt;/nowiki&amp;gt;;&lt;br /&gt;
                }                                                        &lt;br /&gt;
                                                               &lt;br /&gt;
                return 302 &amp;lt;nowiki&amp;gt;https://pmb.les-bosquets.fr/opac_css&amp;lt;/nowiki&amp;gt;;         &lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
==le.conf==&lt;br /&gt;
/etc/nginx/&#039;&#039;&#039;le.conf&#039;&#039;&#039;&lt;br /&gt;
  ssl_certificate /etc/letsencrypt/live/lesitadom.fr/fullchain.pem;&lt;br /&gt;
  ssl_certificate_key /etc/letsencrypt/live/lesitadom.fr/privkey.pem;&lt;br /&gt;
  include /etc/letsencrypt/options-ssl-nginx.conf;&lt;br /&gt;
  ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;&lt;br /&gt;
&lt;br /&gt;
==realip.conf==&lt;br /&gt;
/etc/nginx/&#039;&#039;&#039;realip.conf&#039;&#039;&#039;&lt;br /&gt;
  real_ip_header proxy_protocol;&lt;br /&gt;
  set_real_ip_from 127.0.0.1;&lt;br /&gt;
&lt;br /&gt;
==proxy_params==&lt;br /&gt;
/etc/nginx/&#039;&#039;&#039;proxy_params&#039;&#039;&#039;&lt;br /&gt;
  proxy_redirect 	off;&lt;br /&gt;
  proxy_set_header 	Host 			$host;&lt;br /&gt;
  proxy_set_header 	X-Real-IP		$remote_addr;&lt;br /&gt;
  proxy_set_header 	X-Forwarded-For 	$proxy_add_x_forwarded_for;&lt;br /&gt;
  proxy_set_header 	X-Forwarded-Proto 	$scheme;&lt;/div&gt;</summary>
		<author><name>Domi</name></author>
	</entry>
	<entry>
		<id>https://wiki.lesitadom.fr/index.php?title=Organigramme_d%27installation&amp;diff=1657</id>
		<title>Organigramme d&#039;installation</title>
		<link rel="alternate" type="text/html" href="https://wiki.lesitadom.fr/index.php?title=Organigramme_d%27installation&amp;diff=1657"/>
		<updated>2025-09-06T16:54:02Z</updated>

		<summary type="html">&lt;p&gt;Domi : /* Configurer et automatiser */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Gestion du changement d&#039;IP de la livebox chez Ionos ==&lt;br /&gt;
=== Installer python ===&lt;br /&gt;
Vérifier si python et pip sont installés :&lt;br /&gt;
 python --version&lt;br /&gt;
 pip --version&lt;br /&gt;
&lt;br /&gt;
Installer python 3 :&lt;br /&gt;
 apt update&lt;br /&gt;
 apt upgrade&lt;br /&gt;
 apt install software-properties-common&lt;br /&gt;
 apt-get install python3&lt;br /&gt;
&lt;br /&gt;
=== Installer le client multi-plateforme ===&lt;br /&gt;
 pip install domain-connect-dyndns&lt;br /&gt;
=== Configurer et automatiser ===&lt;br /&gt;
Ajouter le domaine :&lt;br /&gt;
 domain-connect-dyndns setup --domain NOM_DU_DOMAINE&lt;br /&gt;
Suivre les étapes et noter le chemin du fichier de configuration (*.txt)&amp;lt;/br&amp;gt;&lt;br /&gt;
Pour mettre à jour tous les domaines :&lt;br /&gt;
 domain-connect-dyndns update --all&lt;br /&gt;
Pour automatiser le processus de surveillance et de mise à jour :&amp;lt;/br&amp;gt;&lt;br /&gt;
Éditer crontab :&lt;br /&gt;
 crontab -e&lt;br /&gt;
Ajouter la ligne :&lt;br /&gt;
 */1 * * * * /usr/bin/flock -n /tmp/ipupdate.lck /usr/local/bin/domain-connect-dyndns update --all --config /Chemin de sauvegarde/settings.txt&lt;br /&gt;
C&#039;est tout !&lt;br /&gt;
== Les outils ==&lt;br /&gt;
=== Conteneur proxy : [[Proxy|Voir la page]] ===&lt;br /&gt;
::* Création du conteneur&lt;br /&gt;
::* Installation et configuration de nginx&lt;br /&gt;
::* Installation de certbot pour let&#039;s encrypt&lt;br /&gt;
::* Voir pour installer des outils de sécurité (fail2ban,...)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
=== Conteneur Mariadb : [[Mariadb|Voir la page]] ===&lt;br /&gt;
::* Création du conteneur&lt;br /&gt;
::* Installation de mariadb&lt;br /&gt;
::* Configuration&lt;br /&gt;
::* Création d&#039;un utilisateur&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
=== Conteneur PhpMyadmin : [[Phpma|Voir la page]] ===&lt;br /&gt;
::* Création du conteneur&lt;br /&gt;
::* Installation d&#039;apache2 et de phpmyadmin&lt;br /&gt;
::* Configuration d&#039;apache2 et de phpmyadmin&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Les applis ==&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
=== Conteneur tables : [[Tables|Voir la page]] ===&lt;br /&gt;
:*Installation du serveur web avec apache&lt;br /&gt;
:*Installation de &#039;&#039;tables&#039;&#039; et corrections des fichiers&lt;br /&gt;
:*Installation et configuration de goaccess&lt;br /&gt;
&lt;br /&gt;
=== Conteneur pmb : [[Pmb|Voir la page]]===&lt;br /&gt;
&#039;&#039;(cf pmb sur alpine léger (historique dans pmb sur alpine lourd)&#039;&#039;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Conteneur wiki : [[Wiki|Voir la page]] ===&lt;br /&gt;
::* Création d&#039;un utilisateur et d&#039;une base de donnée vide pour le wiki&lt;br /&gt;
::* Transfert de la base de données&lt;br /&gt;
::* Création du conteneur&lt;br /&gt;
::* Installation du serveur web&lt;br /&gt;
::* Installation de la nouvelle version de mediawiki&lt;br /&gt;
::* Initialisation de l&#039;application&lt;br /&gt;
::* Modification de LocalSettings.php&lt;br /&gt;
::* Récupération du contenu sur l&#039;ancien serveur et transfert des données&lt;br /&gt;
::* Corrections&lt;br /&gt;
&lt;br /&gt;
=== Conteneur wp : [[Wp|Voir la page]] ===&lt;br /&gt;
&#039;&#039;(cf wordpress sur alpine léger mais sauter à la fin. Mariadb et phpmyadmin dans d&#039;autres conteneurs...)&#039;&#039;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Stockage et sauvegardes ==&lt;br /&gt;
création d&#039;un volume pour les sauvegardes :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; lxc storage volume create default sauvegarde-lxc size=50GB&lt;br /&gt;
&lt;br /&gt;
Montage du volume dans chaque conteneur :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; lxc config device add &amp;lt;nom du conteneur&amp;gt; sauvegarde-mount disk source=sauvegarde-lxc pool=default path=/sauvegardes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
logiciel : borg sauvegarde et rétention de données. Comte chez Kiki, à pousser en ssh.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sécurisation ==&lt;br /&gt;
=== Mises à jour automatiques [[Mises à jour automatiques|Voir la page]]===&lt;br /&gt;
&lt;br /&gt;
Afin d&#039;automatiser la mise à jour des conteneurs, on crée un script qui va&lt;br /&gt;
:*Mettre à jour les conteneurs alpine en fonctionnement&lt;br /&gt;
:*Créer un fichier de log&lt;br /&gt;
:*Corriger le fichier de log pour ne garder la trace que des deux dernières mises à jour&lt;br /&gt;
:*Envoyer un mail d&#039;alerte en cas d&#039;erreur&lt;br /&gt;
:*Redémarrer les conteneurs en prenant soin de démarrer le conteneur &#039;&#039;&#039;proxy&#039;&#039;&#039; en dernier&lt;br /&gt;
&lt;br /&gt;
===Sauvegardes automatiques des données des conteneurs web===&lt;br /&gt;
On va programmer une sauvegarde automatique pour chaque conteneur web, ainsi que pour le conteneur &#039;&#039;&#039;mariadb&#039;&#039;&#039;. Ces sauvegardes se feront dans un espace commun qui sera à son tour sauvegardé sur un site distant à intervalles réguliers en gérant la rotation des sauvegardes.&amp;lt;br&amp;gt;&lt;br /&gt;
Les conteneurs :&lt;br /&gt;
::* mariadb&lt;br /&gt;
::* wiki&lt;br /&gt;
::* pmb&lt;br /&gt;
::* wp&lt;br /&gt;
bénéficieront de ce mécanisme.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour les conteneurs &#039;&#039;&#039;proxy&#039;&#039;&#039;, &#039;&#039;&#039;phpma&#039;&#039;&#039; et &#039;&#039;&#039;tables&#039;&#039;&#039;, une simple sauvegarde à la main suffira.&amp;lt;br&amp;gt;&lt;br /&gt;
On commence par créer un volume de 50Gb et on le monte dans les conteneurs concernés :&lt;br /&gt;
 lxc storage volume create default sauvegarde-lxc size=50GB&lt;br /&gt;
 lxc config device add wp sauvegarde-mount disk source=sauvegarde-lxc pool=default path=/sauvegardes&lt;br /&gt;
 lxc config device add wiki sauvegarde-mount disk source=sauvegarde-lxc pool=default path=/sauvegardes&lt;br /&gt;
 lxc config device add mariadb sauvegarde-mount disk source=sauvegarde-lxc pool=default path=/sauvegardes&lt;br /&gt;
 lxc config device add pmb sauvegarde-mount disk source=sauvegarde-lxc pool=default path=/sauvegardes&lt;br /&gt;
====mariadb====&lt;br /&gt;
:* On commence par créer un utilisateur spécifique à la sauvegarde.&amp;lt;br&amp;gt; Sous phpMyAdmin, création de l&#039;utilisateur &#039;&#039;backup_user&#039;&#039; avec les privilèges &#039;&#039;SELECT&#039;&#039; et &#039;&#039;LOCK TABLES&#039;&#039; pour les tables &#039;&#039;pmb&#039;&#039;, &#039;&#039;wiki&#039;&#039; et &#039;&#039;wordpress&#039;&#039;.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
:* Création du script de sauvegarde des tables&amp;lt;br&amp;gt;On sauvegarde les tables &#039;&#039;pmb&#039;&#039;, &#039;&#039;wordpress&#039;&#039; et &#039;&#039;wiki&#039;&#039; en générant un fichier de log dans /var/log/&#039;&#039;&#039;backup_mariadb.log&#039;&#039;&#039;.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;/usr/local/bin/backup_mariadb.sh&#039;&#039;&#039; :&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 DATE=$(date +%Y%m%d_%H%M)&lt;br /&gt;
 OUTPUT_FILE=&amp;quot;/sauvegardes/db_backup_${DATE}.sql.gz&amp;quot;&lt;br /&gt;
 USER=&amp;quot;backup_user&amp;quot;  &amp;lt;br&amp;gt;PASSWORD=&amp;quot;*********&amp;quot; # &#039;&#039;Mot de passe de backup_user&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 # Liste des bases de données à sauvegarder&lt;br /&gt;
 DATABASES=&amp;quot;pmb wiki wordpress&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 # Exporte chaque base de données et la compresse&lt;br /&gt;
 for DB in $DATABASES; do&lt;br /&gt;
   echo &amp;quot;Sauvegarde de la base de données : $DB&amp;quot;&lt;br /&gt;
   mysqldump -u &amp;quot;$USER&amp;quot; -p&amp;quot;$PASSWORD&amp;quot; &amp;quot;$DB&amp;quot; | gzip &amp;gt;&amp;gt; &amp;quot;$OUTPUT_FILE&amp;quot;&lt;br /&gt;
 done&lt;br /&gt;
 &lt;br /&gt;
 chmod 600 &amp;quot;$OUTPUT_FILE&amp;quot; # Restreindre les permissions&lt;br /&gt;
 echo &amp;quot;Sauvegarde des bases de données terminée : $OUTPUT_FILE&amp;quot; &amp;gt;&amp;gt; /var/log/backup_mariadb.log&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
:* Rendre le script exécutable :&amp;lt;br&amp;gt;&lt;br /&gt;
 chmod +x /usr/local/bin/backup_mariadb.sh&amp;lt;br&amp;gt;&lt;br /&gt;
:* Automatiser le script le samedi à 2h du matin :&amp;lt;br&amp;gt;Avec &#039;&#039;&#039;crontab -e&#039;&#039;&#039;, ajouter la ligne :&lt;br /&gt;
 0 2 * * 6 /usr/local/bin/backup_mariadb.sh&lt;br /&gt;
&lt;br /&gt;
====wiki====&lt;br /&gt;
MediaWiki installe par défaut des extensions et des skins. La sauvegarde de ces extension alourdit considérablement le fichier. Le script parcourt le dossier pour les exclure et ne tenir compte que de celles nouvellement installées.&amp;lt;br&amp;gt;&lt;br /&gt;
Il crée également un fichier de log /var/log/&#039;&#039;&#039;backup_wiki.log&#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
/usr/local/bin/&#039;&#039;&#039;backup_wiki.sh&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 DATE=$(date +%Y%m%d_%H%M)&lt;br /&gt;
 OUTPUT_FILE=&amp;quot;/sauvegardes/wiki_backup_${DATE}.tar.gz&amp;quot;&lt;br /&gt;
 MEDIAWIKI_ROOT=&amp;quot;/var/www/localhost/htdocs/&amp;quot;&lt;br /&gt;
 BASE_EXTENSIONS=&amp;quot;AbuseFilter CategoryTree Cite CiteThisPage CodeEditor ConfirmEdit DiscussionTools Echo Gadgets ImageMap InputBox Interwiki Linter LoginNotify Math MultimediaViewer Nuke OATHAuth PageImages ParserFunctions PdfHandler Poem ReplaceText Scribunto SecureLinkFixer SpamBlacklist SyntaxHighlight_GeSHi TemplateData TextExtracts Thanks TitleBlacklist VisualEditor WikiEditor&amp;quot;&lt;br /&gt;
 FILES_TO_BACKUP=&amp;quot;images&lt;br /&gt;
 LocalSettings.php&lt;br /&gt;
 extensions-custom/&lt;br /&gt;
 skins-custom/&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 echo &amp;quot;--- Début du script ---&amp;quot;&lt;br /&gt;
 echo &amp;quot;Date de la sauvegarde : $DATE&amp;quot;&lt;br /&gt;
 echo &amp;quot;Fichier de sortie : $OUTPUT_FILE&amp;quot;&lt;br /&gt;
 echo &amp;quot;Racine de MediaWiki : $MEDIAWIKI_ROOT&amp;quot;&lt;br /&gt;
 echo &amp;quot;Extensions de base : $BASE_EXTENSIONS&amp;quot;&lt;br /&gt;
 echo &amp;quot;Fichiers de base à sauvegarder : $FILES_TO_BACKUP&amp;quot;&lt;br /&gt;
 echo &amp;quot;---&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 cd &amp;quot;$MEDIAWIKI_ROOT&amp;quot; || { echo &amp;quot;Erreur lors du changement de répertoire vers $MEDIAWIKI_ROOT&amp;quot;; exit 1; }&lt;br /&gt;
 echo &amp;quot;Répertoire courant : $(pwd)&amp;quot;&lt;br /&gt;
 echo &amp;quot;--- Identification des extensions personnalisées ---&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 echo &amp;quot;Création du fichier temporaire /tmp/backup_list.txt&amp;quot;&lt;br /&gt;
 echo &amp;quot;$FILES_TO_BACKUP&amp;quot; &amp;gt; /tmp/backup_list.txt&lt;br /&gt;
 cat /tmp/backup_list.txt | while IFS= read -r LINE; do&lt;br /&gt;
   echo &amp;quot;Ajout de &#039;$LINE&#039; à la liste de sauvegarde.&amp;quot;&lt;br /&gt;
 done&lt;br /&gt;
 echo &amp;quot;---&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 echo &amp;quot;Traitement des extensions dans $MEDIAWIKI_ROOT/extensions/&amp;quot;&lt;br /&gt;
 for EXTENSION_DIR in &amp;quot;$MEDIAWIKI_ROOT&amp;quot;extensions/*; do&lt;br /&gt;
     if [ -d &amp;quot;$EXTENSION_DIR&amp;quot; ]; then&lt;br /&gt;
         EXTENSION_NAME=$(basename &amp;quot;$EXTENSION_DIR&amp;quot;)&lt;br /&gt;
         echo &amp;quot;Extension trouvée : $EXTENSION_NAME \(chemin complet : $EXTENSION_DIR\)&amp;quot;&lt;br /&gt;
         IS_BASE=0&lt;br /&gt;
         for BASE_EXT in $BASE_EXTENSIONS; do&lt;br /&gt;
             if [ &amp;quot;$EXTENSION_NAME&amp;quot; = &amp;quot;$BASE_EXT&amp;quot; ]; then&lt;br /&gt;
                 IS_BASE=1&lt;br /&gt;
                 echo &amp;quot;  &#039;$EXTENSION_NAME&#039; est une extension de base.&amp;quot;&lt;br /&gt;
                 break&lt;br /&gt;
             fi&lt;br /&gt;
         done&lt;br /&gt;
         if [ &amp;quot;$IS_BASE&amp;quot; -eq 0 ]; then&lt;br /&gt;
             echo &amp;quot;  &#039;$EXTENSION_NAME&#039; est une extension personnalisée. Ajout à la liste de sauvegarde.&amp;quot;&lt;br /&gt;
             echo &amp;quot;extensions/$EXTENSION_NAME&amp;quot; &amp;gt;&amp;gt; /tmp/backup_list.txt&lt;br /&gt;
         fi&lt;br /&gt;
     fi&lt;br /&gt;
 done&lt;br /&gt;
 echo &amp;quot;--- Liste de sauvegarde complète ---&amp;quot;&lt;br /&gt;
 cat /tmp/backup_list.txt&lt;br /&gt;
 echo &amp;quot;---&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 echo &amp;quot;Création de l&#039;archive : $OUTPUT_FILE&amp;quot;&lt;br /&gt;
 tar czf &amp;quot;$OUTPUT_FILE&amp;quot; -T /tmp/backup_list.txt --exclude=&#039;./tmp/backup_list.txt&#039;&lt;br /&gt;
 echo &amp;quot;Commande tar exécutée.&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 if [ -f &amp;quot;$OUTPUT_FILE&amp;quot; ]; then&lt;br /&gt;
     chmod 600 &amp;quot;$OUTPUT_FILE&amp;quot;&lt;br /&gt;
     echo &amp;quot;Permissions du fichier de sauvegarde mises à 600.&amp;quot;&lt;br /&gt;
     echo &amp;quot;Sauvegarde des données essentielles et des extensions personnalisées de MediaWiki terminée : $OUTPUT_FILE&amp;quot; &amp;gt;&amp;gt; /var/log/backup_wiki.log&lt;br /&gt;
     echo &amp;quot;--- Fin du script ---&amp;quot;&lt;br /&gt;
 else&lt;br /&gt;
     echo &amp;quot;Erreur : Le fichier de sauvegarde $OUTPUT_FILE n&#039;a pas été créé.&amp;quot;&lt;br /&gt;
     echo &amp;quot;--- Fin du script \(avec erreur\) ---&amp;quot;&lt;br /&gt;
     exit 1&lt;br /&gt;
 fi&lt;br /&gt;
 &lt;br /&gt;
 rm /tmp/backup_list.txt&lt;br /&gt;
 echo &amp;quot;Fichier temporaire /tmp/backup_list.txt supprimé.&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;NB :&#039;&#039;&#039; Les nombreuses lignes &#039;&#039;echo&#039;&#039; ont été ajoutées à des fin de corrections en cours de programmation et peuvent être simplifiées...&lt;br /&gt;
:* Rendre le script exécutable :&amp;lt;br&amp;gt;&lt;br /&gt;
 chmod +x /usr/local/bin/backup_wiki.sh&amp;lt;br&amp;gt;&lt;br /&gt;
:* Automatiser le script le samedi à 3h30 du matin :&amp;lt;br&amp;gt;Avec &#039;&#039;&#039;crontab -e&#039;&#039;&#039;, ajouter la ligne :&lt;br /&gt;
 30  3  *  *  6  /usr/local/bin/backup_wiki.sh&lt;br /&gt;
&lt;br /&gt;
====wp====&lt;br /&gt;
====pmb====&lt;/div&gt;</summary>
		<author><name>Domi</name></author>
	</entry>
	<entry>
		<id>https://wiki.lesitadom.fr/index.php?title=Organigramme_d%27installation&amp;diff=1656</id>
		<title>Organigramme d&#039;installation</title>
		<link rel="alternate" type="text/html" href="https://wiki.lesitadom.fr/index.php?title=Organigramme_d%27installation&amp;diff=1656"/>
		<updated>2025-09-06T16:53:18Z</updated>

		<summary type="html">&lt;p&gt;Domi : /* Les outils */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Gestion du changement d&#039;IP de la livebox chez Ionos ==&lt;br /&gt;
=== Installer python ===&lt;br /&gt;
Vérifier si python et pip sont installés :&lt;br /&gt;
 python --version&lt;br /&gt;
 pip --version&lt;br /&gt;
&lt;br /&gt;
Installer python 3 :&lt;br /&gt;
 apt update&lt;br /&gt;
 apt upgrade&lt;br /&gt;
 apt install software-properties-common&lt;br /&gt;
 apt-get install python3&lt;br /&gt;
&lt;br /&gt;
=== Installer le client multi-plateforme ===&lt;br /&gt;
 pip install domain-connect-dyndns&lt;br /&gt;
=== Configurer et automatiser ===&lt;br /&gt;
Ajouter le domaine :&lt;br /&gt;
 domain-connect-dyndns setup --domain NOM_DU_DOMAINE&lt;br /&gt;
Suivre les étapes et notr le chemin du fichier de configuration (*.txt)&amp;lt;/br&amp;gt;&lt;br /&gt;
Pour mettre à jour tous les domaines :&lt;br /&gt;
 domain-connect-dyndns update --all&lt;br /&gt;
Pour automatiser le processus de surveillance et de mise à jour :&amp;lt;/br&amp;gt;&lt;br /&gt;
Éditer crontab :&lt;br /&gt;
 crontab -e&lt;br /&gt;
Ajouter la ligne :&lt;br /&gt;
 */1 * * * * /usr/bin/flock -n /tmp/ipupdate.lck /usr/local/bin/domain-connect-dyndns update --all --config /Chemin de sauvegarde/settings.txt&lt;br /&gt;
C&#039;est tout !&lt;br /&gt;
== Les outils ==&lt;br /&gt;
=== Conteneur proxy : [[Proxy|Voir la page]] ===&lt;br /&gt;
::* Création du conteneur&lt;br /&gt;
::* Installation et configuration de nginx&lt;br /&gt;
::* Installation de certbot pour let&#039;s encrypt&lt;br /&gt;
::* Voir pour installer des outils de sécurité (fail2ban,...)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
=== Conteneur Mariadb : [[Mariadb|Voir la page]] ===&lt;br /&gt;
::* Création du conteneur&lt;br /&gt;
::* Installation de mariadb&lt;br /&gt;
::* Configuration&lt;br /&gt;
::* Création d&#039;un utilisateur&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
=== Conteneur PhpMyadmin : [[Phpma|Voir la page]] ===&lt;br /&gt;
::* Création du conteneur&lt;br /&gt;
::* Installation d&#039;apache2 et de phpmyadmin&lt;br /&gt;
::* Configuration d&#039;apache2 et de phpmyadmin&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Les applis ==&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
=== Conteneur tables : [[Tables|Voir la page]] ===&lt;br /&gt;
:*Installation du serveur web avec apache&lt;br /&gt;
:*Installation de &#039;&#039;tables&#039;&#039; et corrections des fichiers&lt;br /&gt;
:*Installation et configuration de goaccess&lt;br /&gt;
&lt;br /&gt;
=== Conteneur pmb : [[Pmb|Voir la page]]===&lt;br /&gt;
&#039;&#039;(cf pmb sur alpine léger (historique dans pmb sur alpine lourd)&#039;&#039;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Conteneur wiki : [[Wiki|Voir la page]] ===&lt;br /&gt;
::* Création d&#039;un utilisateur et d&#039;une base de donnée vide pour le wiki&lt;br /&gt;
::* Transfert de la base de données&lt;br /&gt;
::* Création du conteneur&lt;br /&gt;
::* Installation du serveur web&lt;br /&gt;
::* Installation de la nouvelle version de mediawiki&lt;br /&gt;
::* Initialisation de l&#039;application&lt;br /&gt;
::* Modification de LocalSettings.php&lt;br /&gt;
::* Récupération du contenu sur l&#039;ancien serveur et transfert des données&lt;br /&gt;
::* Corrections&lt;br /&gt;
&lt;br /&gt;
=== Conteneur wp : [[Wp|Voir la page]] ===&lt;br /&gt;
&#039;&#039;(cf wordpress sur alpine léger mais sauter à la fin. Mariadb et phpmyadmin dans d&#039;autres conteneurs...)&#039;&#039;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Stockage et sauvegardes ==&lt;br /&gt;
création d&#039;un volume pour les sauvegardes :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; lxc storage volume create default sauvegarde-lxc size=50GB&lt;br /&gt;
&lt;br /&gt;
Montage du volume dans chaque conteneur :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; lxc config device add &amp;lt;nom du conteneur&amp;gt; sauvegarde-mount disk source=sauvegarde-lxc pool=default path=/sauvegardes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
logiciel : borg sauvegarde et rétention de données. Comte chez Kiki, à pousser en ssh.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sécurisation ==&lt;br /&gt;
=== Mises à jour automatiques [[Mises à jour automatiques|Voir la page]]===&lt;br /&gt;
&lt;br /&gt;
Afin d&#039;automatiser la mise à jour des conteneurs, on crée un script qui va&lt;br /&gt;
:*Mettre à jour les conteneurs alpine en fonctionnement&lt;br /&gt;
:*Créer un fichier de log&lt;br /&gt;
:*Corriger le fichier de log pour ne garder la trace que des deux dernières mises à jour&lt;br /&gt;
:*Envoyer un mail d&#039;alerte en cas d&#039;erreur&lt;br /&gt;
:*Redémarrer les conteneurs en prenant soin de démarrer le conteneur &#039;&#039;&#039;proxy&#039;&#039;&#039; en dernier&lt;br /&gt;
&lt;br /&gt;
===Sauvegardes automatiques des données des conteneurs web===&lt;br /&gt;
On va programmer une sauvegarde automatique pour chaque conteneur web, ainsi que pour le conteneur &#039;&#039;&#039;mariadb&#039;&#039;&#039;. Ces sauvegardes se feront dans un espace commun qui sera à son tour sauvegardé sur un site distant à intervalles réguliers en gérant la rotation des sauvegardes.&amp;lt;br&amp;gt;&lt;br /&gt;
Les conteneurs :&lt;br /&gt;
::* mariadb&lt;br /&gt;
::* wiki&lt;br /&gt;
::* pmb&lt;br /&gt;
::* wp&lt;br /&gt;
bénéficieront de ce mécanisme.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour les conteneurs &#039;&#039;&#039;proxy&#039;&#039;&#039;, &#039;&#039;&#039;phpma&#039;&#039;&#039; et &#039;&#039;&#039;tables&#039;&#039;&#039;, une simple sauvegarde à la main suffira.&amp;lt;br&amp;gt;&lt;br /&gt;
On commence par créer un volume de 50Gb et on le monte dans les conteneurs concernés :&lt;br /&gt;
 lxc storage volume create default sauvegarde-lxc size=50GB&lt;br /&gt;
 lxc config device add wp sauvegarde-mount disk source=sauvegarde-lxc pool=default path=/sauvegardes&lt;br /&gt;
 lxc config device add wiki sauvegarde-mount disk source=sauvegarde-lxc pool=default path=/sauvegardes&lt;br /&gt;
 lxc config device add mariadb sauvegarde-mount disk source=sauvegarde-lxc pool=default path=/sauvegardes&lt;br /&gt;
 lxc config device add pmb sauvegarde-mount disk source=sauvegarde-lxc pool=default path=/sauvegardes&lt;br /&gt;
====mariadb====&lt;br /&gt;
:* On commence par créer un utilisateur spécifique à la sauvegarde.&amp;lt;br&amp;gt; Sous phpMyAdmin, création de l&#039;utilisateur &#039;&#039;backup_user&#039;&#039; avec les privilèges &#039;&#039;SELECT&#039;&#039; et &#039;&#039;LOCK TABLES&#039;&#039; pour les tables &#039;&#039;pmb&#039;&#039;, &#039;&#039;wiki&#039;&#039; et &#039;&#039;wordpress&#039;&#039;.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
:* Création du script de sauvegarde des tables&amp;lt;br&amp;gt;On sauvegarde les tables &#039;&#039;pmb&#039;&#039;, &#039;&#039;wordpress&#039;&#039; et &#039;&#039;wiki&#039;&#039; en générant un fichier de log dans /var/log/&#039;&#039;&#039;backup_mariadb.log&#039;&#039;&#039;.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;/usr/local/bin/backup_mariadb.sh&#039;&#039;&#039; :&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 DATE=$(date +%Y%m%d_%H%M)&lt;br /&gt;
 OUTPUT_FILE=&amp;quot;/sauvegardes/db_backup_${DATE}.sql.gz&amp;quot;&lt;br /&gt;
 USER=&amp;quot;backup_user&amp;quot;  &amp;lt;br&amp;gt;PASSWORD=&amp;quot;*********&amp;quot; # &#039;&#039;Mot de passe de backup_user&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 # Liste des bases de données à sauvegarder&lt;br /&gt;
 DATABASES=&amp;quot;pmb wiki wordpress&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 # Exporte chaque base de données et la compresse&lt;br /&gt;
 for DB in $DATABASES; do&lt;br /&gt;
   echo &amp;quot;Sauvegarde de la base de données : $DB&amp;quot;&lt;br /&gt;
   mysqldump -u &amp;quot;$USER&amp;quot; -p&amp;quot;$PASSWORD&amp;quot; &amp;quot;$DB&amp;quot; | gzip &amp;gt;&amp;gt; &amp;quot;$OUTPUT_FILE&amp;quot;&lt;br /&gt;
 done&lt;br /&gt;
 &lt;br /&gt;
 chmod 600 &amp;quot;$OUTPUT_FILE&amp;quot; # Restreindre les permissions&lt;br /&gt;
 echo &amp;quot;Sauvegarde des bases de données terminée : $OUTPUT_FILE&amp;quot; &amp;gt;&amp;gt; /var/log/backup_mariadb.log&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
:* Rendre le script exécutable :&amp;lt;br&amp;gt;&lt;br /&gt;
 chmod +x /usr/local/bin/backup_mariadb.sh&amp;lt;br&amp;gt;&lt;br /&gt;
:* Automatiser le script le samedi à 2h du matin :&amp;lt;br&amp;gt;Avec &#039;&#039;&#039;crontab -e&#039;&#039;&#039;, ajouter la ligne :&lt;br /&gt;
 0 2 * * 6 /usr/local/bin/backup_mariadb.sh&lt;br /&gt;
&lt;br /&gt;
====wiki====&lt;br /&gt;
MediaWiki installe par défaut des extensions et des skins. La sauvegarde de ces extension alourdit considérablement le fichier. Le script parcourt le dossier pour les exclure et ne tenir compte que de celles nouvellement installées.&amp;lt;br&amp;gt;&lt;br /&gt;
Il crée également un fichier de log /var/log/&#039;&#039;&#039;backup_wiki.log&#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
/usr/local/bin/&#039;&#039;&#039;backup_wiki.sh&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 DATE=$(date +%Y%m%d_%H%M)&lt;br /&gt;
 OUTPUT_FILE=&amp;quot;/sauvegardes/wiki_backup_${DATE}.tar.gz&amp;quot;&lt;br /&gt;
 MEDIAWIKI_ROOT=&amp;quot;/var/www/localhost/htdocs/&amp;quot;&lt;br /&gt;
 BASE_EXTENSIONS=&amp;quot;AbuseFilter CategoryTree Cite CiteThisPage CodeEditor ConfirmEdit DiscussionTools Echo Gadgets ImageMap InputBox Interwiki Linter LoginNotify Math MultimediaViewer Nuke OATHAuth PageImages ParserFunctions PdfHandler Poem ReplaceText Scribunto SecureLinkFixer SpamBlacklist SyntaxHighlight_GeSHi TemplateData TextExtracts Thanks TitleBlacklist VisualEditor WikiEditor&amp;quot;&lt;br /&gt;
 FILES_TO_BACKUP=&amp;quot;images&lt;br /&gt;
 LocalSettings.php&lt;br /&gt;
 extensions-custom/&lt;br /&gt;
 skins-custom/&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 echo &amp;quot;--- Début du script ---&amp;quot;&lt;br /&gt;
 echo &amp;quot;Date de la sauvegarde : $DATE&amp;quot;&lt;br /&gt;
 echo &amp;quot;Fichier de sortie : $OUTPUT_FILE&amp;quot;&lt;br /&gt;
 echo &amp;quot;Racine de MediaWiki : $MEDIAWIKI_ROOT&amp;quot;&lt;br /&gt;
 echo &amp;quot;Extensions de base : $BASE_EXTENSIONS&amp;quot;&lt;br /&gt;
 echo &amp;quot;Fichiers de base à sauvegarder : $FILES_TO_BACKUP&amp;quot;&lt;br /&gt;
 echo &amp;quot;---&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 cd &amp;quot;$MEDIAWIKI_ROOT&amp;quot; || { echo &amp;quot;Erreur lors du changement de répertoire vers $MEDIAWIKI_ROOT&amp;quot;; exit 1; }&lt;br /&gt;
 echo &amp;quot;Répertoire courant : $(pwd)&amp;quot;&lt;br /&gt;
 echo &amp;quot;--- Identification des extensions personnalisées ---&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 echo &amp;quot;Création du fichier temporaire /tmp/backup_list.txt&amp;quot;&lt;br /&gt;
 echo &amp;quot;$FILES_TO_BACKUP&amp;quot; &amp;gt; /tmp/backup_list.txt&lt;br /&gt;
 cat /tmp/backup_list.txt | while IFS= read -r LINE; do&lt;br /&gt;
   echo &amp;quot;Ajout de &#039;$LINE&#039; à la liste de sauvegarde.&amp;quot;&lt;br /&gt;
 done&lt;br /&gt;
 echo &amp;quot;---&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 echo &amp;quot;Traitement des extensions dans $MEDIAWIKI_ROOT/extensions/&amp;quot;&lt;br /&gt;
 for EXTENSION_DIR in &amp;quot;$MEDIAWIKI_ROOT&amp;quot;extensions/*; do&lt;br /&gt;
     if [ -d &amp;quot;$EXTENSION_DIR&amp;quot; ]; then&lt;br /&gt;
         EXTENSION_NAME=$(basename &amp;quot;$EXTENSION_DIR&amp;quot;)&lt;br /&gt;
         echo &amp;quot;Extension trouvée : $EXTENSION_NAME \(chemin complet : $EXTENSION_DIR\)&amp;quot;&lt;br /&gt;
         IS_BASE=0&lt;br /&gt;
         for BASE_EXT in $BASE_EXTENSIONS; do&lt;br /&gt;
             if [ &amp;quot;$EXTENSION_NAME&amp;quot; = &amp;quot;$BASE_EXT&amp;quot; ]; then&lt;br /&gt;
                 IS_BASE=1&lt;br /&gt;
                 echo &amp;quot;  &#039;$EXTENSION_NAME&#039; est une extension de base.&amp;quot;&lt;br /&gt;
                 break&lt;br /&gt;
             fi&lt;br /&gt;
         done&lt;br /&gt;
         if [ &amp;quot;$IS_BASE&amp;quot; -eq 0 ]; then&lt;br /&gt;
             echo &amp;quot;  &#039;$EXTENSION_NAME&#039; est une extension personnalisée. Ajout à la liste de sauvegarde.&amp;quot;&lt;br /&gt;
             echo &amp;quot;extensions/$EXTENSION_NAME&amp;quot; &amp;gt;&amp;gt; /tmp/backup_list.txt&lt;br /&gt;
         fi&lt;br /&gt;
     fi&lt;br /&gt;
 done&lt;br /&gt;
 echo &amp;quot;--- Liste de sauvegarde complète ---&amp;quot;&lt;br /&gt;
 cat /tmp/backup_list.txt&lt;br /&gt;
 echo &amp;quot;---&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 echo &amp;quot;Création de l&#039;archive : $OUTPUT_FILE&amp;quot;&lt;br /&gt;
 tar czf &amp;quot;$OUTPUT_FILE&amp;quot; -T /tmp/backup_list.txt --exclude=&#039;./tmp/backup_list.txt&#039;&lt;br /&gt;
 echo &amp;quot;Commande tar exécutée.&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 if [ -f &amp;quot;$OUTPUT_FILE&amp;quot; ]; then&lt;br /&gt;
     chmod 600 &amp;quot;$OUTPUT_FILE&amp;quot;&lt;br /&gt;
     echo &amp;quot;Permissions du fichier de sauvegarde mises à 600.&amp;quot;&lt;br /&gt;
     echo &amp;quot;Sauvegarde des données essentielles et des extensions personnalisées de MediaWiki terminée : $OUTPUT_FILE&amp;quot; &amp;gt;&amp;gt; /var/log/backup_wiki.log&lt;br /&gt;
     echo &amp;quot;--- Fin du script ---&amp;quot;&lt;br /&gt;
 else&lt;br /&gt;
     echo &amp;quot;Erreur : Le fichier de sauvegarde $OUTPUT_FILE n&#039;a pas été créé.&amp;quot;&lt;br /&gt;
     echo &amp;quot;--- Fin du script \(avec erreur\) ---&amp;quot;&lt;br /&gt;
     exit 1&lt;br /&gt;
 fi&lt;br /&gt;
 &lt;br /&gt;
 rm /tmp/backup_list.txt&lt;br /&gt;
 echo &amp;quot;Fichier temporaire /tmp/backup_list.txt supprimé.&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;NB :&#039;&#039;&#039; Les nombreuses lignes &#039;&#039;echo&#039;&#039; ont été ajoutées à des fin de corrections en cours de programmation et peuvent être simplifiées...&lt;br /&gt;
:* Rendre le script exécutable :&amp;lt;br&amp;gt;&lt;br /&gt;
 chmod +x /usr/local/bin/backup_wiki.sh&amp;lt;br&amp;gt;&lt;br /&gt;
:* Automatiser le script le samedi à 3h30 du matin :&amp;lt;br&amp;gt;Avec &#039;&#039;&#039;crontab -e&#039;&#039;&#039;, ajouter la ligne :&lt;br /&gt;
 30  3  *  *  6  /usr/local/bin/backup_wiki.sh&lt;br /&gt;
&lt;br /&gt;
====wp====&lt;br /&gt;
====pmb====&lt;/div&gt;</summary>
		<author><name>Domi</name></author>
	</entry>
	<entry>
		<id>https://wiki.lesitadom.fr/index.php?title=Wp&amp;diff=1655</id>
		<title>Wp</title>
		<link rel="alternate" type="text/html" href="https://wiki.lesitadom.fr/index.php?title=Wp&amp;diff=1655"/>
		<updated>2025-07-09T08:26:21Z</updated>

		<summary type="html">&lt;p&gt;Domi : /* phpmyadmin */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Wordpress sur alpine léger =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;(ajout wp.lesitadom dans /etc/hosts)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Création du conteneur :&lt;br /&gt;
  lxc launch local:alpineLe wp&lt;br /&gt;
  lxc exec wp apk update&lt;br /&gt;
  lxc exec wp apk update&lt;br /&gt;
(ça marche ;))&lt;br /&gt;
&lt;br /&gt;
== Serveur web : apache2 - php83 - mariadb ==&lt;br /&gt;
cf notes apache2 php sur alpine léger - modif : php84 à la place de php83&lt;br /&gt;
&lt;br /&gt;
ne fonctionne pas... mauvaise version de php ? Ok avec php83 =&amp;gt; on recommence...&lt;br /&gt;
&lt;br /&gt;
Ok !&lt;br /&gt;
&lt;br /&gt;
À l&#039;usage, H5P nécessite &#039;&#039;&#039;mbstring&#039;&#039;&#039; et &#039;&#039;&#039;zip&#039;&#039;&#039; : Ajout de &#039;&#039;&#039;php83-mbstring&#039;&#039;&#039; et &#039;&#039;&#039;php83-zip&#039;&#039;&#039; (relance d&#039;apache 2)&lt;br /&gt;
Lors du téléchargement d&#039;exercices (3.1 Mio), Nginx envoie l&#039;erreur 413 : Corriger proxy.conf en ajoutant la ligne&lt;br /&gt;
&lt;br /&gt;
 client_max_body_size 200M; (par défaut à 1Mio)&lt;br /&gt;
&lt;br /&gt;
Relancer nginx.&lt;br /&gt;
&lt;br /&gt;
Il faut également augmenter les valeurs : (dans /etc/php83/php.ini)&lt;br /&gt;
  upload_max_filesize = 256M&lt;br /&gt;
  post_max_size = 256M&lt;br /&gt;
  max_execution_time = 300&lt;br /&gt;
(relancer apache2)&lt;br /&gt;
&lt;br /&gt;
== Mariadb ==&lt;br /&gt;
&#039;&#039;(d&#039;après mes notes instal serveur + PMB)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
  apk add mysql mariadb mariadb-server-utils mariadb-client&lt;br /&gt;
  apk add php83-pdo_mysql php83-mbstring&lt;br /&gt;
&#039;&#039;(voir plus tard s&#039;il faut mysqli ou mysqlnd)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Initialisation de mariadb&lt;br /&gt;
  /etc/init.d/mariadb setup&lt;br /&gt;
(peuple /var/lib/mysql)&lt;br /&gt;
&lt;br /&gt;
  rc-service mariadb start&lt;br /&gt;
=&amp;gt; ok&lt;br /&gt;
 mysql&lt;br /&gt;
=&amp;gt; on entre dans mysql -&amp;gt; Ok&lt;br /&gt;
&lt;br /&gt;
== installation de phpmyadmin ==&lt;br /&gt;
&lt;br /&gt;
  apk add phpmyadmin&lt;br /&gt;
-&amp;gt; Installe de nombreux packages et librairies (php83-{mysqli,bz2,ctype,curl,gd,session,zip,xmlwriter,iconv})&lt;br /&gt;
	(lib{xau,md,bsd,xdmcp,xcb,x11,xext,ice,bsm,xt,xpm,dav1d,jpeg,yuv,avif,png,shrpyuv,webp,zip} aom-libs,freetype)&lt;br /&gt;
&lt;br /&gt;
 phpmyadmin has been installed to: &lt;br /&gt;
       /usr/share/webapps/phpmyadmin&lt;br /&gt;
 phpmyadmin config file has been installed to: &lt;br /&gt;
       /etc/phpmyadmin/config.inc.php&lt;br /&gt;
 If you use apache2:&lt;br /&gt;
      1) Change the ownership of the config directory:&lt;br /&gt;
             chown -R apache:apache /etc/phpmyadmin&lt;br /&gt;
      2) See if you need to modify the apache2 config:&lt;br /&gt;
             /etc/apache2/conf.d/phpmyadmin.conf&lt;br /&gt;
      3) Restart apache2 when done.&lt;br /&gt;
&lt;br /&gt;
  rc-service apache2 restart&lt;br /&gt;
-&amp;gt; phpmyadmin accessible à wp.lesitadom.fr/phpmyadmin&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Conteneur mariadb&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Création d&#039;un utilisateur pour phpmyadmin :&lt;br /&gt;
  # mysql&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  CREATE USER &#039;login_util&#039;@&#039;%&#039; IDENTIFIED BY &#039;pass_util&#039;;&lt;br /&gt;
  GRANT ALL PRIVILEGES ON *.* TO &#039;login_util&#039;@&#039;%&#039; WITH GRANT OPTION;&lt;br /&gt;
  FLUSH PRIVILEGES;&lt;br /&gt;
&#039;&#039;(Ctrl-d pour sortir)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Pour l&#039;accès avec mot de passe :&lt;br /&gt;
stopper les services mariadb et apache2 :&lt;br /&gt;
  rc-service mariadb stop&lt;br /&gt;
  rc-service apache2 stop&lt;br /&gt;
Dans /etc/my.cnf.d/maria_db_server.cnf, sous [mysqld], ajouter :&lt;br /&gt;
  skip-grant-tables&lt;br /&gt;
Relancer les services et ça fonctionne !&lt;br /&gt;
...pas tout à fait... la configuration de phpmyadmin n&#039;est pas terminée... Cf message au bas&lt;br /&gt;
&lt;br /&gt;
Récupération d&#039;un fichier de conf de phpmyadmin qui fonctionne sur le net (modif de l&#039;utilisateur et du mdp)&lt;br /&gt;
&lt;br /&gt;
Lancement de l&#039;installation de mariadb avec les paramètres par défaut (y à toutes les questions...)&lt;br /&gt;
&lt;br /&gt;
Redémarrage du conteneur -&amp;gt; phpmyadmin fonctionne avec les droits qui vont bien&lt;br /&gt;
&lt;br /&gt;
==Installation de wordpress==&lt;br /&gt;
&lt;br /&gt;
téléchargement de wordpres-...zip -&amp;gt; tmp du raspberry&lt;br /&gt;
 lxc file push /tmp/wordpress-6.7.2-fr_FR.zip wp/tmp/&lt;br /&gt;
Dans le conteneur :&lt;br /&gt;
 unzip /tmp/wordpress-6.7.2-fr_FR.zip -d /var/www/localhost/htdocs/&lt;br /&gt;
Déplacer le contenu à la racine :&lt;br /&gt;
 mv /var/www/localhost/htdocs/wordpress/* /var/www/localhost/htdocs/&lt;br /&gt;
&lt;br /&gt;
Création de la bdd wordpress (wp_perso2025) par phpmyadmin avec utilisateur wp-dd2025 et mdp 1_mdppuwp!&lt;br /&gt;
&lt;br /&gt;
Connection à wp dans le navigateur à l&#039;adresse du serveur : wp.lesitadom.fr -&amp;gt; configuration&lt;br /&gt;
&lt;br /&gt;
Tout fonctionne !&lt;br /&gt;
&lt;br /&gt;
Voir s&#039;il est possible d&#039;installer mariadb et phpmyadmin sur des conteneur distincts...&lt;br /&gt;
&lt;br /&gt;
=Installation de &#039;&#039;&#039;wordpress&#039;&#039;&#039; - &#039;&#039;&#039;mariadb&#039;&#039;&#039; et &#039;&#039;&#039;phpmyadmin&#039;&#039;&#039; sur trois conteneurs séparés &#039;&#039;alipneLe&#039;&#039;=&lt;br /&gt;
&lt;br /&gt;
==Mariadb==&lt;br /&gt;
Création du conteneur maria + maj&lt;br /&gt;
Installation de mariadb&lt;br /&gt;
 apk add (mysql) mariadb mariadb-server-utils mariadb-client&lt;br /&gt;
 apk add php83-pdo_mysql php83-mbstring&lt;br /&gt;
&lt;br /&gt;
Initialisation de mariadb (peuple /var/lib/mysql)&lt;br /&gt;
 /etc/init.d/mariadb setup&lt;br /&gt;
&lt;br /&gt;
Démarrer le service&lt;br /&gt;
 rc-service mariadb start&lt;br /&gt;
&lt;br /&gt;
Sécuriser la base de donnée&lt;br /&gt;
 mysql_secure_installation (vide/n/n/Y/Y/Y/Y)&lt;br /&gt;
&lt;br /&gt;
on peut entrer dans mysql (idem mariadb)&lt;br /&gt;
&lt;br /&gt;
===Notes obsolètes===&lt;br /&gt;
Ajout d&#039;apache, php et phpmyadmin&lt;br /&gt;
&lt;br /&gt;
 apk add apache2 apache2-ctl php83 php83-apache2 php83-mbstring phpmyadmin&lt;br /&gt;
&lt;br /&gt;
Copie du fichier de conf dans etc/phpmyadmin/&lt;br /&gt;
Modif du fichier /var/www/localhost/htdocs/index.html -&amp;gt; index.php&lt;br /&gt;
Ajout de la redirection dans le conteneur proxy&lt;br /&gt;
Ajout de la redirection dans le fichier host du bureau&lt;br /&gt;
&lt;br /&gt;
À la première connection, phpmyadmin est en erreur : la base n&#039;est pas encore crée. Cliquer...&lt;br /&gt;
&lt;br /&gt;
phpmyadmin affiche une erreur d&#039;accès à /usr/share/webapps/phpmyadmin/tmp : le dossier n&#039;existe pas : création.&lt;br /&gt;
 chown apache:apache /usr/share/webapps/phpmyadmin/tmp&lt;br /&gt;
-&amp;gt; problème réglé&lt;br /&gt;
&lt;br /&gt;
phpmyadmin affiche une erreur concernant les cookies (pas de clé valide)&lt;br /&gt;
D&#039;après la documentation :&lt;br /&gt;
&lt;br /&gt;
// A string of 32 characters.&lt;br /&gt;
$cfg[&#039;blowfish_secret&#039;] = &#039;JOFw435365IScA&amp;amp;Q!cDugr!lSfuAz*OW&#039;;&lt;br /&gt;
88a7da62429ba6ad3cb3c76a09641fca&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Modification du fichier /etc/phpmyadmin/config.php en conséquence.&lt;br /&gt;
&lt;br /&gt;
-&amp;gt; marche pas&lt;br /&gt;
&lt;br /&gt;
Tentative de connexion à mariadb depuis le conteneur wiki... ne fonctionne pas. Plusieurs tentatives en agissant sur les paramètres côté client (règles firewall, ouverture de ports) ou du côté serveur (utilisateur, adresse bind, paramètres my.cnf et maria....cnf).&lt;br /&gt;
Au final, il faut commenter la ligne &#039;skip-networking&#039; et ça fonctionne (voir si la ligne &#039;innodb_force_recovery=1&#039; a une utilité...). Trouvé à l&#039;adresse &amp;quot;https://mariadb.com/kb/en/configuring-mariadb-for-remote-client-access/&amp;quot;. À retester sur une machine propre.&lt;br /&gt;
&lt;br /&gt;
==phpmyadmin==&lt;br /&gt;
Création du conteneur phpmyadmin et Maj&lt;br /&gt;
&lt;br /&gt;
Installation du serveur web : apache2&lt;br /&gt;
 apk add apache2 php83 php83-apache2 php83-mbstring&lt;br /&gt;
 rc-service apache2 start&lt;br /&gt;
&lt;br /&gt;
Installation de phpmyadmin&lt;br /&gt;
 apk add phpmyadmin&lt;br /&gt;
&lt;br /&gt;
 phpmyadmin has been installed to:&lt;br /&gt;
     /usr/share/webapps/phpmyadmin&lt;br /&gt;
 phpmyadmin config file has been installed to:&lt;br /&gt;
    /etc/phpmyadmin/config.inc.php&lt;br /&gt;
 If you use apache2:&lt;br /&gt;
     1) Change the ownership of the config directory:&lt;br /&gt;
            chown -R apache:apache /etc/phpmyadmin&lt;br /&gt;
     2) See if you need to modify the apache2 config:&lt;br /&gt;
            /etc/apache2/conf.d/phpmyadmin.conf&lt;br /&gt;
     3) Restart apache2 when done.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;(Ajout de phpmyadmin.lesitadom.fr au fichier hosts de l&#039;hôte)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Modification du fichier de conf dans le &#039;&#039;&#039;conteneur proxy&#039;&#039;&#039; :&lt;br /&gt;
&lt;br /&gt;
 * conteneur phpmyadmin&lt;br /&gt;
 server {&lt;br /&gt;
        listen 80 proxy_protocol;&lt;br /&gt;
        listen [::]:80 proxy_protocol;&lt;br /&gt;
 &lt;br /&gt;
        server_name phpmyadmin.lesitadom.fr;&lt;br /&gt;
 &lt;br /&gt;
        location / {&lt;br /&gt;
                include /etc/nginx/proxy_params;&lt;br /&gt;
 &lt;br /&gt;
                proxy_pass http://phpmyadmin.lxd;&lt;br /&gt;
        }&lt;br /&gt;
        real_ip_header proxy_protocol;&lt;br /&gt;
        set_real_ip_from 127.0.0.1;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Redémarrer le service nginx :&lt;br /&gt;
 systemctl restart nginx&lt;br /&gt;
&lt;br /&gt;
Copie du fichier de conf téléchargé dans le dossier /etc/phpmyadmin&lt;br /&gt;
&lt;br /&gt;
Modification du fichier /var/www/localhost/htdocs/index.html -&amp;gt; index.php &lt;br /&gt;
 &amp;lt;?php phpinfo(); ?&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Démarrage du service apache2 :&lt;br /&gt;
 rc-service apache2 start&lt;br /&gt;
&lt;br /&gt;
-&amp;gt; la page d&#039;info s&#039;affiche&lt;br /&gt;
-&amp;gt; la page d&#039;accueil de phpmyadmin s&#039;affiche, mais pas de connexion à la base...&lt;br /&gt;
&lt;br /&gt;
Dans le &#039;&#039;&#039;conteneur maria&#039;&#039;&#039; :&lt;br /&gt;
&lt;br /&gt;
Création d&#039;un utilisateur pour phpmyadmin :&lt;br /&gt;
 # mysql&lt;br /&gt;
 CREATE USER &#039;login_util&#039;@&#039;%&#039; IDENTIFIED BY &#039;pass_util&#039;;&lt;br /&gt;
 GRANT ALL PRIVILEGES ON *.* TO &#039;login_util&#039;@&#039;%&#039; WITH GRANT OPTION;&lt;br /&gt;
 FLUSH PRIVILEGES;&lt;br /&gt;
&#039;&#039;(Ctrl-d pour sortir)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Notes obsolètes===&lt;br /&gt;
Pour tester les configurations successives, installation de mysql ne plus :&lt;br /&gt;
# apk add... (cf plus haut...)&lt;br /&gt;
&lt;br /&gt;
phpmyadmin:~# /etc/init.d/mariadb setup&lt;br /&gt;
 * Creating a new MySQL database ...&lt;br /&gt;
 /usr/bin/mysql_install_db: Deprecated program name. It will be removed in a future release, use &#039;mariadb-install-db&#039; instead&lt;br /&gt;
 Installing MariaDB/MySQL system tables in &#039;/var/lib/mysql&#039; ...&lt;br /&gt;
 OK&lt;br /&gt;
 &lt;br /&gt;
 To start mariadbd at boot time you have to copy&lt;br /&gt;
 support-files/mariadb.service to the right place for your system&lt;br /&gt;
 &lt;br /&gt;
 Two all-privilege accounts were created.&lt;br /&gt;
 One is root@localhost, it has no password, but you need to be system &#039;root&#039; user to connect. Use, for example, sudo mysql&lt;br /&gt;
 The second is mysql@localhost, it has no password either, but you need to be the system &#039;mysql&#039; user to connect.&lt;br /&gt;
 After connecting you can set the password, if you would need to be able to connect as any of these users with a password and without sudo&lt;br /&gt;
 &lt;br /&gt;
 See the MariaDB Knowledgebase at https://mariadb.com/kb&lt;br /&gt;
 &lt;br /&gt;
 You can start the MariaDB daemon with:&lt;br /&gt;
 cd &#039;/usr&#039; ; /usr/bin/mariadbd-safe --datadir=&#039;/var/lib/mysql&#039;&lt;br /&gt;
 &lt;br /&gt;
 You can test the MariaDB daemon with mariadb-test-run.pl&lt;br /&gt;
 cd &#039;/usr/mariadb-test&#039; ; perl mariadb-test-run.pl&lt;br /&gt;
 &lt;br /&gt;
 Please report any problems at https://mariadb.org/jira&lt;br /&gt;
 &lt;br /&gt;
 The latest information about MariaDB is available at https://mariadb.org/.&lt;br /&gt;
 &lt;br /&gt;
 Consider joining MariaDB&#039;s strong and vibrant community: https://mariadb.org/get-involved/&lt;br /&gt;
 &lt;br /&gt;
... ne connaît toujours pas &#039;mysql&#039;&lt;br /&gt;
 apk add mariadb-server-utils mariadb-client&lt;br /&gt;
-&amp;gt; reconnaît la commande, mais le serveur refuse la connexion...&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Abandon :&#039;&#039;&#039; comme phpmyadmin nécessite un serveur web, installation des trois dans le même conteneur : apache - php -maria&lt;br /&gt;
&lt;br /&gt;
==Wordpress==&lt;br /&gt;
# Création du conteneur wp + maj&lt;br /&gt;
# Installation d&#039;apache et php&lt;br /&gt;
 apk add apache2 php php83-apache2 apache2-ctl(pour lister les modules) php83-mysqli (sinon ça râle...)&lt;br /&gt;
À l&#039;usage, le module H5P réclame la présence et l&#039;activation de mbstring : ajout de php83-mbstring/&lt;br /&gt;
&lt;br /&gt;
Modification de la page d&#039;afichage par défaut : /var/www/localhost/htdocs/index.html -&amp;gt; index.php&lt;br /&gt;
Modification du fichier proxy.conf dans le conteneur proxy : (/etc/nginx/sites-available/proxy.conf)&lt;br /&gt;
proxy_pass http://wp.lxd;&lt;br /&gt;
Redémarrer le service&lt;br /&gt;
systemctl restart nginx&lt;br /&gt;
&lt;br /&gt;
Dans le conteneur wp, démarrer apache2&lt;br /&gt;
rc-service apache2 start&lt;br /&gt;
&lt;br /&gt;
La page s&#039;affiche dans le navigateur...&lt;br /&gt;
&lt;br /&gt;
Création du fichier /etc/apache2/conf.d/remoteip.conf avec&lt;br /&gt;
&lt;br /&gt;
	RemoteIPHeader X-Real-IP&lt;br /&gt;
	RemoteIPTrustedProxy proxy.lxd (nom du conteneur nginx, plus correct dans la configuration conteneurs)&lt;br /&gt;
	&lt;br /&gt;
modification de /etc/apache2/httpd.conf décommenter :&lt;br /&gt;
	LoadModule remoteip_module modules/mod_remoteip.so&lt;br /&gt;
	LoadModule rewrite_module modules/mod_rewrite.so                       &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ajouter apache2 au démarrage&lt;br /&gt;
# rc-update add apache2&lt;br /&gt;
&lt;br /&gt;
relancer les services apache2&lt;br /&gt;
# rc-service apache2 restart&lt;br /&gt;
&lt;br /&gt;
*********************** (en cas d&#039;erreur Bad Getaway, redémarrer le proxy) ************&lt;br /&gt;
&lt;br /&gt;
Télécharger la dernière version de wp et la copier dans le dossier /tmp du conteneur&lt;br /&gt;
&lt;br /&gt;
# lxc file push /tmp/wp/wordpress-6.7.2-fr_FR.zip wiki/tmp&lt;br /&gt;
# lxc shell wiki&lt;br /&gt;
# unzip /tmp/wordpress-..._FR.zip -d /var/ww/localhost/htdocs/&lt;br /&gt;
&lt;br /&gt;
Comme on ne mettra pas d&#039;autre appli, on déplace le fourbi à la racine&lt;br /&gt;
# cd /var/www/localhost/htdocs&lt;br /&gt;
/var/www/localhost/htdocs# mv index.php index.php.sav&lt;br /&gt;
/var/www/localhost/htdocs# mv wordpress/* ./&lt;br /&gt;
/var/www/localhost/htdocs# rm -R wordpress&lt;br /&gt;
&lt;br /&gt;
Créer un utilisateur et une base de donnée pour wordpress dans le conteneur mariadb.lxd (phpmyadmin)&lt;br /&gt;
&lt;br /&gt;
Se connecter au site avec le navigateur&lt;br /&gt;
&lt;br /&gt;
utilisateur domiwp_68/1_mdppdomiwp_68! || wordpress || mariadb.lxd&lt;br /&gt;
&lt;br /&gt;
!!!! En cas d&#039;installation de php83-mysqlnd, le processus échoue (Typed property mysqli::$connect_errno must not be accessed before initialization) !!!&lt;br /&gt;
&lt;br /&gt;
Le bordel n&#039;arrive pas à utiliser ssl... et plante : tourne en boucle sur la page de connection&lt;br /&gt;
&lt;br /&gt;
tentative de lien dans le dossier /var/www/localhost/htdocs/wp-includes/certificates/ de wp&lt;br /&gt;
/etc/letsencrypt/live/lesitadom.fr/fullchain.pem&lt;br /&gt;
&lt;br /&gt;
# ln -s proxy.lxd/etc/letsencrypt/live/lesitadom.fr/fullchain.pem /var/www/localhost/htdocs/wp-includes/certificates/lesitadom.pem&lt;br /&gt;
&lt;br /&gt;
***************** Ça veut pas. On essaye avec une autre version de WP (6.8) ********************&lt;br /&gt;
Marche pas non plus, et en plus, c&#039;est en anglais et pas de choix de langue... Y&#039;a un truc qui merde dès le départ : la mise en page est foireuse...&lt;br /&gt;
&lt;br /&gt;
on recommence avec la version en français (6.8)&lt;br /&gt;
&lt;br /&gt;
Règlage des droits sur apache:www-data (chown -R apache:www-data)&lt;br /&gt;
Contenu de wordpress à la racine&lt;br /&gt;
Adresse &amp;quot;lesitadom.fr&amp;quot; (proxy)&lt;br /&gt;
Suppression des tables des instal précédentes (phpmyadmin)&lt;br /&gt;
&lt;br /&gt;
Affichage touours aussi lamentable, comme si la feuille de style n&#039;était pas prise en compte...&lt;br /&gt;
&lt;br /&gt;
Les tables se créent, mais pau moment de la connexion :&lt;br /&gt;
&lt;br /&gt;
Les informations que vous êtes sur le point de soumettre ne sont pas sécurisées&lt;br /&gt;
&lt;br /&gt;
Et on revient au formulaire&lt;br /&gt;
&lt;br /&gt;
************** On n&#039;est pas couchés ! *******************&lt;br /&gt;
&lt;br /&gt;
Recherche sur internet : worpress derrière un proxy inverse :&lt;br /&gt;
&lt;br /&gt;
Dans wp-config.php, ajouter :&lt;br /&gt;
&lt;br /&gt;
if ( (!empty( $_SERVER[&#039;HTTP_X_FORWARDED_HOST&#039;])) ||&lt;br /&gt;
      (!empty( $_SERVER[&#039;HTTP_X_FORWARDED_FOR&#039;])) ) {&lt;br /&gt;
      $_SERVER[&#039;HTTPS&#039;] = &#039;activé&#039;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Et put&#039; ça marche !!!!&lt;br /&gt;
&lt;br /&gt;
...plus !&lt;br /&gt;
J&#039;ai re-modifié la config du proxy et ça a cassé le bastringue... Le site donnait ça, en plus...&lt;br /&gt;
&lt;br /&gt;
serveur {&lt;br /&gt;
    listen 443 SSL ;&lt;br /&gt;
    server_name foo.bar www.foo.bar;&lt;br /&gt;
    location / {&lt;br /&gt;
        proxy_pass http://10.0.80.32/;&lt;br /&gt;
        proxy_set_header X-Forwarded-Host $host;&lt;br /&gt;
	proxy_set_header X-Forwarded-Server $hôte ;&lt;br /&gt;
	proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;&lt;br /&gt;
	proxy_set_header X-Forwarded-Proto $scheme;&lt;br /&gt;
	proxy_set_header X-Real-IP $remote_addr;&lt;br /&gt;
	proxy_set_header Hôte $host ;&lt;br /&gt;
    }&lt;br /&gt;
    certificat_ssl /etc/letsencrypt/live/foo.bar/fullchain.pem;&lt;br /&gt;
    ssl_certificate_key /etc/letsencrypt/live/foo.bar/privkey.pem;&lt;br /&gt;
    include /etc/letsencrypt/options-ssl-nginx.conf ;&lt;br /&gt;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;&lt;br /&gt;
}&lt;br /&gt;
serveur {&lt;br /&gt;
    server_name foo.bar www.foo.bar;&lt;br /&gt;
    return 301 https://foo.bar$request_uri ;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
adresse utilisée lors de l&#039;instal : lesitadom.fr avec réglage du proxy =&amp;gt; ok&lt;br /&gt;
Changement d&#039;adresse =&amp;gt; ko&lt;br /&gt;
Le fourbi doit laisser des traces de l&#039;adresse du site pendant l&#039;instal...&lt;br /&gt;
&lt;br /&gt;
Modifier : table wp-options, siteurl et home&lt;br /&gt;
&lt;br /&gt;
Ok&lt;br /&gt;
&lt;br /&gt;
************** erreur &amp;quot;La réponse n’est pas une réponse JSON valide&amp;quot; lors de la modification d&#039;un article ****************************&lt;br /&gt;
Modifier apache2 :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Directory &amp;quot;/var/www/localhost/htdocs&amp;quot;&amp;gt;                                     &lt;br /&gt;
...                           &lt;br /&gt;
    #                                                                 &lt;br /&gt;
    # AllowOverride controls what directives may be placed in .htaccess files.&lt;br /&gt;
    # It can be &amp;quot;All&amp;quot;, &amp;quot;None&amp;quot;, or any combination of the keywords:&lt;br /&gt;
    #   AllowOverride FileInfo AuthConfig Limit                     &lt;br /&gt;
    #                                                                          &lt;br /&gt;
    AllowOverride All                                       				&amp;lt;= C&#039;est ici ! &lt;br /&gt;
...                                  &lt;br /&gt;
&amp;lt;/Directory&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
Changer les droits sur .htaccess :&lt;br /&gt;
# chmod 644 /var/www/localhost/htdocs/.htaccess&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
************** Installation des outils ***********************&lt;br /&gt;
&lt;br /&gt;
À partir du dossier wordress de l&#039;école téléchargé en guise de sauvegarde...&lt;br /&gt;
&lt;br /&gt;
Thème : nisarg child&lt;br /&gt;
&lt;br /&gt;
Extensions :&lt;br /&gt;
Installées :&lt;br /&gt;
	- Advanced Accordion Gutenberg Block&lt;br /&gt;
	- advanced-iframe			-&amp;gt; problème : voir la config&lt;br /&gt;
	- PDF Viewer Block pour Gutenberg&lt;br /&gt;
	- classic-editor			-&amp;gt; installé - voir si activation&lt;br /&gt;
	- The Events Calendar&lt;br /&gt;
	- h5p					-&amp;gt; voir plugin Dashboard for Pressbooks and H5P et SNORDIAN&#039;s H5P Resize Pulse&lt;br /&gt;
	- ml-slider				-&amp;gt; diaporamas&lt;br /&gt;
	- shortcodes-ultimate			-&amp;gt; excellent !&lt;br /&gt;
	- smart-slider-3			-&amp;gt; ! Erreur à l&#039;activation ! création de diaporamas : voir si pas doublon avec ml-slider&lt;br /&gt;
	- tablepress				-&amp;gt; créer des tableaux&lt;br /&gt;
	- wp-miniaudioplayer			-&amp;gt; pour lire les mp3&lt;br /&gt;
	- wp-quicklatex				-&amp;gt; pour des formules math en latex&lt;br /&gt;
	- wp-statistics				-&amp;gt; statistiques de visites&lt;br /&gt;
&lt;br /&gt;
Ignorées :&lt;br /&gt;
	- advanced-iframe-custom	-&amp;gt; Voir Advanced Custom Fields&lt;br /&gt;
	- akismet			-&amp;gt; Anti-spam&lt;br /&gt;
	- algori-pdf-viewer		-&amp;gt; remplacé par PDF Viewer Block pour Gutenberg&lt;br /&gt;
	- antispam-bee&lt;br /&gt;
	- bbpress			-&amp;gt; forum de discussion&lt;br /&gt;
	- bp-better-messages		-&amp;gt; chat pour buddypress&lt;br /&gt;
	- buddypress			-&amp;gt; réseau social&lt;br /&gt;
	- easy-fancybox			-&amp;gt; Affichier des images, des vidéos... dans une box. Àvoir...&lt;br /&gt;
	- envole_hooks			-&amp;gt; pour envole&lt;br /&gt;
	- eportailwidget		-&amp;gt; idem ?&lt;br /&gt;
	- flynsarmy-iframe-shortcode	-&amp;gt; non trouvée&lt;br /&gt;
	- google-calendar-events	-&amp;gt; remplacée par The Events Calendar&lt;br /&gt;
	- nextend-accordion-menu	-&amp;gt; non trouvé. Voir si le plugin gutempberg fait l&#039;affaire&lt;br /&gt;
	- nextgen-gallery		-&amp;gt; gallerie d&#039;images. Voir si le plugi installé fair l&#039;affaire&lt;br /&gt;
	- page-links-to			-&amp;gt; optimiser les liens : non trouvé, voir si nécessaire&lt;br /&gt;
	- pretty links			-&amp;gt; casse pieds&lt;br /&gt;
	- poshwidget			-&amp;gt; eole&lt;br /&gt;
	- private-wp			-&amp;gt; ? non trouvée&lt;br /&gt;
	- rumbletalk-chat-a-chat-with-themes	-&amp;gt; chat&lt;br /&gt;
	- si-contact-form		-&amp;gt; formulaire de contact : voir contact form 7 si nécessaire&lt;br /&gt;
	- simple-embed-code		-&amp;gt; intégrer du code aux articles : voir code Embed&lt;br /&gt;
	- the-events-calendar		-&amp;gt; double emploi avec extension installée&lt;br /&gt;
	- theme-preview			-&amp;gt; aide à la conception. Àvoir (Toolkit for Block Theme)&lt;br /&gt;
	- tinymce-advanced		-&amp;gt; modifier l&#039;éditeur. Voir si utile&lt;br /&gt;
	- user-role-editor		-&amp;gt; régler les autorisations&lt;br /&gt;
	- vc-tabs			-&amp;gt; pas trouvée ?&lt;br /&gt;
	- visual-form-builder		-&amp;gt; création de formulaire&lt;br /&gt;
	- wpdirauth			-&amp;gt; ldap&lt;br /&gt;
	- wp-event-manager		-&amp;gt; double emploi&lt;br /&gt;
	- wp-hide-dashboard		-&amp;gt; non trouvée... à revoir&lt;br /&gt;
	- wp-polls			-&amp;gt; créer des sondages&lt;br /&gt;
	- wp-sentry			-&amp;gt; tracer les erruers php et navigation&lt;br /&gt;
	- wp-smushit			-&amp;gt; optimisation d&#039;images. voir si utile&lt;br /&gt;
	- wp-user-avatar		-&amp;gt; création d&#039;avatars pour les utilisateurs&lt;/div&gt;</summary>
		<author><name>Domi</name></author>
	</entry>
	<entry>
		<id>https://wiki.lesitadom.fr/index.php?title=Wp&amp;diff=1654</id>
		<title>Wp</title>
		<link rel="alternate" type="text/html" href="https://wiki.lesitadom.fr/index.php?title=Wp&amp;diff=1654"/>
		<updated>2025-07-09T08:13:03Z</updated>

		<summary type="html">&lt;p&gt;Domi : /* Installation de wordpress - mariadb et phpmyadmin sur trois conteneurs séparés alipneLe */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Wordpress sur alpine léger =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;(ajout wp.lesitadom dans /etc/hosts)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Création du conteneur :&lt;br /&gt;
  lxc launch local:alpineLe wp&lt;br /&gt;
  lxc exec wp apk update&lt;br /&gt;
  lxc exec wp apk update&lt;br /&gt;
(ça marche ;))&lt;br /&gt;
&lt;br /&gt;
== Serveur web : apache2 - php83 - mariadb ==&lt;br /&gt;
cf notes apache2 php sur alpine léger - modif : php84 à la place de php83&lt;br /&gt;
&lt;br /&gt;
ne fonctionne pas... mauvaise version de php ? Ok avec php83 =&amp;gt; on recommence...&lt;br /&gt;
&lt;br /&gt;
Ok !&lt;br /&gt;
&lt;br /&gt;
À l&#039;usage, H5P nécessite &#039;&#039;&#039;mbstring&#039;&#039;&#039; et &#039;&#039;&#039;zip&#039;&#039;&#039; : Ajout de &#039;&#039;&#039;php83-mbstring&#039;&#039;&#039; et &#039;&#039;&#039;php83-zip&#039;&#039;&#039; (relance d&#039;apache 2)&lt;br /&gt;
Lors du téléchargement d&#039;exercices (3.1 Mio), Nginx envoie l&#039;erreur 413 : Corriger proxy.conf en ajoutant la ligne&lt;br /&gt;
&lt;br /&gt;
 client_max_body_size 200M; (par défaut à 1Mio)&lt;br /&gt;
&lt;br /&gt;
Relancer nginx.&lt;br /&gt;
&lt;br /&gt;
Il faut également augmenter les valeurs : (dans /etc/php83/php.ini)&lt;br /&gt;
  upload_max_filesize = 256M&lt;br /&gt;
  post_max_size = 256M&lt;br /&gt;
  max_execution_time = 300&lt;br /&gt;
(relancer apache2)&lt;br /&gt;
&lt;br /&gt;
== Mariadb ==&lt;br /&gt;
&#039;&#039;(d&#039;après mes notes instal serveur + PMB)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
  apk add mysql mariadb mariadb-server-utils mariadb-client&lt;br /&gt;
  apk add php83-pdo_mysql php83-mbstring&lt;br /&gt;
&#039;&#039;(voir plus tard s&#039;il faut mysqli ou mysqlnd)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Initialisation de mariadb&lt;br /&gt;
  /etc/init.d/mariadb setup&lt;br /&gt;
(peuple /var/lib/mysql)&lt;br /&gt;
&lt;br /&gt;
  rc-service mariadb start&lt;br /&gt;
=&amp;gt; ok&lt;br /&gt;
 mysql&lt;br /&gt;
=&amp;gt; on entre dans mysql -&amp;gt; Ok&lt;br /&gt;
&lt;br /&gt;
== installation de phpmyadmin ==&lt;br /&gt;
&lt;br /&gt;
  apk add phpmyadmin&lt;br /&gt;
-&amp;gt; Installe de nombreux packages et librairies (php83-{mysqli,bz2,ctype,curl,gd,session,zip,xmlwriter,iconv})&lt;br /&gt;
	(lib{xau,md,bsd,xdmcp,xcb,x11,xext,ice,bsm,xt,xpm,dav1d,jpeg,yuv,avif,png,shrpyuv,webp,zip} aom-libs,freetype)&lt;br /&gt;
&lt;br /&gt;
 phpmyadmin has been installed to: &lt;br /&gt;
       /usr/share/webapps/phpmyadmin&lt;br /&gt;
 phpmyadmin config file has been installed to: &lt;br /&gt;
       /etc/phpmyadmin/config.inc.php&lt;br /&gt;
 If you use apache2:&lt;br /&gt;
      1) Change the ownership of the config directory:&lt;br /&gt;
             chown -R apache:apache /etc/phpmyadmin&lt;br /&gt;
      2) See if you need to modify the apache2 config:&lt;br /&gt;
             /etc/apache2/conf.d/phpmyadmin.conf&lt;br /&gt;
      3) Restart apache2 when done.&lt;br /&gt;
&lt;br /&gt;
  rc-service apache2 restart&lt;br /&gt;
-&amp;gt; phpmyadmin accessible à wp.lesitadom.fr/phpmyadmin&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Conteneur mariadb&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Création d&#039;un utilisateur pour phpmyadmin :&lt;br /&gt;
  # mysql&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  CREATE USER &#039;login_util&#039;@&#039;%&#039; IDENTIFIED BY &#039;pass_util&#039;;&lt;br /&gt;
  GRANT ALL PRIVILEGES ON *.* TO &#039;login_util&#039;@&#039;%&#039; WITH GRANT OPTION;&lt;br /&gt;
  FLUSH PRIVILEGES;&lt;br /&gt;
&#039;&#039;(Ctrl-d pour sortir)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Pour l&#039;accès avec mot de passe :&lt;br /&gt;
stopper les services mariadb et apache2 :&lt;br /&gt;
  rc-service mariadb stop&lt;br /&gt;
  rc-service apache2 stop&lt;br /&gt;
Dans /etc/my.cnf.d/maria_db_server.cnf, sous [mysqld], ajouter :&lt;br /&gt;
  skip-grant-tables&lt;br /&gt;
Relancer les services et ça fonctionne !&lt;br /&gt;
...pas tout à fait... la configuration de phpmyadmin n&#039;est pas terminée... Cf message au bas&lt;br /&gt;
&lt;br /&gt;
Récupération d&#039;un fichier de conf de phpmyadmin qui fonctionne sur le net (modif de l&#039;utilisateur et du mdp)&lt;br /&gt;
&lt;br /&gt;
Lancement de l&#039;installation de mariadb avec les paramètres par défaut (y à toutes les questions...)&lt;br /&gt;
&lt;br /&gt;
Redémarrage du conteneur -&amp;gt; phpmyadmin fonctionne avec les droits qui vont bien&lt;br /&gt;
&lt;br /&gt;
==Installation de wordpress==&lt;br /&gt;
&lt;br /&gt;
téléchargement de wordpres-...zip -&amp;gt; tmp du raspberry&lt;br /&gt;
 lxc file push /tmp/wordpress-6.7.2-fr_FR.zip wp/tmp/&lt;br /&gt;
Dans le conteneur :&lt;br /&gt;
 unzip /tmp/wordpress-6.7.2-fr_FR.zip -d /var/www/localhost/htdocs/&lt;br /&gt;
Déplacer le contenu à la racine :&lt;br /&gt;
 mv /var/www/localhost/htdocs/wordpress/* /var/www/localhost/htdocs/&lt;br /&gt;
&lt;br /&gt;
Création de la bdd wordpress (wp_perso2025) par phpmyadmin avec utilisateur wp-dd2025 et mdp 1_mdppuwp!&lt;br /&gt;
&lt;br /&gt;
Connection à wp dans le navigateur à l&#039;adresse du serveur : wp.lesitadom.fr -&amp;gt; configuration&lt;br /&gt;
&lt;br /&gt;
Tout fonctionne !&lt;br /&gt;
&lt;br /&gt;
Voir s&#039;il est possible d&#039;installer mariadb et phpmyadmin sur des conteneur distincts...&lt;br /&gt;
&lt;br /&gt;
=Installation de &#039;&#039;&#039;wordpress&#039;&#039;&#039; - &#039;&#039;&#039;mariadb&#039;&#039;&#039; et &#039;&#039;&#039;phpmyadmin&#039;&#039;&#039; sur trois conteneurs séparés &#039;&#039;alipneLe&#039;&#039;=&lt;br /&gt;
&lt;br /&gt;
==Mariadb==&lt;br /&gt;
Création du conteneur maria + maj&lt;br /&gt;
Installation de mariadb&lt;br /&gt;
 apk add (mysql) mariadb mariadb-server-utils mariadb-client&lt;br /&gt;
 apk add php83-pdo_mysql php83-mbstring&lt;br /&gt;
&lt;br /&gt;
Initialisation de mariadb (peuple /var/lib/mysql)&lt;br /&gt;
 /etc/init.d/mariadb setup&lt;br /&gt;
&lt;br /&gt;
Démarrer le service&lt;br /&gt;
 rc-service mariadb start&lt;br /&gt;
&lt;br /&gt;
Sécuriser la base de donnée&lt;br /&gt;
 mysql_secure_installation (vide/n/n/Y/Y/Y/Y)&lt;br /&gt;
&lt;br /&gt;
on peut entrer dans mysql (idem mariadb)&lt;br /&gt;
&lt;br /&gt;
===Notes obsolètes===&lt;br /&gt;
Ajout d&#039;apache, php et phpmyadmin&lt;br /&gt;
&lt;br /&gt;
 apk add apache2 apache2-ctl php83 php83-apache2 php83-mbstring phpmyadmin&lt;br /&gt;
&lt;br /&gt;
Copie du fichier de conf dans etc/phpmyadmin/&lt;br /&gt;
Modif du fichier /var/www/localhost/htdocs/index.html -&amp;gt; index.php&lt;br /&gt;
Ajout de la redirection dans le conteneur proxy&lt;br /&gt;
Ajout de la redirection dans le fichier host du bureau&lt;br /&gt;
&lt;br /&gt;
À la première connection, phpmyadmin est en erreur : la base n&#039;est pas encore crée. Cliquer...&lt;br /&gt;
&lt;br /&gt;
phpmyadmin affiche une erreur d&#039;accès à /usr/share/webapps/phpmyadmin/tmp : le dossier n&#039;existe pas : création.&lt;br /&gt;
 chown apache:apache /usr/share/webapps/phpmyadmin/tmp&lt;br /&gt;
-&amp;gt; problème réglé&lt;br /&gt;
&lt;br /&gt;
phpmyadmin affiche une erreur concernant les cookies (pas de clé valide)&lt;br /&gt;
D&#039;après la documentation :&lt;br /&gt;
&lt;br /&gt;
// A string of 32 characters.&lt;br /&gt;
$cfg[&#039;blowfish_secret&#039;] = &#039;JOFw435365IScA&amp;amp;Q!cDugr!lSfuAz*OW&#039;;&lt;br /&gt;
88a7da62429ba6ad3cb3c76a09641fca&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Modification du fichier /etc/phpmyadmin/config.php en conséquence.&lt;br /&gt;
&lt;br /&gt;
-&amp;gt; marche pas&lt;br /&gt;
&lt;br /&gt;
Tentative de connexion à mariadb depuis le conteneur wiki... ne fonctionne pas. Plusieurs tentatives en agissant sur les paramètres côté client (règles firewall, ouverture de ports) ou du côté serveur (utilisateur, adresse bind, paramètres my.cnf et maria....cnf).&lt;br /&gt;
Au final, il faut commenter la ligne &#039;skip-networking&#039; et ça fonctionne (voir si la ligne &#039;innodb_force_recovery=1&#039; a une utilité...). Trouvé à l&#039;adresse &amp;quot;https://mariadb.com/kb/en/configuring-mariadb-for-remote-client-access/&amp;quot;. À retester sur une machine propre.&lt;br /&gt;
&lt;br /&gt;
==phpmyadmin==&lt;br /&gt;
**************&lt;br /&gt;
Création du conteneur phpmyadmin et Maj&lt;br /&gt;
&lt;br /&gt;
Installation du serveur web : apache2&lt;br /&gt;
# apk add apache2 php83 php83-apache2 php83-mbstring&lt;br /&gt;
# rc-service apache2 start&lt;br /&gt;
&lt;br /&gt;
Installation de phpmyadmin&lt;br /&gt;
# apk add phpmyadmin&lt;br /&gt;
&lt;br /&gt;
*&lt;br /&gt;
* phpmyadmin has been installed to:&lt;br /&gt;
*     /usr/share/webapps/phpmyadmin&lt;br /&gt;
* phpmyadmin config file has been installed to:&lt;br /&gt;
*     /etc/phpmyadmin/config.inc.php&lt;br /&gt;
* If you use apache2:&lt;br /&gt;
*     1) Change the ownership of the config directory:&lt;br /&gt;
*            chown -R apache:apache /etc/phpmyadmin&lt;br /&gt;
*     2) See if you need to modify the apache2 config:&lt;br /&gt;
*            /etc/apache2/conf.d/phpmyadmin.conf&lt;br /&gt;
*     3) Restart apache2 when done.&lt;br /&gt;
*&lt;br /&gt;
Ajout de phpmyadmin.lesitadom.fr au fichier hosts de l&#039;hôte&lt;br /&gt;
&lt;br /&gt;
*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/&lt;br /&gt;
Modification du fichier de conf dans le conteneur proxy :&lt;br /&gt;
&lt;br /&gt;
* conteneur phpmyadmin&lt;br /&gt;
server {&lt;br /&gt;
        listen 80 proxy_protocol;&lt;br /&gt;
        listen [::]:80 proxy_protocol;&lt;br /&gt;
&lt;br /&gt;
        server_name phpmyadmin.lesitadom.fr;&lt;br /&gt;
&lt;br /&gt;
        location / {&lt;br /&gt;
                include /etc/nginx/proxy_params;&lt;br /&gt;
&lt;br /&gt;
                proxy_pass http://phpmyadmin.lxd;&lt;br /&gt;
        }&lt;br /&gt;
        real_ip_header proxy_protocol;&lt;br /&gt;
        set_real_ip_from 127.0.0.1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Redémarrer le service nginx :&lt;br /&gt;
# systemctl restart nginx&lt;br /&gt;
&lt;br /&gt;
copie du fichier de conf téléchargé dans le dossier /etc/phpmyadmin&lt;br /&gt;
&lt;br /&gt;
*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/&lt;br /&gt;
&lt;br /&gt;
Modif du fichier /var/www/localhost/htdocs/index.html -&amp;gt; index.php (avec &amp;lt;?php phpinfo(); ?&amp;gt;&lt;br /&gt;
Démarrage du service apache2 :&lt;br /&gt;
# rc-service apache2 start&lt;br /&gt;
&lt;br /&gt;
-&amp;gt; la page d&#039;info s&#039;affiche&lt;br /&gt;
-&amp;gt; la page d&#039;accueil de phpmyadmin s&#039;affiche, mais pas de connexion à la base...&lt;br /&gt;
&lt;br /&gt;
*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/&lt;br /&gt;
Dans le conteneur maria :&lt;br /&gt;
&lt;br /&gt;
Création d&#039;un utilisateur pour phpmyadmin :&lt;br /&gt;
# mysql&lt;br /&gt;
CREATE USER &#039;login_util&#039;@&#039;%&#039; IDENTIFIED BY &#039;pass_util&#039;;&lt;br /&gt;
GRANT ALL PRIVILEGES ON *.* TO &#039;login_util&#039;@&#039;%&#039; WITH GRANT OPTION;&lt;br /&gt;
FLUSH PRIVILEGES;&lt;br /&gt;
(Ctrl-d pour sortir)&lt;br /&gt;
&lt;br /&gt;
*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/&lt;br /&gt;
&lt;br /&gt;
Pour tester les configurations successives, installation de mysql ne plus :&lt;br /&gt;
# apk add... (cf plus haut...)&lt;br /&gt;
&lt;br /&gt;
phpmyadmin:~# /etc/init.d/mariadb setup&lt;br /&gt;
 * Creating a new MySQL database ...&lt;br /&gt;
/usr/bin/mysql_install_db: Deprecated program name. It will be removed in a future release, use &#039;mariadb-install-db&#039; instead&lt;br /&gt;
Installing MariaDB/MySQL system tables in &#039;/var/lib/mysql&#039; ...&lt;br /&gt;
OK&lt;br /&gt;
&lt;br /&gt;
To start mariadbd at boot time you have to copy&lt;br /&gt;
support-files/mariadb.service to the right place for your system&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Two all-privilege accounts were created.&lt;br /&gt;
One is root@localhost, it has no password, but you need to&lt;br /&gt;
be system &#039;root&#039; user to connect. Use, for example, sudo mysql&lt;br /&gt;
The second is mysql@localhost, it has no password either, but&lt;br /&gt;
you need to be the system &#039;mysql&#039; user to connect.&lt;br /&gt;
After connecting you can set the password, if you would need to be&lt;br /&gt;
able to connect as any of these users with a password and without sudo&lt;br /&gt;
&lt;br /&gt;
See the MariaDB Knowledgebase at https://mariadb.com/kb&lt;br /&gt;
&lt;br /&gt;
You can start the MariaDB daemon with:&lt;br /&gt;
cd &#039;/usr&#039; ; /usr/bin/mariadbd-safe --datadir=&#039;/var/lib/mysql&#039;&lt;br /&gt;
&lt;br /&gt;
You can test the MariaDB daemon with mariadb-test-run.pl&lt;br /&gt;
cd &#039;/usr/mariadb-test&#039; ; perl mariadb-test-run.pl&lt;br /&gt;
&lt;br /&gt;
Please report any problems at https://mariadb.org/jira&lt;br /&gt;
&lt;br /&gt;
The latest information about MariaDB is available at https://mariadb.org/.&lt;br /&gt;
&lt;br /&gt;
Consider joining MariaDB&#039;s strong and vibrant community:&lt;br /&gt;
https://mariadb.org/get-involved/&lt;br /&gt;
&lt;br /&gt;
... ne connaît toujours pas &#039;mysql&#039;&lt;br /&gt;
# apk add mariadb-server-utils mariadb-client&lt;br /&gt;
-&amp;gt; reconnaît la commande, mais le serveur refuse la connexion...&lt;br /&gt;
&lt;br /&gt;
Abandon : comme phpmyadmin nécessite un serveur web, installation des trois dans le même conteneur : apache - php -maria&lt;br /&gt;
&lt;br /&gt;
*************&lt;br /&gt;
* Wordpress *&lt;br /&gt;
*************&lt;br /&gt;
1. Création du conteneur wp + maj&lt;br /&gt;
2. Installation d&#039;apache et php&lt;br /&gt;
# apk add apache2 php php83-apache2 apache2-ctl(pour lister les modules) php83-mysqli (sinon ça râle...)&lt;br /&gt;
# À l&#039;usage, le module H5P réclame la présence et l&#039;activation de mbstring : ajout de php83-mbstring/&lt;br /&gt;
&lt;br /&gt;
Modification de la page d&#039;afichage par défaut : /var/www/localhost/htdocs/index.html -&amp;gt; index.php&lt;br /&gt;
Modification du fichier proxy.conf dans le conteneur proxy : (/etc/nginx/sites-available/proxy.conf)&lt;br /&gt;
proxy_pass http://wp.lxd;&lt;br /&gt;
Redémarrer le service&lt;br /&gt;
systemctl restart nginx&lt;br /&gt;
&lt;br /&gt;
Dans le conteneur wp, démarrer apache2&lt;br /&gt;
rc-service apache2 start&lt;br /&gt;
&lt;br /&gt;
La page s&#039;affiche dans le navigateur...&lt;br /&gt;
&lt;br /&gt;
Création du fichier /etc/apache2/conf.d/remoteip.conf avec&lt;br /&gt;
&lt;br /&gt;
	RemoteIPHeader X-Real-IP&lt;br /&gt;
	RemoteIPTrustedProxy proxy.lxd (nom du conteneur nginx, plus correct dans la configuration conteneurs)&lt;br /&gt;
	&lt;br /&gt;
modification de /etc/apache2/httpd.conf décommenter :&lt;br /&gt;
	LoadModule remoteip_module modules/mod_remoteip.so&lt;br /&gt;
	LoadModule rewrite_module modules/mod_rewrite.so                       &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ajouter apache2 au démarrage&lt;br /&gt;
# rc-update add apache2&lt;br /&gt;
&lt;br /&gt;
relancer les services apache2&lt;br /&gt;
# rc-service apache2 restart&lt;br /&gt;
&lt;br /&gt;
*********************** (en cas d&#039;erreur Bad Getaway, redémarrer le proxy) ************&lt;br /&gt;
&lt;br /&gt;
Télécharger la dernière version de wp et la copier dans le dossier /tmp du conteneur&lt;br /&gt;
&lt;br /&gt;
# lxc file push /tmp/wp/wordpress-6.7.2-fr_FR.zip wiki/tmp&lt;br /&gt;
# lxc shell wiki&lt;br /&gt;
# unzip /tmp/wordpress-..._FR.zip -d /var/ww/localhost/htdocs/&lt;br /&gt;
&lt;br /&gt;
Comme on ne mettra pas d&#039;autre appli, on déplace le fourbi à la racine&lt;br /&gt;
# cd /var/www/localhost/htdocs&lt;br /&gt;
/var/www/localhost/htdocs# mv index.php index.php.sav&lt;br /&gt;
/var/www/localhost/htdocs# mv wordpress/* ./&lt;br /&gt;
/var/www/localhost/htdocs# rm -R wordpress&lt;br /&gt;
&lt;br /&gt;
Créer un utilisateur et une base de donnée pour wordpress dans le conteneur mariadb.lxd (phpmyadmin)&lt;br /&gt;
&lt;br /&gt;
Se connecter au site avec le navigateur&lt;br /&gt;
&lt;br /&gt;
utilisateur domiwp_68/1_mdppdomiwp_68! || wordpress || mariadb.lxd&lt;br /&gt;
&lt;br /&gt;
!!!! En cas d&#039;installation de php83-mysqlnd, le processus échoue (Typed property mysqli::$connect_errno must not be accessed before initialization) !!!&lt;br /&gt;
&lt;br /&gt;
Le bordel n&#039;arrive pas à utiliser ssl... et plante : tourne en boucle sur la page de connection&lt;br /&gt;
&lt;br /&gt;
tentative de lien dans le dossier /var/www/localhost/htdocs/wp-includes/certificates/ de wp&lt;br /&gt;
/etc/letsencrypt/live/lesitadom.fr/fullchain.pem&lt;br /&gt;
&lt;br /&gt;
# ln -s proxy.lxd/etc/letsencrypt/live/lesitadom.fr/fullchain.pem /var/www/localhost/htdocs/wp-includes/certificates/lesitadom.pem&lt;br /&gt;
&lt;br /&gt;
***************** Ça veut pas. On essaye avec une autre version de WP (6.8) ********************&lt;br /&gt;
Marche pas non plus, et en plus, c&#039;est en anglais et pas de choix de langue... Y&#039;a un truc qui merde dès le départ : la mise en page est foireuse...&lt;br /&gt;
&lt;br /&gt;
on recommence avec la version en français (6.8)&lt;br /&gt;
&lt;br /&gt;
Règlage des droits sur apache:www-data (chown -R apache:www-data)&lt;br /&gt;
Contenu de wordpress à la racine&lt;br /&gt;
Adresse &amp;quot;lesitadom.fr&amp;quot; (proxy)&lt;br /&gt;
Suppression des tables des instal précédentes (phpmyadmin)&lt;br /&gt;
&lt;br /&gt;
Affichage touours aussi lamentable, comme si la feuille de style n&#039;était pas prise en compte...&lt;br /&gt;
&lt;br /&gt;
Les tables se créent, mais pau moment de la connexion :&lt;br /&gt;
&lt;br /&gt;
Les informations que vous êtes sur le point de soumettre ne sont pas sécurisées&lt;br /&gt;
&lt;br /&gt;
Et on revient au formulaire&lt;br /&gt;
&lt;br /&gt;
************** On n&#039;est pas couchés ! *******************&lt;br /&gt;
&lt;br /&gt;
Recherche sur internet : worpress derrière un proxy inverse :&lt;br /&gt;
&lt;br /&gt;
Dans wp-config.php, ajouter :&lt;br /&gt;
&lt;br /&gt;
if ( (!empty( $_SERVER[&#039;HTTP_X_FORWARDED_HOST&#039;])) ||&lt;br /&gt;
      (!empty( $_SERVER[&#039;HTTP_X_FORWARDED_FOR&#039;])) ) {&lt;br /&gt;
      $_SERVER[&#039;HTTPS&#039;] = &#039;activé&#039;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Et put&#039; ça marche !!!!&lt;br /&gt;
&lt;br /&gt;
...plus !&lt;br /&gt;
J&#039;ai re-modifié la config du proxy et ça a cassé le bastringue... Le site donnait ça, en plus...&lt;br /&gt;
&lt;br /&gt;
serveur {&lt;br /&gt;
    listen 443 SSL ;&lt;br /&gt;
    server_name foo.bar www.foo.bar;&lt;br /&gt;
    location / {&lt;br /&gt;
        proxy_pass http://10.0.80.32/;&lt;br /&gt;
        proxy_set_header X-Forwarded-Host $host;&lt;br /&gt;
	proxy_set_header X-Forwarded-Server $hôte ;&lt;br /&gt;
	proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;&lt;br /&gt;
	proxy_set_header X-Forwarded-Proto $scheme;&lt;br /&gt;
	proxy_set_header X-Real-IP $remote_addr;&lt;br /&gt;
	proxy_set_header Hôte $host ;&lt;br /&gt;
    }&lt;br /&gt;
    certificat_ssl /etc/letsencrypt/live/foo.bar/fullchain.pem;&lt;br /&gt;
    ssl_certificate_key /etc/letsencrypt/live/foo.bar/privkey.pem;&lt;br /&gt;
    include /etc/letsencrypt/options-ssl-nginx.conf ;&lt;br /&gt;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;&lt;br /&gt;
}&lt;br /&gt;
serveur {&lt;br /&gt;
    server_name foo.bar www.foo.bar;&lt;br /&gt;
    return 301 https://foo.bar$request_uri ;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
adresse utilisée lors de l&#039;instal : lesitadom.fr avec réglage du proxy =&amp;gt; ok&lt;br /&gt;
Changement d&#039;adresse =&amp;gt; ko&lt;br /&gt;
Le fourbi doit laisser des traces de l&#039;adresse du site pendant l&#039;instal...&lt;br /&gt;
&lt;br /&gt;
Modifier : table wp-options, siteurl et home&lt;br /&gt;
&lt;br /&gt;
Ok&lt;br /&gt;
&lt;br /&gt;
************** erreur &amp;quot;La réponse n’est pas une réponse JSON valide&amp;quot; lors de la modification d&#039;un article ****************************&lt;br /&gt;
Modifier apache2 :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Directory &amp;quot;/var/www/localhost/htdocs&amp;quot;&amp;gt;                                     &lt;br /&gt;
...                           &lt;br /&gt;
    #                                                                 &lt;br /&gt;
    # AllowOverride controls what directives may be placed in .htaccess files.&lt;br /&gt;
    # It can be &amp;quot;All&amp;quot;, &amp;quot;None&amp;quot;, or any combination of the keywords:&lt;br /&gt;
    #   AllowOverride FileInfo AuthConfig Limit                     &lt;br /&gt;
    #                                                                          &lt;br /&gt;
    AllowOverride All                                       				&amp;lt;= C&#039;est ici ! &lt;br /&gt;
...                                  &lt;br /&gt;
&amp;lt;/Directory&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
Changer les droits sur .htaccess :&lt;br /&gt;
# chmod 644 /var/www/localhost/htdocs/.htaccess&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
************** Installation des outils ***********************&lt;br /&gt;
&lt;br /&gt;
À partir du dossier wordress de l&#039;école téléchargé en guise de sauvegarde...&lt;br /&gt;
&lt;br /&gt;
Thème : nisarg child&lt;br /&gt;
&lt;br /&gt;
Extensions :&lt;br /&gt;
Installées :&lt;br /&gt;
	- Advanced Accordion Gutenberg Block&lt;br /&gt;
	- advanced-iframe			-&amp;gt; problème : voir la config&lt;br /&gt;
	- PDF Viewer Block pour Gutenberg&lt;br /&gt;
	- classic-editor			-&amp;gt; installé - voir si activation&lt;br /&gt;
	- The Events Calendar&lt;br /&gt;
	- h5p					-&amp;gt; voir plugin Dashboard for Pressbooks and H5P et SNORDIAN&#039;s H5P Resize Pulse&lt;br /&gt;
	- ml-slider				-&amp;gt; diaporamas&lt;br /&gt;
	- shortcodes-ultimate			-&amp;gt; excellent !&lt;br /&gt;
	- smart-slider-3			-&amp;gt; ! Erreur à l&#039;activation ! création de diaporamas : voir si pas doublon avec ml-slider&lt;br /&gt;
	- tablepress				-&amp;gt; créer des tableaux&lt;br /&gt;
	- wp-miniaudioplayer			-&amp;gt; pour lire les mp3&lt;br /&gt;
	- wp-quicklatex				-&amp;gt; pour des formules math en latex&lt;br /&gt;
	- wp-statistics				-&amp;gt; statistiques de visites&lt;br /&gt;
&lt;br /&gt;
Ignorées :&lt;br /&gt;
	- advanced-iframe-custom	-&amp;gt; Voir Advanced Custom Fields&lt;br /&gt;
	- akismet			-&amp;gt; Anti-spam&lt;br /&gt;
	- algori-pdf-viewer		-&amp;gt; remplacé par PDF Viewer Block pour Gutenberg&lt;br /&gt;
	- antispam-bee&lt;br /&gt;
	- bbpress			-&amp;gt; forum de discussion&lt;br /&gt;
	- bp-better-messages		-&amp;gt; chat pour buddypress&lt;br /&gt;
	- buddypress			-&amp;gt; réseau social&lt;br /&gt;
	- easy-fancybox			-&amp;gt; Affichier des images, des vidéos... dans une box. Àvoir...&lt;br /&gt;
	- envole_hooks			-&amp;gt; pour envole&lt;br /&gt;
	- eportailwidget		-&amp;gt; idem ?&lt;br /&gt;
	- flynsarmy-iframe-shortcode	-&amp;gt; non trouvée&lt;br /&gt;
	- google-calendar-events	-&amp;gt; remplacée par The Events Calendar&lt;br /&gt;
	- nextend-accordion-menu	-&amp;gt; non trouvé. Voir si le plugin gutempberg fait l&#039;affaire&lt;br /&gt;
	- nextgen-gallery		-&amp;gt; gallerie d&#039;images. Voir si le plugi installé fair l&#039;affaire&lt;br /&gt;
	- page-links-to			-&amp;gt; optimiser les liens : non trouvé, voir si nécessaire&lt;br /&gt;
	- pretty links			-&amp;gt; casse pieds&lt;br /&gt;
	- poshwidget			-&amp;gt; eole&lt;br /&gt;
	- private-wp			-&amp;gt; ? non trouvée&lt;br /&gt;
	- rumbletalk-chat-a-chat-with-themes	-&amp;gt; chat&lt;br /&gt;
	- si-contact-form		-&amp;gt; formulaire de contact : voir contact form 7 si nécessaire&lt;br /&gt;
	- simple-embed-code		-&amp;gt; intégrer du code aux articles : voir code Embed&lt;br /&gt;
	- the-events-calendar		-&amp;gt; double emploi avec extension installée&lt;br /&gt;
	- theme-preview			-&amp;gt; aide à la conception. Àvoir (Toolkit for Block Theme)&lt;br /&gt;
	- tinymce-advanced		-&amp;gt; modifier l&#039;éditeur. Voir si utile&lt;br /&gt;
	- user-role-editor		-&amp;gt; régler les autorisations&lt;br /&gt;
	- vc-tabs			-&amp;gt; pas trouvée ?&lt;br /&gt;
	- visual-form-builder		-&amp;gt; création de formulaire&lt;br /&gt;
	- wpdirauth			-&amp;gt; ldap&lt;br /&gt;
	- wp-event-manager		-&amp;gt; double emploi&lt;br /&gt;
	- wp-hide-dashboard		-&amp;gt; non trouvée... à revoir&lt;br /&gt;
	- wp-polls			-&amp;gt; créer des sondages&lt;br /&gt;
	- wp-sentry			-&amp;gt; tracer les erruers php et navigation&lt;br /&gt;
	- wp-smushit			-&amp;gt; optimisation d&#039;images. voir si utile&lt;br /&gt;
	- wp-user-avatar		-&amp;gt; création d&#039;avatars pour les utilisateurs&lt;/div&gt;</summary>
		<author><name>Domi</name></author>
	</entry>
	<entry>
		<id>https://wiki.lesitadom.fr/index.php?title=Wp&amp;diff=1653</id>
		<title>Wp</title>
		<link rel="alternate" type="text/html" href="https://wiki.lesitadom.fr/index.php?title=Wp&amp;diff=1653"/>
		<updated>2025-07-09T08:07:13Z</updated>

		<summary type="html">&lt;p&gt;Domi : /* Installation de wordpress */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Wordpress sur alpine léger =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;(ajout wp.lesitadom dans /etc/hosts)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Création du conteneur :&lt;br /&gt;
  lxc launch local:alpineLe wp&lt;br /&gt;
  lxc exec wp apk update&lt;br /&gt;
  lxc exec wp apk update&lt;br /&gt;
(ça marche ;))&lt;br /&gt;
&lt;br /&gt;
== Serveur web : apache2 - php83 - mariadb ==&lt;br /&gt;
cf notes apache2 php sur alpine léger - modif : php84 à la place de php83&lt;br /&gt;
&lt;br /&gt;
ne fonctionne pas... mauvaise version de php ? Ok avec php83 =&amp;gt; on recommence...&lt;br /&gt;
&lt;br /&gt;
Ok !&lt;br /&gt;
&lt;br /&gt;
À l&#039;usage, H5P nécessite &#039;&#039;&#039;mbstring&#039;&#039;&#039; et &#039;&#039;&#039;zip&#039;&#039;&#039; : Ajout de &#039;&#039;&#039;php83-mbstring&#039;&#039;&#039; et &#039;&#039;&#039;php83-zip&#039;&#039;&#039; (relance d&#039;apache 2)&lt;br /&gt;
Lors du téléchargement d&#039;exercices (3.1 Mio), Nginx envoie l&#039;erreur 413 : Corriger proxy.conf en ajoutant la ligne&lt;br /&gt;
&lt;br /&gt;
 client_max_body_size 200M; (par défaut à 1Mio)&lt;br /&gt;
&lt;br /&gt;
Relancer nginx.&lt;br /&gt;
&lt;br /&gt;
Il faut également augmenter les valeurs : (dans /etc/php83/php.ini)&lt;br /&gt;
  upload_max_filesize = 256M&lt;br /&gt;
  post_max_size = 256M&lt;br /&gt;
  max_execution_time = 300&lt;br /&gt;
(relancer apache2)&lt;br /&gt;
&lt;br /&gt;
== Mariadb ==&lt;br /&gt;
&#039;&#039;(d&#039;après mes notes instal serveur + PMB)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
  apk add mysql mariadb mariadb-server-utils mariadb-client&lt;br /&gt;
  apk add php83-pdo_mysql php83-mbstring&lt;br /&gt;
&#039;&#039;(voir plus tard s&#039;il faut mysqli ou mysqlnd)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Initialisation de mariadb&lt;br /&gt;
  /etc/init.d/mariadb setup&lt;br /&gt;
(peuple /var/lib/mysql)&lt;br /&gt;
&lt;br /&gt;
  rc-service mariadb start&lt;br /&gt;
=&amp;gt; ok&lt;br /&gt;
 mysql&lt;br /&gt;
=&amp;gt; on entre dans mysql -&amp;gt; Ok&lt;br /&gt;
&lt;br /&gt;
== installation de phpmyadmin ==&lt;br /&gt;
&lt;br /&gt;
  apk add phpmyadmin&lt;br /&gt;
-&amp;gt; Installe de nombreux packages et librairies (php83-{mysqli,bz2,ctype,curl,gd,session,zip,xmlwriter,iconv})&lt;br /&gt;
	(lib{xau,md,bsd,xdmcp,xcb,x11,xext,ice,bsm,xt,xpm,dav1d,jpeg,yuv,avif,png,shrpyuv,webp,zip} aom-libs,freetype)&lt;br /&gt;
&lt;br /&gt;
 phpmyadmin has been installed to: &lt;br /&gt;
       /usr/share/webapps/phpmyadmin&lt;br /&gt;
 phpmyadmin config file has been installed to: &lt;br /&gt;
       /etc/phpmyadmin/config.inc.php&lt;br /&gt;
 If you use apache2:&lt;br /&gt;
      1) Change the ownership of the config directory:&lt;br /&gt;
             chown -R apache:apache /etc/phpmyadmin&lt;br /&gt;
      2) See if you need to modify the apache2 config:&lt;br /&gt;
             /etc/apache2/conf.d/phpmyadmin.conf&lt;br /&gt;
      3) Restart apache2 when done.&lt;br /&gt;
&lt;br /&gt;
  rc-service apache2 restart&lt;br /&gt;
-&amp;gt; phpmyadmin accessible à wp.lesitadom.fr/phpmyadmin&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Conteneur mariadb&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Création d&#039;un utilisateur pour phpmyadmin :&lt;br /&gt;
  # mysql&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  CREATE USER &#039;login_util&#039;@&#039;%&#039; IDENTIFIED BY &#039;pass_util&#039;;&lt;br /&gt;
  GRANT ALL PRIVILEGES ON *.* TO &#039;login_util&#039;@&#039;%&#039; WITH GRANT OPTION;&lt;br /&gt;
  FLUSH PRIVILEGES;&lt;br /&gt;
&#039;&#039;(Ctrl-d pour sortir)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Pour l&#039;accès avec mot de passe :&lt;br /&gt;
stopper les services mariadb et apache2 :&lt;br /&gt;
  rc-service mariadb stop&lt;br /&gt;
  rc-service apache2 stop&lt;br /&gt;
Dans /etc/my.cnf.d/maria_db_server.cnf, sous [mysqld], ajouter :&lt;br /&gt;
  skip-grant-tables&lt;br /&gt;
Relancer les services et ça fonctionne !&lt;br /&gt;
...pas tout à fait... la configuration de phpmyadmin n&#039;est pas terminée... Cf message au bas&lt;br /&gt;
&lt;br /&gt;
Récupération d&#039;un fichier de conf de phpmyadmin qui fonctionne sur le net (modif de l&#039;utilisateur et du mdp)&lt;br /&gt;
&lt;br /&gt;
Lancement de l&#039;installation de mariadb avec les paramètres par défaut (y à toutes les questions...)&lt;br /&gt;
&lt;br /&gt;
Redémarrage du conteneur -&amp;gt; phpmyadmin fonctionne avec les droits qui vont bien&lt;br /&gt;
&lt;br /&gt;
==Installation de wordpress==&lt;br /&gt;
&lt;br /&gt;
téléchargement de wordpres-...zip -&amp;gt; tmp du raspberry&lt;br /&gt;
 lxc file push /tmp/wordpress-6.7.2-fr_FR.zip wp/tmp/&lt;br /&gt;
Dans le conteneur :&lt;br /&gt;
 unzip /tmp/wordpress-6.7.2-fr_FR.zip -d /var/www/localhost/htdocs/&lt;br /&gt;
Déplacer le contenu à la racine :&lt;br /&gt;
 mv /var/www/localhost/htdocs/wordpress/* /var/www/localhost/htdocs/&lt;br /&gt;
&lt;br /&gt;
Création de la bdd wordpress (wp_perso2025) par phpmyadmin avec utilisateur wp-dd2025 et mdp 1_mdppuwp!&lt;br /&gt;
&lt;br /&gt;
Connection à wp dans le navigateur à l&#039;adresse du serveur : wp.lesitadom.fr -&amp;gt; configuration&lt;br /&gt;
&lt;br /&gt;
Tout fonctionne !&lt;br /&gt;
&lt;br /&gt;
Voir s&#039;il est possible d&#039;installer mariadb et phpmyadmin sur des conteneur distincts...&lt;br /&gt;
&lt;br /&gt;
=Installation de &#039;&#039;&#039;wordpress&#039;&#039;&#039; - &#039;&#039;&#039;mariadb&#039;&#039;&#039; et &#039;&#039;&#039;phpmyadmin&#039;&#039;&#039; sur trois conteneurs séparés &#039;&#039;alipneLe&#039;&#039;=&lt;br /&gt;
&lt;br /&gt;
***********&lt;br /&gt;
* Mariadb *&lt;br /&gt;
***********&lt;br /&gt;
Création du conteneur maria + maj&lt;br /&gt;
Installation de mariadb&lt;br /&gt;
# apk add (mysql) mariadb mariadb-server-utils mariadb-client&lt;br /&gt;
# apk add php83-pdo_mysql php83-mbstring&lt;br /&gt;
&lt;br /&gt;
Initialisation de mariadb (peuple /var/lib/mysql)&lt;br /&gt;
# /etc/init.d/mariadb setup&lt;br /&gt;
&lt;br /&gt;
Démarrer le service&lt;br /&gt;
# rc-service mariadb start&lt;br /&gt;
&lt;br /&gt;
Sécuriser la base de donnée&lt;br /&gt;
# mysql_secure_installation (vide/n/n/Y/Y/Y/Y)&lt;br /&gt;
&lt;br /&gt;
on peut entrer dans mysql (idem mariadb)&lt;br /&gt;
&lt;br /&gt;
*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/&lt;br /&gt;
Ajout d&#039;apache, php et phpmyadmin&lt;br /&gt;
&lt;br /&gt;
# apk add apache2 apache2-ctl php83 php83-apache2 php83-mbstring phpmyadmin&lt;br /&gt;
&lt;br /&gt;
Copie du fichier de conf dans etc/phpmyadmin/&lt;br /&gt;
Modif du fichier /var/www/localhost/htdocs/index.html -&amp;gt; index.php&lt;br /&gt;
Ajout de la redirection dans le conteneur proxy&lt;br /&gt;
Ajout de la redirection dans le fichier host du bureau&lt;br /&gt;
&lt;br /&gt;
À la première connection, phpmyadmin est en erreur : la base n&#039;est pas encore crée. Cliquer...&lt;br /&gt;
&lt;br /&gt;
phpmyadmin affiche une erreur d&#039;accès à /usr/share/webapps/phpmyadmin/tmp : le dossier n&#039;existe pas : création.&lt;br /&gt;
# chown apache:apache /usr/share/webapps/phpmyadmin/tmp&lt;br /&gt;
-&amp;gt; problème réglé&lt;br /&gt;
&lt;br /&gt;
phpmyadmin affiche une erreur concernant les cookies (pas de clé valide)&lt;br /&gt;
D&#039;après la documentation :&lt;br /&gt;
&lt;br /&gt;
// A string of 32 characters.&lt;br /&gt;
$cfg[&#039;blowfish_secret&#039;] = &#039;JOFw435365IScA&amp;amp;Q!cDugr!lSfuAz*OW&#039;;&lt;br /&gt;
88a7da62429ba6ad3cb3c76a09641fca&lt;br /&gt;
Modification du fichier /etc/phpmyadmin/config.php en conséquence.&lt;br /&gt;
&lt;br /&gt;
-&amp;gt; marche pas&lt;br /&gt;
&lt;br /&gt;
Tentative de connexion à mariadb depuis le conteneur wiki... ne fonctionne pas. Plusieurs tentatives en agissant sur les paramètres côté client (règles firewall, ouverture de ports) ou du côté serveur (utilisateur, adresse bind, paramètres my.cnf et maria....cnf).&lt;br /&gt;
Au final, il faut commenter la ligne &#039;skip-networking&#039; et ça fonctionne (voir si la ligne &#039;innodb_force_recovery=1&#039; a une utilité...). Trouvé à l&#039;adresse &amp;quot;https://mariadb.com/kb/en/configuring-mariadb-for-remote-client-access/&amp;quot;. À retester sur une machine propre.&lt;br /&gt;
&lt;br /&gt;
**************&lt;br /&gt;
* phpmyadmin *&lt;br /&gt;
**************&lt;br /&gt;
Création du conteneur phpmyadmin&lt;br /&gt;
Maj&lt;br /&gt;
&lt;br /&gt;
Installation du serveur web : apache2&lt;br /&gt;
# apk add apache2 php83 php83-apache2 php83-mbstring&lt;br /&gt;
# rc-service apache2 start&lt;br /&gt;
&lt;br /&gt;
Installation de phpmyadmin&lt;br /&gt;
# apk add phpmyadmin&lt;br /&gt;
&lt;br /&gt;
*&lt;br /&gt;
* phpmyadmin has been installed to:&lt;br /&gt;
*     /usr/share/webapps/phpmyadmin&lt;br /&gt;
* phpmyadmin config file has been installed to:&lt;br /&gt;
*     /etc/phpmyadmin/config.inc.php&lt;br /&gt;
* If you use apache2:&lt;br /&gt;
*     1) Change the ownership of the config directory:&lt;br /&gt;
*            chown -R apache:apache /etc/phpmyadmin&lt;br /&gt;
*     2) See if you need to modify the apache2 config:&lt;br /&gt;
*            /etc/apache2/conf.d/phpmyadmin.conf&lt;br /&gt;
*     3) Restart apache2 when done.&lt;br /&gt;
*&lt;br /&gt;
Ajout de phpmyadmin.lesitadom.fr au fichier hosts de l&#039;hôte&lt;br /&gt;
&lt;br /&gt;
*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/&lt;br /&gt;
Modification du fichier de conf dans le conteneur proxy :&lt;br /&gt;
&lt;br /&gt;
* conteneur phpmyadmin&lt;br /&gt;
server {&lt;br /&gt;
        listen 80 proxy_protocol;&lt;br /&gt;
        listen [::]:80 proxy_protocol;&lt;br /&gt;
&lt;br /&gt;
        server_name phpmyadmin.lesitadom.fr;&lt;br /&gt;
&lt;br /&gt;
        location / {&lt;br /&gt;
                include /etc/nginx/proxy_params;&lt;br /&gt;
&lt;br /&gt;
                proxy_pass http://phpmyadmin.lxd;&lt;br /&gt;
        }&lt;br /&gt;
        real_ip_header proxy_protocol;&lt;br /&gt;
        set_real_ip_from 127.0.0.1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Redémarrer le service nginx :&lt;br /&gt;
# systemctl restart nginx&lt;br /&gt;
&lt;br /&gt;
copie du fichier de conf téléchargé dans le dossier /etc/phpmyadmin&lt;br /&gt;
&lt;br /&gt;
*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/&lt;br /&gt;
&lt;br /&gt;
Modif du fichier /var/www/localhost/htdocs/index.html -&amp;gt; index.php (avec &amp;lt;?php phpinfo(); ?&amp;gt;&lt;br /&gt;
Démarrage du service apache2 :&lt;br /&gt;
# rc-service apache2 start&lt;br /&gt;
&lt;br /&gt;
-&amp;gt; la page d&#039;info s&#039;affiche&lt;br /&gt;
-&amp;gt; la page d&#039;accueil de phpmyadmin s&#039;affiche, mais pas de connexion à la base...&lt;br /&gt;
&lt;br /&gt;
*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/&lt;br /&gt;
Dans le conteneur maria :&lt;br /&gt;
&lt;br /&gt;
Création d&#039;un utilisateur pour phpmyadmin :&lt;br /&gt;
# mysql&lt;br /&gt;
CREATE USER &#039;login_util&#039;@&#039;%&#039; IDENTIFIED BY &#039;pass_util&#039;;&lt;br /&gt;
GRANT ALL PRIVILEGES ON *.* TO &#039;login_util&#039;@&#039;%&#039; WITH GRANT OPTION;&lt;br /&gt;
FLUSH PRIVILEGES;&lt;br /&gt;
(Ctrl-d pour sortir)&lt;br /&gt;
&lt;br /&gt;
*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/&lt;br /&gt;
&lt;br /&gt;
Pour tester les configurations successives, installation de mysql ne plus :&lt;br /&gt;
# apk add... (cf plus haut...)&lt;br /&gt;
&lt;br /&gt;
phpmyadmin:~# /etc/init.d/mariadb setup&lt;br /&gt;
 * Creating a new MySQL database ...&lt;br /&gt;
/usr/bin/mysql_install_db: Deprecated program name. It will be removed in a future release, use &#039;mariadb-install-db&#039; instead&lt;br /&gt;
Installing MariaDB/MySQL system tables in &#039;/var/lib/mysql&#039; ...&lt;br /&gt;
OK&lt;br /&gt;
&lt;br /&gt;
To start mariadbd at boot time you have to copy&lt;br /&gt;
support-files/mariadb.service to the right place for your system&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Two all-privilege accounts were created.&lt;br /&gt;
One is root@localhost, it has no password, but you need to&lt;br /&gt;
be system &#039;root&#039; user to connect. Use, for example, sudo mysql&lt;br /&gt;
The second is mysql@localhost, it has no password either, but&lt;br /&gt;
you need to be the system &#039;mysql&#039; user to connect.&lt;br /&gt;
After connecting you can set the password, if you would need to be&lt;br /&gt;
able to connect as any of these users with a password and without sudo&lt;br /&gt;
&lt;br /&gt;
See the MariaDB Knowledgebase at https://mariadb.com/kb&lt;br /&gt;
&lt;br /&gt;
You can start the MariaDB daemon with:&lt;br /&gt;
cd &#039;/usr&#039; ; /usr/bin/mariadbd-safe --datadir=&#039;/var/lib/mysql&#039;&lt;br /&gt;
&lt;br /&gt;
You can test the MariaDB daemon with mariadb-test-run.pl&lt;br /&gt;
cd &#039;/usr/mariadb-test&#039; ; perl mariadb-test-run.pl&lt;br /&gt;
&lt;br /&gt;
Please report any problems at https://mariadb.org/jira&lt;br /&gt;
&lt;br /&gt;
The latest information about MariaDB is available at https://mariadb.org/.&lt;br /&gt;
&lt;br /&gt;
Consider joining MariaDB&#039;s strong and vibrant community:&lt;br /&gt;
https://mariadb.org/get-involved/&lt;br /&gt;
&lt;br /&gt;
... ne connaît toujours pas &#039;mysql&#039;&lt;br /&gt;
# apk add mariadb-server-utils mariadb-client&lt;br /&gt;
-&amp;gt; reconnaît la commande, mais le serveur refuse la connexion...&lt;br /&gt;
&lt;br /&gt;
Abandon : comme phpmyadmin nécessite un serveur web, installation des trois dans le même conteneur : apache - php -maria&lt;br /&gt;
&lt;br /&gt;
*************&lt;br /&gt;
* Wordpress *&lt;br /&gt;
*************&lt;br /&gt;
1. Création du conteneur wp + maj&lt;br /&gt;
2. Installation d&#039;apache et php&lt;br /&gt;
# apk add apache2 php php83-apache2 apache2-ctl(pour lister les modules) php83-mysqli (sinon ça râle...)&lt;br /&gt;
# À l&#039;usage, le module H5P réclame la présence et l&#039;activation de mbstring : ajout de php83-mbstring/&lt;br /&gt;
&lt;br /&gt;
Modification de la page d&#039;afichage par défaut : /var/www/localhost/htdocs/index.html -&amp;gt; index.php&lt;br /&gt;
Modification du fichier proxy.conf dans le conteneur proxy : (/etc/nginx/sites-available/proxy.conf)&lt;br /&gt;
proxy_pass http://wp.lxd;&lt;br /&gt;
Redémarrer le service&lt;br /&gt;
systemctl restart nginx&lt;br /&gt;
&lt;br /&gt;
Dans le conteneur wp, démarrer apache2&lt;br /&gt;
rc-service apache2 start&lt;br /&gt;
&lt;br /&gt;
La page s&#039;affiche dans le navigateur...&lt;br /&gt;
&lt;br /&gt;
Création du fichier /etc/apache2/conf.d/remoteip.conf avec&lt;br /&gt;
&lt;br /&gt;
	RemoteIPHeader X-Real-IP&lt;br /&gt;
	RemoteIPTrustedProxy proxy.lxd (nom du conteneur nginx, plus correct dans la configuration conteneurs)&lt;br /&gt;
	&lt;br /&gt;
modification de /etc/apache2/httpd.conf décommenter :&lt;br /&gt;
	LoadModule remoteip_module modules/mod_remoteip.so&lt;br /&gt;
	LoadModule rewrite_module modules/mod_rewrite.so                       &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ajouter apache2 au démarrage&lt;br /&gt;
# rc-update add apache2&lt;br /&gt;
&lt;br /&gt;
relancer les services apache2&lt;br /&gt;
# rc-service apache2 restart&lt;br /&gt;
&lt;br /&gt;
*********************** (en cas d&#039;erreur Bad Getaway, redémarrer le proxy) ************&lt;br /&gt;
&lt;br /&gt;
Télécharger la dernière version de wp et la copier dans le dossier /tmp du conteneur&lt;br /&gt;
&lt;br /&gt;
# lxc file push /tmp/wp/wordpress-6.7.2-fr_FR.zip wiki/tmp&lt;br /&gt;
# lxc shell wiki&lt;br /&gt;
# unzip /tmp/wordpress-..._FR.zip -d /var/ww/localhost/htdocs/&lt;br /&gt;
&lt;br /&gt;
Comme on ne mettra pas d&#039;autre appli, on déplace le fourbi à la racine&lt;br /&gt;
# cd /var/www/localhost/htdocs&lt;br /&gt;
/var/www/localhost/htdocs# mv index.php index.php.sav&lt;br /&gt;
/var/www/localhost/htdocs# mv wordpress/* ./&lt;br /&gt;
/var/www/localhost/htdocs# rm -R wordpress&lt;br /&gt;
&lt;br /&gt;
Créer un utilisateur et une base de donnée pour wordpress dans le conteneur mariadb.lxd (phpmyadmin)&lt;br /&gt;
&lt;br /&gt;
Se connecter au site avec le navigateur&lt;br /&gt;
&lt;br /&gt;
utilisateur domiwp_68/1_mdppdomiwp_68! || wordpress || mariadb.lxd&lt;br /&gt;
&lt;br /&gt;
!!!! En cas d&#039;installation de php83-mysqlnd, le processus échoue (Typed property mysqli::$connect_errno must not be accessed before initialization) !!!&lt;br /&gt;
&lt;br /&gt;
Le bordel n&#039;arrive pas à utiliser ssl... et plante : tourne en boucle sur la page de connection&lt;br /&gt;
&lt;br /&gt;
tentative de lien dans le dossier /var/www/localhost/htdocs/wp-includes/certificates/ de wp&lt;br /&gt;
/etc/letsencrypt/live/lesitadom.fr/fullchain.pem&lt;br /&gt;
&lt;br /&gt;
# ln -s proxy.lxd/etc/letsencrypt/live/lesitadom.fr/fullchain.pem /var/www/localhost/htdocs/wp-includes/certificates/lesitadom.pem&lt;br /&gt;
&lt;br /&gt;
***************** Ça veut pas. On essaye avec une autre version de WP (6.8) ********************&lt;br /&gt;
Marche pas non plus, et en plus, c&#039;est en anglais et pas de choix de langue... Y&#039;a un truc qui merde dès le départ : la mise en page est foireuse...&lt;br /&gt;
&lt;br /&gt;
on recommence avec la version en français (6.8)&lt;br /&gt;
&lt;br /&gt;
Règlage des droits sur apache:www-data (chown -R apache:www-data)&lt;br /&gt;
Contenu de wordpress à la racine&lt;br /&gt;
Adresse &amp;quot;lesitadom.fr&amp;quot; (proxy)&lt;br /&gt;
Suppression des tables des instal précédentes (phpmyadmin)&lt;br /&gt;
&lt;br /&gt;
Affichage touours aussi lamentable, comme si la feuille de style n&#039;était pas prise en compte...&lt;br /&gt;
&lt;br /&gt;
Les tables se créent, mais pau moment de la connexion :&lt;br /&gt;
&lt;br /&gt;
Les informations que vous êtes sur le point de soumettre ne sont pas sécurisées&lt;br /&gt;
&lt;br /&gt;
Et on revient au formulaire&lt;br /&gt;
&lt;br /&gt;
************** On n&#039;est pas couchés ! *******************&lt;br /&gt;
&lt;br /&gt;
Recherche sur internet : worpress derrière un proxy inverse :&lt;br /&gt;
&lt;br /&gt;
Dans wp-config.php, ajouter :&lt;br /&gt;
&lt;br /&gt;
if ( (!empty( $_SERVER[&#039;HTTP_X_FORWARDED_HOST&#039;])) ||&lt;br /&gt;
      (!empty( $_SERVER[&#039;HTTP_X_FORWARDED_FOR&#039;])) ) {&lt;br /&gt;
      $_SERVER[&#039;HTTPS&#039;] = &#039;activé&#039;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Et put&#039; ça marche !!!!&lt;br /&gt;
&lt;br /&gt;
...plus !&lt;br /&gt;
J&#039;ai re-modifié la config du proxy et ça a cassé le bastringue... Le site donnait ça, en plus...&lt;br /&gt;
&lt;br /&gt;
serveur {&lt;br /&gt;
    listen 443 SSL ;&lt;br /&gt;
    server_name foo.bar www.foo.bar;&lt;br /&gt;
    location / {&lt;br /&gt;
        proxy_pass http://10.0.80.32/;&lt;br /&gt;
        proxy_set_header X-Forwarded-Host $host;&lt;br /&gt;
	proxy_set_header X-Forwarded-Server $hôte ;&lt;br /&gt;
	proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;&lt;br /&gt;
	proxy_set_header X-Forwarded-Proto $scheme;&lt;br /&gt;
	proxy_set_header X-Real-IP $remote_addr;&lt;br /&gt;
	proxy_set_header Hôte $host ;&lt;br /&gt;
    }&lt;br /&gt;
    certificat_ssl /etc/letsencrypt/live/foo.bar/fullchain.pem;&lt;br /&gt;
    ssl_certificate_key /etc/letsencrypt/live/foo.bar/privkey.pem;&lt;br /&gt;
    include /etc/letsencrypt/options-ssl-nginx.conf ;&lt;br /&gt;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;&lt;br /&gt;
}&lt;br /&gt;
serveur {&lt;br /&gt;
    server_name foo.bar www.foo.bar;&lt;br /&gt;
    return 301 https://foo.bar$request_uri ;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
adresse utilisée lors de l&#039;instal : lesitadom.fr avec réglage du proxy =&amp;gt; ok&lt;br /&gt;
Changement d&#039;adresse =&amp;gt; ko&lt;br /&gt;
Le fourbi doit laisser des traces de l&#039;adresse du site pendant l&#039;instal...&lt;br /&gt;
&lt;br /&gt;
Modifier : table wp-options, siteurl et home&lt;br /&gt;
&lt;br /&gt;
Ok&lt;br /&gt;
&lt;br /&gt;
************** erreur &amp;quot;La réponse n’est pas une réponse JSON valide&amp;quot; lors de la modification d&#039;un article ****************************&lt;br /&gt;
Modifier apache2 :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Directory &amp;quot;/var/www/localhost/htdocs&amp;quot;&amp;gt;                                     &lt;br /&gt;
...                           &lt;br /&gt;
    #                                                                 &lt;br /&gt;
    # AllowOverride controls what directives may be placed in .htaccess files.&lt;br /&gt;
    # It can be &amp;quot;All&amp;quot;, &amp;quot;None&amp;quot;, or any combination of the keywords:&lt;br /&gt;
    #   AllowOverride FileInfo AuthConfig Limit                     &lt;br /&gt;
    #                                                                          &lt;br /&gt;
    AllowOverride All                                       				&amp;lt;= C&#039;est ici ! &lt;br /&gt;
...                                  &lt;br /&gt;
&amp;lt;/Directory&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
Changer les droits sur .htaccess :&lt;br /&gt;
# chmod 644 /var/www/localhost/htdocs/.htaccess&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
************** Installation des outils ***********************&lt;br /&gt;
&lt;br /&gt;
À partir du dossier wordress de l&#039;école téléchargé en guise de sauvegarde...&lt;br /&gt;
&lt;br /&gt;
Thème : nisarg child&lt;br /&gt;
&lt;br /&gt;
Extensions :&lt;br /&gt;
Installées :&lt;br /&gt;
	- Advanced Accordion Gutenberg Block&lt;br /&gt;
	- advanced-iframe			-&amp;gt; problème : voir la config&lt;br /&gt;
	- PDF Viewer Block pour Gutenberg&lt;br /&gt;
	- classic-editor			-&amp;gt; installé - voir si activation&lt;br /&gt;
	- The Events Calendar&lt;br /&gt;
	- h5p					-&amp;gt; voir plugin Dashboard for Pressbooks and H5P et SNORDIAN&#039;s H5P Resize Pulse&lt;br /&gt;
	- ml-slider				-&amp;gt; diaporamas&lt;br /&gt;
	- shortcodes-ultimate			-&amp;gt; excellent !&lt;br /&gt;
	- smart-slider-3			-&amp;gt; ! Erreur à l&#039;activation ! création de diaporamas : voir si pas doublon avec ml-slider&lt;br /&gt;
	- tablepress				-&amp;gt; créer des tableaux&lt;br /&gt;
	- wp-miniaudioplayer			-&amp;gt; pour lire les mp3&lt;br /&gt;
	- wp-quicklatex				-&amp;gt; pour des formules math en latex&lt;br /&gt;
	- wp-statistics				-&amp;gt; statistiques de visites&lt;br /&gt;
&lt;br /&gt;
Ignorées :&lt;br /&gt;
	- advanced-iframe-custom	-&amp;gt; Voir Advanced Custom Fields&lt;br /&gt;
	- akismet			-&amp;gt; Anti-spam&lt;br /&gt;
	- algori-pdf-viewer		-&amp;gt; remplacé par PDF Viewer Block pour Gutenberg&lt;br /&gt;
	- antispam-bee&lt;br /&gt;
	- bbpress			-&amp;gt; forum de discussion&lt;br /&gt;
	- bp-better-messages		-&amp;gt; chat pour buddypress&lt;br /&gt;
	- buddypress			-&amp;gt; réseau social&lt;br /&gt;
	- easy-fancybox			-&amp;gt; Affichier des images, des vidéos... dans une box. Àvoir...&lt;br /&gt;
	- envole_hooks			-&amp;gt; pour envole&lt;br /&gt;
	- eportailwidget		-&amp;gt; idem ?&lt;br /&gt;
	- flynsarmy-iframe-shortcode	-&amp;gt; non trouvée&lt;br /&gt;
	- google-calendar-events	-&amp;gt; remplacée par The Events Calendar&lt;br /&gt;
	- nextend-accordion-menu	-&amp;gt; non trouvé. Voir si le plugin gutempberg fait l&#039;affaire&lt;br /&gt;
	- nextgen-gallery		-&amp;gt; gallerie d&#039;images. Voir si le plugi installé fair l&#039;affaire&lt;br /&gt;
	- page-links-to			-&amp;gt; optimiser les liens : non trouvé, voir si nécessaire&lt;br /&gt;
	- pretty links			-&amp;gt; casse pieds&lt;br /&gt;
	- poshwidget			-&amp;gt; eole&lt;br /&gt;
	- private-wp			-&amp;gt; ? non trouvée&lt;br /&gt;
	- rumbletalk-chat-a-chat-with-themes	-&amp;gt; chat&lt;br /&gt;
	- si-contact-form		-&amp;gt; formulaire de contact : voir contact form 7 si nécessaire&lt;br /&gt;
	- simple-embed-code		-&amp;gt; intégrer du code aux articles : voir code Embed&lt;br /&gt;
	- the-events-calendar		-&amp;gt; double emploi avec extension installée&lt;br /&gt;
	- theme-preview			-&amp;gt; aide à la conception. Àvoir (Toolkit for Block Theme)&lt;br /&gt;
	- tinymce-advanced		-&amp;gt; modifier l&#039;éditeur. Voir si utile&lt;br /&gt;
	- user-role-editor		-&amp;gt; régler les autorisations&lt;br /&gt;
	- vc-tabs			-&amp;gt; pas trouvée ?&lt;br /&gt;
	- visual-form-builder		-&amp;gt; création de formulaire&lt;br /&gt;
	- wpdirauth			-&amp;gt; ldap&lt;br /&gt;
	- wp-event-manager		-&amp;gt; double emploi&lt;br /&gt;
	- wp-hide-dashboard		-&amp;gt; non trouvée... à revoir&lt;br /&gt;
	- wp-polls			-&amp;gt; créer des sondages&lt;br /&gt;
	- wp-sentry			-&amp;gt; tracer les erruers php et navigation&lt;br /&gt;
	- wp-smushit			-&amp;gt; optimisation d&#039;images. voir si utile&lt;br /&gt;
	- wp-user-avatar		-&amp;gt; création d&#039;avatars pour les utilisateurs&lt;/div&gt;</summary>
		<author><name>Domi</name></author>
	</entry>
	<entry>
		<id>https://wiki.lesitadom.fr/index.php?title=Wp&amp;diff=1652</id>
		<title>Wp</title>
		<link rel="alternate" type="text/html" href="https://wiki.lesitadom.fr/index.php?title=Wp&amp;diff=1652"/>
		<updated>2025-07-09T08:03:45Z</updated>

		<summary type="html">&lt;p&gt;Domi : /* installation de phpmyadmin */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Wordpress sur alpine léger =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;(ajout wp.lesitadom dans /etc/hosts)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Création du conteneur :&lt;br /&gt;
  lxc launch local:alpineLe wp&lt;br /&gt;
  lxc exec wp apk update&lt;br /&gt;
  lxc exec wp apk update&lt;br /&gt;
(ça marche ;))&lt;br /&gt;
&lt;br /&gt;
== Serveur web : apache2 - php83 - mariadb ==&lt;br /&gt;
cf notes apache2 php sur alpine léger - modif : php84 à la place de php83&lt;br /&gt;
&lt;br /&gt;
ne fonctionne pas... mauvaise version de php ? Ok avec php83 =&amp;gt; on recommence...&lt;br /&gt;
&lt;br /&gt;
Ok !&lt;br /&gt;
&lt;br /&gt;
À l&#039;usage, H5P nécessite &#039;&#039;&#039;mbstring&#039;&#039;&#039; et &#039;&#039;&#039;zip&#039;&#039;&#039; : Ajout de &#039;&#039;&#039;php83-mbstring&#039;&#039;&#039; et &#039;&#039;&#039;php83-zip&#039;&#039;&#039; (relance d&#039;apache 2)&lt;br /&gt;
Lors du téléchargement d&#039;exercices (3.1 Mio), Nginx envoie l&#039;erreur 413 : Corriger proxy.conf en ajoutant la ligne&lt;br /&gt;
&lt;br /&gt;
 client_max_body_size 200M; (par défaut à 1Mio)&lt;br /&gt;
&lt;br /&gt;
Relancer nginx.&lt;br /&gt;
&lt;br /&gt;
Il faut également augmenter les valeurs : (dans /etc/php83/php.ini)&lt;br /&gt;
  upload_max_filesize = 256M&lt;br /&gt;
  post_max_size = 256M&lt;br /&gt;
  max_execution_time = 300&lt;br /&gt;
(relancer apache2)&lt;br /&gt;
&lt;br /&gt;
== Mariadb ==&lt;br /&gt;
&#039;&#039;(d&#039;après mes notes instal serveur + PMB)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
  apk add mysql mariadb mariadb-server-utils mariadb-client&lt;br /&gt;
  apk add php83-pdo_mysql php83-mbstring&lt;br /&gt;
&#039;&#039;(voir plus tard s&#039;il faut mysqli ou mysqlnd)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Initialisation de mariadb&lt;br /&gt;
  /etc/init.d/mariadb setup&lt;br /&gt;
(peuple /var/lib/mysql)&lt;br /&gt;
&lt;br /&gt;
  rc-service mariadb start&lt;br /&gt;
=&amp;gt; ok&lt;br /&gt;
 mysql&lt;br /&gt;
=&amp;gt; on entre dans mysql -&amp;gt; Ok&lt;br /&gt;
&lt;br /&gt;
== installation de phpmyadmin ==&lt;br /&gt;
&lt;br /&gt;
  apk add phpmyadmin&lt;br /&gt;
-&amp;gt; Installe de nombreux packages et librairies (php83-{mysqli,bz2,ctype,curl,gd,session,zip,xmlwriter,iconv})&lt;br /&gt;
	(lib{xau,md,bsd,xdmcp,xcb,x11,xext,ice,bsm,xt,xpm,dav1d,jpeg,yuv,avif,png,shrpyuv,webp,zip} aom-libs,freetype)&lt;br /&gt;
&lt;br /&gt;
 phpmyadmin has been installed to: &lt;br /&gt;
       /usr/share/webapps/phpmyadmin&lt;br /&gt;
 phpmyadmin config file has been installed to: &lt;br /&gt;
       /etc/phpmyadmin/config.inc.php&lt;br /&gt;
 If you use apache2:&lt;br /&gt;
      1) Change the ownership of the config directory:&lt;br /&gt;
             chown -R apache:apache /etc/phpmyadmin&lt;br /&gt;
      2) See if you need to modify the apache2 config:&lt;br /&gt;
             /etc/apache2/conf.d/phpmyadmin.conf&lt;br /&gt;
      3) Restart apache2 when done.&lt;br /&gt;
&lt;br /&gt;
  rc-service apache2 restart&lt;br /&gt;
-&amp;gt; phpmyadmin accessible à wp.lesitadom.fr/phpmyadmin&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Conteneur mariadb&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Création d&#039;un utilisateur pour phpmyadmin :&lt;br /&gt;
  # mysql&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  CREATE USER &#039;login_util&#039;@&#039;%&#039; IDENTIFIED BY &#039;pass_util&#039;;&lt;br /&gt;
  GRANT ALL PRIVILEGES ON *.* TO &#039;login_util&#039;@&#039;%&#039; WITH GRANT OPTION;&lt;br /&gt;
  FLUSH PRIVILEGES;&lt;br /&gt;
&#039;&#039;(Ctrl-d pour sortir)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Pour l&#039;accès avec mot de passe :&lt;br /&gt;
stopper les services mariadb et apache2 :&lt;br /&gt;
  rc-service mariadb stop&lt;br /&gt;
  rc-service apache2 stop&lt;br /&gt;
Dans /etc/my.cnf.d/maria_db_server.cnf, sous [mysqld], ajouter :&lt;br /&gt;
  skip-grant-tables&lt;br /&gt;
Relancer les services et ça fonctionne !&lt;br /&gt;
...pas tout à fait... la configuration de phpmyadmin n&#039;est pas terminée... Cf message au bas&lt;br /&gt;
&lt;br /&gt;
Récupération d&#039;un fichier de conf de phpmyadmin qui fonctionne sur le net (modif de l&#039;utilisateur et du mdp)&lt;br /&gt;
&lt;br /&gt;
Lancement de l&#039;installation de mariadb avec les paramètres par défaut (y à toutes les questions...)&lt;br /&gt;
&lt;br /&gt;
Redémarrage du conteneur -&amp;gt; phpmyadmin fonctionne avec les droits qui vont bien&lt;br /&gt;
&lt;br /&gt;
==Installation de wordpress==&lt;br /&gt;
&lt;br /&gt;
téléchargement de wordpres-...zip -&amp;gt; tmp du raspberry&lt;br /&gt;
# lxc file push /tmp/wordpress-6.7.2-fr_FR.zip wp/tmp/&lt;br /&gt;
Dans le conteneur :&lt;br /&gt;
# unzip /tmp/wordpress-6.7.2-fr_FR.zip -d /var/www/localhost/htdocs/&lt;br /&gt;
Déplacer le contenu à la racine :&lt;br /&gt;
# mv /var/www/localhost/htdocs/wordpress/* /var/www/localhost/htdocs/&lt;br /&gt;
&lt;br /&gt;
Création de la bdd wordpress (wp_perso2025) par phpmyadmin avec utilisateur wp-dd2025 et mdp 1_mdppuwp!&lt;br /&gt;
&lt;br /&gt;
Connection à wp dans le navigateur à l&#039;adresse du serveur : wp.lesitadom.fr -&amp;gt; configuration&lt;br /&gt;
&lt;br /&gt;
Tout fonctionne !&lt;br /&gt;
&lt;br /&gt;
Voir s&#039;il est possible d&#039;installer mariadb et phpmyadmin sur des conteneur distincts...&lt;br /&gt;
&lt;br /&gt;
/*\_/*\_/*\_/*\_/*\_/*\_/*\_/*\_/*\_/*\_/*\_/*\_/*\_/*\_/*\_/*\_/*\_/*\_/*\_/*\_/*\_/*\_/*\_/&lt;br /&gt;
\_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \&lt;br /&gt;
&lt;br /&gt;
******************************************************************************************&lt;br /&gt;
* installation de wordpress - mariadb et phpmyadmin sur deux conteneurs séparés alipneLe *&lt;br /&gt;
******************************************************************************************&lt;br /&gt;
&lt;br /&gt;
***********&lt;br /&gt;
* Mariadb *&lt;br /&gt;
***********&lt;br /&gt;
Création du conteneur maria + maj&lt;br /&gt;
Installation de mariadb&lt;br /&gt;
# apk add (mysql) mariadb mariadb-server-utils mariadb-client&lt;br /&gt;
# apk add php83-pdo_mysql php83-mbstring&lt;br /&gt;
&lt;br /&gt;
Initialisation de mariadb (peuple /var/lib/mysql)&lt;br /&gt;
# /etc/init.d/mariadb setup&lt;br /&gt;
&lt;br /&gt;
Démarrer le service&lt;br /&gt;
# rc-service mariadb start&lt;br /&gt;
&lt;br /&gt;
Sécuriser la base de donnée&lt;br /&gt;
# mysql_secure_installation (vide/n/n/Y/Y/Y/Y)&lt;br /&gt;
&lt;br /&gt;
on peut entrer dans mysql (idem mariadb)&lt;br /&gt;
&lt;br /&gt;
*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/&lt;br /&gt;
Ajout d&#039;apache, php et phpmyadmin&lt;br /&gt;
&lt;br /&gt;
# apk add apache2 apache2-ctl php83 php83-apache2 php83-mbstring phpmyadmin&lt;br /&gt;
&lt;br /&gt;
Copie du fichier de conf dans etc/phpmyadmin/&lt;br /&gt;
Modif du fichier /var/www/localhost/htdocs/index.html -&amp;gt; index.php&lt;br /&gt;
Ajout de la redirection dans le conteneur proxy&lt;br /&gt;
Ajout de la redirection dans le fichier host du bureau&lt;br /&gt;
&lt;br /&gt;
À la première connection, phpmyadmin est en erreur : la base n&#039;est pas encore crée. Cliquer...&lt;br /&gt;
&lt;br /&gt;
phpmyadmin affiche une erreur d&#039;accès à /usr/share/webapps/phpmyadmin/tmp : le dossier n&#039;existe pas : création.&lt;br /&gt;
# chown apache:apache /usr/share/webapps/phpmyadmin/tmp&lt;br /&gt;
-&amp;gt; problème réglé&lt;br /&gt;
&lt;br /&gt;
phpmyadmin affiche une erreur concernant les cookies (pas de clé valide)&lt;br /&gt;
D&#039;après la documentation :&lt;br /&gt;
&lt;br /&gt;
// A string of 32 characters.&lt;br /&gt;
$cfg[&#039;blowfish_secret&#039;] = &#039;JOFw435365IScA&amp;amp;Q!cDugr!lSfuAz*OW&#039;;&lt;br /&gt;
88a7da62429ba6ad3cb3c76a09641fca&lt;br /&gt;
Modification du fichier /etc/phpmyadmin/config.php en conséquence.&lt;br /&gt;
&lt;br /&gt;
-&amp;gt; marche pas&lt;br /&gt;
&lt;br /&gt;
Tentative de connexion à mariadb depuis le conteneur wiki... ne fonctionne pas. Plusieurs tentatives en agissant sur les paramètres côté client (règles firewall, ouverture de ports) ou du côté serveur (utilisateur, adresse bind, paramètres my.cnf et maria....cnf).&lt;br /&gt;
Au final, il faut commenter la ligne &#039;skip-networking&#039; et ça fonctionne (voir si la ligne &#039;innodb_force_recovery=1&#039; a une utilité...). Trouvé à l&#039;adresse &amp;quot;https://mariadb.com/kb/en/configuring-mariadb-for-remote-client-access/&amp;quot;. À retester sur une machine propre.&lt;br /&gt;
&lt;br /&gt;
**************&lt;br /&gt;
* phpmyadmin *&lt;br /&gt;
**************&lt;br /&gt;
Création du conteneur phpmyadmin&lt;br /&gt;
Maj&lt;br /&gt;
&lt;br /&gt;
Installation du serveur web : apache2&lt;br /&gt;
# apk add apache2 php83 php83-apache2 php83-mbstring&lt;br /&gt;
# rc-service apache2 start&lt;br /&gt;
&lt;br /&gt;
Installation de phpmyadmin&lt;br /&gt;
# apk add phpmyadmin&lt;br /&gt;
&lt;br /&gt;
*&lt;br /&gt;
* phpmyadmin has been installed to:&lt;br /&gt;
*     /usr/share/webapps/phpmyadmin&lt;br /&gt;
* phpmyadmin config file has been installed to:&lt;br /&gt;
*     /etc/phpmyadmin/config.inc.php&lt;br /&gt;
* If you use apache2:&lt;br /&gt;
*     1) Change the ownership of the config directory:&lt;br /&gt;
*            chown -R apache:apache /etc/phpmyadmin&lt;br /&gt;
*     2) See if you need to modify the apache2 config:&lt;br /&gt;
*            /etc/apache2/conf.d/phpmyadmin.conf&lt;br /&gt;
*     3) Restart apache2 when done.&lt;br /&gt;
*&lt;br /&gt;
Ajout de phpmyadmin.lesitadom.fr au fichier hosts de l&#039;hôte&lt;br /&gt;
&lt;br /&gt;
*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/&lt;br /&gt;
Modification du fichier de conf dans le conteneur proxy :&lt;br /&gt;
&lt;br /&gt;
* conteneur phpmyadmin&lt;br /&gt;
server {&lt;br /&gt;
        listen 80 proxy_protocol;&lt;br /&gt;
        listen [::]:80 proxy_protocol;&lt;br /&gt;
&lt;br /&gt;
        server_name phpmyadmin.lesitadom.fr;&lt;br /&gt;
&lt;br /&gt;
        location / {&lt;br /&gt;
                include /etc/nginx/proxy_params;&lt;br /&gt;
&lt;br /&gt;
                proxy_pass http://phpmyadmin.lxd;&lt;br /&gt;
        }&lt;br /&gt;
        real_ip_header proxy_protocol;&lt;br /&gt;
        set_real_ip_from 127.0.0.1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Redémarrer le service nginx :&lt;br /&gt;
# systemctl restart nginx&lt;br /&gt;
&lt;br /&gt;
copie du fichier de conf téléchargé dans le dossier /etc/phpmyadmin&lt;br /&gt;
&lt;br /&gt;
*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/&lt;br /&gt;
&lt;br /&gt;
Modif du fichier /var/www/localhost/htdocs/index.html -&amp;gt; index.php (avec &amp;lt;?php phpinfo(); ?&amp;gt;&lt;br /&gt;
Démarrage du service apache2 :&lt;br /&gt;
# rc-service apache2 start&lt;br /&gt;
&lt;br /&gt;
-&amp;gt; la page d&#039;info s&#039;affiche&lt;br /&gt;
-&amp;gt; la page d&#039;accueil de phpmyadmin s&#039;affiche, mais pas de connexion à la base...&lt;br /&gt;
&lt;br /&gt;
*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/&lt;br /&gt;
Dans le conteneur maria :&lt;br /&gt;
&lt;br /&gt;
Création d&#039;un utilisateur pour phpmyadmin :&lt;br /&gt;
# mysql&lt;br /&gt;
CREATE USER &#039;login_util&#039;@&#039;%&#039; IDENTIFIED BY &#039;pass_util&#039;;&lt;br /&gt;
GRANT ALL PRIVILEGES ON *.* TO &#039;login_util&#039;@&#039;%&#039; WITH GRANT OPTION;&lt;br /&gt;
FLUSH PRIVILEGES;&lt;br /&gt;
(Ctrl-d pour sortir)&lt;br /&gt;
&lt;br /&gt;
*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/&lt;br /&gt;
&lt;br /&gt;
Pour tester les configurations successives, installation de mysql ne plus :&lt;br /&gt;
# apk add... (cf plus haut...)&lt;br /&gt;
&lt;br /&gt;
phpmyadmin:~# /etc/init.d/mariadb setup&lt;br /&gt;
 * Creating a new MySQL database ...&lt;br /&gt;
/usr/bin/mysql_install_db: Deprecated program name. It will be removed in a future release, use &#039;mariadb-install-db&#039; instead&lt;br /&gt;
Installing MariaDB/MySQL system tables in &#039;/var/lib/mysql&#039; ...&lt;br /&gt;
OK&lt;br /&gt;
&lt;br /&gt;
To start mariadbd at boot time you have to copy&lt;br /&gt;
support-files/mariadb.service to the right place for your system&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Two all-privilege accounts were created.&lt;br /&gt;
One is root@localhost, it has no password, but you need to&lt;br /&gt;
be system &#039;root&#039; user to connect. Use, for example, sudo mysql&lt;br /&gt;
The second is mysql@localhost, it has no password either, but&lt;br /&gt;
you need to be the system &#039;mysql&#039; user to connect.&lt;br /&gt;
After connecting you can set the password, if you would need to be&lt;br /&gt;
able to connect as any of these users with a password and without sudo&lt;br /&gt;
&lt;br /&gt;
See the MariaDB Knowledgebase at https://mariadb.com/kb&lt;br /&gt;
&lt;br /&gt;
You can start the MariaDB daemon with:&lt;br /&gt;
cd &#039;/usr&#039; ; /usr/bin/mariadbd-safe --datadir=&#039;/var/lib/mysql&#039;&lt;br /&gt;
&lt;br /&gt;
You can test the MariaDB daemon with mariadb-test-run.pl&lt;br /&gt;
cd &#039;/usr/mariadb-test&#039; ; perl mariadb-test-run.pl&lt;br /&gt;
&lt;br /&gt;
Please report any problems at https://mariadb.org/jira&lt;br /&gt;
&lt;br /&gt;
The latest information about MariaDB is available at https://mariadb.org/.&lt;br /&gt;
&lt;br /&gt;
Consider joining MariaDB&#039;s strong and vibrant community:&lt;br /&gt;
https://mariadb.org/get-involved/&lt;br /&gt;
&lt;br /&gt;
... ne connaît toujours pas &#039;mysql&#039;&lt;br /&gt;
# apk add mariadb-server-utils mariadb-client&lt;br /&gt;
-&amp;gt; reconnaît la commande, mais le serveur refuse la connexion...&lt;br /&gt;
&lt;br /&gt;
Abandon : comme phpmyadmin nécessite un serveur web, installation des trois dans le même conteneur : apache - php -maria&lt;br /&gt;
&lt;br /&gt;
*************&lt;br /&gt;
* Wordpress *&lt;br /&gt;
*************&lt;br /&gt;
1. Création du conteneur wp + maj&lt;br /&gt;
2. Installation d&#039;apache et php&lt;br /&gt;
# apk add apache2 php php83-apache2 apache2-ctl(pour lister les modules) php83-mysqli (sinon ça râle...)&lt;br /&gt;
# À l&#039;usage, le module H5P réclame la présence et l&#039;activation de mbstring : ajout de php83-mbstring/&lt;br /&gt;
&lt;br /&gt;
Modification de la page d&#039;afichage par défaut : /var/www/localhost/htdocs/index.html -&amp;gt; index.php&lt;br /&gt;
Modification du fichier proxy.conf dans le conteneur proxy : (/etc/nginx/sites-available/proxy.conf)&lt;br /&gt;
proxy_pass http://wp.lxd;&lt;br /&gt;
Redémarrer le service&lt;br /&gt;
systemctl restart nginx&lt;br /&gt;
&lt;br /&gt;
Dans le conteneur wp, démarrer apache2&lt;br /&gt;
rc-service apache2 start&lt;br /&gt;
&lt;br /&gt;
La page s&#039;affiche dans le navigateur...&lt;br /&gt;
&lt;br /&gt;
Création du fichier /etc/apache2/conf.d/remoteip.conf avec&lt;br /&gt;
&lt;br /&gt;
	RemoteIPHeader X-Real-IP&lt;br /&gt;
	RemoteIPTrustedProxy proxy.lxd (nom du conteneur nginx, plus correct dans la configuration conteneurs)&lt;br /&gt;
	&lt;br /&gt;
modification de /etc/apache2/httpd.conf décommenter :&lt;br /&gt;
	LoadModule remoteip_module modules/mod_remoteip.so&lt;br /&gt;
	LoadModule rewrite_module modules/mod_rewrite.so                       &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ajouter apache2 au démarrage&lt;br /&gt;
# rc-update add apache2&lt;br /&gt;
&lt;br /&gt;
relancer les services apache2&lt;br /&gt;
# rc-service apache2 restart&lt;br /&gt;
&lt;br /&gt;
*********************** (en cas d&#039;erreur Bad Getaway, redémarrer le proxy) ************&lt;br /&gt;
&lt;br /&gt;
Télécharger la dernière version de wp et la copier dans le dossier /tmp du conteneur&lt;br /&gt;
&lt;br /&gt;
# lxc file push /tmp/wp/wordpress-6.7.2-fr_FR.zip wiki/tmp&lt;br /&gt;
# lxc shell wiki&lt;br /&gt;
# unzip /tmp/wordpress-..._FR.zip -d /var/ww/localhost/htdocs/&lt;br /&gt;
&lt;br /&gt;
Comme on ne mettra pas d&#039;autre appli, on déplace le fourbi à la racine&lt;br /&gt;
# cd /var/www/localhost/htdocs&lt;br /&gt;
/var/www/localhost/htdocs# mv index.php index.php.sav&lt;br /&gt;
/var/www/localhost/htdocs# mv wordpress/* ./&lt;br /&gt;
/var/www/localhost/htdocs# rm -R wordpress&lt;br /&gt;
&lt;br /&gt;
Créer un utilisateur et une base de donnée pour wordpress dans le conteneur mariadb.lxd (phpmyadmin)&lt;br /&gt;
&lt;br /&gt;
Se connecter au site avec le navigateur&lt;br /&gt;
&lt;br /&gt;
utilisateur domiwp_68/1_mdppdomiwp_68! || wordpress || mariadb.lxd&lt;br /&gt;
&lt;br /&gt;
!!!! En cas d&#039;installation de php83-mysqlnd, le processus échoue (Typed property mysqli::$connect_errno must not be accessed before initialization) !!!&lt;br /&gt;
&lt;br /&gt;
Le bordel n&#039;arrive pas à utiliser ssl... et plante : tourne en boucle sur la page de connection&lt;br /&gt;
&lt;br /&gt;
tentative de lien dans le dossier /var/www/localhost/htdocs/wp-includes/certificates/ de wp&lt;br /&gt;
/etc/letsencrypt/live/lesitadom.fr/fullchain.pem&lt;br /&gt;
&lt;br /&gt;
# ln -s proxy.lxd/etc/letsencrypt/live/lesitadom.fr/fullchain.pem /var/www/localhost/htdocs/wp-includes/certificates/lesitadom.pem&lt;br /&gt;
&lt;br /&gt;
***************** Ça veut pas. On essaye avec une autre version de WP (6.8) ********************&lt;br /&gt;
Marche pas non plus, et en plus, c&#039;est en anglais et pas de choix de langue... Y&#039;a un truc qui merde dès le départ : la mise en page est foireuse...&lt;br /&gt;
&lt;br /&gt;
on recommence avec la version en français (6.8)&lt;br /&gt;
&lt;br /&gt;
Règlage des droits sur apache:www-data (chown -R apache:www-data)&lt;br /&gt;
Contenu de wordpress à la racine&lt;br /&gt;
Adresse &amp;quot;lesitadom.fr&amp;quot; (proxy)&lt;br /&gt;
Suppression des tables des instal précédentes (phpmyadmin)&lt;br /&gt;
&lt;br /&gt;
Affichage touours aussi lamentable, comme si la feuille de style n&#039;était pas prise en compte...&lt;br /&gt;
&lt;br /&gt;
Les tables se créent, mais pau moment de la connexion :&lt;br /&gt;
&lt;br /&gt;
Les informations que vous êtes sur le point de soumettre ne sont pas sécurisées&lt;br /&gt;
&lt;br /&gt;
Et on revient au formulaire&lt;br /&gt;
&lt;br /&gt;
************** On n&#039;est pas couchés ! *******************&lt;br /&gt;
&lt;br /&gt;
Recherche sur internet : worpress derrière un proxy inverse :&lt;br /&gt;
&lt;br /&gt;
Dans wp-config.php, ajouter :&lt;br /&gt;
&lt;br /&gt;
if ( (!empty( $_SERVER[&#039;HTTP_X_FORWARDED_HOST&#039;])) ||&lt;br /&gt;
      (!empty( $_SERVER[&#039;HTTP_X_FORWARDED_FOR&#039;])) ) {&lt;br /&gt;
      $_SERVER[&#039;HTTPS&#039;] = &#039;activé&#039;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Et put&#039; ça marche !!!!&lt;br /&gt;
&lt;br /&gt;
...plus !&lt;br /&gt;
J&#039;ai re-modifié la config du proxy et ça a cassé le bastringue... Le site donnait ça, en plus...&lt;br /&gt;
&lt;br /&gt;
serveur {&lt;br /&gt;
    listen 443 SSL ;&lt;br /&gt;
    server_name foo.bar www.foo.bar;&lt;br /&gt;
    location / {&lt;br /&gt;
        proxy_pass http://10.0.80.32/;&lt;br /&gt;
        proxy_set_header X-Forwarded-Host $host;&lt;br /&gt;
	proxy_set_header X-Forwarded-Server $hôte ;&lt;br /&gt;
	proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;&lt;br /&gt;
	proxy_set_header X-Forwarded-Proto $scheme;&lt;br /&gt;
	proxy_set_header X-Real-IP $remote_addr;&lt;br /&gt;
	proxy_set_header Hôte $host ;&lt;br /&gt;
    }&lt;br /&gt;
    certificat_ssl /etc/letsencrypt/live/foo.bar/fullchain.pem;&lt;br /&gt;
    ssl_certificate_key /etc/letsencrypt/live/foo.bar/privkey.pem;&lt;br /&gt;
    include /etc/letsencrypt/options-ssl-nginx.conf ;&lt;br /&gt;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;&lt;br /&gt;
}&lt;br /&gt;
serveur {&lt;br /&gt;
    server_name foo.bar www.foo.bar;&lt;br /&gt;
    return 301 https://foo.bar$request_uri ;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
adresse utilisée lors de l&#039;instal : lesitadom.fr avec réglage du proxy =&amp;gt; ok&lt;br /&gt;
Changement d&#039;adresse =&amp;gt; ko&lt;br /&gt;
Le fourbi doit laisser des traces de l&#039;adresse du site pendant l&#039;instal...&lt;br /&gt;
&lt;br /&gt;
Modifier : table wp-options, siteurl et home&lt;br /&gt;
&lt;br /&gt;
Ok&lt;br /&gt;
&lt;br /&gt;
************** erreur &amp;quot;La réponse n’est pas une réponse JSON valide&amp;quot; lors de la modification d&#039;un article ****************************&lt;br /&gt;
Modifier apache2 :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Directory &amp;quot;/var/www/localhost/htdocs&amp;quot;&amp;gt;                                     &lt;br /&gt;
...                           &lt;br /&gt;
    #                                                                 &lt;br /&gt;
    # AllowOverride controls what directives may be placed in .htaccess files.&lt;br /&gt;
    # It can be &amp;quot;All&amp;quot;, &amp;quot;None&amp;quot;, or any combination of the keywords:&lt;br /&gt;
    #   AllowOverride FileInfo AuthConfig Limit                     &lt;br /&gt;
    #                                                                          &lt;br /&gt;
    AllowOverride All                                       				&amp;lt;= C&#039;est ici ! &lt;br /&gt;
...                                  &lt;br /&gt;
&amp;lt;/Directory&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
Changer les droits sur .htaccess :&lt;br /&gt;
# chmod 644 /var/www/localhost/htdocs/.htaccess&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
************** Installation des outils ***********************&lt;br /&gt;
&lt;br /&gt;
À partir du dossier wordress de l&#039;école téléchargé en guise de sauvegarde...&lt;br /&gt;
&lt;br /&gt;
Thème : nisarg child&lt;br /&gt;
&lt;br /&gt;
Extensions :&lt;br /&gt;
Installées :&lt;br /&gt;
	- Advanced Accordion Gutenberg Block&lt;br /&gt;
	- advanced-iframe			-&amp;gt; problème : voir la config&lt;br /&gt;
	- PDF Viewer Block pour Gutenberg&lt;br /&gt;
	- classic-editor			-&amp;gt; installé - voir si activation&lt;br /&gt;
	- The Events Calendar&lt;br /&gt;
	- h5p					-&amp;gt; voir plugin Dashboard for Pressbooks and H5P et SNORDIAN&#039;s H5P Resize Pulse&lt;br /&gt;
	- ml-slider				-&amp;gt; diaporamas&lt;br /&gt;
	- shortcodes-ultimate			-&amp;gt; excellent !&lt;br /&gt;
	- smart-slider-3			-&amp;gt; ! Erreur à l&#039;activation ! création de diaporamas : voir si pas doublon avec ml-slider&lt;br /&gt;
	- tablepress				-&amp;gt; créer des tableaux&lt;br /&gt;
	- wp-miniaudioplayer			-&amp;gt; pour lire les mp3&lt;br /&gt;
	- wp-quicklatex				-&amp;gt; pour des formules math en latex&lt;br /&gt;
	- wp-statistics				-&amp;gt; statistiques de visites&lt;br /&gt;
&lt;br /&gt;
Ignorées :&lt;br /&gt;
	- advanced-iframe-custom	-&amp;gt; Voir Advanced Custom Fields&lt;br /&gt;
	- akismet			-&amp;gt; Anti-spam&lt;br /&gt;
	- algori-pdf-viewer		-&amp;gt; remplacé par PDF Viewer Block pour Gutenberg&lt;br /&gt;
	- antispam-bee&lt;br /&gt;
	- bbpress			-&amp;gt; forum de discussion&lt;br /&gt;
	- bp-better-messages		-&amp;gt; chat pour buddypress&lt;br /&gt;
	- buddypress			-&amp;gt; réseau social&lt;br /&gt;
	- easy-fancybox			-&amp;gt; Affichier des images, des vidéos... dans une box. Àvoir...&lt;br /&gt;
	- envole_hooks			-&amp;gt; pour envole&lt;br /&gt;
	- eportailwidget		-&amp;gt; idem ?&lt;br /&gt;
	- flynsarmy-iframe-shortcode	-&amp;gt; non trouvée&lt;br /&gt;
	- google-calendar-events	-&amp;gt; remplacée par The Events Calendar&lt;br /&gt;
	- nextend-accordion-menu	-&amp;gt; non trouvé. Voir si le plugin gutempberg fait l&#039;affaire&lt;br /&gt;
	- nextgen-gallery		-&amp;gt; gallerie d&#039;images. Voir si le plugi installé fair l&#039;affaire&lt;br /&gt;
	- page-links-to			-&amp;gt; optimiser les liens : non trouvé, voir si nécessaire&lt;br /&gt;
	- pretty links			-&amp;gt; casse pieds&lt;br /&gt;
	- poshwidget			-&amp;gt; eole&lt;br /&gt;
	- private-wp			-&amp;gt; ? non trouvée&lt;br /&gt;
	- rumbletalk-chat-a-chat-with-themes	-&amp;gt; chat&lt;br /&gt;
	- si-contact-form		-&amp;gt; formulaire de contact : voir contact form 7 si nécessaire&lt;br /&gt;
	- simple-embed-code		-&amp;gt; intégrer du code aux articles : voir code Embed&lt;br /&gt;
	- the-events-calendar		-&amp;gt; double emploi avec extension installée&lt;br /&gt;
	- theme-preview			-&amp;gt; aide à la conception. Àvoir (Toolkit for Block Theme)&lt;br /&gt;
	- tinymce-advanced		-&amp;gt; modifier l&#039;éditeur. Voir si utile&lt;br /&gt;
	- user-role-editor		-&amp;gt; régler les autorisations&lt;br /&gt;
	- vc-tabs			-&amp;gt; pas trouvée ?&lt;br /&gt;
	- visual-form-builder		-&amp;gt; création de formulaire&lt;br /&gt;
	- wpdirauth			-&amp;gt; ldap&lt;br /&gt;
	- wp-event-manager		-&amp;gt; double emploi&lt;br /&gt;
	- wp-hide-dashboard		-&amp;gt; non trouvée... à revoir&lt;br /&gt;
	- wp-polls			-&amp;gt; créer des sondages&lt;br /&gt;
	- wp-sentry			-&amp;gt; tracer les erruers php et navigation&lt;br /&gt;
	- wp-smushit			-&amp;gt; optimisation d&#039;images. voir si utile&lt;br /&gt;
	- wp-user-avatar		-&amp;gt; création d&#039;avatars pour les utilisateurs&lt;/div&gt;</summary>
		<author><name>Domi</name></author>
	</entry>
	<entry>
		<id>https://wiki.lesitadom.fr/index.php?title=Wp&amp;diff=1651</id>
		<title>Wp</title>
		<link rel="alternate" type="text/html" href="https://wiki.lesitadom.fr/index.php?title=Wp&amp;diff=1651"/>
		<updated>2025-07-09T08:01:37Z</updated>

		<summary type="html">&lt;p&gt;Domi : /* installation de phpmyadmin */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Wordpress sur alpine léger =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;(ajout wp.lesitadom dans /etc/hosts)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Création du conteneur :&lt;br /&gt;
  lxc launch local:alpineLe wp&lt;br /&gt;
  lxc exec wp apk update&lt;br /&gt;
  lxc exec wp apk update&lt;br /&gt;
(ça marche ;))&lt;br /&gt;
&lt;br /&gt;
== Serveur web : apache2 - php83 - mariadb ==&lt;br /&gt;
cf notes apache2 php sur alpine léger - modif : php84 à la place de php83&lt;br /&gt;
&lt;br /&gt;
ne fonctionne pas... mauvaise version de php ? Ok avec php83 =&amp;gt; on recommence...&lt;br /&gt;
&lt;br /&gt;
Ok !&lt;br /&gt;
&lt;br /&gt;
À l&#039;usage, H5P nécessite &#039;&#039;&#039;mbstring&#039;&#039;&#039; et &#039;&#039;&#039;zip&#039;&#039;&#039; : Ajout de &#039;&#039;&#039;php83-mbstring&#039;&#039;&#039; et &#039;&#039;&#039;php83-zip&#039;&#039;&#039; (relance d&#039;apache 2)&lt;br /&gt;
Lors du téléchargement d&#039;exercices (3.1 Mio), Nginx envoie l&#039;erreur 413 : Corriger proxy.conf en ajoutant la ligne&lt;br /&gt;
&lt;br /&gt;
 client_max_body_size 200M; (par défaut à 1Mio)&lt;br /&gt;
&lt;br /&gt;
Relancer nginx.&lt;br /&gt;
&lt;br /&gt;
Il faut également augmenter les valeurs : (dans /etc/php83/php.ini)&lt;br /&gt;
  upload_max_filesize = 256M&lt;br /&gt;
  post_max_size = 256M&lt;br /&gt;
  max_execution_time = 300&lt;br /&gt;
(relancer apache2)&lt;br /&gt;
&lt;br /&gt;
== Mariadb ==&lt;br /&gt;
&#039;&#039;(d&#039;après mes notes instal serveur + PMB)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
  apk add mysql mariadb mariadb-server-utils mariadb-client&lt;br /&gt;
  apk add php83-pdo_mysql php83-mbstring&lt;br /&gt;
&#039;&#039;(voir plus tard s&#039;il faut mysqli ou mysqlnd)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Initialisation de mariadb&lt;br /&gt;
  /etc/init.d/mariadb setup&lt;br /&gt;
(peuple /var/lib/mysql)&lt;br /&gt;
&lt;br /&gt;
  rc-service mariadb start&lt;br /&gt;
=&amp;gt; ok&lt;br /&gt;
 mysql&lt;br /&gt;
=&amp;gt; on entre dans mysql -&amp;gt; Ok&lt;br /&gt;
&lt;br /&gt;
== installation de phpmyadmin ==&lt;br /&gt;
&lt;br /&gt;
  apk add phpmyadmin&lt;br /&gt;
-&amp;gt; Installe de nombreux packages et librairies (php83-{mysqli,bz2,ctype,curl,gd,session,zip,xmlwriter,iconv})&lt;br /&gt;
	(lib{xau,md,bsd,xdmcp,xcb,x11,xext,ice,bsm,xt,xpm,dav1d,jpeg,yuv,avif,png,shrpyuv,webp,zip} aom-libs,freetype)&lt;br /&gt;
&lt;br /&gt;
 phpmyadmin has been installed to: &lt;br /&gt;
       /usr/share/webapps/phpmyadmin&lt;br /&gt;
 phpmyadmin config file has been installed to: &lt;br /&gt;
       /etc/phpmyadmin/config.inc.php&lt;br /&gt;
 If you use apache2:&lt;br /&gt;
      1) Change the ownership of the config directory:&lt;br /&gt;
             chown -R apache:apache /etc/phpmyadmin&lt;br /&gt;
      2) See if you need to modify the apache2 config:&lt;br /&gt;
             /etc/apache2/conf.d/phpmyadmin.conf&lt;br /&gt;
      3) Restart apache2 when done.&lt;br /&gt;
&lt;br /&gt;
  rc-service apache2 restart&lt;br /&gt;
-&amp;gt; phpmyadmin accessible à wp.lesitadom.fr/phpmyadmin&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Conteneur mariadb&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Création d&#039;un utilisateur pour phpmyadmin :&lt;br /&gt;
  # mysql&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  CREATE USER &#039;login_util&#039;@&#039;%&#039; IDENTIFIED BY &#039;pass_util&#039;;&lt;br /&gt;
  GRANT ALL PRIVILEGES ON *.* TO &#039;login_util&#039;@&#039;%&#039; WITH GRANT OPTION;&lt;br /&gt;
  FLUSH PRIVILEGES;&lt;br /&gt;
&#039;&#039;(Ctrl-d pour sortir)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Pour l&#039;accès avec mot de passe :&lt;br /&gt;
stopper les services mariadb et apache2 :&lt;br /&gt;
  rc-service mariadb stop&lt;br /&gt;
  rc-service apache2 stop&lt;br /&gt;
Dans /etc/my.cnf.d/maria_db_server.cnf, sous [mysqld], ajouter :&lt;br /&gt;
  skip-grant-tables&lt;br /&gt;
Relancer les services et ça fonctionne !&lt;br /&gt;
...pas tout à fait... la configuration de phpmyadmin n&#039;est pas terminée... Cf message au bas&lt;br /&gt;
&lt;br /&gt;
Récupération d&#039;un fichier de conf de phpmyadmin qui fonctionne sur le net (modif de l&#039;utilisateur et du mdp)&lt;br /&gt;
&lt;br /&gt;
lancement de l&#039;installation de mariadb avec les paramètres par défaut (y à toutes les questions...)&lt;br /&gt;
&lt;br /&gt;
Redémarrage du conteneur -&amp;gt; phpmyadmin fonctionne avec les droits qui vont bien&lt;br /&gt;
&lt;br /&gt;
==Installation de wordpress==&lt;br /&gt;
&lt;br /&gt;
téléchargement de wordpres-...zip -&amp;gt; tmp du raspberry&lt;br /&gt;
# lxc file push /tmp/wordpress-6.7.2-fr_FR.zip wp/tmp/&lt;br /&gt;
Dans le conteneur :&lt;br /&gt;
# unzip /tmp/wordpress-6.7.2-fr_FR.zip -d /var/www/localhost/htdocs/&lt;br /&gt;
Déplacer le contenu à la racine :&lt;br /&gt;
# mv /var/www/localhost/htdocs/wordpress/* /var/www/localhost/htdocs/&lt;br /&gt;
&lt;br /&gt;
Création de la bdd wordpress (wp_perso2025) par phpmyadmin avec utilisateur wp-dd2025 et mdp 1_mdppuwp!&lt;br /&gt;
&lt;br /&gt;
Connection à wp dans le navigateur à l&#039;adresse du serveur : wp.lesitadom.fr -&amp;gt; configuration&lt;br /&gt;
&lt;br /&gt;
Tout fonctionne !&lt;br /&gt;
&lt;br /&gt;
Voir s&#039;il est possible d&#039;installer mariadb et phpmyadmin sur des conteneur distincts...&lt;br /&gt;
&lt;br /&gt;
/*\_/*\_/*\_/*\_/*\_/*\_/*\_/*\_/*\_/*\_/*\_/*\_/*\_/*\_/*\_/*\_/*\_/*\_/*\_/*\_/*\_/*\_/*\_/&lt;br /&gt;
\_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \&lt;br /&gt;
&lt;br /&gt;
******************************************************************************************&lt;br /&gt;
* installation de wordpress - mariadb et phpmyadmin sur deux conteneurs séparés alipneLe *&lt;br /&gt;
******************************************************************************************&lt;br /&gt;
&lt;br /&gt;
***********&lt;br /&gt;
* Mariadb *&lt;br /&gt;
***********&lt;br /&gt;
Création du conteneur maria + maj&lt;br /&gt;
Installation de mariadb&lt;br /&gt;
# apk add (mysql) mariadb mariadb-server-utils mariadb-client&lt;br /&gt;
# apk add php83-pdo_mysql php83-mbstring&lt;br /&gt;
&lt;br /&gt;
Initialisation de mariadb (peuple /var/lib/mysql)&lt;br /&gt;
# /etc/init.d/mariadb setup&lt;br /&gt;
&lt;br /&gt;
Démarrer le service&lt;br /&gt;
# rc-service mariadb start&lt;br /&gt;
&lt;br /&gt;
Sécuriser la base de donnée&lt;br /&gt;
# mysql_secure_installation (vide/n/n/Y/Y/Y/Y)&lt;br /&gt;
&lt;br /&gt;
on peut entrer dans mysql (idem mariadb)&lt;br /&gt;
&lt;br /&gt;
*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/&lt;br /&gt;
Ajout d&#039;apache, php et phpmyadmin&lt;br /&gt;
&lt;br /&gt;
# apk add apache2 apache2-ctl php83 php83-apache2 php83-mbstring phpmyadmin&lt;br /&gt;
&lt;br /&gt;
Copie du fichier de conf dans etc/phpmyadmin/&lt;br /&gt;
Modif du fichier /var/www/localhost/htdocs/index.html -&amp;gt; index.php&lt;br /&gt;
Ajout de la redirection dans le conteneur proxy&lt;br /&gt;
Ajout de la redirection dans le fichier host du bureau&lt;br /&gt;
&lt;br /&gt;
À la première connection, phpmyadmin est en erreur : la base n&#039;est pas encore crée. Cliquer...&lt;br /&gt;
&lt;br /&gt;
phpmyadmin affiche une erreur d&#039;accès à /usr/share/webapps/phpmyadmin/tmp : le dossier n&#039;existe pas : création.&lt;br /&gt;
# chown apache:apache /usr/share/webapps/phpmyadmin/tmp&lt;br /&gt;
-&amp;gt; problème réglé&lt;br /&gt;
&lt;br /&gt;
phpmyadmin affiche une erreur concernant les cookies (pas de clé valide)&lt;br /&gt;
D&#039;après la documentation :&lt;br /&gt;
&lt;br /&gt;
// A string of 32 characters.&lt;br /&gt;
$cfg[&#039;blowfish_secret&#039;] = &#039;JOFw435365IScA&amp;amp;Q!cDugr!lSfuAz*OW&#039;;&lt;br /&gt;
88a7da62429ba6ad3cb3c76a09641fca&lt;br /&gt;
Modification du fichier /etc/phpmyadmin/config.php en conséquence.&lt;br /&gt;
&lt;br /&gt;
-&amp;gt; marche pas&lt;br /&gt;
&lt;br /&gt;
Tentative de connexion à mariadb depuis le conteneur wiki... ne fonctionne pas. Plusieurs tentatives en agissant sur les paramètres côté client (règles firewall, ouverture de ports) ou du côté serveur (utilisateur, adresse bind, paramètres my.cnf et maria....cnf).&lt;br /&gt;
Au final, il faut commenter la ligne &#039;skip-networking&#039; et ça fonctionne (voir si la ligne &#039;innodb_force_recovery=1&#039; a une utilité...). Trouvé à l&#039;adresse &amp;quot;https://mariadb.com/kb/en/configuring-mariadb-for-remote-client-access/&amp;quot;. À retester sur une machine propre.&lt;br /&gt;
&lt;br /&gt;
**************&lt;br /&gt;
* phpmyadmin *&lt;br /&gt;
**************&lt;br /&gt;
Création du conteneur phpmyadmin&lt;br /&gt;
Maj&lt;br /&gt;
&lt;br /&gt;
Installation du serveur web : apache2&lt;br /&gt;
# apk add apache2 php83 php83-apache2 php83-mbstring&lt;br /&gt;
# rc-service apache2 start&lt;br /&gt;
&lt;br /&gt;
Installation de phpmyadmin&lt;br /&gt;
# apk add phpmyadmin&lt;br /&gt;
&lt;br /&gt;
*&lt;br /&gt;
* phpmyadmin has been installed to:&lt;br /&gt;
*     /usr/share/webapps/phpmyadmin&lt;br /&gt;
* phpmyadmin config file has been installed to:&lt;br /&gt;
*     /etc/phpmyadmin/config.inc.php&lt;br /&gt;
* If you use apache2:&lt;br /&gt;
*     1) Change the ownership of the config directory:&lt;br /&gt;
*            chown -R apache:apache /etc/phpmyadmin&lt;br /&gt;
*     2) See if you need to modify the apache2 config:&lt;br /&gt;
*            /etc/apache2/conf.d/phpmyadmin.conf&lt;br /&gt;
*     3) Restart apache2 when done.&lt;br /&gt;
*&lt;br /&gt;
Ajout de phpmyadmin.lesitadom.fr au fichier hosts de l&#039;hôte&lt;br /&gt;
&lt;br /&gt;
*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/&lt;br /&gt;
Modification du fichier de conf dans le conteneur proxy :&lt;br /&gt;
&lt;br /&gt;
* conteneur phpmyadmin&lt;br /&gt;
server {&lt;br /&gt;
        listen 80 proxy_protocol;&lt;br /&gt;
        listen [::]:80 proxy_protocol;&lt;br /&gt;
&lt;br /&gt;
        server_name phpmyadmin.lesitadom.fr;&lt;br /&gt;
&lt;br /&gt;
        location / {&lt;br /&gt;
                include /etc/nginx/proxy_params;&lt;br /&gt;
&lt;br /&gt;
                proxy_pass http://phpmyadmin.lxd;&lt;br /&gt;
        }&lt;br /&gt;
        real_ip_header proxy_protocol;&lt;br /&gt;
        set_real_ip_from 127.0.0.1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Redémarrer le service nginx :&lt;br /&gt;
# systemctl restart nginx&lt;br /&gt;
&lt;br /&gt;
copie du fichier de conf téléchargé dans le dossier /etc/phpmyadmin&lt;br /&gt;
&lt;br /&gt;
*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/&lt;br /&gt;
&lt;br /&gt;
Modif du fichier /var/www/localhost/htdocs/index.html -&amp;gt; index.php (avec &amp;lt;?php phpinfo(); ?&amp;gt;&lt;br /&gt;
Démarrage du service apache2 :&lt;br /&gt;
# rc-service apache2 start&lt;br /&gt;
&lt;br /&gt;
-&amp;gt; la page d&#039;info s&#039;affiche&lt;br /&gt;
-&amp;gt; la page d&#039;accueil de phpmyadmin s&#039;affiche, mais pas de connexion à la base...&lt;br /&gt;
&lt;br /&gt;
*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/&lt;br /&gt;
Dans le conteneur maria :&lt;br /&gt;
&lt;br /&gt;
Création d&#039;un utilisateur pour phpmyadmin :&lt;br /&gt;
# mysql&lt;br /&gt;
CREATE USER &#039;login_util&#039;@&#039;%&#039; IDENTIFIED BY &#039;pass_util&#039;;&lt;br /&gt;
GRANT ALL PRIVILEGES ON *.* TO &#039;login_util&#039;@&#039;%&#039; WITH GRANT OPTION;&lt;br /&gt;
FLUSH PRIVILEGES;&lt;br /&gt;
(Ctrl-d pour sortir)&lt;br /&gt;
&lt;br /&gt;
*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/&lt;br /&gt;
&lt;br /&gt;
Pour tester les configurations successives, installation de mysql ne plus :&lt;br /&gt;
# apk add... (cf plus haut...)&lt;br /&gt;
&lt;br /&gt;
phpmyadmin:~# /etc/init.d/mariadb setup&lt;br /&gt;
 * Creating a new MySQL database ...&lt;br /&gt;
/usr/bin/mysql_install_db: Deprecated program name. It will be removed in a future release, use &#039;mariadb-install-db&#039; instead&lt;br /&gt;
Installing MariaDB/MySQL system tables in &#039;/var/lib/mysql&#039; ...&lt;br /&gt;
OK&lt;br /&gt;
&lt;br /&gt;
To start mariadbd at boot time you have to copy&lt;br /&gt;
support-files/mariadb.service to the right place for your system&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Two all-privilege accounts were created.&lt;br /&gt;
One is root@localhost, it has no password, but you need to&lt;br /&gt;
be system &#039;root&#039; user to connect. Use, for example, sudo mysql&lt;br /&gt;
The second is mysql@localhost, it has no password either, but&lt;br /&gt;
you need to be the system &#039;mysql&#039; user to connect.&lt;br /&gt;
After connecting you can set the password, if you would need to be&lt;br /&gt;
able to connect as any of these users with a password and without sudo&lt;br /&gt;
&lt;br /&gt;
See the MariaDB Knowledgebase at https://mariadb.com/kb&lt;br /&gt;
&lt;br /&gt;
You can start the MariaDB daemon with:&lt;br /&gt;
cd &#039;/usr&#039; ; /usr/bin/mariadbd-safe --datadir=&#039;/var/lib/mysql&#039;&lt;br /&gt;
&lt;br /&gt;
You can test the MariaDB daemon with mariadb-test-run.pl&lt;br /&gt;
cd &#039;/usr/mariadb-test&#039; ; perl mariadb-test-run.pl&lt;br /&gt;
&lt;br /&gt;
Please report any problems at https://mariadb.org/jira&lt;br /&gt;
&lt;br /&gt;
The latest information about MariaDB is available at https://mariadb.org/.&lt;br /&gt;
&lt;br /&gt;
Consider joining MariaDB&#039;s strong and vibrant community:&lt;br /&gt;
https://mariadb.org/get-involved/&lt;br /&gt;
&lt;br /&gt;
... ne connaît toujours pas &#039;mysql&#039;&lt;br /&gt;
# apk add mariadb-server-utils mariadb-client&lt;br /&gt;
-&amp;gt; reconnaît la commande, mais le serveur refuse la connexion...&lt;br /&gt;
&lt;br /&gt;
Abandon : comme phpmyadmin nécessite un serveur web, installation des trois dans le même conteneur : apache - php -maria&lt;br /&gt;
&lt;br /&gt;
*************&lt;br /&gt;
* Wordpress *&lt;br /&gt;
*************&lt;br /&gt;
1. Création du conteneur wp + maj&lt;br /&gt;
2. Installation d&#039;apache et php&lt;br /&gt;
# apk add apache2 php php83-apache2 apache2-ctl(pour lister les modules) php83-mysqli (sinon ça râle...)&lt;br /&gt;
# À l&#039;usage, le module H5P réclame la présence et l&#039;activation de mbstring : ajout de php83-mbstring/&lt;br /&gt;
&lt;br /&gt;
Modification de la page d&#039;afichage par défaut : /var/www/localhost/htdocs/index.html -&amp;gt; index.php&lt;br /&gt;
Modification du fichier proxy.conf dans le conteneur proxy : (/etc/nginx/sites-available/proxy.conf)&lt;br /&gt;
proxy_pass http://wp.lxd;&lt;br /&gt;
Redémarrer le service&lt;br /&gt;
systemctl restart nginx&lt;br /&gt;
&lt;br /&gt;
Dans le conteneur wp, démarrer apache2&lt;br /&gt;
rc-service apache2 start&lt;br /&gt;
&lt;br /&gt;
La page s&#039;affiche dans le navigateur...&lt;br /&gt;
&lt;br /&gt;
Création du fichier /etc/apache2/conf.d/remoteip.conf avec&lt;br /&gt;
&lt;br /&gt;
	RemoteIPHeader X-Real-IP&lt;br /&gt;
	RemoteIPTrustedProxy proxy.lxd (nom du conteneur nginx, plus correct dans la configuration conteneurs)&lt;br /&gt;
	&lt;br /&gt;
modification de /etc/apache2/httpd.conf décommenter :&lt;br /&gt;
	LoadModule remoteip_module modules/mod_remoteip.so&lt;br /&gt;
	LoadModule rewrite_module modules/mod_rewrite.so                       &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ajouter apache2 au démarrage&lt;br /&gt;
# rc-update add apache2&lt;br /&gt;
&lt;br /&gt;
relancer les services apache2&lt;br /&gt;
# rc-service apache2 restart&lt;br /&gt;
&lt;br /&gt;
*********************** (en cas d&#039;erreur Bad Getaway, redémarrer le proxy) ************&lt;br /&gt;
&lt;br /&gt;
Télécharger la dernière version de wp et la copier dans le dossier /tmp du conteneur&lt;br /&gt;
&lt;br /&gt;
# lxc file push /tmp/wp/wordpress-6.7.2-fr_FR.zip wiki/tmp&lt;br /&gt;
# lxc shell wiki&lt;br /&gt;
# unzip /tmp/wordpress-..._FR.zip -d /var/ww/localhost/htdocs/&lt;br /&gt;
&lt;br /&gt;
Comme on ne mettra pas d&#039;autre appli, on déplace le fourbi à la racine&lt;br /&gt;
# cd /var/www/localhost/htdocs&lt;br /&gt;
/var/www/localhost/htdocs# mv index.php index.php.sav&lt;br /&gt;
/var/www/localhost/htdocs# mv wordpress/* ./&lt;br /&gt;
/var/www/localhost/htdocs# rm -R wordpress&lt;br /&gt;
&lt;br /&gt;
Créer un utilisateur et une base de donnée pour wordpress dans le conteneur mariadb.lxd (phpmyadmin)&lt;br /&gt;
&lt;br /&gt;
Se connecter au site avec le navigateur&lt;br /&gt;
&lt;br /&gt;
utilisateur domiwp_68/1_mdppdomiwp_68! || wordpress || mariadb.lxd&lt;br /&gt;
&lt;br /&gt;
!!!! En cas d&#039;installation de php83-mysqlnd, le processus échoue (Typed property mysqli::$connect_errno must not be accessed before initialization) !!!&lt;br /&gt;
&lt;br /&gt;
Le bordel n&#039;arrive pas à utiliser ssl... et plante : tourne en boucle sur la page de connection&lt;br /&gt;
&lt;br /&gt;
tentative de lien dans le dossier /var/www/localhost/htdocs/wp-includes/certificates/ de wp&lt;br /&gt;
/etc/letsencrypt/live/lesitadom.fr/fullchain.pem&lt;br /&gt;
&lt;br /&gt;
# ln -s proxy.lxd/etc/letsencrypt/live/lesitadom.fr/fullchain.pem /var/www/localhost/htdocs/wp-includes/certificates/lesitadom.pem&lt;br /&gt;
&lt;br /&gt;
***************** Ça veut pas. On essaye avec une autre version de WP (6.8) ********************&lt;br /&gt;
Marche pas non plus, et en plus, c&#039;est en anglais et pas de choix de langue... Y&#039;a un truc qui merde dès le départ : la mise en page est foireuse...&lt;br /&gt;
&lt;br /&gt;
on recommence avec la version en français (6.8)&lt;br /&gt;
&lt;br /&gt;
Règlage des droits sur apache:www-data (chown -R apache:www-data)&lt;br /&gt;
Contenu de wordpress à la racine&lt;br /&gt;
Adresse &amp;quot;lesitadom.fr&amp;quot; (proxy)&lt;br /&gt;
Suppression des tables des instal précédentes (phpmyadmin)&lt;br /&gt;
&lt;br /&gt;
Affichage touours aussi lamentable, comme si la feuille de style n&#039;était pas prise en compte...&lt;br /&gt;
&lt;br /&gt;
Les tables se créent, mais pau moment de la connexion :&lt;br /&gt;
&lt;br /&gt;
Les informations que vous êtes sur le point de soumettre ne sont pas sécurisées&lt;br /&gt;
&lt;br /&gt;
Et on revient au formulaire&lt;br /&gt;
&lt;br /&gt;
************** On n&#039;est pas couchés ! *******************&lt;br /&gt;
&lt;br /&gt;
Recherche sur internet : worpress derrière un proxy inverse :&lt;br /&gt;
&lt;br /&gt;
Dans wp-config.php, ajouter :&lt;br /&gt;
&lt;br /&gt;
if ( (!empty( $_SERVER[&#039;HTTP_X_FORWARDED_HOST&#039;])) ||&lt;br /&gt;
      (!empty( $_SERVER[&#039;HTTP_X_FORWARDED_FOR&#039;])) ) {&lt;br /&gt;
      $_SERVER[&#039;HTTPS&#039;] = &#039;activé&#039;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Et put&#039; ça marche !!!!&lt;br /&gt;
&lt;br /&gt;
...plus !&lt;br /&gt;
J&#039;ai re-modifié la config du proxy et ça a cassé le bastringue... Le site donnait ça, en plus...&lt;br /&gt;
&lt;br /&gt;
serveur {&lt;br /&gt;
    listen 443 SSL ;&lt;br /&gt;
    server_name foo.bar www.foo.bar;&lt;br /&gt;
    location / {&lt;br /&gt;
        proxy_pass http://10.0.80.32/;&lt;br /&gt;
        proxy_set_header X-Forwarded-Host $host;&lt;br /&gt;
	proxy_set_header X-Forwarded-Server $hôte ;&lt;br /&gt;
	proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;&lt;br /&gt;
	proxy_set_header X-Forwarded-Proto $scheme;&lt;br /&gt;
	proxy_set_header X-Real-IP $remote_addr;&lt;br /&gt;
	proxy_set_header Hôte $host ;&lt;br /&gt;
    }&lt;br /&gt;
    certificat_ssl /etc/letsencrypt/live/foo.bar/fullchain.pem;&lt;br /&gt;
    ssl_certificate_key /etc/letsencrypt/live/foo.bar/privkey.pem;&lt;br /&gt;
    include /etc/letsencrypt/options-ssl-nginx.conf ;&lt;br /&gt;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;&lt;br /&gt;
}&lt;br /&gt;
serveur {&lt;br /&gt;
    server_name foo.bar www.foo.bar;&lt;br /&gt;
    return 301 https://foo.bar$request_uri ;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
adresse utilisée lors de l&#039;instal : lesitadom.fr avec réglage du proxy =&amp;gt; ok&lt;br /&gt;
Changement d&#039;adresse =&amp;gt; ko&lt;br /&gt;
Le fourbi doit laisser des traces de l&#039;adresse du site pendant l&#039;instal...&lt;br /&gt;
&lt;br /&gt;
Modifier : table wp-options, siteurl et home&lt;br /&gt;
&lt;br /&gt;
Ok&lt;br /&gt;
&lt;br /&gt;
************** erreur &amp;quot;La réponse n’est pas une réponse JSON valide&amp;quot; lors de la modification d&#039;un article ****************************&lt;br /&gt;
Modifier apache2 :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Directory &amp;quot;/var/www/localhost/htdocs&amp;quot;&amp;gt;                                     &lt;br /&gt;
...                           &lt;br /&gt;
    #                                                                 &lt;br /&gt;
    # AllowOverride controls what directives may be placed in .htaccess files.&lt;br /&gt;
    # It can be &amp;quot;All&amp;quot;, &amp;quot;None&amp;quot;, or any combination of the keywords:&lt;br /&gt;
    #   AllowOverride FileInfo AuthConfig Limit                     &lt;br /&gt;
    #                                                                          &lt;br /&gt;
    AllowOverride All                                       				&amp;lt;= C&#039;est ici ! &lt;br /&gt;
...                                  &lt;br /&gt;
&amp;lt;/Directory&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
Changer les droits sur .htaccess :&lt;br /&gt;
# chmod 644 /var/www/localhost/htdocs/.htaccess&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
************** Installation des outils ***********************&lt;br /&gt;
&lt;br /&gt;
À partir du dossier wordress de l&#039;école téléchargé en guise de sauvegarde...&lt;br /&gt;
&lt;br /&gt;
Thème : nisarg child&lt;br /&gt;
&lt;br /&gt;
Extensions :&lt;br /&gt;
Installées :&lt;br /&gt;
	- Advanced Accordion Gutenberg Block&lt;br /&gt;
	- advanced-iframe			-&amp;gt; problème : voir la config&lt;br /&gt;
	- PDF Viewer Block pour Gutenberg&lt;br /&gt;
	- classic-editor			-&amp;gt; installé - voir si activation&lt;br /&gt;
	- The Events Calendar&lt;br /&gt;
	- h5p					-&amp;gt; voir plugin Dashboard for Pressbooks and H5P et SNORDIAN&#039;s H5P Resize Pulse&lt;br /&gt;
	- ml-slider				-&amp;gt; diaporamas&lt;br /&gt;
	- shortcodes-ultimate			-&amp;gt; excellent !&lt;br /&gt;
	- smart-slider-3			-&amp;gt; ! Erreur à l&#039;activation ! création de diaporamas : voir si pas doublon avec ml-slider&lt;br /&gt;
	- tablepress				-&amp;gt; créer des tableaux&lt;br /&gt;
	- wp-miniaudioplayer			-&amp;gt; pour lire les mp3&lt;br /&gt;
	- wp-quicklatex				-&amp;gt; pour des formules math en latex&lt;br /&gt;
	- wp-statistics				-&amp;gt; statistiques de visites&lt;br /&gt;
&lt;br /&gt;
Ignorées :&lt;br /&gt;
	- advanced-iframe-custom	-&amp;gt; Voir Advanced Custom Fields&lt;br /&gt;
	- akismet			-&amp;gt; Anti-spam&lt;br /&gt;
	- algori-pdf-viewer		-&amp;gt; remplacé par PDF Viewer Block pour Gutenberg&lt;br /&gt;
	- antispam-bee&lt;br /&gt;
	- bbpress			-&amp;gt; forum de discussion&lt;br /&gt;
	- bp-better-messages		-&amp;gt; chat pour buddypress&lt;br /&gt;
	- buddypress			-&amp;gt; réseau social&lt;br /&gt;
	- easy-fancybox			-&amp;gt; Affichier des images, des vidéos... dans une box. Àvoir...&lt;br /&gt;
	- envole_hooks			-&amp;gt; pour envole&lt;br /&gt;
	- eportailwidget		-&amp;gt; idem ?&lt;br /&gt;
	- flynsarmy-iframe-shortcode	-&amp;gt; non trouvée&lt;br /&gt;
	- google-calendar-events	-&amp;gt; remplacée par The Events Calendar&lt;br /&gt;
	- nextend-accordion-menu	-&amp;gt; non trouvé. Voir si le plugin gutempberg fait l&#039;affaire&lt;br /&gt;
	- nextgen-gallery		-&amp;gt; gallerie d&#039;images. Voir si le plugi installé fair l&#039;affaire&lt;br /&gt;
	- page-links-to			-&amp;gt; optimiser les liens : non trouvé, voir si nécessaire&lt;br /&gt;
	- pretty links			-&amp;gt; casse pieds&lt;br /&gt;
	- poshwidget			-&amp;gt; eole&lt;br /&gt;
	- private-wp			-&amp;gt; ? non trouvée&lt;br /&gt;
	- rumbletalk-chat-a-chat-with-themes	-&amp;gt; chat&lt;br /&gt;
	- si-contact-form		-&amp;gt; formulaire de contact : voir contact form 7 si nécessaire&lt;br /&gt;
	- simple-embed-code		-&amp;gt; intégrer du code aux articles : voir code Embed&lt;br /&gt;
	- the-events-calendar		-&amp;gt; double emploi avec extension installée&lt;br /&gt;
	- theme-preview			-&amp;gt; aide à la conception. Àvoir (Toolkit for Block Theme)&lt;br /&gt;
	- tinymce-advanced		-&amp;gt; modifier l&#039;éditeur. Voir si utile&lt;br /&gt;
	- user-role-editor		-&amp;gt; régler les autorisations&lt;br /&gt;
	- vc-tabs			-&amp;gt; pas trouvée ?&lt;br /&gt;
	- visual-form-builder		-&amp;gt; création de formulaire&lt;br /&gt;
	- wpdirauth			-&amp;gt; ldap&lt;br /&gt;
	- wp-event-manager		-&amp;gt; double emploi&lt;br /&gt;
	- wp-hide-dashboard		-&amp;gt; non trouvée... à revoir&lt;br /&gt;
	- wp-polls			-&amp;gt; créer des sondages&lt;br /&gt;
	- wp-sentry			-&amp;gt; tracer les erruers php et navigation&lt;br /&gt;
	- wp-smushit			-&amp;gt; optimisation d&#039;images. voir si utile&lt;br /&gt;
	- wp-user-avatar		-&amp;gt; création d&#039;avatars pour les utilisateurs&lt;/div&gt;</summary>
		<author><name>Domi</name></author>
	</entry>
	<entry>
		<id>https://wiki.lesitadom.fr/index.php?title=Wp&amp;diff=1650</id>
		<title>Wp</title>
		<link rel="alternate" type="text/html" href="https://wiki.lesitadom.fr/index.php?title=Wp&amp;diff=1650"/>
		<updated>2025-07-09T07:57:54Z</updated>

		<summary type="html">&lt;p&gt;Domi : /* Mariadb */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Wordpress sur alpine léger =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;(ajout wp.lesitadom dans /etc/hosts)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Création du conteneur :&lt;br /&gt;
  lxc launch local:alpineLe wp&lt;br /&gt;
  lxc exec wp apk update&lt;br /&gt;
  lxc exec wp apk update&lt;br /&gt;
(ça marche ;))&lt;br /&gt;
&lt;br /&gt;
== Serveur web : apache2 - php83 - mariadb ==&lt;br /&gt;
cf notes apache2 php sur alpine léger - modif : php84 à la place de php83&lt;br /&gt;
&lt;br /&gt;
ne fonctionne pas... mauvaise version de php ? Ok avec php83 =&amp;gt; on recommence...&lt;br /&gt;
&lt;br /&gt;
Ok !&lt;br /&gt;
&lt;br /&gt;
À l&#039;usage, H5P nécessite &#039;&#039;&#039;mbstring&#039;&#039;&#039; et &#039;&#039;&#039;zip&#039;&#039;&#039; : Ajout de &#039;&#039;&#039;php83-mbstring&#039;&#039;&#039; et &#039;&#039;&#039;php83-zip&#039;&#039;&#039; (relance d&#039;apache 2)&lt;br /&gt;
Lors du téléchargement d&#039;exercices (3.1 Mio), Nginx envoie l&#039;erreur 413 : Corriger proxy.conf en ajoutant la ligne&lt;br /&gt;
&lt;br /&gt;
 client_max_body_size 200M; (par défaut à 1Mio)&lt;br /&gt;
&lt;br /&gt;
Relancer nginx.&lt;br /&gt;
&lt;br /&gt;
Il faut également augmenter les valeurs : (dans /etc/php83/php.ini)&lt;br /&gt;
  upload_max_filesize = 256M&lt;br /&gt;
  post_max_size = 256M&lt;br /&gt;
  max_execution_time = 300&lt;br /&gt;
(relancer apache2)&lt;br /&gt;
&lt;br /&gt;
== Mariadb ==&lt;br /&gt;
&#039;&#039;(d&#039;après mes notes instal serveur + PMB)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
  apk add mysql mariadb mariadb-server-utils mariadb-client&lt;br /&gt;
  apk add php83-pdo_mysql php83-mbstring&lt;br /&gt;
&#039;&#039;(voir plus tard s&#039;il faut mysqli ou mysqlnd)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Initialisation de mariadb&lt;br /&gt;
  /etc/init.d/mariadb setup&lt;br /&gt;
(peuple /var/lib/mysql)&lt;br /&gt;
&lt;br /&gt;
  rc-service mariadb start&lt;br /&gt;
=&amp;gt; ok&lt;br /&gt;
 mysql&lt;br /&gt;
=&amp;gt; on entre dans mysql -&amp;gt; Ok&lt;br /&gt;
&lt;br /&gt;
== installation de phpmyadmin ==&lt;br /&gt;
&lt;br /&gt;
  # apk add phpmyadmin&lt;br /&gt;
-&amp;gt; Installe de nombreux packages et librairies (php83-{mysqli,bz2,ctype,curl,gd,session,zip,xmlwriter,iconv})&lt;br /&gt;
	(lib{xau,md,bsd,xdmcp,xcb,x11,xext,ice,bsm,xt,xpm,dav1d,jpeg,yuv,avif,png,shrpyuv,webp,zip} aom-libs,freetype)&lt;br /&gt;
&lt;br /&gt;
 phpmyadmin has been installed to: &lt;br /&gt;
       /usr/share/webapps/phpmyadmin&lt;br /&gt;
 phpmyadmin config file has been installed to: &lt;br /&gt;
       /etc/phpmyadmin/config.inc.php&lt;br /&gt;
 If you use apache2:&lt;br /&gt;
      1) Change the ownership of the config directory:&lt;br /&gt;
             chown -R apache:apache /etc/phpmyadmin&lt;br /&gt;
      2) See if you need to modify the apache2 config:&lt;br /&gt;
             /etc/apache2/conf.d/phpmyadmin.conf&lt;br /&gt;
      3) Restart apache2 when done.&lt;br /&gt;
&lt;br /&gt;
  # rc-service apache2 restart&lt;br /&gt;
-&amp;gt; phpmyadmin accessible à wp.lesitadom.fr/phpmyadmin&lt;br /&gt;
&lt;br /&gt;
Conteneur mariadb : Création d&#039;un utilisateur pour phpmyadmin :&lt;br /&gt;
  # mysql&lt;br /&gt;
  CREATE USER &#039;login_util&#039;@&#039;%&#039; IDENTIFIED BY &#039;pass_util&#039;;&lt;br /&gt;
  GRANT ALL PRIVILEGES ON *.* TO &#039;login_util&#039;@&#039;%&#039; WITH GRANT OPTION;&lt;br /&gt;
  FLUSH PRIVILEGES;&lt;br /&gt;
(Ctrl-d pour sortir)&lt;br /&gt;
&lt;br /&gt;
Pour l&#039;accès avec mot de passe :&lt;br /&gt;
stopper les services mariadb et apache2 :&lt;br /&gt;
  # rc-service mariadb stop&lt;br /&gt;
  # rc-service apache2 stop&lt;br /&gt;
Dans /etc/my.cnf.d/maria_db_server.cnf, sous [mysqld], ajouter :&lt;br /&gt;
  skip-grant-tables&lt;br /&gt;
Relancer les services et ça fonctionne !&lt;br /&gt;
...pas tout à fait... la configuration de phpmyadmin n&#039;est pas terminée... Cf message au bas&lt;br /&gt;
&lt;br /&gt;
Récupération d&#039;un fichier de conf de phpmyadmin qui fonctionne sur le net (modif de l&#039;utilisateur et du mdp)&lt;br /&gt;
&lt;br /&gt;
lancement de l&#039;installation de mariadb avec les paramètres par défaut (y à toutes les questions...)&lt;br /&gt;
&lt;br /&gt;
Redémarrage du conteneur -&amp;gt; phpmyadmin fonctionne avec les droits qui vont bien&lt;br /&gt;
&lt;br /&gt;
* Installation de wordpress *&lt;br /&gt;
&lt;br /&gt;
téléchargement de wordpres-...zip -&amp;gt; tmp du raspberry&lt;br /&gt;
# lxc file push /tmp/wordpress-6.7.2-fr_FR.zip wp/tmp/&lt;br /&gt;
Dans le conteneur :&lt;br /&gt;
# unzip /tmp/wordpress-6.7.2-fr_FR.zip -d /var/www/localhost/htdocs/&lt;br /&gt;
Déplacer le contenu à la racine :&lt;br /&gt;
# mv /var/www/localhost/htdocs/wordpress/* /var/www/localhost/htdocs/&lt;br /&gt;
&lt;br /&gt;
Création de la bdd wordpress (wp_perso2025) par phpmyadmin avec utilisateur wp-dd2025 et mdp 1_mdppuwp!&lt;br /&gt;
&lt;br /&gt;
Connection à wp dans le navigateur à l&#039;adresse du serveur : wp.lesitadom.fr -&amp;gt; configuration&lt;br /&gt;
&lt;br /&gt;
Tout fonctionne !&lt;br /&gt;
&lt;br /&gt;
Voir s&#039;il est possible d&#039;installer mariadb et phpmyadmin sur des conteneur distincts...&lt;br /&gt;
&lt;br /&gt;
/*\_/*\_/*\_/*\_/*\_/*\_/*\_/*\_/*\_/*\_/*\_/*\_/*\_/*\_/*\_/*\_/*\_/*\_/*\_/*\_/*\_/*\_/*\_/&lt;br /&gt;
\_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \&lt;br /&gt;
&lt;br /&gt;
******************************************************************************************&lt;br /&gt;
* installation de wordpress - mariadb et phpmyadmin sur deux conteneurs séparés alipneLe *&lt;br /&gt;
******************************************************************************************&lt;br /&gt;
&lt;br /&gt;
***********&lt;br /&gt;
* Mariadb *&lt;br /&gt;
***********&lt;br /&gt;
Création du conteneur maria + maj&lt;br /&gt;
Installation de mariadb&lt;br /&gt;
# apk add (mysql) mariadb mariadb-server-utils mariadb-client&lt;br /&gt;
# apk add php83-pdo_mysql php83-mbstring&lt;br /&gt;
&lt;br /&gt;
Initialisation de mariadb (peuple /var/lib/mysql)&lt;br /&gt;
# /etc/init.d/mariadb setup&lt;br /&gt;
&lt;br /&gt;
Démarrer le service&lt;br /&gt;
# rc-service mariadb start&lt;br /&gt;
&lt;br /&gt;
Sécuriser la base de donnée&lt;br /&gt;
# mysql_secure_installation (vide/n/n/Y/Y/Y/Y)&lt;br /&gt;
&lt;br /&gt;
on peut entrer dans mysql (idem mariadb)&lt;br /&gt;
&lt;br /&gt;
*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/&lt;br /&gt;
Ajout d&#039;apache, php et phpmyadmin&lt;br /&gt;
&lt;br /&gt;
# apk add apache2 apache2-ctl php83 php83-apache2 php83-mbstring phpmyadmin&lt;br /&gt;
&lt;br /&gt;
Copie du fichier de conf dans etc/phpmyadmin/&lt;br /&gt;
Modif du fichier /var/www/localhost/htdocs/index.html -&amp;gt; index.php&lt;br /&gt;
Ajout de la redirection dans le conteneur proxy&lt;br /&gt;
Ajout de la redirection dans le fichier host du bureau&lt;br /&gt;
&lt;br /&gt;
À la première connection, phpmyadmin est en erreur : la base n&#039;est pas encore crée. Cliquer...&lt;br /&gt;
&lt;br /&gt;
phpmyadmin affiche une erreur d&#039;accès à /usr/share/webapps/phpmyadmin/tmp : le dossier n&#039;existe pas : création.&lt;br /&gt;
# chown apache:apache /usr/share/webapps/phpmyadmin/tmp&lt;br /&gt;
-&amp;gt; problème réglé&lt;br /&gt;
&lt;br /&gt;
phpmyadmin affiche une erreur concernant les cookies (pas de clé valide)&lt;br /&gt;
D&#039;après la documentation :&lt;br /&gt;
&lt;br /&gt;
// A string of 32 characters.&lt;br /&gt;
$cfg[&#039;blowfish_secret&#039;] = &#039;JOFw435365IScA&amp;amp;Q!cDugr!lSfuAz*OW&#039;;&lt;br /&gt;
88a7da62429ba6ad3cb3c76a09641fca&lt;br /&gt;
Modification du fichier /etc/phpmyadmin/config.php en conséquence.&lt;br /&gt;
&lt;br /&gt;
-&amp;gt; marche pas&lt;br /&gt;
&lt;br /&gt;
Tentative de connexion à mariadb depuis le conteneur wiki... ne fonctionne pas. Plusieurs tentatives en agissant sur les paramètres côté client (règles firewall, ouverture de ports) ou du côté serveur (utilisateur, adresse bind, paramètres my.cnf et maria....cnf).&lt;br /&gt;
Au final, il faut commenter la ligne &#039;skip-networking&#039; et ça fonctionne (voir si la ligne &#039;innodb_force_recovery=1&#039; a une utilité...). Trouvé à l&#039;adresse &amp;quot;https://mariadb.com/kb/en/configuring-mariadb-for-remote-client-access/&amp;quot;. À retester sur une machine propre.&lt;br /&gt;
&lt;br /&gt;
**************&lt;br /&gt;
* phpmyadmin *&lt;br /&gt;
**************&lt;br /&gt;
Création du conteneur phpmyadmin&lt;br /&gt;
Maj&lt;br /&gt;
&lt;br /&gt;
Installation du serveur web : apache2&lt;br /&gt;
# apk add apache2 php83 php83-apache2 php83-mbstring&lt;br /&gt;
# rc-service apache2 start&lt;br /&gt;
&lt;br /&gt;
Installation de phpmyadmin&lt;br /&gt;
# apk add phpmyadmin&lt;br /&gt;
&lt;br /&gt;
*&lt;br /&gt;
* phpmyadmin has been installed to:&lt;br /&gt;
*     /usr/share/webapps/phpmyadmin&lt;br /&gt;
* phpmyadmin config file has been installed to:&lt;br /&gt;
*     /etc/phpmyadmin/config.inc.php&lt;br /&gt;
* If you use apache2:&lt;br /&gt;
*     1) Change the ownership of the config directory:&lt;br /&gt;
*            chown -R apache:apache /etc/phpmyadmin&lt;br /&gt;
*     2) See if you need to modify the apache2 config:&lt;br /&gt;
*            /etc/apache2/conf.d/phpmyadmin.conf&lt;br /&gt;
*     3) Restart apache2 when done.&lt;br /&gt;
*&lt;br /&gt;
Ajout de phpmyadmin.lesitadom.fr au fichier hosts de l&#039;hôte&lt;br /&gt;
&lt;br /&gt;
*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/&lt;br /&gt;
Modification du fichier de conf dans le conteneur proxy :&lt;br /&gt;
&lt;br /&gt;
* conteneur phpmyadmin&lt;br /&gt;
server {&lt;br /&gt;
        listen 80 proxy_protocol;&lt;br /&gt;
        listen [::]:80 proxy_protocol;&lt;br /&gt;
&lt;br /&gt;
        server_name phpmyadmin.lesitadom.fr;&lt;br /&gt;
&lt;br /&gt;
        location / {&lt;br /&gt;
                include /etc/nginx/proxy_params;&lt;br /&gt;
&lt;br /&gt;
                proxy_pass http://phpmyadmin.lxd;&lt;br /&gt;
        }&lt;br /&gt;
        real_ip_header proxy_protocol;&lt;br /&gt;
        set_real_ip_from 127.0.0.1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Redémarrer le service nginx :&lt;br /&gt;
# systemctl restart nginx&lt;br /&gt;
&lt;br /&gt;
copie du fichier de conf téléchargé dans le dossier /etc/phpmyadmin&lt;br /&gt;
&lt;br /&gt;
*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/&lt;br /&gt;
&lt;br /&gt;
Modif du fichier /var/www/localhost/htdocs/index.html -&amp;gt; index.php (avec &amp;lt;?php phpinfo(); ?&amp;gt;&lt;br /&gt;
Démarrage du service apache2 :&lt;br /&gt;
# rc-service apache2 start&lt;br /&gt;
&lt;br /&gt;
-&amp;gt; la page d&#039;info s&#039;affiche&lt;br /&gt;
-&amp;gt; la page d&#039;accueil de phpmyadmin s&#039;affiche, mais pas de connexion à la base...&lt;br /&gt;
&lt;br /&gt;
*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/&lt;br /&gt;
Dans le conteneur maria :&lt;br /&gt;
&lt;br /&gt;
Création d&#039;un utilisateur pour phpmyadmin :&lt;br /&gt;
# mysql&lt;br /&gt;
CREATE USER &#039;login_util&#039;@&#039;%&#039; IDENTIFIED BY &#039;pass_util&#039;;&lt;br /&gt;
GRANT ALL PRIVILEGES ON *.* TO &#039;login_util&#039;@&#039;%&#039; WITH GRANT OPTION;&lt;br /&gt;
FLUSH PRIVILEGES;&lt;br /&gt;
(Ctrl-d pour sortir)&lt;br /&gt;
&lt;br /&gt;
*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/&lt;br /&gt;
&lt;br /&gt;
Pour tester les configurations successives, installation de mysql ne plus :&lt;br /&gt;
# apk add... (cf plus haut...)&lt;br /&gt;
&lt;br /&gt;
phpmyadmin:~# /etc/init.d/mariadb setup&lt;br /&gt;
 * Creating a new MySQL database ...&lt;br /&gt;
/usr/bin/mysql_install_db: Deprecated program name. It will be removed in a future release, use &#039;mariadb-install-db&#039; instead&lt;br /&gt;
Installing MariaDB/MySQL system tables in &#039;/var/lib/mysql&#039; ...&lt;br /&gt;
OK&lt;br /&gt;
&lt;br /&gt;
To start mariadbd at boot time you have to copy&lt;br /&gt;
support-files/mariadb.service to the right place for your system&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Two all-privilege accounts were created.&lt;br /&gt;
One is root@localhost, it has no password, but you need to&lt;br /&gt;
be system &#039;root&#039; user to connect. Use, for example, sudo mysql&lt;br /&gt;
The second is mysql@localhost, it has no password either, but&lt;br /&gt;
you need to be the system &#039;mysql&#039; user to connect.&lt;br /&gt;
After connecting you can set the password, if you would need to be&lt;br /&gt;
able to connect as any of these users with a password and without sudo&lt;br /&gt;
&lt;br /&gt;
See the MariaDB Knowledgebase at https://mariadb.com/kb&lt;br /&gt;
&lt;br /&gt;
You can start the MariaDB daemon with:&lt;br /&gt;
cd &#039;/usr&#039; ; /usr/bin/mariadbd-safe --datadir=&#039;/var/lib/mysql&#039;&lt;br /&gt;
&lt;br /&gt;
You can test the MariaDB daemon with mariadb-test-run.pl&lt;br /&gt;
cd &#039;/usr/mariadb-test&#039; ; perl mariadb-test-run.pl&lt;br /&gt;
&lt;br /&gt;
Please report any problems at https://mariadb.org/jira&lt;br /&gt;
&lt;br /&gt;
The latest information about MariaDB is available at https://mariadb.org/.&lt;br /&gt;
&lt;br /&gt;
Consider joining MariaDB&#039;s strong and vibrant community:&lt;br /&gt;
https://mariadb.org/get-involved/&lt;br /&gt;
&lt;br /&gt;
... ne connaît toujours pas &#039;mysql&#039;&lt;br /&gt;
# apk add mariadb-server-utils mariadb-client&lt;br /&gt;
-&amp;gt; reconnaît la commande, mais le serveur refuse la connexion...&lt;br /&gt;
&lt;br /&gt;
Abandon : comme phpmyadmin nécessite un serveur web, installation des trois dans le même conteneur : apache - php -maria&lt;br /&gt;
&lt;br /&gt;
*************&lt;br /&gt;
* Wordpress *&lt;br /&gt;
*************&lt;br /&gt;
1. Création du conteneur wp + maj&lt;br /&gt;
2. Installation d&#039;apache et php&lt;br /&gt;
# apk add apache2 php php83-apache2 apache2-ctl(pour lister les modules) php83-mysqli (sinon ça râle...)&lt;br /&gt;
# À l&#039;usage, le module H5P réclame la présence et l&#039;activation de mbstring : ajout de php83-mbstring/&lt;br /&gt;
&lt;br /&gt;
Modification de la page d&#039;afichage par défaut : /var/www/localhost/htdocs/index.html -&amp;gt; index.php&lt;br /&gt;
Modification du fichier proxy.conf dans le conteneur proxy : (/etc/nginx/sites-available/proxy.conf)&lt;br /&gt;
proxy_pass http://wp.lxd;&lt;br /&gt;
Redémarrer le service&lt;br /&gt;
systemctl restart nginx&lt;br /&gt;
&lt;br /&gt;
Dans le conteneur wp, démarrer apache2&lt;br /&gt;
rc-service apache2 start&lt;br /&gt;
&lt;br /&gt;
La page s&#039;affiche dans le navigateur...&lt;br /&gt;
&lt;br /&gt;
Création du fichier /etc/apache2/conf.d/remoteip.conf avec&lt;br /&gt;
&lt;br /&gt;
	RemoteIPHeader X-Real-IP&lt;br /&gt;
	RemoteIPTrustedProxy proxy.lxd (nom du conteneur nginx, plus correct dans la configuration conteneurs)&lt;br /&gt;
	&lt;br /&gt;
modification de /etc/apache2/httpd.conf décommenter :&lt;br /&gt;
	LoadModule remoteip_module modules/mod_remoteip.so&lt;br /&gt;
	LoadModule rewrite_module modules/mod_rewrite.so                       &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ajouter apache2 au démarrage&lt;br /&gt;
# rc-update add apache2&lt;br /&gt;
&lt;br /&gt;
relancer les services apache2&lt;br /&gt;
# rc-service apache2 restart&lt;br /&gt;
&lt;br /&gt;
*********************** (en cas d&#039;erreur Bad Getaway, redémarrer le proxy) ************&lt;br /&gt;
&lt;br /&gt;
Télécharger la dernière version de wp et la copier dans le dossier /tmp du conteneur&lt;br /&gt;
&lt;br /&gt;
# lxc file push /tmp/wp/wordpress-6.7.2-fr_FR.zip wiki/tmp&lt;br /&gt;
# lxc shell wiki&lt;br /&gt;
# unzip /tmp/wordpress-..._FR.zip -d /var/ww/localhost/htdocs/&lt;br /&gt;
&lt;br /&gt;
Comme on ne mettra pas d&#039;autre appli, on déplace le fourbi à la racine&lt;br /&gt;
# cd /var/www/localhost/htdocs&lt;br /&gt;
/var/www/localhost/htdocs# mv index.php index.php.sav&lt;br /&gt;
/var/www/localhost/htdocs# mv wordpress/* ./&lt;br /&gt;
/var/www/localhost/htdocs# rm -R wordpress&lt;br /&gt;
&lt;br /&gt;
Créer un utilisateur et une base de donnée pour wordpress dans le conteneur mariadb.lxd (phpmyadmin)&lt;br /&gt;
&lt;br /&gt;
Se connecter au site avec le navigateur&lt;br /&gt;
&lt;br /&gt;
utilisateur domiwp_68/1_mdppdomiwp_68! || wordpress || mariadb.lxd&lt;br /&gt;
&lt;br /&gt;
!!!! En cas d&#039;installation de php83-mysqlnd, le processus échoue (Typed property mysqli::$connect_errno must not be accessed before initialization) !!!&lt;br /&gt;
&lt;br /&gt;
Le bordel n&#039;arrive pas à utiliser ssl... et plante : tourne en boucle sur la page de connection&lt;br /&gt;
&lt;br /&gt;
tentative de lien dans le dossier /var/www/localhost/htdocs/wp-includes/certificates/ de wp&lt;br /&gt;
/etc/letsencrypt/live/lesitadom.fr/fullchain.pem&lt;br /&gt;
&lt;br /&gt;
# ln -s proxy.lxd/etc/letsencrypt/live/lesitadom.fr/fullchain.pem /var/www/localhost/htdocs/wp-includes/certificates/lesitadom.pem&lt;br /&gt;
&lt;br /&gt;
***************** Ça veut pas. On essaye avec une autre version de WP (6.8) ********************&lt;br /&gt;
Marche pas non plus, et en plus, c&#039;est en anglais et pas de choix de langue... Y&#039;a un truc qui merde dès le départ : la mise en page est foireuse...&lt;br /&gt;
&lt;br /&gt;
on recommence avec la version en français (6.8)&lt;br /&gt;
&lt;br /&gt;
Règlage des droits sur apache:www-data (chown -R apache:www-data)&lt;br /&gt;
Contenu de wordpress à la racine&lt;br /&gt;
Adresse &amp;quot;lesitadom.fr&amp;quot; (proxy)&lt;br /&gt;
Suppression des tables des instal précédentes (phpmyadmin)&lt;br /&gt;
&lt;br /&gt;
Affichage touours aussi lamentable, comme si la feuille de style n&#039;était pas prise en compte...&lt;br /&gt;
&lt;br /&gt;
Les tables se créent, mais pau moment de la connexion :&lt;br /&gt;
&lt;br /&gt;
Les informations que vous êtes sur le point de soumettre ne sont pas sécurisées&lt;br /&gt;
&lt;br /&gt;
Et on revient au formulaire&lt;br /&gt;
&lt;br /&gt;
************** On n&#039;est pas couchés ! *******************&lt;br /&gt;
&lt;br /&gt;
Recherche sur internet : worpress derrière un proxy inverse :&lt;br /&gt;
&lt;br /&gt;
Dans wp-config.php, ajouter :&lt;br /&gt;
&lt;br /&gt;
if ( (!empty( $_SERVER[&#039;HTTP_X_FORWARDED_HOST&#039;])) ||&lt;br /&gt;
      (!empty( $_SERVER[&#039;HTTP_X_FORWARDED_FOR&#039;])) ) {&lt;br /&gt;
      $_SERVER[&#039;HTTPS&#039;] = &#039;activé&#039;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Et put&#039; ça marche !!!!&lt;br /&gt;
&lt;br /&gt;
...plus !&lt;br /&gt;
J&#039;ai re-modifié la config du proxy et ça a cassé le bastringue... Le site donnait ça, en plus...&lt;br /&gt;
&lt;br /&gt;
serveur {&lt;br /&gt;
    listen 443 SSL ;&lt;br /&gt;
    server_name foo.bar www.foo.bar;&lt;br /&gt;
    location / {&lt;br /&gt;
        proxy_pass http://10.0.80.32/;&lt;br /&gt;
        proxy_set_header X-Forwarded-Host $host;&lt;br /&gt;
	proxy_set_header X-Forwarded-Server $hôte ;&lt;br /&gt;
	proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;&lt;br /&gt;
	proxy_set_header X-Forwarded-Proto $scheme;&lt;br /&gt;
	proxy_set_header X-Real-IP $remote_addr;&lt;br /&gt;
	proxy_set_header Hôte $host ;&lt;br /&gt;
    }&lt;br /&gt;
    certificat_ssl /etc/letsencrypt/live/foo.bar/fullchain.pem;&lt;br /&gt;
    ssl_certificate_key /etc/letsencrypt/live/foo.bar/privkey.pem;&lt;br /&gt;
    include /etc/letsencrypt/options-ssl-nginx.conf ;&lt;br /&gt;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;&lt;br /&gt;
}&lt;br /&gt;
serveur {&lt;br /&gt;
    server_name foo.bar www.foo.bar;&lt;br /&gt;
    return 301 https://foo.bar$request_uri ;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
adresse utilisée lors de l&#039;instal : lesitadom.fr avec réglage du proxy =&amp;gt; ok&lt;br /&gt;
Changement d&#039;adresse =&amp;gt; ko&lt;br /&gt;
Le fourbi doit laisser des traces de l&#039;adresse du site pendant l&#039;instal...&lt;br /&gt;
&lt;br /&gt;
Modifier : table wp-options, siteurl et home&lt;br /&gt;
&lt;br /&gt;
Ok&lt;br /&gt;
&lt;br /&gt;
************** erreur &amp;quot;La réponse n’est pas une réponse JSON valide&amp;quot; lors de la modification d&#039;un article ****************************&lt;br /&gt;
Modifier apache2 :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Directory &amp;quot;/var/www/localhost/htdocs&amp;quot;&amp;gt;                                     &lt;br /&gt;
...                           &lt;br /&gt;
    #                                                                 &lt;br /&gt;
    # AllowOverride controls what directives may be placed in .htaccess files.&lt;br /&gt;
    # It can be &amp;quot;All&amp;quot;, &amp;quot;None&amp;quot;, or any combination of the keywords:&lt;br /&gt;
    #   AllowOverride FileInfo AuthConfig Limit                     &lt;br /&gt;
    #                                                                          &lt;br /&gt;
    AllowOverride All                                       				&amp;lt;= C&#039;est ici ! &lt;br /&gt;
...                                  &lt;br /&gt;
&amp;lt;/Directory&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
Changer les droits sur .htaccess :&lt;br /&gt;
# chmod 644 /var/www/localhost/htdocs/.htaccess&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
************** Installation des outils ***********************&lt;br /&gt;
&lt;br /&gt;
À partir du dossier wordress de l&#039;école téléchargé en guise de sauvegarde...&lt;br /&gt;
&lt;br /&gt;
Thème : nisarg child&lt;br /&gt;
&lt;br /&gt;
Extensions :&lt;br /&gt;
Installées :&lt;br /&gt;
	- Advanced Accordion Gutenberg Block&lt;br /&gt;
	- advanced-iframe			-&amp;gt; problème : voir la config&lt;br /&gt;
	- PDF Viewer Block pour Gutenberg&lt;br /&gt;
	- classic-editor			-&amp;gt; installé - voir si activation&lt;br /&gt;
	- The Events Calendar&lt;br /&gt;
	- h5p					-&amp;gt; voir plugin Dashboard for Pressbooks and H5P et SNORDIAN&#039;s H5P Resize Pulse&lt;br /&gt;
	- ml-slider				-&amp;gt; diaporamas&lt;br /&gt;
	- shortcodes-ultimate			-&amp;gt; excellent !&lt;br /&gt;
	- smart-slider-3			-&amp;gt; ! Erreur à l&#039;activation ! création de diaporamas : voir si pas doublon avec ml-slider&lt;br /&gt;
	- tablepress				-&amp;gt; créer des tableaux&lt;br /&gt;
	- wp-miniaudioplayer			-&amp;gt; pour lire les mp3&lt;br /&gt;
	- wp-quicklatex				-&amp;gt; pour des formules math en latex&lt;br /&gt;
	- wp-statistics				-&amp;gt; statistiques de visites&lt;br /&gt;
&lt;br /&gt;
Ignorées :&lt;br /&gt;
	- advanced-iframe-custom	-&amp;gt; Voir Advanced Custom Fields&lt;br /&gt;
	- akismet			-&amp;gt; Anti-spam&lt;br /&gt;
	- algori-pdf-viewer		-&amp;gt; remplacé par PDF Viewer Block pour Gutenberg&lt;br /&gt;
	- antispam-bee&lt;br /&gt;
	- bbpress			-&amp;gt; forum de discussion&lt;br /&gt;
	- bp-better-messages		-&amp;gt; chat pour buddypress&lt;br /&gt;
	- buddypress			-&amp;gt; réseau social&lt;br /&gt;
	- easy-fancybox			-&amp;gt; Affichier des images, des vidéos... dans une box. Àvoir...&lt;br /&gt;
	- envole_hooks			-&amp;gt; pour envole&lt;br /&gt;
	- eportailwidget		-&amp;gt; idem ?&lt;br /&gt;
	- flynsarmy-iframe-shortcode	-&amp;gt; non trouvée&lt;br /&gt;
	- google-calendar-events	-&amp;gt; remplacée par The Events Calendar&lt;br /&gt;
	- nextend-accordion-menu	-&amp;gt; non trouvé. Voir si le plugin gutempberg fait l&#039;affaire&lt;br /&gt;
	- nextgen-gallery		-&amp;gt; gallerie d&#039;images. Voir si le plugi installé fair l&#039;affaire&lt;br /&gt;
	- page-links-to			-&amp;gt; optimiser les liens : non trouvé, voir si nécessaire&lt;br /&gt;
	- pretty links			-&amp;gt; casse pieds&lt;br /&gt;
	- poshwidget			-&amp;gt; eole&lt;br /&gt;
	- private-wp			-&amp;gt; ? non trouvée&lt;br /&gt;
	- rumbletalk-chat-a-chat-with-themes	-&amp;gt; chat&lt;br /&gt;
	- si-contact-form		-&amp;gt; formulaire de contact : voir contact form 7 si nécessaire&lt;br /&gt;
	- simple-embed-code		-&amp;gt; intégrer du code aux articles : voir code Embed&lt;br /&gt;
	- the-events-calendar		-&amp;gt; double emploi avec extension installée&lt;br /&gt;
	- theme-preview			-&amp;gt; aide à la conception. Àvoir (Toolkit for Block Theme)&lt;br /&gt;
	- tinymce-advanced		-&amp;gt; modifier l&#039;éditeur. Voir si utile&lt;br /&gt;
	- user-role-editor		-&amp;gt; régler les autorisations&lt;br /&gt;
	- vc-tabs			-&amp;gt; pas trouvée ?&lt;br /&gt;
	- visual-form-builder		-&amp;gt; création de formulaire&lt;br /&gt;
	- wpdirauth			-&amp;gt; ldap&lt;br /&gt;
	- wp-event-manager		-&amp;gt; double emploi&lt;br /&gt;
	- wp-hide-dashboard		-&amp;gt; non trouvée... à revoir&lt;br /&gt;
	- wp-polls			-&amp;gt; créer des sondages&lt;br /&gt;
	- wp-sentry			-&amp;gt; tracer les erruers php et navigation&lt;br /&gt;
	- wp-smushit			-&amp;gt; optimisation d&#039;images. voir si utile&lt;br /&gt;
	- wp-user-avatar		-&amp;gt; création d&#039;avatars pour les utilisateurs&lt;/div&gt;</summary>
		<author><name>Domi</name></author>
	</entry>
	<entry>
		<id>https://wiki.lesitadom.fr/index.php?title=Wp&amp;diff=1649</id>
		<title>Wp</title>
		<link rel="alternate" type="text/html" href="https://wiki.lesitadom.fr/index.php?title=Wp&amp;diff=1649"/>
		<updated>2025-07-09T07:56:36Z</updated>

		<summary type="html">&lt;p&gt;Domi : /* Wordpress sur alpine léger */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Wordpress sur alpine léger =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;(ajout wp.lesitadom dans /etc/hosts)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Création du conteneur :&lt;br /&gt;
  lxc launch local:alpineLe wp&lt;br /&gt;
  lxc exec wp apk update&lt;br /&gt;
  lxc exec wp apk update&lt;br /&gt;
(ça marche ;))&lt;br /&gt;
&lt;br /&gt;
== Serveur web : apache2 - php83 - mariadb ==&lt;br /&gt;
cf notes apache2 php sur alpine léger - modif : php84 à la place de php83&lt;br /&gt;
&lt;br /&gt;
ne fonctionne pas... mauvaise version de php ? Ok avec php83 =&amp;gt; on recommence...&lt;br /&gt;
&lt;br /&gt;
Ok !&lt;br /&gt;
&lt;br /&gt;
À l&#039;usage, H5P nécessite &#039;&#039;&#039;mbstring&#039;&#039;&#039; et &#039;&#039;&#039;zip&#039;&#039;&#039; : Ajout de &#039;&#039;&#039;php83-mbstring&#039;&#039;&#039; et &#039;&#039;&#039;php83-zip&#039;&#039;&#039; (relance d&#039;apache 2)&lt;br /&gt;
Lors du téléchargement d&#039;exercices (3.1 Mio), Nginx envoie l&#039;erreur 413 : Corriger proxy.conf en ajoutant la ligne&lt;br /&gt;
&lt;br /&gt;
 client_max_body_size 200M; (par défaut à 1Mio)&lt;br /&gt;
&lt;br /&gt;
Relancer nginx.&lt;br /&gt;
&lt;br /&gt;
Il faut également augmenter les valeurs : (dans /etc/php83/php.ini)&lt;br /&gt;
  upload_max_filesize = 256M&lt;br /&gt;
  post_max_size = 256M&lt;br /&gt;
  max_execution_time = 300&lt;br /&gt;
(relancer apache2)&lt;br /&gt;
&lt;br /&gt;
== Mariadb ==&lt;br /&gt;
&#039;&#039;(d&#039;après mes notes instal serveur + PMB)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
  apk add mysql mariadb mariadb-server-utils mariadb-client&lt;br /&gt;
  apk add php83-pdo_mysql php83-mbstring&lt;br /&gt;
(voir plus tard s&#039;il faut mysqli ou mysqlnd)&lt;br /&gt;
&lt;br /&gt;
Initialisation de mariadb&lt;br /&gt;
  # /etc/init.d/mariadb setup&lt;br /&gt;
(peuple /var/lib/mysql)&lt;br /&gt;
&lt;br /&gt;
  # rc-service mariadb start&lt;br /&gt;
=&amp;gt; ok&lt;br /&gt;
# mysql&lt;br /&gt;
=&amp;gt; on entre dans mysql -&amp;gt; Ok&lt;br /&gt;
&lt;br /&gt;
== installation de phpmyadmin ==&lt;br /&gt;
&lt;br /&gt;
  # apk add phpmyadmin&lt;br /&gt;
-&amp;gt; Installe de nombreux packages et librairies (php83-{mysqli,bz2,ctype,curl,gd,session,zip,xmlwriter,iconv})&lt;br /&gt;
	(lib{xau,md,bsd,xdmcp,xcb,x11,xext,ice,bsm,xt,xpm,dav1d,jpeg,yuv,avif,png,shrpyuv,webp,zip} aom-libs,freetype)&lt;br /&gt;
&lt;br /&gt;
 phpmyadmin has been installed to: &lt;br /&gt;
       /usr/share/webapps/phpmyadmin&lt;br /&gt;
 phpmyadmin config file has been installed to: &lt;br /&gt;
       /etc/phpmyadmin/config.inc.php&lt;br /&gt;
 If you use apache2:&lt;br /&gt;
      1) Change the ownership of the config directory:&lt;br /&gt;
             chown -R apache:apache /etc/phpmyadmin&lt;br /&gt;
      2) See if you need to modify the apache2 config:&lt;br /&gt;
             /etc/apache2/conf.d/phpmyadmin.conf&lt;br /&gt;
      3) Restart apache2 when done.&lt;br /&gt;
&lt;br /&gt;
  # rc-service apache2 restart&lt;br /&gt;
-&amp;gt; phpmyadmin accessible à wp.lesitadom.fr/phpmyadmin&lt;br /&gt;
&lt;br /&gt;
Conteneur mariadb : Création d&#039;un utilisateur pour phpmyadmin :&lt;br /&gt;
  # mysql&lt;br /&gt;
  CREATE USER &#039;login_util&#039;@&#039;%&#039; IDENTIFIED BY &#039;pass_util&#039;;&lt;br /&gt;
  GRANT ALL PRIVILEGES ON *.* TO &#039;login_util&#039;@&#039;%&#039; WITH GRANT OPTION;&lt;br /&gt;
  FLUSH PRIVILEGES;&lt;br /&gt;
(Ctrl-d pour sortir)&lt;br /&gt;
&lt;br /&gt;
Pour l&#039;accès avec mot de passe :&lt;br /&gt;
stopper les services mariadb et apache2 :&lt;br /&gt;
  # rc-service mariadb stop&lt;br /&gt;
  # rc-service apache2 stop&lt;br /&gt;
Dans /etc/my.cnf.d/maria_db_server.cnf, sous [mysqld], ajouter :&lt;br /&gt;
  skip-grant-tables&lt;br /&gt;
Relancer les services et ça fonctionne !&lt;br /&gt;
...pas tout à fait... la configuration de phpmyadmin n&#039;est pas terminée... Cf message au bas&lt;br /&gt;
&lt;br /&gt;
Récupération d&#039;un fichier de conf de phpmyadmin qui fonctionne sur le net (modif de l&#039;utilisateur et du mdp)&lt;br /&gt;
&lt;br /&gt;
lancement de l&#039;installation de mariadb avec les paramètres par défaut (y à toutes les questions...)&lt;br /&gt;
&lt;br /&gt;
Redémarrage du conteneur -&amp;gt; phpmyadmin fonctionne avec les droits qui vont bien&lt;br /&gt;
&lt;br /&gt;
* Installation de wordpress *&lt;br /&gt;
&lt;br /&gt;
téléchargement de wordpres-...zip -&amp;gt; tmp du raspberry&lt;br /&gt;
# lxc file push /tmp/wordpress-6.7.2-fr_FR.zip wp/tmp/&lt;br /&gt;
Dans le conteneur :&lt;br /&gt;
# unzip /tmp/wordpress-6.7.2-fr_FR.zip -d /var/www/localhost/htdocs/&lt;br /&gt;
Déplacer le contenu à la racine :&lt;br /&gt;
# mv /var/www/localhost/htdocs/wordpress/* /var/www/localhost/htdocs/&lt;br /&gt;
&lt;br /&gt;
Création de la bdd wordpress (wp_perso2025) par phpmyadmin avec utilisateur wp-dd2025 et mdp 1_mdppuwp!&lt;br /&gt;
&lt;br /&gt;
Connection à wp dans le navigateur à l&#039;adresse du serveur : wp.lesitadom.fr -&amp;gt; configuration&lt;br /&gt;
&lt;br /&gt;
Tout fonctionne !&lt;br /&gt;
&lt;br /&gt;
Voir s&#039;il est possible d&#039;installer mariadb et phpmyadmin sur des conteneur distincts...&lt;br /&gt;
&lt;br /&gt;
/*\_/*\_/*\_/*\_/*\_/*\_/*\_/*\_/*\_/*\_/*\_/*\_/*\_/*\_/*\_/*\_/*\_/*\_/*\_/*\_/*\_/*\_/*\_/&lt;br /&gt;
\_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \&lt;br /&gt;
&lt;br /&gt;
******************************************************************************************&lt;br /&gt;
* installation de wordpress - mariadb et phpmyadmin sur deux conteneurs séparés alipneLe *&lt;br /&gt;
******************************************************************************************&lt;br /&gt;
&lt;br /&gt;
***********&lt;br /&gt;
* Mariadb *&lt;br /&gt;
***********&lt;br /&gt;
Création du conteneur maria + maj&lt;br /&gt;
Installation de mariadb&lt;br /&gt;
# apk add (mysql) mariadb mariadb-server-utils mariadb-client&lt;br /&gt;
# apk add php83-pdo_mysql php83-mbstring&lt;br /&gt;
&lt;br /&gt;
Initialisation de mariadb (peuple /var/lib/mysql)&lt;br /&gt;
# /etc/init.d/mariadb setup&lt;br /&gt;
&lt;br /&gt;
Démarrer le service&lt;br /&gt;
# rc-service mariadb start&lt;br /&gt;
&lt;br /&gt;
Sécuriser la base de donnée&lt;br /&gt;
# mysql_secure_installation (vide/n/n/Y/Y/Y/Y)&lt;br /&gt;
&lt;br /&gt;
on peut entrer dans mysql (idem mariadb)&lt;br /&gt;
&lt;br /&gt;
*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/&lt;br /&gt;
Ajout d&#039;apache, php et phpmyadmin&lt;br /&gt;
&lt;br /&gt;
# apk add apache2 apache2-ctl php83 php83-apache2 php83-mbstring phpmyadmin&lt;br /&gt;
&lt;br /&gt;
Copie du fichier de conf dans etc/phpmyadmin/&lt;br /&gt;
Modif du fichier /var/www/localhost/htdocs/index.html -&amp;gt; index.php&lt;br /&gt;
Ajout de la redirection dans le conteneur proxy&lt;br /&gt;
Ajout de la redirection dans le fichier host du bureau&lt;br /&gt;
&lt;br /&gt;
À la première connection, phpmyadmin est en erreur : la base n&#039;est pas encore crée. Cliquer...&lt;br /&gt;
&lt;br /&gt;
phpmyadmin affiche une erreur d&#039;accès à /usr/share/webapps/phpmyadmin/tmp : le dossier n&#039;existe pas : création.&lt;br /&gt;
# chown apache:apache /usr/share/webapps/phpmyadmin/tmp&lt;br /&gt;
-&amp;gt; problème réglé&lt;br /&gt;
&lt;br /&gt;
phpmyadmin affiche une erreur concernant les cookies (pas de clé valide)&lt;br /&gt;
D&#039;après la documentation :&lt;br /&gt;
&lt;br /&gt;
// A string of 32 characters.&lt;br /&gt;
$cfg[&#039;blowfish_secret&#039;] = &#039;JOFw435365IScA&amp;amp;Q!cDugr!lSfuAz*OW&#039;;&lt;br /&gt;
88a7da62429ba6ad3cb3c76a09641fca&lt;br /&gt;
Modification du fichier /etc/phpmyadmin/config.php en conséquence.&lt;br /&gt;
&lt;br /&gt;
-&amp;gt; marche pas&lt;br /&gt;
&lt;br /&gt;
Tentative de connexion à mariadb depuis le conteneur wiki... ne fonctionne pas. Plusieurs tentatives en agissant sur les paramètres côté client (règles firewall, ouverture de ports) ou du côté serveur (utilisateur, adresse bind, paramètres my.cnf et maria....cnf).&lt;br /&gt;
Au final, il faut commenter la ligne &#039;skip-networking&#039; et ça fonctionne (voir si la ligne &#039;innodb_force_recovery=1&#039; a une utilité...). Trouvé à l&#039;adresse &amp;quot;https://mariadb.com/kb/en/configuring-mariadb-for-remote-client-access/&amp;quot;. À retester sur une machine propre.&lt;br /&gt;
&lt;br /&gt;
**************&lt;br /&gt;
* phpmyadmin *&lt;br /&gt;
**************&lt;br /&gt;
Création du conteneur phpmyadmin&lt;br /&gt;
Maj&lt;br /&gt;
&lt;br /&gt;
Installation du serveur web : apache2&lt;br /&gt;
# apk add apache2 php83 php83-apache2 php83-mbstring&lt;br /&gt;
# rc-service apache2 start&lt;br /&gt;
&lt;br /&gt;
Installation de phpmyadmin&lt;br /&gt;
# apk add phpmyadmin&lt;br /&gt;
&lt;br /&gt;
*&lt;br /&gt;
* phpmyadmin has been installed to:&lt;br /&gt;
*     /usr/share/webapps/phpmyadmin&lt;br /&gt;
* phpmyadmin config file has been installed to:&lt;br /&gt;
*     /etc/phpmyadmin/config.inc.php&lt;br /&gt;
* If you use apache2:&lt;br /&gt;
*     1) Change the ownership of the config directory:&lt;br /&gt;
*            chown -R apache:apache /etc/phpmyadmin&lt;br /&gt;
*     2) See if you need to modify the apache2 config:&lt;br /&gt;
*            /etc/apache2/conf.d/phpmyadmin.conf&lt;br /&gt;
*     3) Restart apache2 when done.&lt;br /&gt;
*&lt;br /&gt;
Ajout de phpmyadmin.lesitadom.fr au fichier hosts de l&#039;hôte&lt;br /&gt;
&lt;br /&gt;
*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/&lt;br /&gt;
Modification du fichier de conf dans le conteneur proxy :&lt;br /&gt;
&lt;br /&gt;
* conteneur phpmyadmin&lt;br /&gt;
server {&lt;br /&gt;
        listen 80 proxy_protocol;&lt;br /&gt;
        listen [::]:80 proxy_protocol;&lt;br /&gt;
&lt;br /&gt;
        server_name phpmyadmin.lesitadom.fr;&lt;br /&gt;
&lt;br /&gt;
        location / {&lt;br /&gt;
                include /etc/nginx/proxy_params;&lt;br /&gt;
&lt;br /&gt;
                proxy_pass http://phpmyadmin.lxd;&lt;br /&gt;
        }&lt;br /&gt;
        real_ip_header proxy_protocol;&lt;br /&gt;
        set_real_ip_from 127.0.0.1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Redémarrer le service nginx :&lt;br /&gt;
# systemctl restart nginx&lt;br /&gt;
&lt;br /&gt;
copie du fichier de conf téléchargé dans le dossier /etc/phpmyadmin&lt;br /&gt;
&lt;br /&gt;
*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/&lt;br /&gt;
&lt;br /&gt;
Modif du fichier /var/www/localhost/htdocs/index.html -&amp;gt; index.php (avec &amp;lt;?php phpinfo(); ?&amp;gt;&lt;br /&gt;
Démarrage du service apache2 :&lt;br /&gt;
# rc-service apache2 start&lt;br /&gt;
&lt;br /&gt;
-&amp;gt; la page d&#039;info s&#039;affiche&lt;br /&gt;
-&amp;gt; la page d&#039;accueil de phpmyadmin s&#039;affiche, mais pas de connexion à la base...&lt;br /&gt;
&lt;br /&gt;
*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/&lt;br /&gt;
Dans le conteneur maria :&lt;br /&gt;
&lt;br /&gt;
Création d&#039;un utilisateur pour phpmyadmin :&lt;br /&gt;
# mysql&lt;br /&gt;
CREATE USER &#039;login_util&#039;@&#039;%&#039; IDENTIFIED BY &#039;pass_util&#039;;&lt;br /&gt;
GRANT ALL PRIVILEGES ON *.* TO &#039;login_util&#039;@&#039;%&#039; WITH GRANT OPTION;&lt;br /&gt;
FLUSH PRIVILEGES;&lt;br /&gt;
(Ctrl-d pour sortir)&lt;br /&gt;
&lt;br /&gt;
*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/&lt;br /&gt;
&lt;br /&gt;
Pour tester les configurations successives, installation de mysql ne plus :&lt;br /&gt;
# apk add... (cf plus haut...)&lt;br /&gt;
&lt;br /&gt;
phpmyadmin:~# /etc/init.d/mariadb setup&lt;br /&gt;
 * Creating a new MySQL database ...&lt;br /&gt;
/usr/bin/mysql_install_db: Deprecated program name. It will be removed in a future release, use &#039;mariadb-install-db&#039; instead&lt;br /&gt;
Installing MariaDB/MySQL system tables in &#039;/var/lib/mysql&#039; ...&lt;br /&gt;
OK&lt;br /&gt;
&lt;br /&gt;
To start mariadbd at boot time you have to copy&lt;br /&gt;
support-files/mariadb.service to the right place for your system&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Two all-privilege accounts were created.&lt;br /&gt;
One is root@localhost, it has no password, but you need to&lt;br /&gt;
be system &#039;root&#039; user to connect. Use, for example, sudo mysql&lt;br /&gt;
The second is mysql@localhost, it has no password either, but&lt;br /&gt;
you need to be the system &#039;mysql&#039; user to connect.&lt;br /&gt;
After connecting you can set the password, if you would need to be&lt;br /&gt;
able to connect as any of these users with a password and without sudo&lt;br /&gt;
&lt;br /&gt;
See the MariaDB Knowledgebase at https://mariadb.com/kb&lt;br /&gt;
&lt;br /&gt;
You can start the MariaDB daemon with:&lt;br /&gt;
cd &#039;/usr&#039; ; /usr/bin/mariadbd-safe --datadir=&#039;/var/lib/mysql&#039;&lt;br /&gt;
&lt;br /&gt;
You can test the MariaDB daemon with mariadb-test-run.pl&lt;br /&gt;
cd &#039;/usr/mariadb-test&#039; ; perl mariadb-test-run.pl&lt;br /&gt;
&lt;br /&gt;
Please report any problems at https://mariadb.org/jira&lt;br /&gt;
&lt;br /&gt;
The latest information about MariaDB is available at https://mariadb.org/.&lt;br /&gt;
&lt;br /&gt;
Consider joining MariaDB&#039;s strong and vibrant community:&lt;br /&gt;
https://mariadb.org/get-involved/&lt;br /&gt;
&lt;br /&gt;
... ne connaît toujours pas &#039;mysql&#039;&lt;br /&gt;
# apk add mariadb-server-utils mariadb-client&lt;br /&gt;
-&amp;gt; reconnaît la commande, mais le serveur refuse la connexion...&lt;br /&gt;
&lt;br /&gt;
Abandon : comme phpmyadmin nécessite un serveur web, installation des trois dans le même conteneur : apache - php -maria&lt;br /&gt;
&lt;br /&gt;
*************&lt;br /&gt;
* Wordpress *&lt;br /&gt;
*************&lt;br /&gt;
1. Création du conteneur wp + maj&lt;br /&gt;
2. Installation d&#039;apache et php&lt;br /&gt;
# apk add apache2 php php83-apache2 apache2-ctl(pour lister les modules) php83-mysqli (sinon ça râle...)&lt;br /&gt;
# À l&#039;usage, le module H5P réclame la présence et l&#039;activation de mbstring : ajout de php83-mbstring/&lt;br /&gt;
&lt;br /&gt;
Modification de la page d&#039;afichage par défaut : /var/www/localhost/htdocs/index.html -&amp;gt; index.php&lt;br /&gt;
Modification du fichier proxy.conf dans le conteneur proxy : (/etc/nginx/sites-available/proxy.conf)&lt;br /&gt;
proxy_pass http://wp.lxd;&lt;br /&gt;
Redémarrer le service&lt;br /&gt;
systemctl restart nginx&lt;br /&gt;
&lt;br /&gt;
Dans le conteneur wp, démarrer apache2&lt;br /&gt;
rc-service apache2 start&lt;br /&gt;
&lt;br /&gt;
La page s&#039;affiche dans le navigateur...&lt;br /&gt;
&lt;br /&gt;
Création du fichier /etc/apache2/conf.d/remoteip.conf avec&lt;br /&gt;
&lt;br /&gt;
	RemoteIPHeader X-Real-IP&lt;br /&gt;
	RemoteIPTrustedProxy proxy.lxd (nom du conteneur nginx, plus correct dans la configuration conteneurs)&lt;br /&gt;
	&lt;br /&gt;
modification de /etc/apache2/httpd.conf décommenter :&lt;br /&gt;
	LoadModule remoteip_module modules/mod_remoteip.so&lt;br /&gt;
	LoadModule rewrite_module modules/mod_rewrite.so                       &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ajouter apache2 au démarrage&lt;br /&gt;
# rc-update add apache2&lt;br /&gt;
&lt;br /&gt;
relancer les services apache2&lt;br /&gt;
# rc-service apache2 restart&lt;br /&gt;
&lt;br /&gt;
*********************** (en cas d&#039;erreur Bad Getaway, redémarrer le proxy) ************&lt;br /&gt;
&lt;br /&gt;
Télécharger la dernière version de wp et la copier dans le dossier /tmp du conteneur&lt;br /&gt;
&lt;br /&gt;
# lxc file push /tmp/wp/wordpress-6.7.2-fr_FR.zip wiki/tmp&lt;br /&gt;
# lxc shell wiki&lt;br /&gt;
# unzip /tmp/wordpress-..._FR.zip -d /var/ww/localhost/htdocs/&lt;br /&gt;
&lt;br /&gt;
Comme on ne mettra pas d&#039;autre appli, on déplace le fourbi à la racine&lt;br /&gt;
# cd /var/www/localhost/htdocs&lt;br /&gt;
/var/www/localhost/htdocs# mv index.php index.php.sav&lt;br /&gt;
/var/www/localhost/htdocs# mv wordpress/* ./&lt;br /&gt;
/var/www/localhost/htdocs# rm -R wordpress&lt;br /&gt;
&lt;br /&gt;
Créer un utilisateur et une base de donnée pour wordpress dans le conteneur mariadb.lxd (phpmyadmin)&lt;br /&gt;
&lt;br /&gt;
Se connecter au site avec le navigateur&lt;br /&gt;
&lt;br /&gt;
utilisateur domiwp_68/1_mdppdomiwp_68! || wordpress || mariadb.lxd&lt;br /&gt;
&lt;br /&gt;
!!!! En cas d&#039;installation de php83-mysqlnd, le processus échoue (Typed property mysqli::$connect_errno must not be accessed before initialization) !!!&lt;br /&gt;
&lt;br /&gt;
Le bordel n&#039;arrive pas à utiliser ssl... et plante : tourne en boucle sur la page de connection&lt;br /&gt;
&lt;br /&gt;
tentative de lien dans le dossier /var/www/localhost/htdocs/wp-includes/certificates/ de wp&lt;br /&gt;
/etc/letsencrypt/live/lesitadom.fr/fullchain.pem&lt;br /&gt;
&lt;br /&gt;
# ln -s proxy.lxd/etc/letsencrypt/live/lesitadom.fr/fullchain.pem /var/www/localhost/htdocs/wp-includes/certificates/lesitadom.pem&lt;br /&gt;
&lt;br /&gt;
***************** Ça veut pas. On essaye avec une autre version de WP (6.8) ********************&lt;br /&gt;
Marche pas non plus, et en plus, c&#039;est en anglais et pas de choix de langue... Y&#039;a un truc qui merde dès le départ : la mise en page est foireuse...&lt;br /&gt;
&lt;br /&gt;
on recommence avec la version en français (6.8)&lt;br /&gt;
&lt;br /&gt;
Règlage des droits sur apache:www-data (chown -R apache:www-data)&lt;br /&gt;
Contenu de wordpress à la racine&lt;br /&gt;
Adresse &amp;quot;lesitadom.fr&amp;quot; (proxy)&lt;br /&gt;
Suppression des tables des instal précédentes (phpmyadmin)&lt;br /&gt;
&lt;br /&gt;
Affichage touours aussi lamentable, comme si la feuille de style n&#039;était pas prise en compte...&lt;br /&gt;
&lt;br /&gt;
Les tables se créent, mais pau moment de la connexion :&lt;br /&gt;
&lt;br /&gt;
Les informations que vous êtes sur le point de soumettre ne sont pas sécurisées&lt;br /&gt;
&lt;br /&gt;
Et on revient au formulaire&lt;br /&gt;
&lt;br /&gt;
************** On n&#039;est pas couchés ! *******************&lt;br /&gt;
&lt;br /&gt;
Recherche sur internet : worpress derrière un proxy inverse :&lt;br /&gt;
&lt;br /&gt;
Dans wp-config.php, ajouter :&lt;br /&gt;
&lt;br /&gt;
if ( (!empty( $_SERVER[&#039;HTTP_X_FORWARDED_HOST&#039;])) ||&lt;br /&gt;
      (!empty( $_SERVER[&#039;HTTP_X_FORWARDED_FOR&#039;])) ) {&lt;br /&gt;
      $_SERVER[&#039;HTTPS&#039;] = &#039;activé&#039;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Et put&#039; ça marche !!!!&lt;br /&gt;
&lt;br /&gt;
...plus !&lt;br /&gt;
J&#039;ai re-modifié la config du proxy et ça a cassé le bastringue... Le site donnait ça, en plus...&lt;br /&gt;
&lt;br /&gt;
serveur {&lt;br /&gt;
    listen 443 SSL ;&lt;br /&gt;
    server_name foo.bar www.foo.bar;&lt;br /&gt;
    location / {&lt;br /&gt;
        proxy_pass http://10.0.80.32/;&lt;br /&gt;
        proxy_set_header X-Forwarded-Host $host;&lt;br /&gt;
	proxy_set_header X-Forwarded-Server $hôte ;&lt;br /&gt;
	proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;&lt;br /&gt;
	proxy_set_header X-Forwarded-Proto $scheme;&lt;br /&gt;
	proxy_set_header X-Real-IP $remote_addr;&lt;br /&gt;
	proxy_set_header Hôte $host ;&lt;br /&gt;
    }&lt;br /&gt;
    certificat_ssl /etc/letsencrypt/live/foo.bar/fullchain.pem;&lt;br /&gt;
    ssl_certificate_key /etc/letsencrypt/live/foo.bar/privkey.pem;&lt;br /&gt;
    include /etc/letsencrypt/options-ssl-nginx.conf ;&lt;br /&gt;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;&lt;br /&gt;
}&lt;br /&gt;
serveur {&lt;br /&gt;
    server_name foo.bar www.foo.bar;&lt;br /&gt;
    return 301 https://foo.bar$request_uri ;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
adresse utilisée lors de l&#039;instal : lesitadom.fr avec réglage du proxy =&amp;gt; ok&lt;br /&gt;
Changement d&#039;adresse =&amp;gt; ko&lt;br /&gt;
Le fourbi doit laisser des traces de l&#039;adresse du site pendant l&#039;instal...&lt;br /&gt;
&lt;br /&gt;
Modifier : table wp-options, siteurl et home&lt;br /&gt;
&lt;br /&gt;
Ok&lt;br /&gt;
&lt;br /&gt;
************** erreur &amp;quot;La réponse n’est pas une réponse JSON valide&amp;quot; lors de la modification d&#039;un article ****************************&lt;br /&gt;
Modifier apache2 :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Directory &amp;quot;/var/www/localhost/htdocs&amp;quot;&amp;gt;                                     &lt;br /&gt;
...                           &lt;br /&gt;
    #                                                                 &lt;br /&gt;
    # AllowOverride controls what directives may be placed in .htaccess files.&lt;br /&gt;
    # It can be &amp;quot;All&amp;quot;, &amp;quot;None&amp;quot;, or any combination of the keywords:&lt;br /&gt;
    #   AllowOverride FileInfo AuthConfig Limit                     &lt;br /&gt;
    #                                                                          &lt;br /&gt;
    AllowOverride All                                       				&amp;lt;= C&#039;est ici ! &lt;br /&gt;
...                                  &lt;br /&gt;
&amp;lt;/Directory&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
Changer les droits sur .htaccess :&lt;br /&gt;
# chmod 644 /var/www/localhost/htdocs/.htaccess&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
************** Installation des outils ***********************&lt;br /&gt;
&lt;br /&gt;
À partir du dossier wordress de l&#039;école téléchargé en guise de sauvegarde...&lt;br /&gt;
&lt;br /&gt;
Thème : nisarg child&lt;br /&gt;
&lt;br /&gt;
Extensions :&lt;br /&gt;
Installées :&lt;br /&gt;
	- Advanced Accordion Gutenberg Block&lt;br /&gt;
	- advanced-iframe			-&amp;gt; problème : voir la config&lt;br /&gt;
	- PDF Viewer Block pour Gutenberg&lt;br /&gt;
	- classic-editor			-&amp;gt; installé - voir si activation&lt;br /&gt;
	- The Events Calendar&lt;br /&gt;
	- h5p					-&amp;gt; voir plugin Dashboard for Pressbooks and H5P et SNORDIAN&#039;s H5P Resize Pulse&lt;br /&gt;
	- ml-slider				-&amp;gt; diaporamas&lt;br /&gt;
	- shortcodes-ultimate			-&amp;gt; excellent !&lt;br /&gt;
	- smart-slider-3			-&amp;gt; ! Erreur à l&#039;activation ! création de diaporamas : voir si pas doublon avec ml-slider&lt;br /&gt;
	- tablepress				-&amp;gt; créer des tableaux&lt;br /&gt;
	- wp-miniaudioplayer			-&amp;gt; pour lire les mp3&lt;br /&gt;
	- wp-quicklatex				-&amp;gt; pour des formules math en latex&lt;br /&gt;
	- wp-statistics				-&amp;gt; statistiques de visites&lt;br /&gt;
&lt;br /&gt;
Ignorées :&lt;br /&gt;
	- advanced-iframe-custom	-&amp;gt; Voir Advanced Custom Fields&lt;br /&gt;
	- akismet			-&amp;gt; Anti-spam&lt;br /&gt;
	- algori-pdf-viewer		-&amp;gt; remplacé par PDF Viewer Block pour Gutenberg&lt;br /&gt;
	- antispam-bee&lt;br /&gt;
	- bbpress			-&amp;gt; forum de discussion&lt;br /&gt;
	- bp-better-messages		-&amp;gt; chat pour buddypress&lt;br /&gt;
	- buddypress			-&amp;gt; réseau social&lt;br /&gt;
	- easy-fancybox			-&amp;gt; Affichier des images, des vidéos... dans une box. Àvoir...&lt;br /&gt;
	- envole_hooks			-&amp;gt; pour envole&lt;br /&gt;
	- eportailwidget		-&amp;gt; idem ?&lt;br /&gt;
	- flynsarmy-iframe-shortcode	-&amp;gt; non trouvée&lt;br /&gt;
	- google-calendar-events	-&amp;gt; remplacée par The Events Calendar&lt;br /&gt;
	- nextend-accordion-menu	-&amp;gt; non trouvé. Voir si le plugin gutempberg fait l&#039;affaire&lt;br /&gt;
	- nextgen-gallery		-&amp;gt; gallerie d&#039;images. Voir si le plugi installé fair l&#039;affaire&lt;br /&gt;
	- page-links-to			-&amp;gt; optimiser les liens : non trouvé, voir si nécessaire&lt;br /&gt;
	- pretty links			-&amp;gt; casse pieds&lt;br /&gt;
	- poshwidget			-&amp;gt; eole&lt;br /&gt;
	- private-wp			-&amp;gt; ? non trouvée&lt;br /&gt;
	- rumbletalk-chat-a-chat-with-themes	-&amp;gt; chat&lt;br /&gt;
	- si-contact-form		-&amp;gt; formulaire de contact : voir contact form 7 si nécessaire&lt;br /&gt;
	- simple-embed-code		-&amp;gt; intégrer du code aux articles : voir code Embed&lt;br /&gt;
	- the-events-calendar		-&amp;gt; double emploi avec extension installée&lt;br /&gt;
	- theme-preview			-&amp;gt; aide à la conception. Àvoir (Toolkit for Block Theme)&lt;br /&gt;
	- tinymce-advanced		-&amp;gt; modifier l&#039;éditeur. Voir si utile&lt;br /&gt;
	- user-role-editor		-&amp;gt; régler les autorisations&lt;br /&gt;
	- vc-tabs			-&amp;gt; pas trouvée ?&lt;br /&gt;
	- visual-form-builder		-&amp;gt; création de formulaire&lt;br /&gt;
	- wpdirauth			-&amp;gt; ldap&lt;br /&gt;
	- wp-event-manager		-&amp;gt; double emploi&lt;br /&gt;
	- wp-hide-dashboard		-&amp;gt; non trouvée... à revoir&lt;br /&gt;
	- wp-polls			-&amp;gt; créer des sondages&lt;br /&gt;
	- wp-sentry			-&amp;gt; tracer les erruers php et navigation&lt;br /&gt;
	- wp-smushit			-&amp;gt; optimisation d&#039;images. voir si utile&lt;br /&gt;
	- wp-user-avatar		-&amp;gt; création d&#039;avatars pour les utilisateurs&lt;/div&gt;</summary>
		<author><name>Domi</name></author>
	</entry>
	<entry>
		<id>https://wiki.lesitadom.fr/index.php?title=Wp&amp;diff=1648</id>
		<title>Wp</title>
		<link rel="alternate" type="text/html" href="https://wiki.lesitadom.fr/index.php?title=Wp&amp;diff=1648"/>
		<updated>2025-07-09T07:50:19Z</updated>

		<summary type="html">&lt;p&gt;Domi : /* installation de phpmyadmin */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Wordpress sur alpine léger =&lt;br /&gt;
&lt;br /&gt;
ajout wp.lesitadom dans /etc/hosts&lt;br /&gt;
&lt;br /&gt;
Création du conteneur :&lt;br /&gt;
  # lxc launch local:alpineLe wp&lt;br /&gt;
  # lxc exec wp apk update&lt;br /&gt;
  # lxc exec wp apk update&lt;br /&gt;
(ça marche ;))&lt;br /&gt;
&lt;br /&gt;
== Serveur web : apache2 - php83 - mariadb ==&lt;br /&gt;
cf notes apache2 php sur alpine léger - modif : php84 à la place de php83&lt;br /&gt;
&lt;br /&gt;
ne fonctionne pas... mauvaise version de php ? Ok avec php83 =&amp;gt; on recommence...&lt;br /&gt;
&lt;br /&gt;
Ok !&lt;br /&gt;
&lt;br /&gt;
À l&#039;usage, H5P nécessite mbstring et zip : Ajout de php83-mbstring et php83-zip (relance d&#039;apache 2)&lt;br /&gt;
Lors du téléchargement d&#039;exercices (3.1 Mio), Nginx envoie l&#039;erreur 413 : Corriger proxy.conf en ajoutant la ligne&lt;br /&gt;
&lt;br /&gt;
client_max_body_size 200M; (par défaut à 1Mio)&lt;br /&gt;
&lt;br /&gt;
Relancer nginx.&lt;br /&gt;
&lt;br /&gt;
Il faut également augmenter les valeurs : (dans /etc/php83/php.ini)&lt;br /&gt;
  upload_max_filesize = 256M&lt;br /&gt;
  post_max_size = 256M&lt;br /&gt;
  max_execution_time = 300&lt;br /&gt;
(relancer apache2)&lt;br /&gt;
&lt;br /&gt;
== Mariadb ==&lt;br /&gt;
(d&#039;après mes notes instal serveur + PMB)&lt;br /&gt;
&lt;br /&gt;
  # apk add mysql mariadb mariadb-server-utils mariadb-client&lt;br /&gt;
  # apk add php83-pdo_mysql php83-mbstring&lt;br /&gt;
(voir plus tard s&#039;il faut mysqli ou mysqlnd)&lt;br /&gt;
&lt;br /&gt;
Initialisation de mariadb&lt;br /&gt;
  # /etc/init.d/mariadb setup&lt;br /&gt;
(peuple /var/lib/mysql)&lt;br /&gt;
&lt;br /&gt;
  # rc-service mariadb start&lt;br /&gt;
=&amp;gt; ok&lt;br /&gt;
# mysql&lt;br /&gt;
=&amp;gt; on entre dans mysql -&amp;gt; Ok&lt;br /&gt;
&lt;br /&gt;
== installation de phpmyadmin ==&lt;br /&gt;
&lt;br /&gt;
  # apk add phpmyadmin&lt;br /&gt;
-&amp;gt; Installe de nombreux packages et librairies (php83-{mysqli,bz2,ctype,curl,gd,session,zip,xmlwriter,iconv})&lt;br /&gt;
	(lib{xau,md,bsd,xdmcp,xcb,x11,xext,ice,bsm,xt,xpm,dav1d,jpeg,yuv,avif,png,shrpyuv,webp,zip} aom-libs,freetype)&lt;br /&gt;
&lt;br /&gt;
 phpmyadmin has been installed to: &lt;br /&gt;
       /usr/share/webapps/phpmyadmin&lt;br /&gt;
 phpmyadmin config file has been installed to: &lt;br /&gt;
       /etc/phpmyadmin/config.inc.php&lt;br /&gt;
 If you use apache2:&lt;br /&gt;
      1) Change the ownership of the config directory:&lt;br /&gt;
             chown -R apache:apache /etc/phpmyadmin&lt;br /&gt;
      2) See if you need to modify the apache2 config:&lt;br /&gt;
             /etc/apache2/conf.d/phpmyadmin.conf&lt;br /&gt;
      3) Restart apache2 when done.&lt;br /&gt;
&lt;br /&gt;
  # rc-service apache2 restart&lt;br /&gt;
-&amp;gt; phpmyadmin accessible à wp.lesitadom.fr/phpmyadmin&lt;br /&gt;
&lt;br /&gt;
Conteneur mariadb : Création d&#039;un utilisateur pour phpmyadmin :&lt;br /&gt;
  # mysql&lt;br /&gt;
  CREATE USER &#039;login_util&#039;@&#039;%&#039; IDENTIFIED BY &#039;pass_util&#039;;&lt;br /&gt;
  GRANT ALL PRIVILEGES ON *.* TO &#039;login_util&#039;@&#039;%&#039; WITH GRANT OPTION;&lt;br /&gt;
  FLUSH PRIVILEGES;&lt;br /&gt;
(Ctrl-d pour sortir)&lt;br /&gt;
&lt;br /&gt;
Pour l&#039;accès avec mot de passe :&lt;br /&gt;
stopper les services mariadb et apache2 :&lt;br /&gt;
  # rc-service mariadb stop&lt;br /&gt;
  # rc-service apache2 stop&lt;br /&gt;
Dans /etc/my.cnf.d/maria_db_server.cnf, sous [mysqld], ajouter :&lt;br /&gt;
  skip-grant-tables&lt;br /&gt;
Relancer les services et ça fonctionne !&lt;br /&gt;
...pas tout à fait... la configuration de phpmyadmin n&#039;est pas terminée... Cf message au bas&lt;br /&gt;
&lt;br /&gt;
Récupération d&#039;un fichier de conf de phpmyadmin qui fonctionne sur le net (modif de l&#039;utilisateur et du mdp)&lt;br /&gt;
&lt;br /&gt;
lancement de l&#039;installation de mariadb avec les paramètres par défaut (y à toutes les questions...)&lt;br /&gt;
&lt;br /&gt;
Redémarrage du conteneur -&amp;gt; phpmyadmin fonctionne avec les droits qui vont bien&lt;br /&gt;
&lt;br /&gt;
* Installation de wordpress *&lt;br /&gt;
&lt;br /&gt;
téléchargement de wordpres-...zip -&amp;gt; tmp du raspberry&lt;br /&gt;
# lxc file push /tmp/wordpress-6.7.2-fr_FR.zip wp/tmp/&lt;br /&gt;
Dans le conteneur :&lt;br /&gt;
# unzip /tmp/wordpress-6.7.2-fr_FR.zip -d /var/www/localhost/htdocs/&lt;br /&gt;
Déplacer le contenu à la racine :&lt;br /&gt;
# mv /var/www/localhost/htdocs/wordpress/* /var/www/localhost/htdocs/&lt;br /&gt;
&lt;br /&gt;
Création de la bdd wordpress (wp_perso2025) par phpmyadmin avec utilisateur wp-dd2025 et mdp 1_mdppuwp!&lt;br /&gt;
&lt;br /&gt;
Connection à wp dans le navigateur à l&#039;adresse du serveur : wp.lesitadom.fr -&amp;gt; configuration&lt;br /&gt;
&lt;br /&gt;
Tout fonctionne !&lt;br /&gt;
&lt;br /&gt;
Voir s&#039;il est possible d&#039;installer mariadb et phpmyadmin sur des conteneur distincts...&lt;br /&gt;
&lt;br /&gt;
/*\_/*\_/*\_/*\_/*\_/*\_/*\_/*\_/*\_/*\_/*\_/*\_/*\_/*\_/*\_/*\_/*\_/*\_/*\_/*\_/*\_/*\_/*\_/&lt;br /&gt;
\_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \&lt;br /&gt;
&lt;br /&gt;
******************************************************************************************&lt;br /&gt;
* installation de wordpress - mariadb et phpmyadmin sur deux conteneurs séparés alipneLe *&lt;br /&gt;
******************************************************************************************&lt;br /&gt;
&lt;br /&gt;
***********&lt;br /&gt;
* Mariadb *&lt;br /&gt;
***********&lt;br /&gt;
Création du conteneur maria + maj&lt;br /&gt;
Installation de mariadb&lt;br /&gt;
# apk add (mysql) mariadb mariadb-server-utils mariadb-client&lt;br /&gt;
# apk add php83-pdo_mysql php83-mbstring&lt;br /&gt;
&lt;br /&gt;
Initialisation de mariadb (peuple /var/lib/mysql)&lt;br /&gt;
# /etc/init.d/mariadb setup&lt;br /&gt;
&lt;br /&gt;
Démarrer le service&lt;br /&gt;
# rc-service mariadb start&lt;br /&gt;
&lt;br /&gt;
Sécuriser la base de donnée&lt;br /&gt;
# mysql_secure_installation (vide/n/n/Y/Y/Y/Y)&lt;br /&gt;
&lt;br /&gt;
on peut entrer dans mysql (idem mariadb)&lt;br /&gt;
&lt;br /&gt;
*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/&lt;br /&gt;
Ajout d&#039;apache, php et phpmyadmin&lt;br /&gt;
&lt;br /&gt;
# apk add apache2 apache2-ctl php83 php83-apache2 php83-mbstring phpmyadmin&lt;br /&gt;
&lt;br /&gt;
Copie du fichier de conf dans etc/phpmyadmin/&lt;br /&gt;
Modif du fichier /var/www/localhost/htdocs/index.html -&amp;gt; index.php&lt;br /&gt;
Ajout de la redirection dans le conteneur proxy&lt;br /&gt;
Ajout de la redirection dans le fichier host du bureau&lt;br /&gt;
&lt;br /&gt;
À la première connection, phpmyadmin est en erreur : la base n&#039;est pas encore crée. Cliquer...&lt;br /&gt;
&lt;br /&gt;
phpmyadmin affiche une erreur d&#039;accès à /usr/share/webapps/phpmyadmin/tmp : le dossier n&#039;existe pas : création.&lt;br /&gt;
# chown apache:apache /usr/share/webapps/phpmyadmin/tmp&lt;br /&gt;
-&amp;gt; problème réglé&lt;br /&gt;
&lt;br /&gt;
phpmyadmin affiche une erreur concernant les cookies (pas de clé valide)&lt;br /&gt;
D&#039;après la documentation :&lt;br /&gt;
&lt;br /&gt;
// A string of 32 characters.&lt;br /&gt;
$cfg[&#039;blowfish_secret&#039;] = &#039;JOFw435365IScA&amp;amp;Q!cDugr!lSfuAz*OW&#039;;&lt;br /&gt;
88a7da62429ba6ad3cb3c76a09641fca&lt;br /&gt;
Modification du fichier /etc/phpmyadmin/config.php en conséquence.&lt;br /&gt;
&lt;br /&gt;
-&amp;gt; marche pas&lt;br /&gt;
&lt;br /&gt;
Tentative de connexion à mariadb depuis le conteneur wiki... ne fonctionne pas. Plusieurs tentatives en agissant sur les paramètres côté client (règles firewall, ouverture de ports) ou du côté serveur (utilisateur, adresse bind, paramètres my.cnf et maria....cnf).&lt;br /&gt;
Au final, il faut commenter la ligne &#039;skip-networking&#039; et ça fonctionne (voir si la ligne &#039;innodb_force_recovery=1&#039; a une utilité...). Trouvé à l&#039;adresse &amp;quot;https://mariadb.com/kb/en/configuring-mariadb-for-remote-client-access/&amp;quot;. À retester sur une machine propre.&lt;br /&gt;
&lt;br /&gt;
**************&lt;br /&gt;
* phpmyadmin *&lt;br /&gt;
**************&lt;br /&gt;
Création du conteneur phpmyadmin&lt;br /&gt;
Maj&lt;br /&gt;
&lt;br /&gt;
Installation du serveur web : apache2&lt;br /&gt;
# apk add apache2 php83 php83-apache2 php83-mbstring&lt;br /&gt;
# rc-service apache2 start&lt;br /&gt;
&lt;br /&gt;
Installation de phpmyadmin&lt;br /&gt;
# apk add phpmyadmin&lt;br /&gt;
&lt;br /&gt;
*&lt;br /&gt;
* phpmyadmin has been installed to:&lt;br /&gt;
*     /usr/share/webapps/phpmyadmin&lt;br /&gt;
* phpmyadmin config file has been installed to:&lt;br /&gt;
*     /etc/phpmyadmin/config.inc.php&lt;br /&gt;
* If you use apache2:&lt;br /&gt;
*     1) Change the ownership of the config directory:&lt;br /&gt;
*            chown -R apache:apache /etc/phpmyadmin&lt;br /&gt;
*     2) See if you need to modify the apache2 config:&lt;br /&gt;
*            /etc/apache2/conf.d/phpmyadmin.conf&lt;br /&gt;
*     3) Restart apache2 when done.&lt;br /&gt;
*&lt;br /&gt;
Ajout de phpmyadmin.lesitadom.fr au fichier hosts de l&#039;hôte&lt;br /&gt;
&lt;br /&gt;
*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/&lt;br /&gt;
Modification du fichier de conf dans le conteneur proxy :&lt;br /&gt;
&lt;br /&gt;
* conteneur phpmyadmin&lt;br /&gt;
server {&lt;br /&gt;
        listen 80 proxy_protocol;&lt;br /&gt;
        listen [::]:80 proxy_protocol;&lt;br /&gt;
&lt;br /&gt;
        server_name phpmyadmin.lesitadom.fr;&lt;br /&gt;
&lt;br /&gt;
        location / {&lt;br /&gt;
                include /etc/nginx/proxy_params;&lt;br /&gt;
&lt;br /&gt;
                proxy_pass http://phpmyadmin.lxd;&lt;br /&gt;
        }&lt;br /&gt;
        real_ip_header proxy_protocol;&lt;br /&gt;
        set_real_ip_from 127.0.0.1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Redémarrer le service nginx :&lt;br /&gt;
# systemctl restart nginx&lt;br /&gt;
&lt;br /&gt;
copie du fichier de conf téléchargé dans le dossier /etc/phpmyadmin&lt;br /&gt;
&lt;br /&gt;
*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/&lt;br /&gt;
&lt;br /&gt;
Modif du fichier /var/www/localhost/htdocs/index.html -&amp;gt; index.php (avec &amp;lt;?php phpinfo(); ?&amp;gt;&lt;br /&gt;
Démarrage du service apache2 :&lt;br /&gt;
# rc-service apache2 start&lt;br /&gt;
&lt;br /&gt;
-&amp;gt; la page d&#039;info s&#039;affiche&lt;br /&gt;
-&amp;gt; la page d&#039;accueil de phpmyadmin s&#039;affiche, mais pas de connexion à la base...&lt;br /&gt;
&lt;br /&gt;
*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/&lt;br /&gt;
Dans le conteneur maria :&lt;br /&gt;
&lt;br /&gt;
Création d&#039;un utilisateur pour phpmyadmin :&lt;br /&gt;
# mysql&lt;br /&gt;
CREATE USER &#039;login_util&#039;@&#039;%&#039; IDENTIFIED BY &#039;pass_util&#039;;&lt;br /&gt;
GRANT ALL PRIVILEGES ON *.* TO &#039;login_util&#039;@&#039;%&#039; WITH GRANT OPTION;&lt;br /&gt;
FLUSH PRIVILEGES;&lt;br /&gt;
(Ctrl-d pour sortir)&lt;br /&gt;
&lt;br /&gt;
*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/&lt;br /&gt;
&lt;br /&gt;
Pour tester les configurations successives, installation de mysql ne plus :&lt;br /&gt;
# apk add... (cf plus haut...)&lt;br /&gt;
&lt;br /&gt;
phpmyadmin:~# /etc/init.d/mariadb setup&lt;br /&gt;
 * Creating a new MySQL database ...&lt;br /&gt;
/usr/bin/mysql_install_db: Deprecated program name. It will be removed in a future release, use &#039;mariadb-install-db&#039; instead&lt;br /&gt;
Installing MariaDB/MySQL system tables in &#039;/var/lib/mysql&#039; ...&lt;br /&gt;
OK&lt;br /&gt;
&lt;br /&gt;
To start mariadbd at boot time you have to copy&lt;br /&gt;
support-files/mariadb.service to the right place for your system&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Two all-privilege accounts were created.&lt;br /&gt;
One is root@localhost, it has no password, but you need to&lt;br /&gt;
be system &#039;root&#039; user to connect. Use, for example, sudo mysql&lt;br /&gt;
The second is mysql@localhost, it has no password either, but&lt;br /&gt;
you need to be the system &#039;mysql&#039; user to connect.&lt;br /&gt;
After connecting you can set the password, if you would need to be&lt;br /&gt;
able to connect as any of these users with a password and without sudo&lt;br /&gt;
&lt;br /&gt;
See the MariaDB Knowledgebase at https://mariadb.com/kb&lt;br /&gt;
&lt;br /&gt;
You can start the MariaDB daemon with:&lt;br /&gt;
cd &#039;/usr&#039; ; /usr/bin/mariadbd-safe --datadir=&#039;/var/lib/mysql&#039;&lt;br /&gt;
&lt;br /&gt;
You can test the MariaDB daemon with mariadb-test-run.pl&lt;br /&gt;
cd &#039;/usr/mariadb-test&#039; ; perl mariadb-test-run.pl&lt;br /&gt;
&lt;br /&gt;
Please report any problems at https://mariadb.org/jira&lt;br /&gt;
&lt;br /&gt;
The latest information about MariaDB is available at https://mariadb.org/.&lt;br /&gt;
&lt;br /&gt;
Consider joining MariaDB&#039;s strong and vibrant community:&lt;br /&gt;
https://mariadb.org/get-involved/&lt;br /&gt;
&lt;br /&gt;
... ne connaît toujours pas &#039;mysql&#039;&lt;br /&gt;
# apk add mariadb-server-utils mariadb-client&lt;br /&gt;
-&amp;gt; reconnaît la commande, mais le serveur refuse la connexion...&lt;br /&gt;
&lt;br /&gt;
Abandon : comme phpmyadmin nécessite un serveur web, installation des trois dans le même conteneur : apache - php -maria&lt;br /&gt;
&lt;br /&gt;
*************&lt;br /&gt;
* Wordpress *&lt;br /&gt;
*************&lt;br /&gt;
1. Création du conteneur wp + maj&lt;br /&gt;
2. Installation d&#039;apache et php&lt;br /&gt;
# apk add apache2 php php83-apache2 apache2-ctl(pour lister les modules) php83-mysqli (sinon ça râle...)&lt;br /&gt;
# À l&#039;usage, le module H5P réclame la présence et l&#039;activation de mbstring : ajout de php83-mbstring/&lt;br /&gt;
&lt;br /&gt;
Modification de la page d&#039;afichage par défaut : /var/www/localhost/htdocs/index.html -&amp;gt; index.php&lt;br /&gt;
Modification du fichier proxy.conf dans le conteneur proxy : (/etc/nginx/sites-available/proxy.conf)&lt;br /&gt;
proxy_pass http://wp.lxd;&lt;br /&gt;
Redémarrer le service&lt;br /&gt;
systemctl restart nginx&lt;br /&gt;
&lt;br /&gt;
Dans le conteneur wp, démarrer apache2&lt;br /&gt;
rc-service apache2 start&lt;br /&gt;
&lt;br /&gt;
La page s&#039;affiche dans le navigateur...&lt;br /&gt;
&lt;br /&gt;
Création du fichier /etc/apache2/conf.d/remoteip.conf avec&lt;br /&gt;
&lt;br /&gt;
	RemoteIPHeader X-Real-IP&lt;br /&gt;
	RemoteIPTrustedProxy proxy.lxd (nom du conteneur nginx, plus correct dans la configuration conteneurs)&lt;br /&gt;
	&lt;br /&gt;
modification de /etc/apache2/httpd.conf décommenter :&lt;br /&gt;
	LoadModule remoteip_module modules/mod_remoteip.so&lt;br /&gt;
	LoadModule rewrite_module modules/mod_rewrite.so                       &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ajouter apache2 au démarrage&lt;br /&gt;
# rc-update add apache2&lt;br /&gt;
&lt;br /&gt;
relancer les services apache2&lt;br /&gt;
# rc-service apache2 restart&lt;br /&gt;
&lt;br /&gt;
*********************** (en cas d&#039;erreur Bad Getaway, redémarrer le proxy) ************&lt;br /&gt;
&lt;br /&gt;
Télécharger la dernière version de wp et la copier dans le dossier /tmp du conteneur&lt;br /&gt;
&lt;br /&gt;
# lxc file push /tmp/wp/wordpress-6.7.2-fr_FR.zip wiki/tmp&lt;br /&gt;
# lxc shell wiki&lt;br /&gt;
# unzip /tmp/wordpress-..._FR.zip -d /var/ww/localhost/htdocs/&lt;br /&gt;
&lt;br /&gt;
Comme on ne mettra pas d&#039;autre appli, on déplace le fourbi à la racine&lt;br /&gt;
# cd /var/www/localhost/htdocs&lt;br /&gt;
/var/www/localhost/htdocs# mv index.php index.php.sav&lt;br /&gt;
/var/www/localhost/htdocs# mv wordpress/* ./&lt;br /&gt;
/var/www/localhost/htdocs# rm -R wordpress&lt;br /&gt;
&lt;br /&gt;
Créer un utilisateur et une base de donnée pour wordpress dans le conteneur mariadb.lxd (phpmyadmin)&lt;br /&gt;
&lt;br /&gt;
Se connecter au site avec le navigateur&lt;br /&gt;
&lt;br /&gt;
utilisateur domiwp_68/1_mdppdomiwp_68! || wordpress || mariadb.lxd&lt;br /&gt;
&lt;br /&gt;
!!!! En cas d&#039;installation de php83-mysqlnd, le processus échoue (Typed property mysqli::$connect_errno must not be accessed before initialization) !!!&lt;br /&gt;
&lt;br /&gt;
Le bordel n&#039;arrive pas à utiliser ssl... et plante : tourne en boucle sur la page de connection&lt;br /&gt;
&lt;br /&gt;
tentative de lien dans le dossier /var/www/localhost/htdocs/wp-includes/certificates/ de wp&lt;br /&gt;
/etc/letsencrypt/live/lesitadom.fr/fullchain.pem&lt;br /&gt;
&lt;br /&gt;
# ln -s proxy.lxd/etc/letsencrypt/live/lesitadom.fr/fullchain.pem /var/www/localhost/htdocs/wp-includes/certificates/lesitadom.pem&lt;br /&gt;
&lt;br /&gt;
***************** Ça veut pas. On essaye avec une autre version de WP (6.8) ********************&lt;br /&gt;
Marche pas non plus, et en plus, c&#039;est en anglais et pas de choix de langue... Y&#039;a un truc qui merde dès le départ : la mise en page est foireuse...&lt;br /&gt;
&lt;br /&gt;
on recommence avec la version en français (6.8)&lt;br /&gt;
&lt;br /&gt;
Règlage des droits sur apache:www-data (chown -R apache:www-data)&lt;br /&gt;
Contenu de wordpress à la racine&lt;br /&gt;
Adresse &amp;quot;lesitadom.fr&amp;quot; (proxy)&lt;br /&gt;
Suppression des tables des instal précédentes (phpmyadmin)&lt;br /&gt;
&lt;br /&gt;
Affichage touours aussi lamentable, comme si la feuille de style n&#039;était pas prise en compte...&lt;br /&gt;
&lt;br /&gt;
Les tables se créent, mais pau moment de la connexion :&lt;br /&gt;
&lt;br /&gt;
Les informations que vous êtes sur le point de soumettre ne sont pas sécurisées&lt;br /&gt;
&lt;br /&gt;
Et on revient au formulaire&lt;br /&gt;
&lt;br /&gt;
************** On n&#039;est pas couchés ! *******************&lt;br /&gt;
&lt;br /&gt;
Recherche sur internet : worpress derrière un proxy inverse :&lt;br /&gt;
&lt;br /&gt;
Dans wp-config.php, ajouter :&lt;br /&gt;
&lt;br /&gt;
if ( (!empty( $_SERVER[&#039;HTTP_X_FORWARDED_HOST&#039;])) ||&lt;br /&gt;
      (!empty( $_SERVER[&#039;HTTP_X_FORWARDED_FOR&#039;])) ) {&lt;br /&gt;
      $_SERVER[&#039;HTTPS&#039;] = &#039;activé&#039;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Et put&#039; ça marche !!!!&lt;br /&gt;
&lt;br /&gt;
...plus !&lt;br /&gt;
J&#039;ai re-modifié la config du proxy et ça a cassé le bastringue... Le site donnait ça, en plus...&lt;br /&gt;
&lt;br /&gt;
serveur {&lt;br /&gt;
    listen 443 SSL ;&lt;br /&gt;
    server_name foo.bar www.foo.bar;&lt;br /&gt;
    location / {&lt;br /&gt;
        proxy_pass http://10.0.80.32/;&lt;br /&gt;
        proxy_set_header X-Forwarded-Host $host;&lt;br /&gt;
	proxy_set_header X-Forwarded-Server $hôte ;&lt;br /&gt;
	proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;&lt;br /&gt;
	proxy_set_header X-Forwarded-Proto $scheme;&lt;br /&gt;
	proxy_set_header X-Real-IP $remote_addr;&lt;br /&gt;
	proxy_set_header Hôte $host ;&lt;br /&gt;
    }&lt;br /&gt;
    certificat_ssl /etc/letsencrypt/live/foo.bar/fullchain.pem;&lt;br /&gt;
    ssl_certificate_key /etc/letsencrypt/live/foo.bar/privkey.pem;&lt;br /&gt;
    include /etc/letsencrypt/options-ssl-nginx.conf ;&lt;br /&gt;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;&lt;br /&gt;
}&lt;br /&gt;
serveur {&lt;br /&gt;
    server_name foo.bar www.foo.bar;&lt;br /&gt;
    return 301 https://foo.bar$request_uri ;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
adresse utilisée lors de l&#039;instal : lesitadom.fr avec réglage du proxy =&amp;gt; ok&lt;br /&gt;
Changement d&#039;adresse =&amp;gt; ko&lt;br /&gt;
Le fourbi doit laisser des traces de l&#039;adresse du site pendant l&#039;instal...&lt;br /&gt;
&lt;br /&gt;
Modifier : table wp-options, siteurl et home&lt;br /&gt;
&lt;br /&gt;
Ok&lt;br /&gt;
&lt;br /&gt;
************** erreur &amp;quot;La réponse n’est pas une réponse JSON valide&amp;quot; lors de la modification d&#039;un article ****************************&lt;br /&gt;
Modifier apache2 :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Directory &amp;quot;/var/www/localhost/htdocs&amp;quot;&amp;gt;                                     &lt;br /&gt;
...                           &lt;br /&gt;
    #                                                                 &lt;br /&gt;
    # AllowOverride controls what directives may be placed in .htaccess files.&lt;br /&gt;
    # It can be &amp;quot;All&amp;quot;, &amp;quot;None&amp;quot;, or any combination of the keywords:&lt;br /&gt;
    #   AllowOverride FileInfo AuthConfig Limit                     &lt;br /&gt;
    #                                                                          &lt;br /&gt;
    AllowOverride All                                       				&amp;lt;= C&#039;est ici ! &lt;br /&gt;
...                                  &lt;br /&gt;
&amp;lt;/Directory&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
Changer les droits sur .htaccess :&lt;br /&gt;
# chmod 644 /var/www/localhost/htdocs/.htaccess&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
************** Installation des outils ***********************&lt;br /&gt;
&lt;br /&gt;
À partir du dossier wordress de l&#039;école téléchargé en guise de sauvegarde...&lt;br /&gt;
&lt;br /&gt;
Thème : nisarg child&lt;br /&gt;
&lt;br /&gt;
Extensions :&lt;br /&gt;
Installées :&lt;br /&gt;
	- Advanced Accordion Gutenberg Block&lt;br /&gt;
	- advanced-iframe			-&amp;gt; problème : voir la config&lt;br /&gt;
	- PDF Viewer Block pour Gutenberg&lt;br /&gt;
	- classic-editor			-&amp;gt; installé - voir si activation&lt;br /&gt;
	- The Events Calendar&lt;br /&gt;
	- h5p					-&amp;gt; voir plugin Dashboard for Pressbooks and H5P et SNORDIAN&#039;s H5P Resize Pulse&lt;br /&gt;
	- ml-slider				-&amp;gt; diaporamas&lt;br /&gt;
	- shortcodes-ultimate			-&amp;gt; excellent !&lt;br /&gt;
	- smart-slider-3			-&amp;gt; ! Erreur à l&#039;activation ! création de diaporamas : voir si pas doublon avec ml-slider&lt;br /&gt;
	- tablepress				-&amp;gt; créer des tableaux&lt;br /&gt;
	- wp-miniaudioplayer			-&amp;gt; pour lire les mp3&lt;br /&gt;
	- wp-quicklatex				-&amp;gt; pour des formules math en latex&lt;br /&gt;
	- wp-statistics				-&amp;gt; statistiques de visites&lt;br /&gt;
&lt;br /&gt;
Ignorées :&lt;br /&gt;
	- advanced-iframe-custom	-&amp;gt; Voir Advanced Custom Fields&lt;br /&gt;
	- akismet			-&amp;gt; Anti-spam&lt;br /&gt;
	- algori-pdf-viewer		-&amp;gt; remplacé par PDF Viewer Block pour Gutenberg&lt;br /&gt;
	- antispam-bee&lt;br /&gt;
	- bbpress			-&amp;gt; forum de discussion&lt;br /&gt;
	- bp-better-messages		-&amp;gt; chat pour buddypress&lt;br /&gt;
	- buddypress			-&amp;gt; réseau social&lt;br /&gt;
	- easy-fancybox			-&amp;gt; Affichier des images, des vidéos... dans une box. Àvoir...&lt;br /&gt;
	- envole_hooks			-&amp;gt; pour envole&lt;br /&gt;
	- eportailwidget		-&amp;gt; idem ?&lt;br /&gt;
	- flynsarmy-iframe-shortcode	-&amp;gt; non trouvée&lt;br /&gt;
	- google-calendar-events	-&amp;gt; remplacée par The Events Calendar&lt;br /&gt;
	- nextend-accordion-menu	-&amp;gt; non trouvé. Voir si le plugin gutempberg fait l&#039;affaire&lt;br /&gt;
	- nextgen-gallery		-&amp;gt; gallerie d&#039;images. Voir si le plugi installé fair l&#039;affaire&lt;br /&gt;
	- page-links-to			-&amp;gt; optimiser les liens : non trouvé, voir si nécessaire&lt;br /&gt;
	- pretty links			-&amp;gt; casse pieds&lt;br /&gt;
	- poshwidget			-&amp;gt; eole&lt;br /&gt;
	- private-wp			-&amp;gt; ? non trouvée&lt;br /&gt;
	- rumbletalk-chat-a-chat-with-themes	-&amp;gt; chat&lt;br /&gt;
	- si-contact-form		-&amp;gt; formulaire de contact : voir contact form 7 si nécessaire&lt;br /&gt;
	- simple-embed-code		-&amp;gt; intégrer du code aux articles : voir code Embed&lt;br /&gt;
	- the-events-calendar		-&amp;gt; double emploi avec extension installée&lt;br /&gt;
	- theme-preview			-&amp;gt; aide à la conception. Àvoir (Toolkit for Block Theme)&lt;br /&gt;
	- tinymce-advanced		-&amp;gt; modifier l&#039;éditeur. Voir si utile&lt;br /&gt;
	- user-role-editor		-&amp;gt; régler les autorisations&lt;br /&gt;
	- vc-tabs			-&amp;gt; pas trouvée ?&lt;br /&gt;
	- visual-form-builder		-&amp;gt; création de formulaire&lt;br /&gt;
	- wpdirauth			-&amp;gt; ldap&lt;br /&gt;
	- wp-event-manager		-&amp;gt; double emploi&lt;br /&gt;
	- wp-hide-dashboard		-&amp;gt; non trouvée... à revoir&lt;br /&gt;
	- wp-polls			-&amp;gt; créer des sondages&lt;br /&gt;
	- wp-sentry			-&amp;gt; tracer les erruers php et navigation&lt;br /&gt;
	- wp-smushit			-&amp;gt; optimisation d&#039;images. voir si utile&lt;br /&gt;
	- wp-user-avatar		-&amp;gt; création d&#039;avatars pour les utilisateurs&lt;/div&gt;</summary>
		<author><name>Domi</name></author>
	</entry>
	<entry>
		<id>https://wiki.lesitadom.fr/index.php?title=Tables&amp;diff=1647</id>
		<title>Tables</title>
		<link rel="alternate" type="text/html" href="https://wiki.lesitadom.fr/index.php?title=Tables&amp;diff=1647"/>
		<updated>2025-06-29T10:25:48Z</updated>

		<summary type="html">&lt;p&gt;Domi : /* Installation de &amp;#039;Tables&amp;#039; */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;----&lt;br /&gt;
=Installation du serveur web=&lt;br /&gt;
&lt;br /&gt;
:*Création du conteneur alpine léger&lt;br /&gt;
 apk update /upgrade&lt;br /&gt;
 apk add apache2 php83-apache2 apache2-ctl php83-gd et php83-zlib&lt;br /&gt;
&#039;&#039;&#039;apache2-ctl&#039;&#039;&#039; permet de lister les modules installés avec &lt;br /&gt;
 apachectl -M&lt;br /&gt;
&#039;&#039;&#039;php83-gd&#039;&#039;&#039; et &#039;&#039;&#039;php83-zlib&#039;&#039;&#039; sont nécessaires pour faire fonctionner &#039;&#039;&#039;tables&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
:*Création du fichier /etc/apache2/conf.d/remoteip.conf avec&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
/etc/apache2/conf.d/&#039;&#039;&#039;remoteip.conf&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
  RemoteIPHeader X-Real-IP&lt;br /&gt;
  RemoteIPTrustedProxy proxy.lxd &lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
:*Modification de /etc/apache2/httpd.conf - décommenter :&lt;br /&gt;
 LoadModule remoteip_module modules/mod_remoteip.so&lt;br /&gt;
:*Relancer nginx dans le conteneur &#039;&#039;&#039;proxy&#039;&#039;&#039; : &lt;br /&gt;
 systemctl restart nginx&lt;br /&gt;
:*Vérifier le fonctionnement et les modules de php &lt;br /&gt;
::Supprimer /var/www/localhost/htdocs/&#039;&#039;&#039;index.html&#039;&#039;&#039; et le remplacer par :&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
/var/www/localhost/htdocs/&#039;&#039;&#039;index.php&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;?php&lt;br /&gt;
  phpinfo();&lt;br /&gt;
  ?&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Afficher la page dans un navigateur à l&#039;adresse du serveur.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Installation de &#039;Tables&#039;=&lt;br /&gt;
&lt;br /&gt;
:*Copie des fichiers/dossiers dans /tmp du conteneur :&lt;br /&gt;
 lxc file push /home/domi/Documents/transfertTables/* tables/tmp/ -pr&lt;br /&gt;
&lt;br /&gt;
:*Déplacement des fichiers/dossiers dans .../htdocs/&lt;br /&gt;
 mv /tmp/* /var/www/localhost/htdocs/&lt;br /&gt;
 rc-service apache2 reload&lt;br /&gt;
&lt;br /&gt;
:*Corriger &#039;&#039;&#039;phpToPDF.php&#039;&#039;&#039; : &lt;br /&gt;
AddPage($orientation = &#039;&#039;, $size = &#039;&#039;, $rotation = 0) (il manque deux arguments)&lt;br /&gt;
:* Corriger &#039;&#039;&#039;pdf1.php&#039;&#039;&#039; : &lt;br /&gt;
supprimer les lignes vides (au moins au début du document)&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;(Je suppose qu&#039;il y a une option pour ignorer ce genre d&#039;erreurs sur le serveur virtuel...)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=Goaccess (analyse des logs d&#039;accès)=&lt;br /&gt;
&lt;br /&gt;
:*Installation de goaccess :&lt;br /&gt;
 apk add goaccess&lt;/div&gt;</summary>
		<author><name>Domi</name></author>
	</entry>
	<entry>
		<id>https://wiki.lesitadom.fr/index.php?title=Organigramme_d%27installation&amp;diff=1646</id>
		<title>Organigramme d&#039;installation</title>
		<link rel="alternate" type="text/html" href="https://wiki.lesitadom.fr/index.php?title=Organigramme_d%27installation&amp;diff=1646"/>
		<updated>2025-06-29T10:23:57Z</updated>

		<summary type="html">&lt;p&gt;Domi : /* Conteneur tables : Voir la page */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Les outils ==&lt;br /&gt;
=== Conteneur proxy : [[Proxy|Voir la page]] ===&lt;br /&gt;
::* Création du conteneur&lt;br /&gt;
::* Installation et configuration de nginx&lt;br /&gt;
::* Installation de certbot pour let&#039;s encrypt&lt;br /&gt;
::* Voir pour installer des outils de sécurité (fail2ban,...)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
=== Conteneur Mariadb : [[Mariadb|Voir la page]] ===&lt;br /&gt;
::* Création du conteneur&lt;br /&gt;
::* Installation de mariadb&lt;br /&gt;
::* Configuration&lt;br /&gt;
::* Création d&#039;un utilisateur&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
=== Conteneur PhpMyadmin : [[Phpma|Voir la page]] ===&lt;br /&gt;
::* Création du conteneur&lt;br /&gt;
::* Installation d&#039;apache2 et de phpmyadmin&lt;br /&gt;
::* Configuration d&#039;apache2 et de phpmyadmin&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Les applis ==&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
=== Conteneur tables : [[Tables|Voir la page]] ===&lt;br /&gt;
:*Installation du serveur web avec apache&lt;br /&gt;
:*Installation de &#039;&#039;tables&#039;&#039; et corrections des fichiers&lt;br /&gt;
:*Installation et configuration de goaccess&lt;br /&gt;
&lt;br /&gt;
=== Conteneur pmb : [[Pmb|Voir la page]]===&lt;br /&gt;
&#039;&#039;(cf pmb sur alpine léger (historique dans pmb sur alpine lourd)&#039;&#039;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Conteneur wiki : [[Wiki|Voir la page]] ===&lt;br /&gt;
::* Création d&#039;un utilisateur et d&#039;une base de donnée vide pour le wiki&lt;br /&gt;
::* Transfert de la base de données&lt;br /&gt;
::* Création du conteneur&lt;br /&gt;
::* Installation du serveur web&lt;br /&gt;
::* Installation de la nouvelle version de mediawiki&lt;br /&gt;
::* Initialisation de l&#039;application&lt;br /&gt;
::* Modification de LocalSettings.php&lt;br /&gt;
::* Récupération du contenu sur l&#039;ancien serveur et transfert des données&lt;br /&gt;
::* Corrections&lt;br /&gt;
&lt;br /&gt;
=== Conteneur wp : [[Wp|Voir la page]] ===&lt;br /&gt;
&#039;&#039;(cf wordpress sur alpine léger mais sauter à la fin. Mariadb et phpmyadmin dans d&#039;autres conteneurs...)&#039;&#039;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Stockage et sauvegardes ==&lt;br /&gt;
création d&#039;un volume pour les sauvegardes :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; lxc storage volume create default sauvegarde-lxc size=50GB&lt;br /&gt;
&lt;br /&gt;
Montage du volume dans chaque conteneur :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; lxc config device add &amp;lt;nom du conteneur&amp;gt; sauvegarde-mount disk source=sauvegarde-lxc pool=default path=/sauvegardes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
logiciel : borg sauvegarde et rétention de données. Comte chez Kiki, à pousser en ssh.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sécurisation ==&lt;br /&gt;
=== Mises à jour automatiques [[Mises à jour automatiques|Voir la page]]===&lt;br /&gt;
&lt;br /&gt;
Afin d&#039;automatiser la mise à jour des conteneurs, on crée un script qui va&lt;br /&gt;
:*Mettre à jour les conteneurs alpine en fonctionnement&lt;br /&gt;
:*Créer un fichier de log&lt;br /&gt;
:*Corriger le fichier de log pour ne garder la trace que des deux dernières mises à jour&lt;br /&gt;
:*Envoyer un mail d&#039;alerte en cas d&#039;erreur&lt;br /&gt;
:*Redémarrer les conteneurs en prenant soin de démarrer le conteneur &#039;&#039;&#039;proxy&#039;&#039;&#039; en dernier&lt;br /&gt;
&lt;br /&gt;
===Sauvegardes automatiques des données des conteneurs web===&lt;br /&gt;
On va programmer une sauvegarde automatique pour chaque conteneur web, ainsi que pour le conteneur &#039;&#039;&#039;mariadb&#039;&#039;&#039;. Ces sauvegardes se feront dans un espace commun qui sera à son tour sauvegardé sur un site distant à intervalles réguliers en gérant la rotation des sauvegardes.&amp;lt;br&amp;gt;&lt;br /&gt;
Les conteneurs :&lt;br /&gt;
::* mariadb&lt;br /&gt;
::* wiki&lt;br /&gt;
::* pmb&lt;br /&gt;
::* wp&lt;br /&gt;
bénéficieront de ce mécanisme.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour les conteneurs &#039;&#039;&#039;proxy&#039;&#039;&#039;, &#039;&#039;&#039;phpma&#039;&#039;&#039; et &#039;&#039;&#039;tables&#039;&#039;&#039;, une simple sauvegarde à la main suffira.&amp;lt;br&amp;gt;&lt;br /&gt;
On commence par créer un volume de 50Gb et on le monte dans les conteneurs concernés :&lt;br /&gt;
 lxc storage volume create default sauvegarde-lxc size=50GB&lt;br /&gt;
 lxc config device add wp sauvegarde-mount disk source=sauvegarde-lxc pool=default path=/sauvegardes&lt;br /&gt;
 lxc config device add wiki sauvegarde-mount disk source=sauvegarde-lxc pool=default path=/sauvegardes&lt;br /&gt;
 lxc config device add mariadb sauvegarde-mount disk source=sauvegarde-lxc pool=default path=/sauvegardes&lt;br /&gt;
 lxc config device add pmb sauvegarde-mount disk source=sauvegarde-lxc pool=default path=/sauvegardes&lt;br /&gt;
====mariadb====&lt;br /&gt;
:* On commence par créer un utilisateur spécifique à la sauvegarde.&amp;lt;br&amp;gt; Sous phpMyAdmin, création de l&#039;utilisateur &#039;&#039;backup_user&#039;&#039; avec les privilèges &#039;&#039;SELECT&#039;&#039; et &#039;&#039;LOCK TABLES&#039;&#039; pour les tables &#039;&#039;pmb&#039;&#039;, &#039;&#039;wiki&#039;&#039; et &#039;&#039;wordpress&#039;&#039;.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
:* Création du script de sauvegarde des tables&amp;lt;br&amp;gt;On sauvegarde les tables &#039;&#039;pmb&#039;&#039;, &#039;&#039;wordpress&#039;&#039; et &#039;&#039;wiki&#039;&#039; en générant un fichier de log dans /var/log/&#039;&#039;&#039;backup_mariadb.log&#039;&#039;&#039;.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;/usr/local/bin/backup_mariadb.sh&#039;&#039;&#039; :&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 DATE=$(date +%Y%m%d_%H%M)&lt;br /&gt;
 OUTPUT_FILE=&amp;quot;/sauvegardes/db_backup_${DATE}.sql.gz&amp;quot;&lt;br /&gt;
 USER=&amp;quot;backup_user&amp;quot;  &amp;lt;br&amp;gt;PASSWORD=&amp;quot;*********&amp;quot; # &#039;&#039;Mot de passe de backup_user&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 # Liste des bases de données à sauvegarder&lt;br /&gt;
 DATABASES=&amp;quot;pmb wiki wordpress&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 # Exporte chaque base de données et la compresse&lt;br /&gt;
 for DB in $DATABASES; do&lt;br /&gt;
   echo &amp;quot;Sauvegarde de la base de données : $DB&amp;quot;&lt;br /&gt;
   mysqldump -u &amp;quot;$USER&amp;quot; -p&amp;quot;$PASSWORD&amp;quot; &amp;quot;$DB&amp;quot; | gzip &amp;gt;&amp;gt; &amp;quot;$OUTPUT_FILE&amp;quot;&lt;br /&gt;
 done&lt;br /&gt;
 &lt;br /&gt;
 chmod 600 &amp;quot;$OUTPUT_FILE&amp;quot; # Restreindre les permissions&lt;br /&gt;
 echo &amp;quot;Sauvegarde des bases de données terminée : $OUTPUT_FILE&amp;quot; &amp;gt;&amp;gt; /var/log/backup_mariadb.log&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
:* Rendre le script exécutable :&amp;lt;br&amp;gt;&lt;br /&gt;
 chmod +x /usr/local/bin/backup_mariadb.sh&amp;lt;br&amp;gt;&lt;br /&gt;
:* Automatiser le script le samedi à 2h du matin :&amp;lt;br&amp;gt;Avec &#039;&#039;&#039;crontab -e&#039;&#039;&#039;, ajouter la ligne :&lt;br /&gt;
 0 2 * * 6 /usr/local/bin/backup_mariadb.sh&lt;br /&gt;
&lt;br /&gt;
====wiki====&lt;br /&gt;
MediaWiki installe par défaut des extensions et des skins. La sauvegarde de ces extension alourdit considérablement le fichier. Le script parcourt le dossier pour les exclure et ne tenir compte que de celles nouvellement installées.&amp;lt;br&amp;gt;&lt;br /&gt;
Il crée également un fichier de log /var/log/&#039;&#039;&#039;backup_wiki.log&#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
/usr/local/bin/&#039;&#039;&#039;backup_wiki.sh&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 DATE=$(date +%Y%m%d_%H%M)&lt;br /&gt;
 OUTPUT_FILE=&amp;quot;/sauvegardes/wiki_backup_${DATE}.tar.gz&amp;quot;&lt;br /&gt;
 MEDIAWIKI_ROOT=&amp;quot;/var/www/localhost/htdocs/&amp;quot;&lt;br /&gt;
 BASE_EXTENSIONS=&amp;quot;AbuseFilter CategoryTree Cite CiteThisPage CodeEditor ConfirmEdit DiscussionTools Echo Gadgets ImageMap InputBox Interwiki Linter LoginNotify Math MultimediaViewer Nuke OATHAuth PageImages ParserFunctions PdfHandler Poem ReplaceText Scribunto SecureLinkFixer SpamBlacklist SyntaxHighlight_GeSHi TemplateData TextExtracts Thanks TitleBlacklist VisualEditor WikiEditor&amp;quot;&lt;br /&gt;
 FILES_TO_BACKUP=&amp;quot;images&lt;br /&gt;
 LocalSettings.php&lt;br /&gt;
 extensions-custom/&lt;br /&gt;
 skins-custom/&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 echo &amp;quot;--- Début du script ---&amp;quot;&lt;br /&gt;
 echo &amp;quot;Date de la sauvegarde : $DATE&amp;quot;&lt;br /&gt;
 echo &amp;quot;Fichier de sortie : $OUTPUT_FILE&amp;quot;&lt;br /&gt;
 echo &amp;quot;Racine de MediaWiki : $MEDIAWIKI_ROOT&amp;quot;&lt;br /&gt;
 echo &amp;quot;Extensions de base : $BASE_EXTENSIONS&amp;quot;&lt;br /&gt;
 echo &amp;quot;Fichiers de base à sauvegarder : $FILES_TO_BACKUP&amp;quot;&lt;br /&gt;
 echo &amp;quot;---&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 cd &amp;quot;$MEDIAWIKI_ROOT&amp;quot; || { echo &amp;quot;Erreur lors du changement de répertoire vers $MEDIAWIKI_ROOT&amp;quot;; exit 1; }&lt;br /&gt;
 echo &amp;quot;Répertoire courant : $(pwd)&amp;quot;&lt;br /&gt;
 echo &amp;quot;--- Identification des extensions personnalisées ---&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 echo &amp;quot;Création du fichier temporaire /tmp/backup_list.txt&amp;quot;&lt;br /&gt;
 echo &amp;quot;$FILES_TO_BACKUP&amp;quot; &amp;gt; /tmp/backup_list.txt&lt;br /&gt;
 cat /tmp/backup_list.txt | while IFS= read -r LINE; do&lt;br /&gt;
   echo &amp;quot;Ajout de &#039;$LINE&#039; à la liste de sauvegarde.&amp;quot;&lt;br /&gt;
 done&lt;br /&gt;
 echo &amp;quot;---&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 echo &amp;quot;Traitement des extensions dans $MEDIAWIKI_ROOT/extensions/&amp;quot;&lt;br /&gt;
 for EXTENSION_DIR in &amp;quot;$MEDIAWIKI_ROOT&amp;quot;extensions/*; do&lt;br /&gt;
     if [ -d &amp;quot;$EXTENSION_DIR&amp;quot; ]; then&lt;br /&gt;
         EXTENSION_NAME=$(basename &amp;quot;$EXTENSION_DIR&amp;quot;)&lt;br /&gt;
         echo &amp;quot;Extension trouvée : $EXTENSION_NAME \(chemin complet : $EXTENSION_DIR\)&amp;quot;&lt;br /&gt;
         IS_BASE=0&lt;br /&gt;
         for BASE_EXT in $BASE_EXTENSIONS; do&lt;br /&gt;
             if [ &amp;quot;$EXTENSION_NAME&amp;quot; = &amp;quot;$BASE_EXT&amp;quot; ]; then&lt;br /&gt;
                 IS_BASE=1&lt;br /&gt;
                 echo &amp;quot;  &#039;$EXTENSION_NAME&#039; est une extension de base.&amp;quot;&lt;br /&gt;
                 break&lt;br /&gt;
             fi&lt;br /&gt;
         done&lt;br /&gt;
         if [ &amp;quot;$IS_BASE&amp;quot; -eq 0 ]; then&lt;br /&gt;
             echo &amp;quot;  &#039;$EXTENSION_NAME&#039; est une extension personnalisée. Ajout à la liste de sauvegarde.&amp;quot;&lt;br /&gt;
             echo &amp;quot;extensions/$EXTENSION_NAME&amp;quot; &amp;gt;&amp;gt; /tmp/backup_list.txt&lt;br /&gt;
         fi&lt;br /&gt;
     fi&lt;br /&gt;
 done&lt;br /&gt;
 echo &amp;quot;--- Liste de sauvegarde complète ---&amp;quot;&lt;br /&gt;
 cat /tmp/backup_list.txt&lt;br /&gt;
 echo &amp;quot;---&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 echo &amp;quot;Création de l&#039;archive : $OUTPUT_FILE&amp;quot;&lt;br /&gt;
 tar czf &amp;quot;$OUTPUT_FILE&amp;quot; -T /tmp/backup_list.txt --exclude=&#039;./tmp/backup_list.txt&#039;&lt;br /&gt;
 echo &amp;quot;Commande tar exécutée.&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 if [ -f &amp;quot;$OUTPUT_FILE&amp;quot; ]; then&lt;br /&gt;
     chmod 600 &amp;quot;$OUTPUT_FILE&amp;quot;&lt;br /&gt;
     echo &amp;quot;Permissions du fichier de sauvegarde mises à 600.&amp;quot;&lt;br /&gt;
     echo &amp;quot;Sauvegarde des données essentielles et des extensions personnalisées de MediaWiki terminée : $OUTPUT_FILE&amp;quot; &amp;gt;&amp;gt; /var/log/backup_wiki.log&lt;br /&gt;
     echo &amp;quot;--- Fin du script ---&amp;quot;&lt;br /&gt;
 else&lt;br /&gt;
     echo &amp;quot;Erreur : Le fichier de sauvegarde $OUTPUT_FILE n&#039;a pas été créé.&amp;quot;&lt;br /&gt;
     echo &amp;quot;--- Fin du script \(avec erreur\) ---&amp;quot;&lt;br /&gt;
     exit 1&lt;br /&gt;
 fi&lt;br /&gt;
 &lt;br /&gt;
 rm /tmp/backup_list.txt&lt;br /&gt;
 echo &amp;quot;Fichier temporaire /tmp/backup_list.txt supprimé.&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;NB :&#039;&#039;&#039; Les nombreuses lignes &#039;&#039;echo&#039;&#039; ont été ajoutées à des fin de corrections en cours de programmation et peuvent être simplifiées...&lt;br /&gt;
:* Rendre le script exécutable :&amp;lt;br&amp;gt;&lt;br /&gt;
 chmod +x /usr/local/bin/backup_wiki.sh&amp;lt;br&amp;gt;&lt;br /&gt;
:* Automatiser le script le samedi à 3h30 du matin :&amp;lt;br&amp;gt;Avec &#039;&#039;&#039;crontab -e&#039;&#039;&#039;, ajouter la ligne :&lt;br /&gt;
 30  3  *  *  6  /usr/local/bin/backup_wiki.sh&lt;br /&gt;
&lt;br /&gt;
====wp====&lt;br /&gt;
====pmb====&lt;/div&gt;</summary>
		<author><name>Domi</name></author>
	</entry>
	<entry>
		<id>https://wiki.lesitadom.fr/index.php?title=Pmb&amp;diff=1645</id>
		<title>Pmb</title>
		<link rel="alternate" type="text/html" href="https://wiki.lesitadom.fr/index.php?title=Pmb&amp;diff=1645"/>
		<updated>2025-05-16T07:21:18Z</updated>

		<summary type="html">&lt;p&gt;Domi : /* Pmb sur alpine léger sans yaz */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Pmb sur alpine léger sans yaz =&lt;br /&gt;
&#039;&#039;&#039;Pré-requis :&#039;&#039;&#039;Conteneur mariadb fonctionnel et accessible à distance.&lt;br /&gt;
== Le serveur web : apache et php ==&lt;br /&gt;
Création du conteneur, mise à jour des paquets&lt;br /&gt;
&lt;br /&gt;
 lxc lauch local:alpineLe pmb&lt;br /&gt;
 lxc shell pmb &lt;br /&gt;
 apk update&lt;br /&gt;
 apk upgrade&lt;br /&gt;
	&lt;br /&gt;
Installation du serveur web : apache + php83 et des extensions :&lt;br /&gt;
&lt;br /&gt;
 apk add apache2 php83 php83-apache2 apache2-ctl mlocate&lt;br /&gt;
 apk add php83-bz2 php83-curl php83-dom php83-fileinfo php83-gd php83-iconv php83-intl php83-mbstring php83-mysqli php83-openssl php83-session php83-soap php83-sockets php83-sqlite3 php83-xml php83-xsl php83-zip php83-simplexml&lt;br /&gt;
 &lt;br /&gt;
Ajouter apache2 au démarage automatique :&lt;br /&gt;
 rc-update add apache2&lt;br /&gt;
&lt;br /&gt;
Règlages des paramètres PHP (dans /etc/php83/php.ini) :&lt;br /&gt;
  expose_php		Off		On &lt;br /&gt;
  max_execution_time	&amp;gt;= 300		30 &lt;br /&gt;
  max_input_vars		&amp;gt;= 50000	1000 &lt;br /&gt;
  memory_limit		&amp;gt;= 256M		128M &lt;br /&gt;
  post_max_size		&amp;gt;= 64M		8M &lt;br /&gt;
  upload_max_filesize	&amp;gt;= 64M		2M &lt;br /&gt;
&lt;br /&gt;
== Installer l&#039;application ==&lt;br /&gt;
Supprimer le fichier par défaut d&#039;apache&lt;br /&gt;
 rm /var/www/localhost/htdocs/index.html&lt;br /&gt;
Copie du fichier dans tmp (à partir de l&#039;hôte) :&lt;br /&gt;
 lxc file push /tmp/pmb...patatipatata.zip pmb/tmp/&lt;br /&gt;
Dézipper le contenu, le migrer à la racine et définirle propriétaire :&lt;br /&gt;
 lxc shell pmb&lt;br /&gt;
 unzip /tmp/pmb8.0.1.5.zip -d /var/www/localhost/htdocs&lt;br /&gt;
 mv /var/www/localhost/htdocs/pmb/* /var/www/localhost/htdocs/&lt;br /&gt;
 rm -R /var/www/localhost/htdocs/pmb&lt;br /&gt;
 chown -R apache:www-data /var/www/localhost/htdocs/*&lt;br /&gt;
	&lt;br /&gt;
== Réglage du proxy ==&lt;br /&gt;
Se placer dans le conteneur proxy et régler la redirection dans proxy.conf&lt;br /&gt;
 server {&lt;br /&gt;
        listen 80 proxy_protocol;&lt;br /&gt;
        listen [::]:80 proxy_protocol;&lt;br /&gt;
 &lt;br /&gt;
        server_name bcd.lesitadom.fr;&lt;br /&gt;
 &lt;br /&gt;
        location / {&lt;br /&gt;
                include /etc/nginx/proxy_params;&lt;br /&gt;
                proxy_pass http://pmb.lxd;&lt;br /&gt;
        }&lt;br /&gt;
        real_ip_header proxy_protocol;&lt;br /&gt;
        set_real_ip_from 127.0.0.1;&lt;br /&gt;
 }&lt;br /&gt;
Recharger le proxy :&lt;br /&gt;
 rc-service nginx restart&lt;br /&gt;
&lt;br /&gt;
== Récupération de l&#039;ancienne base de données==&lt;br /&gt;
La base de donnée existe déjà. Copie de db_param.inc.php et db_param.inc.php&amp;lt;br&amp;gt;&lt;br /&gt;
Ça fonctionne, mais il faut régler le problème des images.&lt;br /&gt;
&lt;br /&gt;
Copie du dossier perso dans le dossier images&amp;lt;br&amp;gt;&lt;br /&gt;
Réglage du propriétaire&amp;lt;br&amp;gt;&lt;br /&gt;
Création du dossier images/cache&amp;lt;br&amp;gt;&lt;br /&gt;
Réglage propriétaire&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
************************************************&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les liens sur les noms d&#039;auteur ne fonctionnent pas alors que ça marche en mode texte...&lt;/div&gt;</summary>
		<author><name>Domi</name></author>
	</entry>
	<entry>
		<id>https://wiki.lesitadom.fr/index.php?title=Organigramme_d%27installation&amp;diff=1644</id>
		<title>Organigramme d&#039;installation</title>
		<link rel="alternate" type="text/html" href="https://wiki.lesitadom.fr/index.php?title=Organigramme_d%27installation&amp;diff=1644"/>
		<updated>2025-05-15T17:33:50Z</updated>

		<summary type="html">&lt;p&gt;Domi : /* Mises à jour automatiques Voir la page */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Les outils ==&lt;br /&gt;
=== Conteneur proxy : [[Proxy|Voir la page]] ===&lt;br /&gt;
::* Création du conteneur&lt;br /&gt;
::* Installation et configuration de nginx&lt;br /&gt;
::* Installation de certbot pour let&#039;s encrypt&lt;br /&gt;
::* Voir pour installer des outils de sécurité (fail2ban,...)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
=== Conteneur Mariadb : [[Mariadb|Voir la page]] ===&lt;br /&gt;
::* Création du conteneur&lt;br /&gt;
::* Installation de mariadb&lt;br /&gt;
::* Configuration&lt;br /&gt;
::* Création d&#039;un utilisateur&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
=== Conteneur PhpMyadmin : [[Phpma|Voir la page]] ===&lt;br /&gt;
::* Création du conteneur&lt;br /&gt;
::* Installation d&#039;apache2 et de phpmyadmin&lt;br /&gt;
::* Configuration d&#039;apache2 et de phpmyadmin&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Les applis ==&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
=== Conteneur tables : [[Tables|Voir la page]] ===&lt;br /&gt;
:*Installation du serveur web avec apache&lt;br /&gt;
:*Installation de &#039;&#039;tables&#039;&#039; et corrections des fichiers&lt;br /&gt;
&lt;br /&gt;
=== Conteneur pmb : [[Pmb|Voir la page]]===&lt;br /&gt;
&#039;&#039;(cf pmb sur alpine léger (historique dans pmb sur alpine lourd)&#039;&#039;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Conteneur wiki : [[Wiki|Voir la page]] ===&lt;br /&gt;
::* Création d&#039;un utilisateur et d&#039;une base de donnée vide pour le wiki&lt;br /&gt;
::* Transfert de la base de données&lt;br /&gt;
::* Création du conteneur&lt;br /&gt;
::* Installation du serveur web&lt;br /&gt;
::* Installation de la nouvelle version de mediawiki&lt;br /&gt;
::* Initialisation de l&#039;application&lt;br /&gt;
::* Modification de LocalSettings.php&lt;br /&gt;
::* Récupération du contenu sur l&#039;ancien serveur et transfert des données&lt;br /&gt;
::* Corrections&lt;br /&gt;
&lt;br /&gt;
=== Conteneur wp : [[Wp|Voir la page]] ===&lt;br /&gt;
&#039;&#039;(cf wordpress sur alpine léger mais sauter à la fin. Mariadb et phpmyadmin dans d&#039;autres conteneurs...)&#039;&#039;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Stockage et sauvegardes ==&lt;br /&gt;
création d&#039;un volume pour les sauvegardes :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; lxc storage volume create default sauvegarde-lxc size=50GB&lt;br /&gt;
&lt;br /&gt;
Montage du volume dans chaque conteneur :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; lxc config device add &amp;lt;nom du conteneur&amp;gt; sauvegarde-mount disk source=sauvegarde-lxc pool=default path=/sauvegardes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
logiciel : borg sauvegarde et rétention de données. Comte chez Kiki, à pousser en ssh.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sécurisation ==&lt;br /&gt;
=== Mises à jour automatiques [[Mises à jour automatiques|Voir la page]]===&lt;br /&gt;
&lt;br /&gt;
Afin d&#039;automatiser la mise à jour des conteneurs, on crée un script qui va&lt;br /&gt;
:*Mettre à jour les conteneurs alpine en fonctionnement&lt;br /&gt;
:*Créer un fichier de log&lt;br /&gt;
:*Corriger le fichier de log pour ne garder la trace que des deux dernières mises à jour&lt;br /&gt;
:*Envoyer un mail d&#039;alerte en cas d&#039;erreur&lt;br /&gt;
:*Redémarrer les conteneurs en prenant soin de démarrer le conteneur &#039;&#039;&#039;proxy&#039;&#039;&#039; en dernier&lt;br /&gt;
&lt;br /&gt;
===Sauvegardes automatiques des données des conteneurs web===&lt;br /&gt;
On va programmer une sauvegarde automatique pour chaque conteneur web, ainsi que pour le conteneur &#039;&#039;&#039;mariadb&#039;&#039;&#039;. Ces sauvegardes se feront dans un espace commun qui sera à son tour sauvegardé sur un site distant à intervalles réguliers en gérant la rotation des sauvegardes.&amp;lt;br&amp;gt;&lt;br /&gt;
Les conteneurs :&lt;br /&gt;
::* mariadb&lt;br /&gt;
::* wiki&lt;br /&gt;
::* pmb&lt;br /&gt;
::* wp&lt;br /&gt;
bénéficieront de ce mécanisme.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour les conteneurs &#039;&#039;&#039;proxy&#039;&#039;&#039;, &#039;&#039;&#039;phpma&#039;&#039;&#039; et &#039;&#039;&#039;tables&#039;&#039;&#039;, une simple sauvegarde à la main suffira.&amp;lt;br&amp;gt;&lt;br /&gt;
On commence par créer un volume de 50Gb et on le monte dans les conteneurs concernés :&lt;br /&gt;
 lxc storage volume create default sauvegarde-lxc size=50GB&lt;br /&gt;
 lxc config device add wp sauvegarde-mount disk source=sauvegarde-lxc pool=default path=/sauvegardes&lt;br /&gt;
 lxc config device add wiki sauvegarde-mount disk source=sauvegarde-lxc pool=default path=/sauvegardes&lt;br /&gt;
 lxc config device add mariadb sauvegarde-mount disk source=sauvegarde-lxc pool=default path=/sauvegardes&lt;br /&gt;
 lxc config device add pmb sauvegarde-mount disk source=sauvegarde-lxc pool=default path=/sauvegardes&lt;br /&gt;
====mariadb====&lt;br /&gt;
:* On commence par créer un utilisateur spécifique à la sauvegarde.&amp;lt;br&amp;gt; Sous phpMyAdmin, création de l&#039;utilisateur &#039;&#039;backup_user&#039;&#039; avec les privilèges &#039;&#039;SELECT&#039;&#039; et &#039;&#039;LOCK TABLES&#039;&#039; pour les tables &#039;&#039;pmb&#039;&#039;, &#039;&#039;wiki&#039;&#039; et &#039;&#039;wordpress&#039;&#039;.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
:* Création du script de sauvegarde des tables&amp;lt;br&amp;gt;On sauvegarde les tables &#039;&#039;pmb&#039;&#039;, &#039;&#039;wordpress&#039;&#039; et &#039;&#039;wiki&#039;&#039; en générant un fichier de log dans /var/log/&#039;&#039;&#039;backup_mariadb.log&#039;&#039;&#039;.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;/usr/local/bin/backup_mariadb.sh&#039;&#039;&#039; :&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 DATE=$(date +%Y%m%d_%H%M)&lt;br /&gt;
 OUTPUT_FILE=&amp;quot;/sauvegardes/db_backup_${DATE}.sql.gz&amp;quot;&lt;br /&gt;
 USER=&amp;quot;backup_user&amp;quot;  &amp;lt;br&amp;gt;PASSWORD=&amp;quot;*********&amp;quot; # &#039;&#039;Mot de passe de backup_user&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 # Liste des bases de données à sauvegarder&lt;br /&gt;
 DATABASES=&amp;quot;pmb wiki wordpress&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 # Exporte chaque base de données et la compresse&lt;br /&gt;
 for DB in $DATABASES; do&lt;br /&gt;
   echo &amp;quot;Sauvegarde de la base de données : $DB&amp;quot;&lt;br /&gt;
   mysqldump -u &amp;quot;$USER&amp;quot; -p&amp;quot;$PASSWORD&amp;quot; &amp;quot;$DB&amp;quot; | gzip &amp;gt;&amp;gt; &amp;quot;$OUTPUT_FILE&amp;quot;&lt;br /&gt;
 done&lt;br /&gt;
 &lt;br /&gt;
 chmod 600 &amp;quot;$OUTPUT_FILE&amp;quot; # Restreindre les permissions&lt;br /&gt;
 echo &amp;quot;Sauvegarde des bases de données terminée : $OUTPUT_FILE&amp;quot; &amp;gt;&amp;gt; /var/log/backup_mariadb.log&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
:* Rendre le script exécutable :&amp;lt;br&amp;gt;&lt;br /&gt;
 chmod +x /usr/local/bin/backup_mariadb.sh&amp;lt;br&amp;gt;&lt;br /&gt;
:* Automatiser le script le samedi à 2h du matin :&amp;lt;br&amp;gt;Avec &#039;&#039;&#039;crontab -e&#039;&#039;&#039;, ajouter la ligne :&lt;br /&gt;
 0 2 * * 6 /usr/local/bin/backup_mariadb.sh&lt;br /&gt;
&lt;br /&gt;
====wiki====&lt;br /&gt;
MediaWiki installe par défaut des extensions et des skins. La sauvegarde de ces extension alourdit considérablement le fichier. Le script parcourt le dossier pour les exclure et ne tenir compte que de celles nouvellement installées.&amp;lt;br&amp;gt;&lt;br /&gt;
Il crée également un fichier de log /var/log/&#039;&#039;&#039;backup_wiki.log&#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
/usr/local/bin/&#039;&#039;&#039;backup_wiki.sh&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 DATE=$(date +%Y%m%d_%H%M)&lt;br /&gt;
 OUTPUT_FILE=&amp;quot;/sauvegardes/wiki_backup_${DATE}.tar.gz&amp;quot;&lt;br /&gt;
 MEDIAWIKI_ROOT=&amp;quot;/var/www/localhost/htdocs/&amp;quot;&lt;br /&gt;
 BASE_EXTENSIONS=&amp;quot;AbuseFilter CategoryTree Cite CiteThisPage CodeEditor ConfirmEdit DiscussionTools Echo Gadgets ImageMap InputBox Interwiki Linter LoginNotify Math MultimediaViewer Nuke OATHAuth PageImages ParserFunctions PdfHandler Poem ReplaceText Scribunto SecureLinkFixer SpamBlacklist SyntaxHighlight_GeSHi TemplateData TextExtracts Thanks TitleBlacklist VisualEditor WikiEditor&amp;quot;&lt;br /&gt;
 FILES_TO_BACKUP=&amp;quot;images&lt;br /&gt;
 LocalSettings.php&lt;br /&gt;
 extensions-custom/&lt;br /&gt;
 skins-custom/&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 echo &amp;quot;--- Début du script ---&amp;quot;&lt;br /&gt;
 echo &amp;quot;Date de la sauvegarde : $DATE&amp;quot;&lt;br /&gt;
 echo &amp;quot;Fichier de sortie : $OUTPUT_FILE&amp;quot;&lt;br /&gt;
 echo &amp;quot;Racine de MediaWiki : $MEDIAWIKI_ROOT&amp;quot;&lt;br /&gt;
 echo &amp;quot;Extensions de base : $BASE_EXTENSIONS&amp;quot;&lt;br /&gt;
 echo &amp;quot;Fichiers de base à sauvegarder : $FILES_TO_BACKUP&amp;quot;&lt;br /&gt;
 echo &amp;quot;---&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 cd &amp;quot;$MEDIAWIKI_ROOT&amp;quot; || { echo &amp;quot;Erreur lors du changement de répertoire vers $MEDIAWIKI_ROOT&amp;quot;; exit 1; }&lt;br /&gt;
 echo &amp;quot;Répertoire courant : $(pwd)&amp;quot;&lt;br /&gt;
 echo &amp;quot;--- Identification des extensions personnalisées ---&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 echo &amp;quot;Création du fichier temporaire /tmp/backup_list.txt&amp;quot;&lt;br /&gt;
 echo &amp;quot;$FILES_TO_BACKUP&amp;quot; &amp;gt; /tmp/backup_list.txt&lt;br /&gt;
 cat /tmp/backup_list.txt | while IFS= read -r LINE; do&lt;br /&gt;
   echo &amp;quot;Ajout de &#039;$LINE&#039; à la liste de sauvegarde.&amp;quot;&lt;br /&gt;
 done&lt;br /&gt;
 echo &amp;quot;---&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 echo &amp;quot;Traitement des extensions dans $MEDIAWIKI_ROOT/extensions/&amp;quot;&lt;br /&gt;
 for EXTENSION_DIR in &amp;quot;$MEDIAWIKI_ROOT&amp;quot;extensions/*; do&lt;br /&gt;
     if [ -d &amp;quot;$EXTENSION_DIR&amp;quot; ]; then&lt;br /&gt;
         EXTENSION_NAME=$(basename &amp;quot;$EXTENSION_DIR&amp;quot;)&lt;br /&gt;
         echo &amp;quot;Extension trouvée : $EXTENSION_NAME \(chemin complet : $EXTENSION_DIR\)&amp;quot;&lt;br /&gt;
         IS_BASE=0&lt;br /&gt;
         for BASE_EXT in $BASE_EXTENSIONS; do&lt;br /&gt;
             if [ &amp;quot;$EXTENSION_NAME&amp;quot; = &amp;quot;$BASE_EXT&amp;quot; ]; then&lt;br /&gt;
                 IS_BASE=1&lt;br /&gt;
                 echo &amp;quot;  &#039;$EXTENSION_NAME&#039; est une extension de base.&amp;quot;&lt;br /&gt;
                 break&lt;br /&gt;
             fi&lt;br /&gt;
         done&lt;br /&gt;
         if [ &amp;quot;$IS_BASE&amp;quot; -eq 0 ]; then&lt;br /&gt;
             echo &amp;quot;  &#039;$EXTENSION_NAME&#039; est une extension personnalisée. Ajout à la liste de sauvegarde.&amp;quot;&lt;br /&gt;
             echo &amp;quot;extensions/$EXTENSION_NAME&amp;quot; &amp;gt;&amp;gt; /tmp/backup_list.txt&lt;br /&gt;
         fi&lt;br /&gt;
     fi&lt;br /&gt;
 done&lt;br /&gt;
 echo &amp;quot;--- Liste de sauvegarde complète ---&amp;quot;&lt;br /&gt;
 cat /tmp/backup_list.txt&lt;br /&gt;
 echo &amp;quot;---&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 echo &amp;quot;Création de l&#039;archive : $OUTPUT_FILE&amp;quot;&lt;br /&gt;
 tar czf &amp;quot;$OUTPUT_FILE&amp;quot; -T /tmp/backup_list.txt --exclude=&#039;./tmp/backup_list.txt&#039;&lt;br /&gt;
 echo &amp;quot;Commande tar exécutée.&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 if [ -f &amp;quot;$OUTPUT_FILE&amp;quot; ]; then&lt;br /&gt;
     chmod 600 &amp;quot;$OUTPUT_FILE&amp;quot;&lt;br /&gt;
     echo &amp;quot;Permissions du fichier de sauvegarde mises à 600.&amp;quot;&lt;br /&gt;
     echo &amp;quot;Sauvegarde des données essentielles et des extensions personnalisées de MediaWiki terminée : $OUTPUT_FILE&amp;quot; &amp;gt;&amp;gt; /var/log/backup_wiki.log&lt;br /&gt;
     echo &amp;quot;--- Fin du script ---&amp;quot;&lt;br /&gt;
 else&lt;br /&gt;
     echo &amp;quot;Erreur : Le fichier de sauvegarde $OUTPUT_FILE n&#039;a pas été créé.&amp;quot;&lt;br /&gt;
     echo &amp;quot;--- Fin du script \(avec erreur\) ---&amp;quot;&lt;br /&gt;
     exit 1&lt;br /&gt;
 fi&lt;br /&gt;
 &lt;br /&gt;
 rm /tmp/backup_list.txt&lt;br /&gt;
 echo &amp;quot;Fichier temporaire /tmp/backup_list.txt supprimé.&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;NB :&#039;&#039;&#039; Les nombreuses lignes &#039;&#039;echo&#039;&#039; ont été ajoutées à des fin de corrections en cours de programmation et peuvent être simplifiées...&lt;br /&gt;
:* Rendre le script exécutable :&amp;lt;br&amp;gt;&lt;br /&gt;
 chmod +x /usr/local/bin/backup_wiki.sh&amp;lt;br&amp;gt;&lt;br /&gt;
:* Automatiser le script le samedi à 3h30 du matin :&amp;lt;br&amp;gt;Avec &#039;&#039;&#039;crontab -e&#039;&#039;&#039;, ajouter la ligne :&lt;br /&gt;
 30  3  *  *  6  /usr/local/bin/backup_wiki.sh&lt;br /&gt;
&lt;br /&gt;
====wp====&lt;br /&gt;
====pmb====&lt;/div&gt;</summary>
		<author><name>Domi</name></author>
	</entry>
	<entry>
		<id>https://wiki.lesitadom.fr/index.php?title=Organigramme_d%27installation&amp;diff=1643</id>
		<title>Organigramme d&#039;installation</title>
		<link rel="alternate" type="text/html" href="https://wiki.lesitadom.fr/index.php?title=Organigramme_d%27installation&amp;diff=1643"/>
		<updated>2025-05-15T17:32:10Z</updated>

		<summary type="html">&lt;p&gt;Domi : /* Mises à jour automatiques */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Les outils ==&lt;br /&gt;
=== Conteneur proxy : [[Proxy|Voir la page]] ===&lt;br /&gt;
::* Création du conteneur&lt;br /&gt;
::* Installation et configuration de nginx&lt;br /&gt;
::* Installation de certbot pour let&#039;s encrypt&lt;br /&gt;
::* Voir pour installer des outils de sécurité (fail2ban,...)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
=== Conteneur Mariadb : [[Mariadb|Voir la page]] ===&lt;br /&gt;
::* Création du conteneur&lt;br /&gt;
::* Installation de mariadb&lt;br /&gt;
::* Configuration&lt;br /&gt;
::* Création d&#039;un utilisateur&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
=== Conteneur PhpMyadmin : [[Phpma|Voir la page]] ===&lt;br /&gt;
::* Création du conteneur&lt;br /&gt;
::* Installation d&#039;apache2 et de phpmyadmin&lt;br /&gt;
::* Configuration d&#039;apache2 et de phpmyadmin&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Les applis ==&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
=== Conteneur tables : [[Tables|Voir la page]] ===&lt;br /&gt;
:*Installation du serveur web avec apache&lt;br /&gt;
:*Installation de &#039;&#039;tables&#039;&#039; et corrections des fichiers&lt;br /&gt;
&lt;br /&gt;
=== Conteneur pmb : [[Pmb|Voir la page]]===&lt;br /&gt;
&#039;&#039;(cf pmb sur alpine léger (historique dans pmb sur alpine lourd)&#039;&#039;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Conteneur wiki : [[Wiki|Voir la page]] ===&lt;br /&gt;
::* Création d&#039;un utilisateur et d&#039;une base de donnée vide pour le wiki&lt;br /&gt;
::* Transfert de la base de données&lt;br /&gt;
::* Création du conteneur&lt;br /&gt;
::* Installation du serveur web&lt;br /&gt;
::* Installation de la nouvelle version de mediawiki&lt;br /&gt;
::* Initialisation de l&#039;application&lt;br /&gt;
::* Modification de LocalSettings.php&lt;br /&gt;
::* Récupération du contenu sur l&#039;ancien serveur et transfert des données&lt;br /&gt;
::* Corrections&lt;br /&gt;
&lt;br /&gt;
=== Conteneur wp : [[Wp|Voir la page]] ===&lt;br /&gt;
&#039;&#039;(cf wordpress sur alpine léger mais sauter à la fin. Mariadb et phpmyadmin dans d&#039;autres conteneurs...)&#039;&#039;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Stockage et sauvegardes ==&lt;br /&gt;
création d&#039;un volume pour les sauvegardes :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; lxc storage volume create default sauvegarde-lxc size=50GB&lt;br /&gt;
&lt;br /&gt;
Montage du volume dans chaque conteneur :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; lxc config device add &amp;lt;nom du conteneur&amp;gt; sauvegarde-mount disk source=sauvegarde-lxc pool=default path=/sauvegardes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
logiciel : borg sauvegarde et rétention de données. Comte chez Kiki, à pousser en ssh.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sécurisation ==&lt;br /&gt;
=== Mises à jour automatiques [[Mises à jour automatiques|Voir la page]]===&lt;br /&gt;
&lt;br /&gt;
Au niveau du système hôte, on ajoute le script : &lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
/root/scripts/&#039;&#039;&#039;lxc_auto_update.sh&#039;&#039;&#039; :&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 &lt;br /&gt;
 LOG_FILE=&amp;quot;/var/log/lxc_update.log&amp;quot;&lt;br /&gt;
 MAX_RUNS_TO_KEEP=2&lt;br /&gt;
 RUN_START_MARKER=&amp;quot;--- Début de l&#039;exécution du script ---&amp;quot;&lt;br /&gt;
 RUN_END_MARKER=&amp;quot;--- Fin de l&#039;exécution du script ---&amp;quot;&lt;br /&gt;
 PROXY_CONTAINER=&amp;quot;proxy&amp;quot;&lt;br /&gt;
 WEB_CONTAINERS=(&amp;quot;wp&amp;quot; &amp;quot;pmb&amp;quot; &amp;quot;wiki&amp;quot; &amp;quot;tables&amp;quot;) # Liste de tous les conteneurs web&lt;br /&gt;
 WEB_SERVICE_NAME=&amp;quot;apache2&amp;quot; # Nom du service web à vérifier (adapter si nécessaire)&lt;br /&gt;
 SLEEP_AFTER_RESTART=10 # Délai après le redémarrage des conteneurs web&lt;br /&gt;
 &lt;br /&gt;
 bavarder() {&lt;br /&gt;
   local message=&amp;quot;$1&amp;quot;&lt;br /&gt;
   echo &amp;quot;$(date &#039;+%Y-%m-%d %H:%M:%S&#039;) - $message&amp;quot; &amp;gt;&amp;gt; &amp;quot;$LOG_FILE&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 # Ajouter un marqueur de début d&#039;exécution&lt;br /&gt;
 bavarder &amp;quot;$RUN_START_MARKER&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 # Récupérer la liste des noms de conteneurs Alpine&lt;br /&gt;
 containers=$(lxc list --format csv | tail -n +2 | cut -d&#039;,&#039; -f1)&lt;br /&gt;
 bavarder &amp;quot;Liste des conteneurs récupérée : &#039;$containers&#039;&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 # Séparer les noms de conteneurs en un tableau&lt;br /&gt;
 IFS=$&#039;\n&#039; read -r -d &amp;lt;nowiki&amp;gt;&#039;&#039;&amp;lt;/nowiki&amp;gt; -a container_array &amp;lt;&amp;lt;&amp;lt; &amp;quot;$containers&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 # Boucle pour lancer les mises à jour&lt;br /&gt;
 {&lt;br /&gt;
   for container in &amp;quot;${container_array[@]}&amp;quot;; do&lt;br /&gt;
     bavarder &amp;quot;--- Début du traitement du conteneur : &#039;$container&#039; ---&amp;quot;&lt;br /&gt;
     config=$(lxc config show &amp;quot;$container&amp;quot;)&lt;br /&gt;
     if echo &amp;quot;$config&amp;quot; | grep -iq &amp;quot;alpine&amp;quot;; then&lt;br /&gt;
       bavarder &amp;quot;Le conteneur &#039;$container&#039; semble être basé sur Alpine.&amp;quot;&lt;br /&gt;
       is_running=$(lxc list --format csv | grep &amp;quot;^${container},&amp;quot; | grep &amp;quot;,RUNNING,&amp;quot;)&lt;br /&gt;
       if [ -n &amp;quot;$is_running&amp;quot; ]; then&lt;br /&gt;
         bavarder &amp;quot;Le conteneur &#039;$container&#039; est en cours d&#039;exécution, lancement de la mise à jour...&amp;quot;&lt;br /&gt;
         lxc exec &amp;quot;$container&amp;quot; -- sh -c &amp;quot;apk update &amp;amp;&amp;amp; apk upgrade --available&amp;quot;&lt;br /&gt;
         result=$?&lt;br /&gt;
         if [ &amp;quot;$result&amp;quot; -ne 0 ]; then&lt;br /&gt;
           bavarder &amp;quot;Erreur lors de la mise à jour de &#039;$container&#039;.&amp;quot;&lt;br /&gt;
         fi&lt;br /&gt;
       else&lt;br /&gt;
         bavarder &amp;quot;Le conteneur &#039;$container&#039; n&#039;est pas en cours d&#039;exécution, mise à jour ignorée.&amp;quot;&lt;br /&gt;
       fi&lt;br /&gt;
     else&lt;br /&gt;
       bavarder &amp;quot;Le conteneur &#039;$container&#039; ne semble pas être basé sur Alpine, mise à jour ignorée.&amp;quot;&lt;br /&gt;
     fi&lt;br /&gt;
     bavarder &amp;quot;--- Fin du traitement du conteneur : &#039;$container&#039; ---&amp;quot;&lt;br /&gt;
   done&lt;br /&gt;
 } &amp;gt;&amp;gt; &amp;quot;$LOG_FILE&amp;quot; 2&amp;gt;&amp;amp;1&lt;br /&gt;
 &lt;br /&gt;
 bavarder &amp;quot;Fin de la tentative de mise à jour des conteneurs.&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 # --- Début du redémarrage des conteneurs Alpine (sauf le proxy) ---&lt;br /&gt;
 bavarder &amp;quot;--- Début du redémarrage des conteneurs Alpine (sauf $PROXY_CONTAINER) ---&amp;quot;&lt;br /&gt;
 for container in &amp;quot;${container_array[@]}&amp;quot;; do&lt;br /&gt;
   if [ &amp;quot;$container&amp;quot; != &amp;quot;$PROXY_CONTAINER&amp;quot; ]; then&lt;br /&gt;
     config=$(lxc config show &amp;quot;$container&amp;quot;)&lt;br /&gt;
     if echo &amp;quot;$config&amp;quot; | grep -iq &amp;quot;alpine&amp;quot;; then&lt;br /&gt;
       is_running=$(lxc list --format csv | grep &amp;quot;^${container},&amp;quot; | grep &amp;quot;,RUNNING,&amp;quot;)&lt;br /&gt;
       if [ -n &amp;quot;$is_running&amp;quot; ]; then&lt;br /&gt;
         bavarder &amp;quot;Redémarrage du conteneur &#039;$container&#039;...&amp;quot;&lt;br /&gt;
         lxc restart &amp;quot;$container&amp;quot;&lt;br /&gt;
         sleep &amp;quot;$SLEEP_AFTER_RESTART&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
         # Vérifier l&#039;état du service web pour les conteneurs web&lt;br /&gt;
         is_web_container=0&lt;br /&gt;
         for web_container in &amp;quot;${WEB_CONTAINERS[@]}&amp;quot;; do&lt;br /&gt;
           if [ &amp;quot;$container&amp;quot; == &amp;quot;$web_container&amp;quot; ]; then&lt;br /&gt;
             is_web_container=1&lt;br /&gt;
             break&lt;br /&gt;
           fi&lt;br /&gt;
         done&lt;br /&gt;
 	if [ &amp;quot;$is_web_container&amp;quot; -eq 1 ]; then&lt;br /&gt;
           service_status=$(lxc exec &amp;quot;$container&amp;quot; -- rc-service &amp;quot;$WEB_SERVICE_NAME&amp;quot; status 2&amp;gt;&amp;amp;1)&lt;br /&gt;
           if ! echo &amp;quot;$service_status&amp;quot; | grep -q &amp;quot;started&amp;quot;; then&lt;br /&gt;
             bavarder &amp;quot;$WEB_SERVICE_NAME ne semble pas en cours d&#039;exécution dans &#039;$container&#039;, tentative de démarrage...&amp;quot;&lt;br /&gt;
             lxc exec &amp;quot;$container&amp;quot; -- rc-service &amp;quot;$WEB_SERVICE_NAME&amp;quot; start&lt;br /&gt;
             sleep 5&lt;br /&gt;
             service_status_after_start=$(lxc exec &amp;quot;$container&amp;quot; -- rc-service &amp;quot;$WEB_SERVICE_NAME&amp;quot; status 2&amp;gt;&amp;amp;1)&lt;br /&gt;
             if ! echo &amp;quot;$service_status_after_start&amp;quot; | grep -q &amp;quot;started&amp;quot;; then&lt;br /&gt;
               bavarder &amp;quot;Échec du démarrage de $WEB_SERVICE_NAME dans &#039;$container&#039;.&amp;quot;&lt;br /&gt;
             else&lt;br /&gt;
               bavarder &amp;quot;$WEB_SERVICE_NAME démarré avec succès dans &#039;$container&#039;.&amp;quot;&lt;br /&gt;
             fi&lt;br /&gt;
           else&lt;br /&gt;
             bavarder &amp;quot;$WEB_SERVICE_NAME semble être en cours d&#039;exécution dans &#039;$container&#039;.&amp;quot;&lt;br /&gt;
           fi&lt;br /&gt;
         fi&lt;br /&gt;
       fi&lt;br /&gt;
     fi&lt;br /&gt;
   fi&lt;br /&gt;
 done&lt;br /&gt;
 bavarder &amp;quot;--- Fin du redémarrage des conteneurs Alpine (sauf $PROXY_CONTAINER) ---&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 # --- Redémarrage du conteneur proxy en dernier ---&lt;br /&gt;
 bavarder &amp;quot;--- Début du redémarrage du conteneur proxy ($PROXY_CONTAINER) ---&amp;quot;&lt;br /&gt;
 is_proxy_running=$(lxc list --format csv | grep &amp;quot;^${PROXY_CONTAINER},&amp;quot; | grep &amp;quot;,RUNNING,&amp;quot;)&lt;br /&gt;
 if [ -n &amp;quot;$is_proxy_running&amp;quot; ]; then&lt;br /&gt;
   bavarder &amp;quot;Redémarrage du conteneur proxy &#039;$PROXY_CONTAINER&#039;...&amp;quot;&lt;br /&gt;
   lxc restart &amp;quot;$PROXY_CONTAINER&amp;quot;&lt;br /&gt;
   result=$?&lt;br /&gt;
   if [ &amp;quot;$result&amp;quot; -ne 0 ]; then&lt;br /&gt;
     bavarder &amp;quot;Erreur lors du redémarrage du conteneur proxy &#039;$PROXY_CONTAINER&#039;.&amp;quot;&lt;br /&gt;
   fi&lt;br /&gt;
 else&lt;br /&gt;
   bavarder &amp;quot;Le conteneur proxy &#039;$PROXY_CONTAINER&#039; n&#039;est pas en cours d&#039;exécution, redémarrage ignoré.&amp;quot;&lt;br /&gt;
 fi&lt;br /&gt;
 bavarder &amp;quot;--- Fin du redémarrage du conteneur proxy ($PROXY_CONTAINER) ---&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 # Ajouter un marqueur de fin d&#039;exécution&lt;br /&gt;
 bavarder &amp;quot;$RUN_END_MARKER&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 # --- Gestion de la rotation des logs ---&lt;br /&gt;
 if [ -f &amp;quot;$LOG_FILE&amp;quot; ]; then&lt;br /&gt;
   # Récupérer toutes les occurrences du marqueur de début d&#039;exécution&lt;br /&gt;
   start_markers=$(grep -c &amp;quot;^$RUN_START_MARKER&amp;quot; &amp;quot;$LOG_FILE&amp;quot;)&lt;br /&gt;
 &lt;br /&gt;
   # Calculer le nombre d&#039;exécutions à supprimer&lt;br /&gt;
   runs_to_remove=$((start_markers - MAX_RUNS_TO_KEEP))&lt;br /&gt;
 &lt;br /&gt;
   if [ &amp;quot;$runs_to_remove&amp;quot; -gt 0 ]; then&lt;br /&gt;
     # Utiliser awk pour ne conserver que les N dernières exécutions&lt;br /&gt;
     awk -v n=&amp;quot;$MAX_RUNS_TO_KEEP&amp;quot; -v start_marker=&amp;quot;$RUN_START_MARKER&amp;quot; -v end_marker=&amp;quot;$RUN_END_MARKER&amp;quot; &#039;&lt;br /&gt;
       BEGIN { count = 0; in_run = 0; }&lt;br /&gt;
       $0 ~ start_marker {&lt;br /&gt;
         count++;&lt;br /&gt;
         if (count &amp;gt; (NR - RSTART) + 1 - (n * (RLENGTH ? 1 : 0))) {&lt;br /&gt;
           in_run = 1;&lt;br /&gt;
         } else {&lt;br /&gt;
           in_run = 0;&lt;br /&gt;
           print;&lt;br /&gt;
         }&lt;br /&gt;
       }&lt;br /&gt;
       $0 ~ end_marker {&lt;br /&gt;
         if (!in_run) {&lt;br /&gt;
           print;&lt;br /&gt;
         }&lt;br /&gt;
       }&lt;br /&gt;
       &amp;lt;nowiki&amp;gt;!($0 ~ start_marker) &amp;amp;&amp;amp; !($0 ~ end_marker) {&lt;br /&gt;
          if (!in_run) {&lt;br /&gt;
            print;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      &#039; &amp;quot;$LOG_FILE&amp;quot; &amp;gt; &amp;quot;$LOG_FILE.tmp&amp;quot; &amp;amp;&amp;amp; mv &amp;quot;$LOG_FILE.tmp&amp;quot; &amp;quot;$LOG_FILE&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
  fi&lt;br /&gt;
  &lt;br /&gt;
  #&amp;lt;/nowiki&amp;gt; Définir l&#039;adresse e-mail pour les notifications&lt;br /&gt;
 EMAIL_DESTINATAIRE=&amp;quot;toto@mail.com&amp;quot; # Remplace par ton adresse e-mail&lt;br /&gt;
 &lt;br /&gt;
 # Vérifier s&#039;il y a eu des erreurs et envoyer un e-mail si c&#039;est le cas&lt;br /&gt;
 if grep -q &amp;quot;Erreur&amp;quot; &amp;quot;$LOG_FILE&amp;quot;; then&lt;br /&gt;
   cat &amp;quot;$LOG_FILE&amp;quot; | mail -s &#039;Rapport de mise à jour LXC - Erreurs détectées&#039; &amp;quot;$EMAIL_DESTINATAIRE&amp;quot;&lt;br /&gt;
 fi&lt;br /&gt;
 &lt;br /&gt;
 exit 0&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Envoi des E-mails====&lt;br /&gt;
L&#039;envoi des mails nécessite l&#039;installation de mailutils et ssmtp :&lt;br /&gt;
  apt-get install mailutils ssmtp&lt;br /&gt;
Configuration de ssmtp :&lt;br /&gt;
  vi /etc/ssmtp/ssmtp.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;ssmtp.conf&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
  #&lt;br /&gt;
  # Config file for sSMTP sendmail&lt;br /&gt;
  #&lt;br /&gt;
  # The person who gets all mail for userids &amp;lt; 1000&lt;br /&gt;
  # Make this empty to disable rewriting.&lt;br /&gt;
  root=toto@monmail.fr&lt;br /&gt;
  &lt;br /&gt;
  # The place where the mail goes. The actual machine name is required no &lt;br /&gt;
  # MX records are consulted. Commonly mailhosts are named mail.domain.com&lt;br /&gt;
  mailhub=smtp.gmail.com:587 (pour gmail)&lt;br /&gt;
  &lt;br /&gt;
  # Where will the mail seem to come from?&lt;br /&gt;
  # rewriteDomain=&lt;br /&gt;
 &lt;br /&gt;
  # The full hostname&lt;br /&gt;
  hostname=raspberrypi&lt;br /&gt;
  &lt;br /&gt;
  # Are users allowed to set their own From: address?&lt;br /&gt;
  # YES - Allow the user to specify their own From: address&lt;br /&gt;
  # NO - Use the system generated From: address&lt;br /&gt;
  FromLineOverride=YES&lt;br /&gt;
  UseTLS=YES&lt;br /&gt;
  UseSTARTTLS=YES&lt;br /&gt;
  AuthUser=toto@monfournisseur.com&lt;br /&gt;
  AuthPass=MonMotdePasseDeConnection&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Remarques :&#039;&#039;&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
::*&#039;&#039;Pour gmail, il faut créer un mot de passe d&#039;application dans les paramètre du compte google et l&#039;utiliser ici.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
::*&#039;&#039;Pour que la redirection de mails fonctionne, il faut que l&#039;adresse de destination finale soit différente de l&#039;adresse utilisée pour l&#039;identification pour l&#039;envoi des mails.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
On automatise l&#039;exécution (dimache à 2h du matin) :&lt;br /&gt;
  crontab -e&lt;br /&gt;
  0 2 * * 7 /root/scripts/lxc_auto_update.sh&lt;br /&gt;
&lt;br /&gt;
===Sauvegardes automatiques des données des conteneurs web===&lt;br /&gt;
On va programmer une sauvegarde automatique pour chaque conteneur web, ainsi que pour le conteneur &#039;&#039;&#039;mariadb&#039;&#039;&#039;. Ces sauvegardes se feront dans un espace commun qui sera à son tour sauvegardé sur un site distant à intervalles réguliers en gérant la rotation des sauvegardes.&amp;lt;br&amp;gt;&lt;br /&gt;
Les conteneurs :&lt;br /&gt;
::* mariadb&lt;br /&gt;
::* wiki&lt;br /&gt;
::* pmb&lt;br /&gt;
::* wp&lt;br /&gt;
bénéficieront de ce mécanisme.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour les conteneurs &#039;&#039;&#039;proxy&#039;&#039;&#039;, &#039;&#039;&#039;phpma&#039;&#039;&#039; et &#039;&#039;&#039;tables&#039;&#039;&#039;, une simple sauvegarde à la main suffira.&amp;lt;br&amp;gt;&lt;br /&gt;
On commence par créer un volume de 50Gb et on le monte dans les conteneurs concernés :&lt;br /&gt;
 lxc storage volume create default sauvegarde-lxc size=50GB&lt;br /&gt;
 lxc config device add wp sauvegarde-mount disk source=sauvegarde-lxc pool=default path=/sauvegardes&lt;br /&gt;
 lxc config device add wiki sauvegarde-mount disk source=sauvegarde-lxc pool=default path=/sauvegardes&lt;br /&gt;
 lxc config device add mariadb sauvegarde-mount disk source=sauvegarde-lxc pool=default path=/sauvegardes&lt;br /&gt;
 lxc config device add pmb sauvegarde-mount disk source=sauvegarde-lxc pool=default path=/sauvegardes&lt;br /&gt;
====mariadb====&lt;br /&gt;
:* On commence par créer un utilisateur spécifique à la sauvegarde.&amp;lt;br&amp;gt; Sous phpMyAdmin, création de l&#039;utilisateur &#039;&#039;backup_user&#039;&#039; avec les privilèges &#039;&#039;SELECT&#039;&#039; et &#039;&#039;LOCK TABLES&#039;&#039; pour les tables &#039;&#039;pmb&#039;&#039;, &#039;&#039;wiki&#039;&#039; et &#039;&#039;wordpress&#039;&#039;.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
:* Création du script de sauvegarde des tables&amp;lt;br&amp;gt;On sauvegarde les tables &#039;&#039;pmb&#039;&#039;, &#039;&#039;wordpress&#039;&#039; et &#039;&#039;wiki&#039;&#039; en générant un fichier de log dans /var/log/&#039;&#039;&#039;backup_mariadb.log&#039;&#039;&#039;.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;/usr/local/bin/backup_mariadb.sh&#039;&#039;&#039; :&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 DATE=$(date +%Y%m%d_%H%M)&lt;br /&gt;
 OUTPUT_FILE=&amp;quot;/sauvegardes/db_backup_${DATE}.sql.gz&amp;quot;&lt;br /&gt;
 USER=&amp;quot;backup_user&amp;quot;  &amp;lt;br&amp;gt;PASSWORD=&amp;quot;*********&amp;quot; # &#039;&#039;Mot de passe de backup_user&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 # Liste des bases de données à sauvegarder&lt;br /&gt;
 DATABASES=&amp;quot;pmb wiki wordpress&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 # Exporte chaque base de données et la compresse&lt;br /&gt;
 for DB in $DATABASES; do&lt;br /&gt;
   echo &amp;quot;Sauvegarde de la base de données : $DB&amp;quot;&lt;br /&gt;
   mysqldump -u &amp;quot;$USER&amp;quot; -p&amp;quot;$PASSWORD&amp;quot; &amp;quot;$DB&amp;quot; | gzip &amp;gt;&amp;gt; &amp;quot;$OUTPUT_FILE&amp;quot;&lt;br /&gt;
 done&lt;br /&gt;
 &lt;br /&gt;
 chmod 600 &amp;quot;$OUTPUT_FILE&amp;quot; # Restreindre les permissions&lt;br /&gt;
 echo &amp;quot;Sauvegarde des bases de données terminée : $OUTPUT_FILE&amp;quot; &amp;gt;&amp;gt; /var/log/backup_mariadb.log&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
:* Rendre le script exécutable :&amp;lt;br&amp;gt;&lt;br /&gt;
 chmod +x /usr/local/bin/backup_mariadb.sh&amp;lt;br&amp;gt;&lt;br /&gt;
:* Automatiser le script le samedi à 2h du matin :&amp;lt;br&amp;gt;Avec &#039;&#039;&#039;crontab -e&#039;&#039;&#039;, ajouter la ligne :&lt;br /&gt;
 0 2 * * 6 /usr/local/bin/backup_mariadb.sh&lt;br /&gt;
&lt;br /&gt;
====wiki====&lt;br /&gt;
MediaWiki installe par défaut des extensions et des skins. La sauvegarde de ces extension alourdit considérablement le fichier. Le script parcourt le dossier pour les exclure et ne tenir compte que de celles nouvellement installées.&amp;lt;br&amp;gt;&lt;br /&gt;
Il crée également un fichier de log /var/log/&#039;&#039;&#039;backup_wiki.log&#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
/usr/local/bin/&#039;&#039;&#039;backup_wiki.sh&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 DATE=$(date +%Y%m%d_%H%M)&lt;br /&gt;
 OUTPUT_FILE=&amp;quot;/sauvegardes/wiki_backup_${DATE}.tar.gz&amp;quot;&lt;br /&gt;
 MEDIAWIKI_ROOT=&amp;quot;/var/www/localhost/htdocs/&amp;quot;&lt;br /&gt;
 BASE_EXTENSIONS=&amp;quot;AbuseFilter CategoryTree Cite CiteThisPage CodeEditor ConfirmEdit DiscussionTools Echo Gadgets ImageMap InputBox Interwiki Linter LoginNotify Math MultimediaViewer Nuke OATHAuth PageImages ParserFunctions PdfHandler Poem ReplaceText Scribunto SecureLinkFixer SpamBlacklist SyntaxHighlight_GeSHi TemplateData TextExtracts Thanks TitleBlacklist VisualEditor WikiEditor&amp;quot;&lt;br /&gt;
 FILES_TO_BACKUP=&amp;quot;images&lt;br /&gt;
 LocalSettings.php&lt;br /&gt;
 extensions-custom/&lt;br /&gt;
 skins-custom/&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 echo &amp;quot;--- Début du script ---&amp;quot;&lt;br /&gt;
 echo &amp;quot;Date de la sauvegarde : $DATE&amp;quot;&lt;br /&gt;
 echo &amp;quot;Fichier de sortie : $OUTPUT_FILE&amp;quot;&lt;br /&gt;
 echo &amp;quot;Racine de MediaWiki : $MEDIAWIKI_ROOT&amp;quot;&lt;br /&gt;
 echo &amp;quot;Extensions de base : $BASE_EXTENSIONS&amp;quot;&lt;br /&gt;
 echo &amp;quot;Fichiers de base à sauvegarder : $FILES_TO_BACKUP&amp;quot;&lt;br /&gt;
 echo &amp;quot;---&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 cd &amp;quot;$MEDIAWIKI_ROOT&amp;quot; || { echo &amp;quot;Erreur lors du changement de répertoire vers $MEDIAWIKI_ROOT&amp;quot;; exit 1; }&lt;br /&gt;
 echo &amp;quot;Répertoire courant : $(pwd)&amp;quot;&lt;br /&gt;
 echo &amp;quot;--- Identification des extensions personnalisées ---&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 echo &amp;quot;Création du fichier temporaire /tmp/backup_list.txt&amp;quot;&lt;br /&gt;
 echo &amp;quot;$FILES_TO_BACKUP&amp;quot; &amp;gt; /tmp/backup_list.txt&lt;br /&gt;
 cat /tmp/backup_list.txt | while IFS= read -r LINE; do&lt;br /&gt;
   echo &amp;quot;Ajout de &#039;$LINE&#039; à la liste de sauvegarde.&amp;quot;&lt;br /&gt;
 done&lt;br /&gt;
 echo &amp;quot;---&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 echo &amp;quot;Traitement des extensions dans $MEDIAWIKI_ROOT/extensions/&amp;quot;&lt;br /&gt;
 for EXTENSION_DIR in &amp;quot;$MEDIAWIKI_ROOT&amp;quot;extensions/*; do&lt;br /&gt;
     if [ -d &amp;quot;$EXTENSION_DIR&amp;quot; ]; then&lt;br /&gt;
         EXTENSION_NAME=$(basename &amp;quot;$EXTENSION_DIR&amp;quot;)&lt;br /&gt;
         echo &amp;quot;Extension trouvée : $EXTENSION_NAME \(chemin complet : $EXTENSION_DIR\)&amp;quot;&lt;br /&gt;
         IS_BASE=0&lt;br /&gt;
         for BASE_EXT in $BASE_EXTENSIONS; do&lt;br /&gt;
             if [ &amp;quot;$EXTENSION_NAME&amp;quot; = &amp;quot;$BASE_EXT&amp;quot; ]; then&lt;br /&gt;
                 IS_BASE=1&lt;br /&gt;
                 echo &amp;quot;  &#039;$EXTENSION_NAME&#039; est une extension de base.&amp;quot;&lt;br /&gt;
                 break&lt;br /&gt;
             fi&lt;br /&gt;
         done&lt;br /&gt;
         if [ &amp;quot;$IS_BASE&amp;quot; -eq 0 ]; then&lt;br /&gt;
             echo &amp;quot;  &#039;$EXTENSION_NAME&#039; est une extension personnalisée. Ajout à la liste de sauvegarde.&amp;quot;&lt;br /&gt;
             echo &amp;quot;extensions/$EXTENSION_NAME&amp;quot; &amp;gt;&amp;gt; /tmp/backup_list.txt&lt;br /&gt;
         fi&lt;br /&gt;
     fi&lt;br /&gt;
 done&lt;br /&gt;
 echo &amp;quot;--- Liste de sauvegarde complète ---&amp;quot;&lt;br /&gt;
 cat /tmp/backup_list.txt&lt;br /&gt;
 echo &amp;quot;---&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 echo &amp;quot;Création de l&#039;archive : $OUTPUT_FILE&amp;quot;&lt;br /&gt;
 tar czf &amp;quot;$OUTPUT_FILE&amp;quot; -T /tmp/backup_list.txt --exclude=&#039;./tmp/backup_list.txt&#039;&lt;br /&gt;
 echo &amp;quot;Commande tar exécutée.&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 if [ -f &amp;quot;$OUTPUT_FILE&amp;quot; ]; then&lt;br /&gt;
     chmod 600 &amp;quot;$OUTPUT_FILE&amp;quot;&lt;br /&gt;
     echo &amp;quot;Permissions du fichier de sauvegarde mises à 600.&amp;quot;&lt;br /&gt;
     echo &amp;quot;Sauvegarde des données essentielles et des extensions personnalisées de MediaWiki terminée : $OUTPUT_FILE&amp;quot; &amp;gt;&amp;gt; /var/log/backup_wiki.log&lt;br /&gt;
     echo &amp;quot;--- Fin du script ---&amp;quot;&lt;br /&gt;
 else&lt;br /&gt;
     echo &amp;quot;Erreur : Le fichier de sauvegarde $OUTPUT_FILE n&#039;a pas été créé.&amp;quot;&lt;br /&gt;
     echo &amp;quot;--- Fin du script \(avec erreur\) ---&amp;quot;&lt;br /&gt;
     exit 1&lt;br /&gt;
 fi&lt;br /&gt;
 &lt;br /&gt;
 rm /tmp/backup_list.txt&lt;br /&gt;
 echo &amp;quot;Fichier temporaire /tmp/backup_list.txt supprimé.&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;NB :&#039;&#039;&#039; Les nombreuses lignes &#039;&#039;echo&#039;&#039; ont été ajoutées à des fin de corrections en cours de programmation et peuvent être simplifiées...&lt;br /&gt;
:* Rendre le script exécutable :&amp;lt;br&amp;gt;&lt;br /&gt;
 chmod +x /usr/local/bin/backup_wiki.sh&amp;lt;br&amp;gt;&lt;br /&gt;
:* Automatiser le script le samedi à 3h30 du matin :&amp;lt;br&amp;gt;Avec &#039;&#039;&#039;crontab -e&#039;&#039;&#039;, ajouter la ligne :&lt;br /&gt;
 30  3  *  *  6  /usr/local/bin/backup_wiki.sh&lt;br /&gt;
&lt;br /&gt;
====wp====&lt;br /&gt;
====pmb====&lt;/div&gt;</summary>
		<author><name>Domi</name></author>
	</entry>
	<entry>
		<id>https://wiki.lesitadom.fr/index.php?title=Mises_%C3%A0_jour_automatiques&amp;diff=1642</id>
		<title>Mises à jour automatiques</title>
		<link rel="alternate" type="text/html" href="https://wiki.lesitadom.fr/index.php?title=Mises_%C3%A0_jour_automatiques&amp;diff=1642"/>
		<updated>2025-05-15T17:30:08Z</updated>

		<summary type="html">&lt;p&gt;Domi : /* Automatisation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Script de mise à jour des conteneurs=&lt;br /&gt;
Afin d&#039;automatiser la mise à jour des conteneurs, on crée un script qui va&lt;br /&gt;
:*Mettre à jour les conteneurs alpine en fonctionnement&lt;br /&gt;
:*Créer un fichier de log&lt;br /&gt;
:*Corriger le fichier de log pour ne garder la trace que des deux dernières mises à jour&lt;br /&gt;
:*Envoyer un mail d&#039;alerte en cas d&#039;erreur&lt;br /&gt;
:*Redémarrer les conteneurs en prenant soin de démarrer le conteneur &#039;&#039;&#039;proxy&#039;&#039;&#039; en dernier&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
/root/scripts/&#039;&#039;&#039;lxc_auto_update.sh&#039;&#039;&#039; :&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 &lt;br /&gt;
 LOG_FILE=&amp;quot;/var/log/lxc_update.log&amp;quot;&lt;br /&gt;
 MAX_RUNS_TO_KEEP=2&lt;br /&gt;
 RUN_START_MARKER=&amp;quot;--- Début de l&#039;exécution du script ---&amp;quot;&lt;br /&gt;
 RUN_END_MARKER=&amp;quot;--- Fin de l&#039;exécution du script ---&amp;quot;&lt;br /&gt;
 PROXY_CONTAINER=&amp;quot;proxy&amp;quot;&lt;br /&gt;
 WEB_CONTAINERS=(&amp;quot;wp&amp;quot; &amp;quot;pmb&amp;quot; &amp;quot;wiki&amp;quot; &amp;quot;tables&amp;quot;) # Liste de tous les conteneurs web&lt;br /&gt;
 WEB_SERVICE_NAME=&amp;quot;apache2&amp;quot; # Nom du service web à vérifier (adapter si nécessaire)&lt;br /&gt;
 SLEEP_AFTER_RESTART=10 # Délai après le redémarrage des conteneurs web&lt;br /&gt;
 &lt;br /&gt;
 bavarder() {&lt;br /&gt;
   local message=&amp;quot;$1&amp;quot;&lt;br /&gt;
   echo &amp;quot;$(date &#039;+%Y-%m-%d %H:%M:%S&#039;) - $message&amp;quot; &amp;gt;&amp;gt; &amp;quot;$LOG_FILE&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 # Ajouter un marqueur de début d&#039;exécution&lt;br /&gt;
 bavarder &amp;quot;$RUN_START_MARKER&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 # Récupérer la liste des noms de conteneurs Alpine&lt;br /&gt;
 containers=$(lxc list --format csv | tail -n +2 | cut -d&#039;,&#039; -f1)&lt;br /&gt;
 bavarder &amp;quot;Liste des conteneurs récupérée : &#039;$containers&#039;&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 # Séparer les noms de conteneurs en un tableau&lt;br /&gt;
 IFS=$&#039;\n&#039; read -r -d &amp;lt;nowiki&amp;gt;&#039;&#039;&amp;lt;/nowiki&amp;gt; -a container_array &amp;lt;&amp;lt;&amp;lt; &amp;quot;$containers&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 # Boucle pour lancer les mises à jour&lt;br /&gt;
 {&lt;br /&gt;
   for container in &amp;quot;${container_array[@]}&amp;quot;; do&lt;br /&gt;
     bavarder &amp;quot;--- Début du traitement du conteneur : &#039;$container&#039; ---&amp;quot;&lt;br /&gt;
     config=$(lxc config show &amp;quot;$container&amp;quot;)&lt;br /&gt;
     if echo &amp;quot;$config&amp;quot; | grep -iq &amp;quot;alpine&amp;quot;; then&lt;br /&gt;
       bavarder &amp;quot;Le conteneur &#039;$container&#039; semble être basé sur Alpine.&amp;quot;&lt;br /&gt;
       is_running=$(lxc list --format csv | grep &amp;quot;^${container},&amp;quot; | grep &amp;quot;,RUNNING,&amp;quot;)&lt;br /&gt;
       if [ -n &amp;quot;$is_running&amp;quot; ]; then&lt;br /&gt;
         bavarder &amp;quot;Le conteneur &#039;$container&#039; est en cours d&#039;exécution, lancement de la mise à jour...&amp;quot;&lt;br /&gt;
         lxc exec &amp;quot;$container&amp;quot; -- sh -c &amp;quot;apk update &amp;amp;&amp;amp; apk upgrade --available&amp;quot;&lt;br /&gt;
         result=$?&lt;br /&gt;
         if [ &amp;quot;$result&amp;quot; -ne 0 ]; then&lt;br /&gt;
           bavarder &amp;quot;Erreur lors de la mise à jour de &#039;$container&#039;.&amp;quot;&lt;br /&gt;
         fi&lt;br /&gt;
       else&lt;br /&gt;
         bavarder &amp;quot;Le conteneur &#039;$container&#039; n&#039;est pas en cours d&#039;exécution, mise à jour ignorée.&amp;quot;&lt;br /&gt;
       fi&lt;br /&gt;
     else&lt;br /&gt;
       bavarder &amp;quot;Le conteneur &#039;$container&#039; ne semble pas être basé sur Alpine, mise à jour ignorée.&amp;quot;&lt;br /&gt;
     fi&lt;br /&gt;
     bavarder &amp;quot;--- Fin du traitement du conteneur : &#039;$container&#039; ---&amp;quot;&lt;br /&gt;
   done&lt;br /&gt;
 } &amp;gt;&amp;gt; &amp;quot;$LOG_FILE&amp;quot; 2&amp;gt;&amp;amp;1&lt;br /&gt;
 &lt;br /&gt;
 bavarder &amp;quot;Fin de la tentative de mise à jour des conteneurs.&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 # --- Début du redémarrage des conteneurs Alpine (sauf le proxy) ---&lt;br /&gt;
 bavarder &amp;quot;--- Début du redémarrage des conteneurs Alpine (sauf $PROXY_CONTAINER) ---&amp;quot;&lt;br /&gt;
 for container in &amp;quot;${container_array[@]}&amp;quot;; do&lt;br /&gt;
   if [ &amp;quot;$container&amp;quot; != &amp;quot;$PROXY_CONTAINER&amp;quot; ]; then&lt;br /&gt;
     config=$(lxc config show &amp;quot;$container&amp;quot;)&lt;br /&gt;
     if echo &amp;quot;$config&amp;quot; | grep -iq &amp;quot;alpine&amp;quot;; then&lt;br /&gt;
       is_running=$(lxc list --format csv | grep &amp;quot;^${container},&amp;quot; | grep &amp;quot;,RUNNING,&amp;quot;)&lt;br /&gt;
       if [ -n &amp;quot;$is_running&amp;quot; ]; then&lt;br /&gt;
         bavarder &amp;quot;Redémarrage du conteneur &#039;$container&#039;...&amp;quot;&lt;br /&gt;
         lxc restart &amp;quot;$container&amp;quot;&lt;br /&gt;
         sleep &amp;quot;$SLEEP_AFTER_RESTART&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
         # Vérifier l&#039;état du service web pour les conteneurs web&lt;br /&gt;
         is_web_container=0&lt;br /&gt;
         for web_container in &amp;quot;${WEB_CONTAINERS[@]}&amp;quot;; do&lt;br /&gt;
           if [ &amp;quot;$container&amp;quot; == &amp;quot;$web_container&amp;quot; ]; then&lt;br /&gt;
             is_web_container=1&lt;br /&gt;
             break&lt;br /&gt;
           fi&lt;br /&gt;
         done&lt;br /&gt;
 	if [ &amp;quot;$is_web_container&amp;quot; -eq 1 ]; then&lt;br /&gt;
           service_status=$(lxc exec &amp;quot;$container&amp;quot; -- rc-service &amp;quot;$WEB_SERVICE_NAME&amp;quot; status 2&amp;gt;&amp;amp;1)&lt;br /&gt;
           if ! echo &amp;quot;$service_status&amp;quot; | grep -q &amp;quot;started&amp;quot;; then&lt;br /&gt;
             bavarder &amp;quot;$WEB_SERVICE_NAME ne semble pas en cours d&#039;exécution dans &#039;$container&#039;, tentative de démarrage...&amp;quot;&lt;br /&gt;
             lxc exec &amp;quot;$container&amp;quot; -- rc-service &amp;quot;$WEB_SERVICE_NAME&amp;quot; start&lt;br /&gt;
             sleep 5&lt;br /&gt;
             service_status_after_start=$(lxc exec &amp;quot;$container&amp;quot; -- rc-service &amp;quot;$WEB_SERVICE_NAME&amp;quot; status 2&amp;gt;&amp;amp;1)&lt;br /&gt;
             if ! echo &amp;quot;$service_status_after_start&amp;quot; | grep -q &amp;quot;started&amp;quot;; then&lt;br /&gt;
               bavarder &amp;quot;Échec du démarrage de $WEB_SERVICE_NAME dans &#039;$container&#039;.&amp;quot;&lt;br /&gt;
             else&lt;br /&gt;
               bavarder &amp;quot;$WEB_SERVICE_NAME démarré avec succès dans &#039;$container&#039;.&amp;quot;&lt;br /&gt;
             fi&lt;br /&gt;
           else&lt;br /&gt;
             bavarder &amp;quot;$WEB_SERVICE_NAME semble être en cours d&#039;exécution dans &#039;$container&#039;.&amp;quot;&lt;br /&gt;
           fi&lt;br /&gt;
         fi&lt;br /&gt;
       fi&lt;br /&gt;
     fi&lt;br /&gt;
   fi&lt;br /&gt;
 done&lt;br /&gt;
 bavarder &amp;quot;--- Fin du redémarrage des conteneurs Alpine (sauf $PROXY_CONTAINER) ---&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 # --- Redémarrage du conteneur proxy en dernier ---&lt;br /&gt;
 bavarder &amp;quot;--- Début du redémarrage du conteneur proxy ($PROXY_CONTAINER) ---&amp;quot;&lt;br /&gt;
 is_proxy_running=$(lxc list --format csv | grep &amp;quot;^${PROXY_CONTAINER},&amp;quot; | grep &amp;quot;,RUNNING,&amp;quot;)&lt;br /&gt;
 if [ -n &amp;quot;$is_proxy_running&amp;quot; ]; then&lt;br /&gt;
   bavarder &amp;quot;Redémarrage du conteneur proxy &#039;$PROXY_CONTAINER&#039;...&amp;quot;&lt;br /&gt;
   lxc restart &amp;quot;$PROXY_CONTAINER&amp;quot;&lt;br /&gt;
   result=$?&lt;br /&gt;
   if [ &amp;quot;$result&amp;quot; -ne 0 ]; then&lt;br /&gt;
     bavarder &amp;quot;Erreur lors du redémarrage du conteneur proxy &#039;$PROXY_CONTAINER&#039;.&amp;quot;&lt;br /&gt;
   fi&lt;br /&gt;
 else&lt;br /&gt;
   bavarder &amp;quot;Le conteneur proxy &#039;$PROXY_CONTAINER&#039; n&#039;est pas en cours d&#039;exécution, redémarrage ignoré.&amp;quot;&lt;br /&gt;
 fi&lt;br /&gt;
 bavarder &amp;quot;--- Fin du redémarrage du conteneur proxy ($PROXY_CONTAINER) ---&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 # Ajouter un marqueur de fin d&#039;exécution&lt;br /&gt;
 bavarder &amp;quot;$RUN_END_MARKER&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 # --- Gestion de la rotation des logs ---&lt;br /&gt;
 if [ -f &amp;quot;$LOG_FILE&amp;quot; ]; then&lt;br /&gt;
   # Récupérer toutes les occurrences du marqueur de début d&#039;exécution&lt;br /&gt;
   start_markers=$(grep -c &amp;quot;^$RUN_START_MARKER&amp;quot; &amp;quot;$LOG_FILE&amp;quot;)&lt;br /&gt;
 &lt;br /&gt;
   # Calculer le nombre d&#039;exécutions à supprimer&lt;br /&gt;
   runs_to_remove=$((start_markers - MAX_RUNS_TO_KEEP))&lt;br /&gt;
 &lt;br /&gt;
   if [ &amp;quot;$runs_to_remove&amp;quot; -gt 0 ]; then&lt;br /&gt;
     # Utiliser awk pour ne conserver que les N dernières exécutions&lt;br /&gt;
     awk -v n=&amp;quot;$MAX_RUNS_TO_KEEP&amp;quot; -v start_marker=&amp;quot;$RUN_START_MARKER&amp;quot; -v end_marker=&amp;quot;$RUN_END_MARKER&amp;quot; &#039;&lt;br /&gt;
       BEGIN { count = 0; in_run = 0; }&lt;br /&gt;
       $0 ~ start_marker {&lt;br /&gt;
         count++;&lt;br /&gt;
         if (count &amp;gt; (NR - RSTART) + 1 - (n * (RLENGTH ? 1 : 0))) {&lt;br /&gt;
           in_run = 1;&lt;br /&gt;
         } else {&lt;br /&gt;
           in_run = 0;&lt;br /&gt;
           print;&lt;br /&gt;
         }&lt;br /&gt;
       }&lt;br /&gt;
       $0 ~ end_marker {&lt;br /&gt;
         if (!in_run) {&lt;br /&gt;
           print;&lt;br /&gt;
         }&lt;br /&gt;
       }&lt;br /&gt;
       &amp;lt;nowiki&amp;gt;!($0 ~ start_marker) &amp;amp;&amp;amp; !($0 ~ end_marker) {&lt;br /&gt;
          if (!in_run) {&lt;br /&gt;
            print;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      &#039; &amp;quot;$LOG_FILE&amp;quot; &amp;gt; &amp;quot;$LOG_FILE.tmp&amp;quot; &amp;amp;&amp;amp; mv &amp;quot;$LOG_FILE.tmp&amp;quot; &amp;quot;$LOG_FILE&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
  fi&lt;br /&gt;
  &lt;br /&gt;
  # Définir l&#039;adresse e-mail pour les notifications&lt;br /&gt;
 EMAIL_DESTINATAIRE=&amp;quot;toto@mail.com&amp;quot; # Remplace par ton adresse e-mail&lt;br /&gt;
 &lt;br /&gt;
 # Vérifier s&#039;il y a eu des erreurs et envoyer un e-mail si c&#039;est le cas&lt;br /&gt;
 if grep -q &amp;quot;Erreur&amp;quot; &amp;quot;$LOG_FILE&amp;quot;; then&lt;br /&gt;
   cat &amp;quot;$LOG_FILE&amp;quot; | mail -s &#039;Rapport de mise à jour LXC - Erreurs détectées&#039; &amp;quot;$EMAIL_DESTINATAIRE&amp;quot;&lt;br /&gt;
 fi&lt;br /&gt;
 &lt;br /&gt;
 exit 0&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Envoi des E-mails=&lt;br /&gt;
==Installation des logiciels de gestion des mails==&lt;br /&gt;
L&#039;envoi des mails nécessite l&#039;installation de &#039;&#039;&#039;mailutils&#039;&#039;&#039; et &#039;&#039;&#039;ssmtp&#039;&#039;&#039; :&lt;br /&gt;
  apt-get install mailutils ssmtp&lt;br /&gt;
==Configuration de ssmtp==&lt;br /&gt;
  vi /etc/ssmtp/ssmtp.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;ssmtp.conf&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
  #&lt;br /&gt;
  # Config file for sSMTP sendmail&lt;br /&gt;
  #&lt;br /&gt;
  # The person who gets all mail for userids &amp;lt; 1000&lt;br /&gt;
  # Make this empty to disable rewriting.&lt;br /&gt;
  root=toto@monmail.fr&lt;br /&gt;
  &lt;br /&gt;
  # The place where the mail goes. The actual machine name is required no &lt;br /&gt;
  # MX records are consulted. Commonly mailhosts are named mail.domain.com&lt;br /&gt;
  mailhub=smtp.gmail.com:587 (pour gmail)&lt;br /&gt;
  &lt;br /&gt;
  # Where will the mail seem to come from?&lt;br /&gt;
  # rewriteDomain=&lt;br /&gt;
 &lt;br /&gt;
  # The full hostname&lt;br /&gt;
  hostname=raspberrypi&lt;br /&gt;
  &lt;br /&gt;
  # Are users allowed to set their own From: address?&lt;br /&gt;
  # YES - Allow the user to specify their own From: address&lt;br /&gt;
  # NO - Use the system generated From: address&lt;br /&gt;
  FromLineOverride=YES&lt;br /&gt;
  UseTLS=YES&lt;br /&gt;
  UseSTARTTLS=YES&lt;br /&gt;
  AuthUser=toto@monfournisseur.com&lt;br /&gt;
  AuthPass=MonMotdePasseDeConnection&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Remarques :&#039;&#039;&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
::*&#039;&#039;Pour gmail, il faut créer un mot de passe d&#039;application dans les paramètre du compte google et l&#039;utiliser ici.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
::*&#039;&#039;Pour que la redirection de mails fonctionne, il faut que l&#039;adresse de destination finale soit différente de l&#039;adresse utilisée pour l&#039;identification pour l&#039;envoi des mails.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=Automatisation=&lt;br /&gt;
On automatise l&#039;exécution (dimache à 2h du matin) :&lt;br /&gt;
  crontab -e&lt;br /&gt;
  0 2 * * 7 /root/scripts/lxc_auto_update.sh&lt;/div&gt;</summary>
		<author><name>Domi</name></author>
	</entry>
	<entry>
		<id>https://wiki.lesitadom.fr/index.php?title=Mises_%C3%A0_jour_automatiques&amp;diff=1641</id>
		<title>Mises à jour automatiques</title>
		<link rel="alternate" type="text/html" href="https://wiki.lesitadom.fr/index.php?title=Mises_%C3%A0_jour_automatiques&amp;diff=1641"/>
		<updated>2025-05-15T17:29:44Z</updated>

		<summary type="html">&lt;p&gt;Domi : /* Configuration de ssmtp */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Script de mise à jour des conteneurs=&lt;br /&gt;
Afin d&#039;automatiser la mise à jour des conteneurs, on crée un script qui va&lt;br /&gt;
:*Mettre à jour les conteneurs alpine en fonctionnement&lt;br /&gt;
:*Créer un fichier de log&lt;br /&gt;
:*Corriger le fichier de log pour ne garder la trace que des deux dernières mises à jour&lt;br /&gt;
:*Envoyer un mail d&#039;alerte en cas d&#039;erreur&lt;br /&gt;
:*Redémarrer les conteneurs en prenant soin de démarrer le conteneur &#039;&#039;&#039;proxy&#039;&#039;&#039; en dernier&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
/root/scripts/&#039;&#039;&#039;lxc_auto_update.sh&#039;&#039;&#039; :&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 &lt;br /&gt;
 LOG_FILE=&amp;quot;/var/log/lxc_update.log&amp;quot;&lt;br /&gt;
 MAX_RUNS_TO_KEEP=2&lt;br /&gt;
 RUN_START_MARKER=&amp;quot;--- Début de l&#039;exécution du script ---&amp;quot;&lt;br /&gt;
 RUN_END_MARKER=&amp;quot;--- Fin de l&#039;exécution du script ---&amp;quot;&lt;br /&gt;
 PROXY_CONTAINER=&amp;quot;proxy&amp;quot;&lt;br /&gt;
 WEB_CONTAINERS=(&amp;quot;wp&amp;quot; &amp;quot;pmb&amp;quot; &amp;quot;wiki&amp;quot; &amp;quot;tables&amp;quot;) # Liste de tous les conteneurs web&lt;br /&gt;
 WEB_SERVICE_NAME=&amp;quot;apache2&amp;quot; # Nom du service web à vérifier (adapter si nécessaire)&lt;br /&gt;
 SLEEP_AFTER_RESTART=10 # Délai après le redémarrage des conteneurs web&lt;br /&gt;
 &lt;br /&gt;
 bavarder() {&lt;br /&gt;
   local message=&amp;quot;$1&amp;quot;&lt;br /&gt;
   echo &amp;quot;$(date &#039;+%Y-%m-%d %H:%M:%S&#039;) - $message&amp;quot; &amp;gt;&amp;gt; &amp;quot;$LOG_FILE&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 # Ajouter un marqueur de début d&#039;exécution&lt;br /&gt;
 bavarder &amp;quot;$RUN_START_MARKER&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 # Récupérer la liste des noms de conteneurs Alpine&lt;br /&gt;
 containers=$(lxc list --format csv | tail -n +2 | cut -d&#039;,&#039; -f1)&lt;br /&gt;
 bavarder &amp;quot;Liste des conteneurs récupérée : &#039;$containers&#039;&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 # Séparer les noms de conteneurs en un tableau&lt;br /&gt;
 IFS=$&#039;\n&#039; read -r -d &amp;lt;nowiki&amp;gt;&#039;&#039;&amp;lt;/nowiki&amp;gt; -a container_array &amp;lt;&amp;lt;&amp;lt; &amp;quot;$containers&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 # Boucle pour lancer les mises à jour&lt;br /&gt;
 {&lt;br /&gt;
   for container in &amp;quot;${container_array[@]}&amp;quot;; do&lt;br /&gt;
     bavarder &amp;quot;--- Début du traitement du conteneur : &#039;$container&#039; ---&amp;quot;&lt;br /&gt;
     config=$(lxc config show &amp;quot;$container&amp;quot;)&lt;br /&gt;
     if echo &amp;quot;$config&amp;quot; | grep -iq &amp;quot;alpine&amp;quot;; then&lt;br /&gt;
       bavarder &amp;quot;Le conteneur &#039;$container&#039; semble être basé sur Alpine.&amp;quot;&lt;br /&gt;
       is_running=$(lxc list --format csv | grep &amp;quot;^${container},&amp;quot; | grep &amp;quot;,RUNNING,&amp;quot;)&lt;br /&gt;
       if [ -n &amp;quot;$is_running&amp;quot; ]; then&lt;br /&gt;
         bavarder &amp;quot;Le conteneur &#039;$container&#039; est en cours d&#039;exécution, lancement de la mise à jour...&amp;quot;&lt;br /&gt;
         lxc exec &amp;quot;$container&amp;quot; -- sh -c &amp;quot;apk update &amp;amp;&amp;amp; apk upgrade --available&amp;quot;&lt;br /&gt;
         result=$?&lt;br /&gt;
         if [ &amp;quot;$result&amp;quot; -ne 0 ]; then&lt;br /&gt;
           bavarder &amp;quot;Erreur lors de la mise à jour de &#039;$container&#039;.&amp;quot;&lt;br /&gt;
         fi&lt;br /&gt;
       else&lt;br /&gt;
         bavarder &amp;quot;Le conteneur &#039;$container&#039; n&#039;est pas en cours d&#039;exécution, mise à jour ignorée.&amp;quot;&lt;br /&gt;
       fi&lt;br /&gt;
     else&lt;br /&gt;
       bavarder &amp;quot;Le conteneur &#039;$container&#039; ne semble pas être basé sur Alpine, mise à jour ignorée.&amp;quot;&lt;br /&gt;
     fi&lt;br /&gt;
     bavarder &amp;quot;--- Fin du traitement du conteneur : &#039;$container&#039; ---&amp;quot;&lt;br /&gt;
   done&lt;br /&gt;
 } &amp;gt;&amp;gt; &amp;quot;$LOG_FILE&amp;quot; 2&amp;gt;&amp;amp;1&lt;br /&gt;
 &lt;br /&gt;
 bavarder &amp;quot;Fin de la tentative de mise à jour des conteneurs.&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 # --- Début du redémarrage des conteneurs Alpine (sauf le proxy) ---&lt;br /&gt;
 bavarder &amp;quot;--- Début du redémarrage des conteneurs Alpine (sauf $PROXY_CONTAINER) ---&amp;quot;&lt;br /&gt;
 for container in &amp;quot;${container_array[@]}&amp;quot;; do&lt;br /&gt;
   if [ &amp;quot;$container&amp;quot; != &amp;quot;$PROXY_CONTAINER&amp;quot; ]; then&lt;br /&gt;
     config=$(lxc config show &amp;quot;$container&amp;quot;)&lt;br /&gt;
     if echo &amp;quot;$config&amp;quot; | grep -iq &amp;quot;alpine&amp;quot;; then&lt;br /&gt;
       is_running=$(lxc list --format csv | grep &amp;quot;^${container},&amp;quot; | grep &amp;quot;,RUNNING,&amp;quot;)&lt;br /&gt;
       if [ -n &amp;quot;$is_running&amp;quot; ]; then&lt;br /&gt;
         bavarder &amp;quot;Redémarrage du conteneur &#039;$container&#039;...&amp;quot;&lt;br /&gt;
         lxc restart &amp;quot;$container&amp;quot;&lt;br /&gt;
         sleep &amp;quot;$SLEEP_AFTER_RESTART&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
         # Vérifier l&#039;état du service web pour les conteneurs web&lt;br /&gt;
         is_web_container=0&lt;br /&gt;
         for web_container in &amp;quot;${WEB_CONTAINERS[@]}&amp;quot;; do&lt;br /&gt;
           if [ &amp;quot;$container&amp;quot; == &amp;quot;$web_container&amp;quot; ]; then&lt;br /&gt;
             is_web_container=1&lt;br /&gt;
             break&lt;br /&gt;
           fi&lt;br /&gt;
         done&lt;br /&gt;
 	if [ &amp;quot;$is_web_container&amp;quot; -eq 1 ]; then&lt;br /&gt;
           service_status=$(lxc exec &amp;quot;$container&amp;quot; -- rc-service &amp;quot;$WEB_SERVICE_NAME&amp;quot; status 2&amp;gt;&amp;amp;1)&lt;br /&gt;
           if ! echo &amp;quot;$service_status&amp;quot; | grep -q &amp;quot;started&amp;quot;; then&lt;br /&gt;
             bavarder &amp;quot;$WEB_SERVICE_NAME ne semble pas en cours d&#039;exécution dans &#039;$container&#039;, tentative de démarrage...&amp;quot;&lt;br /&gt;
             lxc exec &amp;quot;$container&amp;quot; -- rc-service &amp;quot;$WEB_SERVICE_NAME&amp;quot; start&lt;br /&gt;
             sleep 5&lt;br /&gt;
             service_status_after_start=$(lxc exec &amp;quot;$container&amp;quot; -- rc-service &amp;quot;$WEB_SERVICE_NAME&amp;quot; status 2&amp;gt;&amp;amp;1)&lt;br /&gt;
             if ! echo &amp;quot;$service_status_after_start&amp;quot; | grep -q &amp;quot;started&amp;quot;; then&lt;br /&gt;
               bavarder &amp;quot;Échec du démarrage de $WEB_SERVICE_NAME dans &#039;$container&#039;.&amp;quot;&lt;br /&gt;
             else&lt;br /&gt;
               bavarder &amp;quot;$WEB_SERVICE_NAME démarré avec succès dans &#039;$container&#039;.&amp;quot;&lt;br /&gt;
             fi&lt;br /&gt;
           else&lt;br /&gt;
             bavarder &amp;quot;$WEB_SERVICE_NAME semble être en cours d&#039;exécution dans &#039;$container&#039;.&amp;quot;&lt;br /&gt;
           fi&lt;br /&gt;
         fi&lt;br /&gt;
       fi&lt;br /&gt;
     fi&lt;br /&gt;
   fi&lt;br /&gt;
 done&lt;br /&gt;
 bavarder &amp;quot;--- Fin du redémarrage des conteneurs Alpine (sauf $PROXY_CONTAINER) ---&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 # --- Redémarrage du conteneur proxy en dernier ---&lt;br /&gt;
 bavarder &amp;quot;--- Début du redémarrage du conteneur proxy ($PROXY_CONTAINER) ---&amp;quot;&lt;br /&gt;
 is_proxy_running=$(lxc list --format csv | grep &amp;quot;^${PROXY_CONTAINER},&amp;quot; | grep &amp;quot;,RUNNING,&amp;quot;)&lt;br /&gt;
 if [ -n &amp;quot;$is_proxy_running&amp;quot; ]; then&lt;br /&gt;
   bavarder &amp;quot;Redémarrage du conteneur proxy &#039;$PROXY_CONTAINER&#039;...&amp;quot;&lt;br /&gt;
   lxc restart &amp;quot;$PROXY_CONTAINER&amp;quot;&lt;br /&gt;
   result=$?&lt;br /&gt;
   if [ &amp;quot;$result&amp;quot; -ne 0 ]; then&lt;br /&gt;
     bavarder &amp;quot;Erreur lors du redémarrage du conteneur proxy &#039;$PROXY_CONTAINER&#039;.&amp;quot;&lt;br /&gt;
   fi&lt;br /&gt;
 else&lt;br /&gt;
   bavarder &amp;quot;Le conteneur proxy &#039;$PROXY_CONTAINER&#039; n&#039;est pas en cours d&#039;exécution, redémarrage ignoré.&amp;quot;&lt;br /&gt;
 fi&lt;br /&gt;
 bavarder &amp;quot;--- Fin du redémarrage du conteneur proxy ($PROXY_CONTAINER) ---&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 # Ajouter un marqueur de fin d&#039;exécution&lt;br /&gt;
 bavarder &amp;quot;$RUN_END_MARKER&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 # --- Gestion de la rotation des logs ---&lt;br /&gt;
 if [ -f &amp;quot;$LOG_FILE&amp;quot; ]; then&lt;br /&gt;
   # Récupérer toutes les occurrences du marqueur de début d&#039;exécution&lt;br /&gt;
   start_markers=$(grep -c &amp;quot;^$RUN_START_MARKER&amp;quot; &amp;quot;$LOG_FILE&amp;quot;)&lt;br /&gt;
 &lt;br /&gt;
   # Calculer le nombre d&#039;exécutions à supprimer&lt;br /&gt;
   runs_to_remove=$((start_markers - MAX_RUNS_TO_KEEP))&lt;br /&gt;
 &lt;br /&gt;
   if [ &amp;quot;$runs_to_remove&amp;quot; -gt 0 ]; then&lt;br /&gt;
     # Utiliser awk pour ne conserver que les N dernières exécutions&lt;br /&gt;
     awk -v n=&amp;quot;$MAX_RUNS_TO_KEEP&amp;quot; -v start_marker=&amp;quot;$RUN_START_MARKER&amp;quot; -v end_marker=&amp;quot;$RUN_END_MARKER&amp;quot; &#039;&lt;br /&gt;
       BEGIN { count = 0; in_run = 0; }&lt;br /&gt;
       $0 ~ start_marker {&lt;br /&gt;
         count++;&lt;br /&gt;
         if (count &amp;gt; (NR - RSTART) + 1 - (n * (RLENGTH ? 1 : 0))) {&lt;br /&gt;
           in_run = 1;&lt;br /&gt;
         } else {&lt;br /&gt;
           in_run = 0;&lt;br /&gt;
           print;&lt;br /&gt;
         }&lt;br /&gt;
       }&lt;br /&gt;
       $0 ~ end_marker {&lt;br /&gt;
         if (!in_run) {&lt;br /&gt;
           print;&lt;br /&gt;
         }&lt;br /&gt;
       }&lt;br /&gt;
       &amp;lt;nowiki&amp;gt;!($0 ~ start_marker) &amp;amp;&amp;amp; !($0 ~ end_marker) {&lt;br /&gt;
          if (!in_run) {&lt;br /&gt;
            print;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      &#039; &amp;quot;$LOG_FILE&amp;quot; &amp;gt; &amp;quot;$LOG_FILE.tmp&amp;quot; &amp;amp;&amp;amp; mv &amp;quot;$LOG_FILE.tmp&amp;quot; &amp;quot;$LOG_FILE&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
  fi&lt;br /&gt;
  &lt;br /&gt;
  # Définir l&#039;adresse e-mail pour les notifications&lt;br /&gt;
 EMAIL_DESTINATAIRE=&amp;quot;toto@mail.com&amp;quot; # Remplace par ton adresse e-mail&lt;br /&gt;
 &lt;br /&gt;
 # Vérifier s&#039;il y a eu des erreurs et envoyer un e-mail si c&#039;est le cas&lt;br /&gt;
 if grep -q &amp;quot;Erreur&amp;quot; &amp;quot;$LOG_FILE&amp;quot;; then&lt;br /&gt;
   cat &amp;quot;$LOG_FILE&amp;quot; | mail -s &#039;Rapport de mise à jour LXC - Erreurs détectées&#039; &amp;quot;$EMAIL_DESTINATAIRE&amp;quot;&lt;br /&gt;
 fi&lt;br /&gt;
 &lt;br /&gt;
 exit 0&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Envoi des E-mails=&lt;br /&gt;
==Installation des logiciels de gestion des mails==&lt;br /&gt;
L&#039;envoi des mails nécessite l&#039;installation de &#039;&#039;&#039;mailutils&#039;&#039;&#039; et &#039;&#039;&#039;ssmtp&#039;&#039;&#039; :&lt;br /&gt;
  apt-get install mailutils ssmtp&lt;br /&gt;
==Configuration de ssmtp==&lt;br /&gt;
  vi /etc/ssmtp/ssmtp.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;ssmtp.conf&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
  #&lt;br /&gt;
  # Config file for sSMTP sendmail&lt;br /&gt;
  #&lt;br /&gt;
  # The person who gets all mail for userids &amp;lt; 1000&lt;br /&gt;
  # Make this empty to disable rewriting.&lt;br /&gt;
  root=toto@monmail.fr&lt;br /&gt;
  &lt;br /&gt;
  # The place where the mail goes. The actual machine name is required no &lt;br /&gt;
  # MX records are consulted. Commonly mailhosts are named mail.domain.com&lt;br /&gt;
  mailhub=smtp.gmail.com:587 (pour gmail)&lt;br /&gt;
  &lt;br /&gt;
  # Where will the mail seem to come from?&lt;br /&gt;
  # rewriteDomain=&lt;br /&gt;
 &lt;br /&gt;
  # The full hostname&lt;br /&gt;
  hostname=raspberrypi&lt;br /&gt;
  &lt;br /&gt;
  # Are users allowed to set their own From: address?&lt;br /&gt;
  # YES - Allow the user to specify their own From: address&lt;br /&gt;
  # NO - Use the system generated From: address&lt;br /&gt;
  FromLineOverride=YES&lt;br /&gt;
  UseTLS=YES&lt;br /&gt;
  UseSTARTTLS=YES&lt;br /&gt;
  AuthUser=toto@monfournisseur.com&lt;br /&gt;
  AuthPass=MonMotdePasseDeConnection&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Remarques :&#039;&#039;&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
::*&#039;&#039;Pour gmail, il faut créer un mot de passe d&#039;application dans les paramètre du compte google et l&#039;utiliser ici.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
::*&#039;&#039;Pour que la redirection de mails fonctionne, il faut que l&#039;adresse de destination finale soit différente de l&#039;adresse utilisée pour l&#039;identification pour l&#039;envoi des mails.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Automatisation==&lt;br /&gt;
On automatise l&#039;exécution (dimache à 2h du matin) :&lt;br /&gt;
  crontab -e&lt;br /&gt;
  0 2 * * 7 /root/scripts/lxc_auto_update.sh&lt;/div&gt;</summary>
		<author><name>Domi</name></author>
	</entry>
	<entry>
		<id>https://wiki.lesitadom.fr/index.php?title=Mises_%C3%A0_jour_automatiques&amp;diff=1640</id>
		<title>Mises à jour automatiques</title>
		<link rel="alternate" type="text/html" href="https://wiki.lesitadom.fr/index.php?title=Mises_%C3%A0_jour_automatiques&amp;diff=1640"/>
		<updated>2025-05-15T17:28:22Z</updated>

		<summary type="html">&lt;p&gt;Domi : /* Script de mise à jour des conteneurs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Script de mise à jour des conteneurs=&lt;br /&gt;
Afin d&#039;automatiser la mise à jour des conteneurs, on crée un script qui va&lt;br /&gt;
:*Mettre à jour les conteneurs alpine en fonctionnement&lt;br /&gt;
:*Créer un fichier de log&lt;br /&gt;
:*Corriger le fichier de log pour ne garder la trace que des deux dernières mises à jour&lt;br /&gt;
:*Envoyer un mail d&#039;alerte en cas d&#039;erreur&lt;br /&gt;
:*Redémarrer les conteneurs en prenant soin de démarrer le conteneur &#039;&#039;&#039;proxy&#039;&#039;&#039; en dernier&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
/root/scripts/&#039;&#039;&#039;lxc_auto_update.sh&#039;&#039;&#039; :&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 &lt;br /&gt;
 LOG_FILE=&amp;quot;/var/log/lxc_update.log&amp;quot;&lt;br /&gt;
 MAX_RUNS_TO_KEEP=2&lt;br /&gt;
 RUN_START_MARKER=&amp;quot;--- Début de l&#039;exécution du script ---&amp;quot;&lt;br /&gt;
 RUN_END_MARKER=&amp;quot;--- Fin de l&#039;exécution du script ---&amp;quot;&lt;br /&gt;
 PROXY_CONTAINER=&amp;quot;proxy&amp;quot;&lt;br /&gt;
 WEB_CONTAINERS=(&amp;quot;wp&amp;quot; &amp;quot;pmb&amp;quot; &amp;quot;wiki&amp;quot; &amp;quot;tables&amp;quot;) # Liste de tous les conteneurs web&lt;br /&gt;
 WEB_SERVICE_NAME=&amp;quot;apache2&amp;quot; # Nom du service web à vérifier (adapter si nécessaire)&lt;br /&gt;
 SLEEP_AFTER_RESTART=10 # Délai après le redémarrage des conteneurs web&lt;br /&gt;
 &lt;br /&gt;
 bavarder() {&lt;br /&gt;
   local message=&amp;quot;$1&amp;quot;&lt;br /&gt;
   echo &amp;quot;$(date &#039;+%Y-%m-%d %H:%M:%S&#039;) - $message&amp;quot; &amp;gt;&amp;gt; &amp;quot;$LOG_FILE&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 # Ajouter un marqueur de début d&#039;exécution&lt;br /&gt;
 bavarder &amp;quot;$RUN_START_MARKER&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 # Récupérer la liste des noms de conteneurs Alpine&lt;br /&gt;
 containers=$(lxc list --format csv | tail -n +2 | cut -d&#039;,&#039; -f1)&lt;br /&gt;
 bavarder &amp;quot;Liste des conteneurs récupérée : &#039;$containers&#039;&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 # Séparer les noms de conteneurs en un tableau&lt;br /&gt;
 IFS=$&#039;\n&#039; read -r -d &amp;lt;nowiki&amp;gt;&#039;&#039;&amp;lt;/nowiki&amp;gt; -a container_array &amp;lt;&amp;lt;&amp;lt; &amp;quot;$containers&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 # Boucle pour lancer les mises à jour&lt;br /&gt;
 {&lt;br /&gt;
   for container in &amp;quot;${container_array[@]}&amp;quot;; do&lt;br /&gt;
     bavarder &amp;quot;--- Début du traitement du conteneur : &#039;$container&#039; ---&amp;quot;&lt;br /&gt;
     config=$(lxc config show &amp;quot;$container&amp;quot;)&lt;br /&gt;
     if echo &amp;quot;$config&amp;quot; | grep -iq &amp;quot;alpine&amp;quot;; then&lt;br /&gt;
       bavarder &amp;quot;Le conteneur &#039;$container&#039; semble être basé sur Alpine.&amp;quot;&lt;br /&gt;
       is_running=$(lxc list --format csv | grep &amp;quot;^${container},&amp;quot; | grep &amp;quot;,RUNNING,&amp;quot;)&lt;br /&gt;
       if [ -n &amp;quot;$is_running&amp;quot; ]; then&lt;br /&gt;
         bavarder &amp;quot;Le conteneur &#039;$container&#039; est en cours d&#039;exécution, lancement de la mise à jour...&amp;quot;&lt;br /&gt;
         lxc exec &amp;quot;$container&amp;quot; -- sh -c &amp;quot;apk update &amp;amp;&amp;amp; apk upgrade --available&amp;quot;&lt;br /&gt;
         result=$?&lt;br /&gt;
         if [ &amp;quot;$result&amp;quot; -ne 0 ]; then&lt;br /&gt;
           bavarder &amp;quot;Erreur lors de la mise à jour de &#039;$container&#039;.&amp;quot;&lt;br /&gt;
         fi&lt;br /&gt;
       else&lt;br /&gt;
         bavarder &amp;quot;Le conteneur &#039;$container&#039; n&#039;est pas en cours d&#039;exécution, mise à jour ignorée.&amp;quot;&lt;br /&gt;
       fi&lt;br /&gt;
     else&lt;br /&gt;
       bavarder &amp;quot;Le conteneur &#039;$container&#039; ne semble pas être basé sur Alpine, mise à jour ignorée.&amp;quot;&lt;br /&gt;
     fi&lt;br /&gt;
     bavarder &amp;quot;--- Fin du traitement du conteneur : &#039;$container&#039; ---&amp;quot;&lt;br /&gt;
   done&lt;br /&gt;
 } &amp;gt;&amp;gt; &amp;quot;$LOG_FILE&amp;quot; 2&amp;gt;&amp;amp;1&lt;br /&gt;
 &lt;br /&gt;
 bavarder &amp;quot;Fin de la tentative de mise à jour des conteneurs.&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 # --- Début du redémarrage des conteneurs Alpine (sauf le proxy) ---&lt;br /&gt;
 bavarder &amp;quot;--- Début du redémarrage des conteneurs Alpine (sauf $PROXY_CONTAINER) ---&amp;quot;&lt;br /&gt;
 for container in &amp;quot;${container_array[@]}&amp;quot;; do&lt;br /&gt;
   if [ &amp;quot;$container&amp;quot; != &amp;quot;$PROXY_CONTAINER&amp;quot; ]; then&lt;br /&gt;
     config=$(lxc config show &amp;quot;$container&amp;quot;)&lt;br /&gt;
     if echo &amp;quot;$config&amp;quot; | grep -iq &amp;quot;alpine&amp;quot;; then&lt;br /&gt;
       is_running=$(lxc list --format csv | grep &amp;quot;^${container},&amp;quot; | grep &amp;quot;,RUNNING,&amp;quot;)&lt;br /&gt;
       if [ -n &amp;quot;$is_running&amp;quot; ]; then&lt;br /&gt;
         bavarder &amp;quot;Redémarrage du conteneur &#039;$container&#039;...&amp;quot;&lt;br /&gt;
         lxc restart &amp;quot;$container&amp;quot;&lt;br /&gt;
         sleep &amp;quot;$SLEEP_AFTER_RESTART&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
         # Vérifier l&#039;état du service web pour les conteneurs web&lt;br /&gt;
         is_web_container=0&lt;br /&gt;
         for web_container in &amp;quot;${WEB_CONTAINERS[@]}&amp;quot;; do&lt;br /&gt;
           if [ &amp;quot;$container&amp;quot; == &amp;quot;$web_container&amp;quot; ]; then&lt;br /&gt;
             is_web_container=1&lt;br /&gt;
             break&lt;br /&gt;
           fi&lt;br /&gt;
         done&lt;br /&gt;
 	if [ &amp;quot;$is_web_container&amp;quot; -eq 1 ]; then&lt;br /&gt;
           service_status=$(lxc exec &amp;quot;$container&amp;quot; -- rc-service &amp;quot;$WEB_SERVICE_NAME&amp;quot; status 2&amp;gt;&amp;amp;1)&lt;br /&gt;
           if ! echo &amp;quot;$service_status&amp;quot; | grep -q &amp;quot;started&amp;quot;; then&lt;br /&gt;
             bavarder &amp;quot;$WEB_SERVICE_NAME ne semble pas en cours d&#039;exécution dans &#039;$container&#039;, tentative de démarrage...&amp;quot;&lt;br /&gt;
             lxc exec &amp;quot;$container&amp;quot; -- rc-service &amp;quot;$WEB_SERVICE_NAME&amp;quot; start&lt;br /&gt;
             sleep 5&lt;br /&gt;
             service_status_after_start=$(lxc exec &amp;quot;$container&amp;quot; -- rc-service &amp;quot;$WEB_SERVICE_NAME&amp;quot; status 2&amp;gt;&amp;amp;1)&lt;br /&gt;
             if ! echo &amp;quot;$service_status_after_start&amp;quot; | grep -q &amp;quot;started&amp;quot;; then&lt;br /&gt;
               bavarder &amp;quot;Échec du démarrage de $WEB_SERVICE_NAME dans &#039;$container&#039;.&amp;quot;&lt;br /&gt;
             else&lt;br /&gt;
               bavarder &amp;quot;$WEB_SERVICE_NAME démarré avec succès dans &#039;$container&#039;.&amp;quot;&lt;br /&gt;
             fi&lt;br /&gt;
           else&lt;br /&gt;
             bavarder &amp;quot;$WEB_SERVICE_NAME semble être en cours d&#039;exécution dans &#039;$container&#039;.&amp;quot;&lt;br /&gt;
           fi&lt;br /&gt;
         fi&lt;br /&gt;
       fi&lt;br /&gt;
     fi&lt;br /&gt;
   fi&lt;br /&gt;
 done&lt;br /&gt;
 bavarder &amp;quot;--- Fin du redémarrage des conteneurs Alpine (sauf $PROXY_CONTAINER) ---&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 # --- Redémarrage du conteneur proxy en dernier ---&lt;br /&gt;
 bavarder &amp;quot;--- Début du redémarrage du conteneur proxy ($PROXY_CONTAINER) ---&amp;quot;&lt;br /&gt;
 is_proxy_running=$(lxc list --format csv | grep &amp;quot;^${PROXY_CONTAINER},&amp;quot; | grep &amp;quot;,RUNNING,&amp;quot;)&lt;br /&gt;
 if [ -n &amp;quot;$is_proxy_running&amp;quot; ]; then&lt;br /&gt;
   bavarder &amp;quot;Redémarrage du conteneur proxy &#039;$PROXY_CONTAINER&#039;...&amp;quot;&lt;br /&gt;
   lxc restart &amp;quot;$PROXY_CONTAINER&amp;quot;&lt;br /&gt;
   result=$?&lt;br /&gt;
   if [ &amp;quot;$result&amp;quot; -ne 0 ]; then&lt;br /&gt;
     bavarder &amp;quot;Erreur lors du redémarrage du conteneur proxy &#039;$PROXY_CONTAINER&#039;.&amp;quot;&lt;br /&gt;
   fi&lt;br /&gt;
 else&lt;br /&gt;
   bavarder &amp;quot;Le conteneur proxy &#039;$PROXY_CONTAINER&#039; n&#039;est pas en cours d&#039;exécution, redémarrage ignoré.&amp;quot;&lt;br /&gt;
 fi&lt;br /&gt;
 bavarder &amp;quot;--- Fin du redémarrage du conteneur proxy ($PROXY_CONTAINER) ---&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 # Ajouter un marqueur de fin d&#039;exécution&lt;br /&gt;
 bavarder &amp;quot;$RUN_END_MARKER&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 # --- Gestion de la rotation des logs ---&lt;br /&gt;
 if [ -f &amp;quot;$LOG_FILE&amp;quot; ]; then&lt;br /&gt;
   # Récupérer toutes les occurrences du marqueur de début d&#039;exécution&lt;br /&gt;
   start_markers=$(grep -c &amp;quot;^$RUN_START_MARKER&amp;quot; &amp;quot;$LOG_FILE&amp;quot;)&lt;br /&gt;
 &lt;br /&gt;
   # Calculer le nombre d&#039;exécutions à supprimer&lt;br /&gt;
   runs_to_remove=$((start_markers - MAX_RUNS_TO_KEEP))&lt;br /&gt;
 &lt;br /&gt;
   if [ &amp;quot;$runs_to_remove&amp;quot; -gt 0 ]; then&lt;br /&gt;
     # Utiliser awk pour ne conserver que les N dernières exécutions&lt;br /&gt;
     awk -v n=&amp;quot;$MAX_RUNS_TO_KEEP&amp;quot; -v start_marker=&amp;quot;$RUN_START_MARKER&amp;quot; -v end_marker=&amp;quot;$RUN_END_MARKER&amp;quot; &#039;&lt;br /&gt;
       BEGIN { count = 0; in_run = 0; }&lt;br /&gt;
       $0 ~ start_marker {&lt;br /&gt;
         count++;&lt;br /&gt;
         if (count &amp;gt; (NR - RSTART) + 1 - (n * (RLENGTH ? 1 : 0))) {&lt;br /&gt;
           in_run = 1;&lt;br /&gt;
         } else {&lt;br /&gt;
           in_run = 0;&lt;br /&gt;
           print;&lt;br /&gt;
         }&lt;br /&gt;
       }&lt;br /&gt;
       $0 ~ end_marker {&lt;br /&gt;
         if (!in_run) {&lt;br /&gt;
           print;&lt;br /&gt;
         }&lt;br /&gt;
       }&lt;br /&gt;
       &amp;lt;nowiki&amp;gt;!($0 ~ start_marker) &amp;amp;&amp;amp; !($0 ~ end_marker) {&lt;br /&gt;
          if (!in_run) {&lt;br /&gt;
            print;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      &#039; &amp;quot;$LOG_FILE&amp;quot; &amp;gt; &amp;quot;$LOG_FILE.tmp&amp;quot; &amp;amp;&amp;amp; mv &amp;quot;$LOG_FILE.tmp&amp;quot; &amp;quot;$LOG_FILE&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
  fi&lt;br /&gt;
  &lt;br /&gt;
  # Définir l&#039;adresse e-mail pour les notifications&lt;br /&gt;
 EMAIL_DESTINATAIRE=&amp;quot;toto@mail.com&amp;quot; # Remplace par ton adresse e-mail&lt;br /&gt;
 &lt;br /&gt;
 # Vérifier s&#039;il y a eu des erreurs et envoyer un e-mail si c&#039;est le cas&lt;br /&gt;
 if grep -q &amp;quot;Erreur&amp;quot; &amp;quot;$LOG_FILE&amp;quot;; then&lt;br /&gt;
   cat &amp;quot;$LOG_FILE&amp;quot; | mail -s &#039;Rapport de mise à jour LXC - Erreurs détectées&#039; &amp;quot;$EMAIL_DESTINATAIRE&amp;quot;&lt;br /&gt;
 fi&lt;br /&gt;
 &lt;br /&gt;
 exit 0&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Envoi des E-mails=&lt;br /&gt;
==Installation des logiciels de gestion des mails==&lt;br /&gt;
L&#039;envoi des mails nécessite l&#039;installation de &#039;&#039;&#039;mailutils&#039;&#039;&#039; et &#039;&#039;&#039;ssmtp&#039;&#039;&#039; :&lt;br /&gt;
  apt-get install mailutils ssmtp&lt;br /&gt;
==Configuration de ssmtp==&lt;br /&gt;
  vi /etc/ssmtp/ssmtp.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;ssmtp.conf&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
  #&lt;br /&gt;
  # Config file for sSMTP sendmail&lt;br /&gt;
  #&lt;br /&gt;
  # The person who gets all mail for userids &amp;lt; 1000&lt;br /&gt;
  # Make this empty to disable rewriting.&lt;br /&gt;
  root=toto@monmail.fr&lt;br /&gt;
  &lt;br /&gt;
  # The place where the mail goes. The actual machine name is required no &lt;br /&gt;
  # MX records are consulted. Commonly mailhosts are named mail.domain.com&lt;br /&gt;
  mailhub=smtp.gmail.com:587 (pour gmail)&lt;br /&gt;
  &lt;br /&gt;
  # Where will the mail seem to come from?&lt;br /&gt;
  # rewriteDomain=&lt;br /&gt;
 &lt;br /&gt;
  # The full hostname&lt;br /&gt;
  hostname=raspberrypi&lt;br /&gt;
  &lt;br /&gt;
  # Are users allowed to set their own From: address?&lt;br /&gt;
  # YES - Allow the user to specify their own From: address&lt;br /&gt;
  # NO - Use the system generated From: address&lt;br /&gt;
  FromLineOverride=YES&lt;br /&gt;
  UseTLS=YES&lt;br /&gt;
  UseSTARTTLS=YES&lt;br /&gt;
  AuthUser=toto@monfournisseur.com&lt;br /&gt;
  AuthPass=MonMotdePasseDeConnection&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Remarques :&#039;&#039;&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
::*&#039;&#039;Pour gmail, il faut créer un mot de passe d&#039;application dans les paramètre du compte google et l&#039;utiliser ici.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
::*&#039;&#039;Pour que la redirection de mails fonctionne, il faut que l&#039;adresse de destination finale soit différente de l&#039;adresse utilisée pour l&#039;identification pour l&#039;envoi des mails.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
On automatise l&#039;exécution (dimache à 2h du matin) :&lt;br /&gt;
  crontab -e&lt;br /&gt;
  0 2 * * 7 /root/scripts/lxc_auto_update.sh&lt;/div&gt;</summary>
		<author><name>Domi</name></author>
	</entry>
	<entry>
		<id>https://wiki.lesitadom.fr/index.php?title=Mises_%C3%A0_jour_automatiques&amp;diff=1639</id>
		<title>Mises à jour automatiques</title>
		<link rel="alternate" type="text/html" href="https://wiki.lesitadom.fr/index.php?title=Mises_%C3%A0_jour_automatiques&amp;diff=1639"/>
		<updated>2025-05-15T16:56:15Z</updated>

		<summary type="html">&lt;p&gt;Domi : /* Script de mise à jour des conteneurs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Script de mise à jour des conteneurs=&lt;br /&gt;
Au niveau du système hôte, on ajoute le script : &lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
/root/scripts/&#039;&#039;&#039;lxc_auto_update.sh&#039;&#039;&#039; :&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 &lt;br /&gt;
 LOG_FILE=&amp;quot;/var/log/lxc_update.log&amp;quot;&lt;br /&gt;
 MAX_RUNS_TO_KEEP=2&lt;br /&gt;
 RUN_START_MARKER=&amp;quot;--- Début de l&#039;exécution du script ---&amp;quot;&lt;br /&gt;
 RUN_END_MARKER=&amp;quot;--- Fin de l&#039;exécution du script ---&amp;quot;&lt;br /&gt;
 PROXY_CONTAINER=&amp;quot;proxy&amp;quot;&lt;br /&gt;
 WEB_CONTAINERS=(&amp;quot;wp&amp;quot; &amp;quot;pmb&amp;quot; &amp;quot;wiki&amp;quot; &amp;quot;tables&amp;quot;) # Liste de tous les conteneurs web&lt;br /&gt;
 WEB_SERVICE_NAME=&amp;quot;apache2&amp;quot; # Nom du service web à vérifier (adapter si nécessaire)&lt;br /&gt;
 SLEEP_AFTER_RESTART=10 # Délai après le redémarrage des conteneurs web&lt;br /&gt;
 &lt;br /&gt;
 bavarder() {&lt;br /&gt;
   local message=&amp;quot;$1&amp;quot;&lt;br /&gt;
   echo &amp;quot;$(date &#039;+%Y-%m-%d %H:%M:%S&#039;) - $message&amp;quot; &amp;gt;&amp;gt; &amp;quot;$LOG_FILE&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 # Ajouter un marqueur de début d&#039;exécution&lt;br /&gt;
 bavarder &amp;quot;$RUN_START_MARKER&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 # Récupérer la liste des noms de conteneurs Alpine&lt;br /&gt;
 containers=$(lxc list --format csv | tail -n +2 | cut -d&#039;,&#039; -f1)&lt;br /&gt;
 bavarder &amp;quot;Liste des conteneurs récupérée : &#039;$containers&#039;&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 # Séparer les noms de conteneurs en un tableau&lt;br /&gt;
 IFS=$&#039;\n&#039; read -r -d &amp;lt;nowiki&amp;gt;&#039;&#039;&amp;lt;/nowiki&amp;gt; -a container_array &amp;lt;&amp;lt;&amp;lt; &amp;quot;$containers&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 # Boucle pour lancer les mises à jour&lt;br /&gt;
 {&lt;br /&gt;
   for container in &amp;quot;${container_array[@]}&amp;quot;; do&lt;br /&gt;
     bavarder &amp;quot;--- Début du traitement du conteneur : &#039;$container&#039; ---&amp;quot;&lt;br /&gt;
     config=$(lxc config show &amp;quot;$container&amp;quot;)&lt;br /&gt;
     if echo &amp;quot;$config&amp;quot; | grep -iq &amp;quot;alpine&amp;quot;; then&lt;br /&gt;
       bavarder &amp;quot;Le conteneur &#039;$container&#039; semble être basé sur Alpine.&amp;quot;&lt;br /&gt;
       is_running=$(lxc list --format csv | grep &amp;quot;^${container},&amp;quot; | grep &amp;quot;,RUNNING,&amp;quot;)&lt;br /&gt;
       if [ -n &amp;quot;$is_running&amp;quot; ]; then&lt;br /&gt;
         bavarder &amp;quot;Le conteneur &#039;$container&#039; est en cours d&#039;exécution, lancement de la mise à jour...&amp;quot;&lt;br /&gt;
         lxc exec &amp;quot;$container&amp;quot; -- sh -c &amp;quot;apk update &amp;amp;&amp;amp; apk upgrade --available&amp;quot;&lt;br /&gt;
         result=$?&lt;br /&gt;
         if [ &amp;quot;$result&amp;quot; -ne 0 ]; then&lt;br /&gt;
           bavarder &amp;quot;Erreur lors de la mise à jour de &#039;$container&#039;.&amp;quot;&lt;br /&gt;
         fi&lt;br /&gt;
       else&lt;br /&gt;
         bavarder &amp;quot;Le conteneur &#039;$container&#039; n&#039;est pas en cours d&#039;exécution, mise à jour ignorée.&amp;quot;&lt;br /&gt;
       fi&lt;br /&gt;
     else&lt;br /&gt;
       bavarder &amp;quot;Le conteneur &#039;$container&#039; ne semble pas être basé sur Alpine, mise à jour ignorée.&amp;quot;&lt;br /&gt;
     fi&lt;br /&gt;
     bavarder &amp;quot;--- Fin du traitement du conteneur : &#039;$container&#039; ---&amp;quot;&lt;br /&gt;
   done&lt;br /&gt;
 } &amp;gt;&amp;gt; &amp;quot;$LOG_FILE&amp;quot; 2&amp;gt;&amp;amp;1&lt;br /&gt;
 &lt;br /&gt;
 bavarder &amp;quot;Fin de la tentative de mise à jour des conteneurs.&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 # --- Début du redémarrage des conteneurs Alpine (sauf le proxy) ---&lt;br /&gt;
 bavarder &amp;quot;--- Début du redémarrage des conteneurs Alpine (sauf $PROXY_CONTAINER) ---&amp;quot;&lt;br /&gt;
 for container in &amp;quot;${container_array[@]}&amp;quot;; do&lt;br /&gt;
   if [ &amp;quot;$container&amp;quot; != &amp;quot;$PROXY_CONTAINER&amp;quot; ]; then&lt;br /&gt;
     config=$(lxc config show &amp;quot;$container&amp;quot;)&lt;br /&gt;
     if echo &amp;quot;$config&amp;quot; | grep -iq &amp;quot;alpine&amp;quot;; then&lt;br /&gt;
       is_running=$(lxc list --format csv | grep &amp;quot;^${container},&amp;quot; | grep &amp;quot;,RUNNING,&amp;quot;)&lt;br /&gt;
       if [ -n &amp;quot;$is_running&amp;quot; ]; then&lt;br /&gt;
         bavarder &amp;quot;Redémarrage du conteneur &#039;$container&#039;...&amp;quot;&lt;br /&gt;
         lxc restart &amp;quot;$container&amp;quot;&lt;br /&gt;
         sleep &amp;quot;$SLEEP_AFTER_RESTART&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
         # Vérifier l&#039;état du service web pour les conteneurs web&lt;br /&gt;
         is_web_container=0&lt;br /&gt;
         for web_container in &amp;quot;${WEB_CONTAINERS[@]}&amp;quot;; do&lt;br /&gt;
           if [ &amp;quot;$container&amp;quot; == &amp;quot;$web_container&amp;quot; ]; then&lt;br /&gt;
             is_web_container=1&lt;br /&gt;
             break&lt;br /&gt;
           fi&lt;br /&gt;
         done&lt;br /&gt;
 	if [ &amp;quot;$is_web_container&amp;quot; -eq 1 ]; then&lt;br /&gt;
           service_status=$(lxc exec &amp;quot;$container&amp;quot; -- rc-service &amp;quot;$WEB_SERVICE_NAME&amp;quot; status 2&amp;gt;&amp;amp;1)&lt;br /&gt;
           if ! echo &amp;quot;$service_status&amp;quot; | grep -q &amp;quot;started&amp;quot;; then&lt;br /&gt;
             bavarder &amp;quot;$WEB_SERVICE_NAME ne semble pas en cours d&#039;exécution dans &#039;$container&#039;, tentative de démarrage...&amp;quot;&lt;br /&gt;
             lxc exec &amp;quot;$container&amp;quot; -- rc-service &amp;quot;$WEB_SERVICE_NAME&amp;quot; start&lt;br /&gt;
             sleep 5&lt;br /&gt;
             service_status_after_start=$(lxc exec &amp;quot;$container&amp;quot; -- rc-service &amp;quot;$WEB_SERVICE_NAME&amp;quot; status 2&amp;gt;&amp;amp;1)&lt;br /&gt;
             if ! echo &amp;quot;$service_status_after_start&amp;quot; | grep -q &amp;quot;started&amp;quot;; then&lt;br /&gt;
               bavarder &amp;quot;Échec du démarrage de $WEB_SERVICE_NAME dans &#039;$container&#039;.&amp;quot;&lt;br /&gt;
             else&lt;br /&gt;
               bavarder &amp;quot;$WEB_SERVICE_NAME démarré avec succès dans &#039;$container&#039;.&amp;quot;&lt;br /&gt;
             fi&lt;br /&gt;
           else&lt;br /&gt;
             bavarder &amp;quot;$WEB_SERVICE_NAME semble être en cours d&#039;exécution dans &#039;$container&#039;.&amp;quot;&lt;br /&gt;
           fi&lt;br /&gt;
         fi&lt;br /&gt;
       fi&lt;br /&gt;
     fi&lt;br /&gt;
   fi&lt;br /&gt;
 done&lt;br /&gt;
 bavarder &amp;quot;--- Fin du redémarrage des conteneurs Alpine (sauf $PROXY_CONTAINER) ---&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 # --- Redémarrage du conteneur proxy en dernier ---&lt;br /&gt;
 bavarder &amp;quot;--- Début du redémarrage du conteneur proxy ($PROXY_CONTAINER) ---&amp;quot;&lt;br /&gt;
 is_proxy_running=$(lxc list --format csv | grep &amp;quot;^${PROXY_CONTAINER},&amp;quot; | grep &amp;quot;,RUNNING,&amp;quot;)&lt;br /&gt;
 if [ -n &amp;quot;$is_proxy_running&amp;quot; ]; then&lt;br /&gt;
   bavarder &amp;quot;Redémarrage du conteneur proxy &#039;$PROXY_CONTAINER&#039;...&amp;quot;&lt;br /&gt;
   lxc restart &amp;quot;$PROXY_CONTAINER&amp;quot;&lt;br /&gt;
   result=$?&lt;br /&gt;
   if [ &amp;quot;$result&amp;quot; -ne 0 ]; then&lt;br /&gt;
     bavarder &amp;quot;Erreur lors du redémarrage du conteneur proxy &#039;$PROXY_CONTAINER&#039;.&amp;quot;&lt;br /&gt;
   fi&lt;br /&gt;
 else&lt;br /&gt;
   bavarder &amp;quot;Le conteneur proxy &#039;$PROXY_CONTAINER&#039; n&#039;est pas en cours d&#039;exécution, redémarrage ignoré.&amp;quot;&lt;br /&gt;
 fi&lt;br /&gt;
 bavarder &amp;quot;--- Fin du redémarrage du conteneur proxy ($PROXY_CONTAINER) ---&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 # Ajouter un marqueur de fin d&#039;exécution&lt;br /&gt;
 bavarder &amp;quot;$RUN_END_MARKER&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 # --- Gestion de la rotation des logs ---&lt;br /&gt;
 if [ -f &amp;quot;$LOG_FILE&amp;quot; ]; then&lt;br /&gt;
   # Récupérer toutes les occurrences du marqueur de début d&#039;exécution&lt;br /&gt;
   start_markers=$(grep -c &amp;quot;^$RUN_START_MARKER&amp;quot; &amp;quot;$LOG_FILE&amp;quot;)&lt;br /&gt;
 &lt;br /&gt;
   # Calculer le nombre d&#039;exécutions à supprimer&lt;br /&gt;
   runs_to_remove=$((start_markers - MAX_RUNS_TO_KEEP))&lt;br /&gt;
 &lt;br /&gt;
   if [ &amp;quot;$runs_to_remove&amp;quot; -gt 0 ]; then&lt;br /&gt;
     # Utiliser awk pour ne conserver que les N dernières exécutions&lt;br /&gt;
     awk -v n=&amp;quot;$MAX_RUNS_TO_KEEP&amp;quot; -v start_marker=&amp;quot;$RUN_START_MARKER&amp;quot; -v end_marker=&amp;quot;$RUN_END_MARKER&amp;quot; &#039;&lt;br /&gt;
       BEGIN { count = 0; in_run = 0; }&lt;br /&gt;
       $0 ~ start_marker {&lt;br /&gt;
         count++;&lt;br /&gt;
         if (count &amp;gt; (NR - RSTART) + 1 - (n * (RLENGTH ? 1 : 0))) {&lt;br /&gt;
           in_run = 1;&lt;br /&gt;
         } else {&lt;br /&gt;
           in_run = 0;&lt;br /&gt;
           print;&lt;br /&gt;
         }&lt;br /&gt;
       }&lt;br /&gt;
       $0 ~ end_marker {&lt;br /&gt;
         if (!in_run) {&lt;br /&gt;
           print;&lt;br /&gt;
         }&lt;br /&gt;
       }&lt;br /&gt;
       &amp;lt;nowiki&amp;gt;!($0 ~ start_marker) &amp;amp;&amp;amp; !($0 ~ end_marker) {&lt;br /&gt;
          if (!in_run) {&lt;br /&gt;
            print;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      &#039; &amp;quot;$LOG_FILE&amp;quot; &amp;gt; &amp;quot;$LOG_FILE.tmp&amp;quot; &amp;amp;&amp;amp; mv &amp;quot;$LOG_FILE.tmp&amp;quot; &amp;quot;$LOG_FILE&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
  fi&lt;br /&gt;
  &lt;br /&gt;
  # Définir l&#039;adresse e-mail pour les notifications&lt;br /&gt;
 EMAIL_DESTINATAIRE=&amp;quot;toto@mail.com&amp;quot; # Remplace par ton adresse e-mail&lt;br /&gt;
 &lt;br /&gt;
 # Vérifier s&#039;il y a eu des erreurs et envoyer un e-mail si c&#039;est le cas&lt;br /&gt;
 if grep -q &amp;quot;Erreur&amp;quot; &amp;quot;$LOG_FILE&amp;quot;; then&lt;br /&gt;
   cat &amp;quot;$LOG_FILE&amp;quot; | mail -s &#039;Rapport de mise à jour LXC - Erreurs détectées&#039; &amp;quot;$EMAIL_DESTINATAIRE&amp;quot;&lt;br /&gt;
 fi&lt;br /&gt;
 &lt;br /&gt;
 exit 0&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Envoi des E-mails=&lt;br /&gt;
==Installation des logiciels de gestion des mails==&lt;br /&gt;
L&#039;envoi des mails nécessite l&#039;installation de &#039;&#039;&#039;mailutils&#039;&#039;&#039; et &#039;&#039;&#039;ssmtp&#039;&#039;&#039; :&lt;br /&gt;
  apt-get install mailutils ssmtp&lt;br /&gt;
==Configuration de ssmtp==&lt;br /&gt;
  vi /etc/ssmtp/ssmtp.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;ssmtp.conf&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
  #&lt;br /&gt;
  # Config file for sSMTP sendmail&lt;br /&gt;
  #&lt;br /&gt;
  # The person who gets all mail for userids &amp;lt; 1000&lt;br /&gt;
  # Make this empty to disable rewriting.&lt;br /&gt;
  root=toto@monmail.fr&lt;br /&gt;
  &lt;br /&gt;
  # The place where the mail goes. The actual machine name is required no &lt;br /&gt;
  # MX records are consulted. Commonly mailhosts are named mail.domain.com&lt;br /&gt;
  mailhub=smtp.gmail.com:587 (pour gmail)&lt;br /&gt;
  &lt;br /&gt;
  # Where will the mail seem to come from?&lt;br /&gt;
  # rewriteDomain=&lt;br /&gt;
 &lt;br /&gt;
  # The full hostname&lt;br /&gt;
  hostname=raspberrypi&lt;br /&gt;
  &lt;br /&gt;
  # Are users allowed to set their own From: address?&lt;br /&gt;
  # YES - Allow the user to specify their own From: address&lt;br /&gt;
  # NO - Use the system generated From: address&lt;br /&gt;
  FromLineOverride=YES&lt;br /&gt;
  UseTLS=YES&lt;br /&gt;
  UseSTARTTLS=YES&lt;br /&gt;
  AuthUser=toto@monfournisseur.com&lt;br /&gt;
  AuthPass=MonMotdePasseDeConnection&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Remarques :&#039;&#039;&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
::*&#039;&#039;Pour gmail, il faut créer un mot de passe d&#039;application dans les paramètre du compte google et l&#039;utiliser ici.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
::*&#039;&#039;Pour que la redirection de mails fonctionne, il faut que l&#039;adresse de destination finale soit différente de l&#039;adresse utilisée pour l&#039;identification pour l&#039;envoi des mails.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
On automatise l&#039;exécution (dimache à 2h du matin) :&lt;br /&gt;
  crontab -e&lt;br /&gt;
  0 2 * * 7 /root/scripts/lxc_auto_update.sh&lt;/div&gt;</summary>
		<author><name>Domi</name></author>
	</entry>
	<entry>
		<id>https://wiki.lesitadom.fr/index.php?title=Mises_%C3%A0_jour_automatiques&amp;diff=1638</id>
		<title>Mises à jour automatiques</title>
		<link rel="alternate" type="text/html" href="https://wiki.lesitadom.fr/index.php?title=Mises_%C3%A0_jour_automatiques&amp;diff=1638"/>
		<updated>2025-05-15T16:55:50Z</updated>

		<summary type="html">&lt;p&gt;Domi : /* Script de mise à jour des conteneurs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Script de mise à jour des conteneurs=&lt;br /&gt;
Au niveau du système hôte, on ajoute le script : &lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
/root/scripts/&#039;&#039;&#039;lxc_auto_update.sh&#039;&#039;&#039; :&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 &lt;br /&gt;
 LOG_FILE=&amp;quot;/var/log/lxc_update.log&amp;quot;&lt;br /&gt;
 MAX_RUNS_TO_KEEP=2&lt;br /&gt;
 RUN_START_MARKER=&amp;quot;--- Début de l&#039;exécution du script ---&amp;quot;&lt;br /&gt;
 RUN_END_MARKER=&amp;quot;--- Fin de l&#039;exécution du script ---&amp;quot;&lt;br /&gt;
 PROXY_CONTAINER=&amp;quot;proxy&amp;quot;&lt;br /&gt;
 WEB_CONTAINERS=(&amp;quot;wp&amp;quot; &amp;quot;pmb&amp;quot; &amp;quot;wiki&amp;quot; &amp;quot;tables&amp;quot;) # Liste de tous les conteneurs web&lt;br /&gt;
 WEB_SERVICE_NAME=&amp;quot;apache2&amp;quot; # Nom du service web à vérifier (adapter si nécessaire)&lt;br /&gt;
 SLEEP_AFTER_RESTART=10 # Délai après le redémarrage des conteneurs web&lt;br /&gt;
 &lt;br /&gt;
 bavarder() {&lt;br /&gt;
   local message=&amp;quot;$1&amp;quot;&lt;br /&gt;
   echo &amp;quot;$(date &#039;+%Y-%m-%d %H:%M:%S&#039;) - $message&amp;quot; &amp;gt;&amp;gt; &amp;quot;$LOG_FILE&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 # Ajouter un marqueur de début d&#039;exécution&lt;br /&gt;
 bavarder &amp;quot;$RUN_START_MARKER&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 # Récupérer la liste des noms de conteneurs Alpine&lt;br /&gt;
 containers=$(lxc list --format csv | tail -n +2 | cut -d&#039;,&#039; -f1)&lt;br /&gt;
 bavarder &amp;quot;Liste des conteneurs récupérée : &#039;$containers&#039;&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 # Séparer les noms de conteneurs en un tableau&lt;br /&gt;
 IFS=$&#039;\n&#039; read -r -d &amp;lt;nowiki&amp;gt;&#039;&#039;&amp;lt;/nowiki&amp;gt; -a container_array &amp;lt;&amp;lt;&amp;lt; &amp;quot;$containers&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 # Boucle pour lancer les mises à jour&lt;br /&gt;
 {&lt;br /&gt;
   for container in &amp;quot;${container_array[@]}&amp;quot;; do&lt;br /&gt;
     bavarder &amp;quot;--- Début du traitement du conteneur : &#039;$container&#039; ---&amp;quot;&lt;br /&gt;
     config=$(lxc config show &amp;quot;$container&amp;quot;)&lt;br /&gt;
     if echo &amp;quot;$config&amp;quot; | grep -iq &amp;quot;alpine&amp;quot;; then&lt;br /&gt;
       bavarder &amp;quot;Le conteneur &#039;$container&#039; semble être basé sur Alpine.&amp;quot;&lt;br /&gt;
       is_running=$(lxc list --format csv | grep &amp;quot;^${container},&amp;quot; | grep &amp;quot;,RUNNING,&amp;quot;)&lt;br /&gt;
       if [ -n &amp;quot;$is_running&amp;quot; ]; then&lt;br /&gt;
         bavarder &amp;quot;Le conteneur &#039;$container&#039; est en cours d&#039;exécution, lancement de la mise à jour...&amp;quot;&lt;br /&gt;
         lxc exec &amp;quot;$container&amp;quot; -- sh -c &amp;quot;apk update &amp;amp;&amp;amp; apk upgrade --available&amp;quot;&lt;br /&gt;
         result=$?&lt;br /&gt;
         if [ &amp;quot;$result&amp;quot; -ne 0 ]; then&lt;br /&gt;
           bavarder &amp;quot;Erreur lors de la mise à jour de &#039;$container&#039;.&amp;quot;&lt;br /&gt;
         fi&lt;br /&gt;
       else&lt;br /&gt;
         bavarder &amp;quot;Le conteneur &#039;$container&#039; n&#039;est pas en cours d&#039;exécution, mise à jour ignorée.&amp;quot;&lt;br /&gt;
       fi&lt;br /&gt;
     else&lt;br /&gt;
       bavarder &amp;quot;Le conteneur &#039;$container&#039; ne semble pas être basé sur Alpine, mise à jour ignorée.&amp;quot;&lt;br /&gt;
     fi&lt;br /&gt;
     bavarder &amp;quot;--- Fin du traitement du conteneur : &#039;$container&#039; ---&amp;quot;&lt;br /&gt;
   done&lt;br /&gt;
 } &amp;gt;&amp;gt; &amp;quot;$LOG_FILE&amp;quot; 2&amp;gt;&amp;amp;1&lt;br /&gt;
 &lt;br /&gt;
 bavarder &amp;quot;Fin de la tentative de mise à jour des conteneurs.&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 # --- Début du redémarrage des conteneurs Alpine (sauf le proxy) ---&lt;br /&gt;
 bavarder &amp;quot;--- Début du redémarrage des conteneurs Alpine (sauf $PROXY_CONTAINER) ---&amp;quot;&lt;br /&gt;
 for container in &amp;quot;${container_array[@]}&amp;quot;; do&lt;br /&gt;
   if [ &amp;quot;$container&amp;quot; != &amp;quot;$PROXY_CONTAINER&amp;quot; ]; then&lt;br /&gt;
     config=$(lxc config show &amp;quot;$container&amp;quot;)&lt;br /&gt;
     if echo &amp;quot;$config&amp;quot; | grep -iq &amp;quot;alpine&amp;quot;; then&lt;br /&gt;
       is_running=$(lxc list --format csv | grep &amp;quot;^${container},&amp;quot; | grep &amp;quot;,RUNNING,&amp;quot;)&lt;br /&gt;
       if [ -n &amp;quot;$is_running&amp;quot; ]; then&lt;br /&gt;
         bavarder &amp;quot;Redémarrage du conteneur &#039;$container&#039;...&amp;quot;&lt;br /&gt;
         lxc restart &amp;quot;$container&amp;quot;&lt;br /&gt;
         sleep &amp;quot;$SLEEP_AFTER_RESTART&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
         # Vérifier l&#039;état du service web pour les conteneurs web&lt;br /&gt;
         is_web_container=0&lt;br /&gt;
         for web_container in &amp;quot;${WEB_CONTAINERS[@]}&amp;quot;; do&lt;br /&gt;
           if [ &amp;quot;$container&amp;quot; == &amp;quot;$web_container&amp;quot; ]; then&lt;br /&gt;
             is_web_container=1&lt;br /&gt;
             break&lt;br /&gt;
           fi&lt;br /&gt;
         done&lt;br /&gt;
 	if [ &amp;quot;$is_web_container&amp;quot; -eq 1 ]; then&lt;br /&gt;
           service_status=$(lxc exec &amp;quot;$container&amp;quot; -- rc-service &amp;quot;$WEB_SERVICE_NAME&amp;quot; status 2&amp;gt;&amp;amp;1)&lt;br /&gt;
           if ! echo &amp;quot;$service_status&amp;quot; | grep -q &amp;quot;started&amp;quot;; then&lt;br /&gt;
             bavarder &amp;quot;$WEB_SERVICE_NAME ne semble pas en cours d&#039;exécution dans &#039;$container&#039;, tentative de démarrage...&amp;quot;&lt;br /&gt;
             lxc exec &amp;quot;$container&amp;quot; -- rc-service &amp;quot;$WEB_SERVICE_NAME&amp;quot; start&lt;br /&gt;
             sleep 5&lt;br /&gt;
             service_status_after_start=$(lxc exec &amp;quot;$container&amp;quot; -- rc-service &amp;quot;$WEB_SERVICE_NAME&amp;quot; status 2&amp;gt;&amp;amp;1)&lt;br /&gt;
             if ! echo &amp;quot;$service_status_after_start&amp;quot; | grep -q &amp;quot;started&amp;quot;; then&lt;br /&gt;
               bavarder &amp;quot;Échec du démarrage de $WEB_SERVICE_NAME dans &#039;$container&#039;.&amp;quot;&lt;br /&gt;
             else&lt;br /&gt;
               bavarder &amp;quot;$WEB_SERVICE_NAME démarré avec succès dans &#039;$container&#039;.&amp;quot;&lt;br /&gt;
             fi&lt;br /&gt;
           else&lt;br /&gt;
             bavarder &amp;quot;$WEB_SERVICE_NAME semble être en cours d&#039;exécution dans &#039;$container&#039;.&amp;quot;&lt;br /&gt;
           fi&lt;br /&gt;
         fi&lt;br /&gt;
       fi&lt;br /&gt;
     fi&lt;br /&gt;
   fi&lt;br /&gt;
 done&lt;br /&gt;
 bavarder &amp;quot;--- Fin du redémarrage des conteneurs Alpine (sauf $PROXY_CONTAINER) ---&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 # --- Redémarrage du conteneur proxy en dernier ---&lt;br /&gt;
 bavarder &amp;quot;--- Début du redémarrage du conteneur proxy ($PROXY_CONTAINER) ---&amp;quot;&lt;br /&gt;
 is_proxy_running=$(lxc list --format csv | grep &amp;quot;^${PROXY_CONTAINER},&amp;quot; | grep &amp;quot;,RUNNING,&amp;quot;)&lt;br /&gt;
 if [ -n &amp;quot;$is_proxy_running&amp;quot; ]; then&lt;br /&gt;
   bavarder &amp;quot;Redémarrage du conteneur proxy &#039;$PROXY_CONTAINER&#039;...&amp;quot;&lt;br /&gt;
   lxc restart &amp;quot;$PROXY_CONTAINER&amp;quot;&lt;br /&gt;
   result=$?&lt;br /&gt;
   if [ &amp;quot;$result&amp;quot; -ne 0 ]; then&lt;br /&gt;
     bavarder &amp;quot;Erreur lors du redémarrage du conteneur proxy &#039;$PROXY_CONTAINER&#039;.&amp;quot;&lt;br /&gt;
   fi&lt;br /&gt;
 else&lt;br /&gt;
   bavarder &amp;quot;Le conteneur proxy &#039;$PROXY_CONTAINER&#039; n&#039;est pas en cours d&#039;exécution, redémarrage ignoré.&amp;quot;&lt;br /&gt;
 fi&lt;br /&gt;
 bavarder &amp;quot;--- Fin du redémarrage du conteneur proxy ($PROXY_CONTAINER) ---&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 # Ajouter un marqueur de fin d&#039;exécution&lt;br /&gt;
 bavarder &amp;quot;$RUN_END_MARKER&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 # --- Gestion de la rotation des logs ---&lt;br /&gt;
 if [ -f &amp;quot;$LOG_FILE&amp;quot; ]; then&lt;br /&gt;
   # Récupérer toutes les occurrences du marqueur de début d&#039;exécution&lt;br /&gt;
   start_markers=$(grep -c &amp;quot;^$RUN_START_MARKER&amp;quot; &amp;quot;$LOG_FILE&amp;quot;)&lt;br /&gt;
 &lt;br /&gt;
   # Calculer le nombre d&#039;exécutions à supprimer&lt;br /&gt;
   runs_to_remove=$((start_markers - MAX_RUNS_TO_KEEP))&lt;br /&gt;
 &lt;br /&gt;
   if [ &amp;quot;$runs_to_remove&amp;quot; -gt 0 ]; then&lt;br /&gt;
     # Utiliser awk pour ne conserver que les N dernières exécutions&lt;br /&gt;
     awk -v n=&amp;quot;$MAX_RUNS_TO_KEEP&amp;quot; -v start_marker=&amp;quot;$RUN_START_MARKER&amp;quot; -v end_marker=&amp;quot;$RUN_END_MARKER&amp;quot; &#039;&lt;br /&gt;
       BEGIN { count = 0; in_run = 0; }&lt;br /&gt;
       $0 ~ start_marker {&lt;br /&gt;
         count++;&lt;br /&gt;
         if (count &amp;gt; (NR - RSTART) + 1 - (n * (RLENGTH ? 1 : 0))) {&lt;br /&gt;
           in_run = 1;&lt;br /&gt;
         } else {&lt;br /&gt;
           in_run = 0;&lt;br /&gt;
           print;&lt;br /&gt;
         }&lt;br /&gt;
       }&lt;br /&gt;
       $0 ~ end_marker {&lt;br /&gt;
         if (!in_run) {&lt;br /&gt;
           print;&lt;br /&gt;
         }&lt;br /&gt;
       }&lt;br /&gt;
       &amp;lt;nowiki&amp;gt;!($0 ~ start_marker) &amp;amp;&amp;amp; !($0 ~ end_marker) {&lt;br /&gt;
          if (!in_run) {&lt;br /&gt;
            print;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      &#039; &amp;quot;$LOG_FILE&amp;quot; &amp;gt; &amp;quot;$LOG_FILE.tmp&amp;quot; &amp;amp;&amp;amp; mv &amp;quot;$LOG_FILE.tmp&amp;quot; &amp;quot;$LOG_FILE&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
  fi&lt;br /&gt;
  &lt;br /&gt;
  # Définir l&#039;adresse e-mail pour les notifications&lt;br /&gt;
 EMAIL_DESTINATAIRE=&amp;quot;toto@mail.com&amp;quot; # Remplace par ton adresse e-mail&lt;br /&gt;
 &lt;br /&gt;
 # Vérifier s&#039;il y a eu des erreurs et envoyer un e-mail si c&#039;est le cas&lt;br /&gt;
 if grep -q &amp;quot;Erreur&amp;quot; &amp;quot;$LOG_FILE&amp;quot;; then&lt;br /&gt;
   cat &amp;quot;$LOG_FILE&amp;quot; | mail -s &#039;Rapport de mise à jour LXC - Erreurs détectées&#039; &amp;quot;$EMAIL_DESTINATAIRE&amp;quot;&lt;br /&gt;
 fi&lt;br /&gt;
 &lt;br /&gt;
 exit 0&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Envoi des E-mails=&lt;br /&gt;
==Installation des logiciels de gestion des mails==&lt;br /&gt;
L&#039;envoi des mails nécessite l&#039;installation de &#039;&#039;&#039;mailutils&#039;&#039;&#039; et &#039;&#039;&#039;ssmtp&#039;&#039;&#039; :&lt;br /&gt;
  apt-get install mailutils ssmtp&lt;br /&gt;
==Configuration de ssmtp==&lt;br /&gt;
  vi /etc/ssmtp/ssmtp.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;ssmtp.conf&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
  #&lt;br /&gt;
  # Config file for sSMTP sendmail&lt;br /&gt;
  #&lt;br /&gt;
  # The person who gets all mail for userids &amp;lt; 1000&lt;br /&gt;
  # Make this empty to disable rewriting.&lt;br /&gt;
  root=toto@monmail.fr&lt;br /&gt;
  &lt;br /&gt;
  # The place where the mail goes. The actual machine name is required no &lt;br /&gt;
  # MX records are consulted. Commonly mailhosts are named mail.domain.com&lt;br /&gt;
  mailhub=smtp.gmail.com:587 (pour gmail)&lt;br /&gt;
  &lt;br /&gt;
  # Where will the mail seem to come from?&lt;br /&gt;
  # rewriteDomain=&lt;br /&gt;
 &lt;br /&gt;
  # The full hostname&lt;br /&gt;
  hostname=raspberrypi&lt;br /&gt;
  &lt;br /&gt;
  # Are users allowed to set their own From: address?&lt;br /&gt;
  # YES - Allow the user to specify their own From: address&lt;br /&gt;
  # NO - Use the system generated From: address&lt;br /&gt;
  FromLineOverride=YES&lt;br /&gt;
  UseTLS=YES&lt;br /&gt;
  UseSTARTTLS=YES&lt;br /&gt;
  AuthUser=toto@monfournisseur.com&lt;br /&gt;
  AuthPass=MonMotdePasseDeConnection&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Remarques :&#039;&#039;&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
::*&#039;&#039;Pour gmail, il faut créer un mot de passe d&#039;application dans les paramètre du compte google et l&#039;utiliser ici.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
::*&#039;&#039;Pour que la redirection de mails fonctionne, il faut que l&#039;adresse de destination finale soit différente de l&#039;adresse utilisée pour l&#039;identification pour l&#039;envoi des mails.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
On automatise l&#039;exécution (dimache à 2h du matin) :&lt;br /&gt;
  crontab -e&lt;br /&gt;
  0 2 * * 7 /root/scripts/lxc_auto_update.sh&lt;/div&gt;</summary>
		<author><name>Domi</name></author>
	</entry>
	<entry>
		<id>https://wiki.lesitadom.fr/index.php?title=Mises_%C3%A0_jour_automatiques&amp;diff=1637</id>
		<title>Mises à jour automatiques</title>
		<link rel="alternate" type="text/html" href="https://wiki.lesitadom.fr/index.php?title=Mises_%C3%A0_jour_automatiques&amp;diff=1637"/>
		<updated>2025-05-15T16:52:51Z</updated>

		<summary type="html">&lt;p&gt;Domi : /* Script de sauvegarde */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Script de mise à jour des conteneurs=&lt;br /&gt;
Au niveau du système hôte, on ajoute le script : &lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
/root/scripts/&#039;&#039;&#039;lxc_auto_update.sh&#039;&#039;&#039; :&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 &lt;br /&gt;
 LOG_FILE=&amp;quot;/var/log/lxc_update.log&amp;quot;&lt;br /&gt;
 MAX_RUNS_TO_KEEP=2&lt;br /&gt;
 RUN_START_MARKER=&amp;quot;--- Début de l&#039;exécution du script ---&amp;quot;&lt;br /&gt;
 RUN_END_MARKER=&amp;quot;--- Fin de l&#039;exécution du script ---&amp;quot;&lt;br /&gt;
 PROXY_CONTAINER=&amp;quot;proxy&amp;quot;&lt;br /&gt;
 WEB_CONTAINERS=(&amp;quot;wp&amp;quot; &amp;quot;pmb&amp;quot; &amp;quot;wiki&amp;quot; &amp;quot;tables&amp;quot;) # Liste de tous les conteneurs web&lt;br /&gt;
 WEB_SERVICE_NAME=&amp;quot;apache2&amp;quot; # Nom du service web à vérifier (adapter si nécessaire)&lt;br /&gt;
 SLEEP_AFTER_RESTART=10 # Délai après le redémarrage des conteneurs web&lt;br /&gt;
 &lt;br /&gt;
 bavarder() {&lt;br /&gt;
   local message=&amp;quot;$1&amp;quot;&lt;br /&gt;
   echo &amp;quot;$(date &#039;+%Y-%m-%d %H:%M:%S&#039;) - $message&amp;quot; &amp;gt;&amp;gt; &amp;quot;$LOG_FILE&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 # Ajouter un marqueur de début d&#039;exécution&lt;br /&gt;
 bavarder &amp;quot;$RUN_START_MARKER&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 # Récupérer la liste des noms de conteneurs Alpine&lt;br /&gt;
 containers=$(lxc list --format csv | tail -n +2 | cut -d&#039;,&#039; -f1)&lt;br /&gt;
 bavarder &amp;quot;Liste des conteneurs récupérée : &#039;$containers&#039;&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 # Séparer les noms de conteneurs en un tableau&lt;br /&gt;
 IFS=$&#039;\n&#039; read -r -d &amp;lt;nowiki&amp;gt;&#039;&#039;&amp;lt;/nowiki&amp;gt; -a container_array &amp;lt;&amp;lt;&amp;lt; &amp;quot;$containers&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 # Boucle pour lancer les mises à jour&lt;br /&gt;
 {&lt;br /&gt;
   for container in &amp;quot;${container_array[@]}&amp;quot;; do&lt;br /&gt;
     bavarder &amp;quot;--- Début du traitement du conteneur : &#039;$container&#039; ---&amp;quot;&lt;br /&gt;
     config=$(lxc config show &amp;quot;$container&amp;quot;)&lt;br /&gt;
     if echo &amp;quot;$config&amp;quot; | grep -iq &amp;quot;alpine&amp;quot;; then&lt;br /&gt;
       bavarder &amp;quot;Le conteneur &#039;$container&#039; semble être basé sur Alpine.&amp;quot;&lt;br /&gt;
       is_running=$(lxc list --format csv | grep &amp;quot;^${container},&amp;quot; | grep &amp;quot;,RUNNING,&amp;quot;)&lt;br /&gt;
       if [ -n &amp;quot;$is_running&amp;quot; ]; then&lt;br /&gt;
         bavarder &amp;quot;Le conteneur &#039;$container&#039; est en cours d&#039;exécution, lancement de la mise à jour...&amp;quot;&lt;br /&gt;
         lxc exec &amp;quot;$container&amp;quot; -- sh -c &amp;quot;apk update &amp;amp;&amp;amp; apk upgrade --available&amp;quot;&lt;br /&gt;
         result=$?&lt;br /&gt;
         if [ &amp;quot;$result&amp;quot; -ne 0 ]; then&lt;br /&gt;
           bavarder &amp;quot;Erreur lors de la mise à jour de &#039;$container&#039;.&amp;quot;&lt;br /&gt;
         fi&lt;br /&gt;
       else&lt;br /&gt;
         bavarder &amp;quot;Le conteneur &#039;$container&#039; n&#039;est pas en cours d&#039;exécution, mise à jour ignorée.&amp;quot;&lt;br /&gt;
       fi&lt;br /&gt;
     else&lt;br /&gt;
       bavarder &amp;quot;Le conteneur &#039;$container&#039; ne semble pas être basé sur Alpine, mise à jour ignorée.&amp;quot;&lt;br /&gt;
     fi&lt;br /&gt;
     bavarder &amp;quot;--- Fin du traitement du conteneur : &#039;$container&#039; ---&amp;quot;&lt;br /&gt;
   done&lt;br /&gt;
 } &amp;gt;&amp;gt; &amp;quot;$LOG_FILE&amp;quot; 2&amp;gt;&amp;amp;1&lt;br /&gt;
 &lt;br /&gt;
 bavarder &amp;quot;Fin de la tentative de mise à jour des conteneurs.&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 # --- Début du redémarrage des conteneurs Alpine (sauf le proxy) ---&lt;br /&gt;
 bavarder &amp;quot;--- Début du redémarrage des conteneurs Alpine (sauf $PROXY_CONTAINER) ---&amp;quot;&lt;br /&gt;
 for container in &amp;quot;${container_array[@]}&amp;quot;; do&lt;br /&gt;
   if [ &amp;quot;$container&amp;quot; != &amp;quot;$PROXY_CONTAINER&amp;quot; ]; then&lt;br /&gt;
     config=$(lxc config show &amp;quot;$container&amp;quot;)&lt;br /&gt;
     if echo &amp;quot;$config&amp;quot; | grep -iq &amp;quot;alpine&amp;quot;; then&lt;br /&gt;
       is_running=$(lxc list --format csv | grep &amp;quot;^${container},&amp;quot; | grep &amp;quot;,RUNNING,&amp;quot;)&lt;br /&gt;
       if [ -n &amp;quot;$is_running&amp;quot; ]; then&lt;br /&gt;
         bavarder &amp;quot;Redémarrage du conteneur &#039;$container&#039;...&amp;quot;&lt;br /&gt;
         lxc restart &amp;quot;$container&amp;quot;&lt;br /&gt;
         sleep &amp;quot;$SLEEP_AFTER_RESTART&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
         # Vérifier l&#039;état du service web pour les conteneurs web&lt;br /&gt;
         is_web_container=0&lt;br /&gt;
         for web_container in &amp;quot;${WEB_CONTAINERS[@]}&amp;quot;; do&lt;br /&gt;
           if [ &amp;quot;$container&amp;quot; == &amp;quot;$web_container&amp;quot; ]; then&lt;br /&gt;
             is_web_container=1&lt;br /&gt;
             break&lt;br /&gt;
           fi&lt;br /&gt;
         done&lt;br /&gt;
 	if [ &amp;quot;$is_web_container&amp;quot; -eq 1 ]; then&lt;br /&gt;
           service_status=$(lxc exec &amp;quot;$container&amp;quot; -- rc-service &amp;quot;$WEB_SERVICE_NAME&amp;quot; status 2&amp;gt;&amp;amp;1)&lt;br /&gt;
           if ! echo &amp;quot;$service_status&amp;quot; | grep -q &amp;quot;started&amp;quot;; then&lt;br /&gt;
             bavarder &amp;quot;$WEB_SERVICE_NAME ne semble pas en cours d&#039;exécution dans &#039;$container&#039;, tentative de démarrage...&amp;quot;&lt;br /&gt;
             lxc exec &amp;quot;$container&amp;quot; -- rc-service &amp;quot;$WEB_SERVICE_NAME&amp;quot; start&lt;br /&gt;
             sleep 5&lt;br /&gt;
             service_status_after_start=$(lxc exec &amp;quot;$container&amp;quot; -- rc-service &amp;quot;$WEB_SERVICE_NAME&amp;quot; status 2&amp;gt;&amp;amp;1)&lt;br /&gt;
             if ! echo &amp;quot;$service_status_after_start&amp;quot; | grep -q &amp;quot;started&amp;quot;; then&lt;br /&gt;
               bavarder &amp;quot;Échec du démarrage de $WEB_SERVICE_NAME dans &#039;$container&#039;.&amp;quot;&lt;br /&gt;
             else&lt;br /&gt;
               bavarder &amp;quot;$WEB_SERVICE_NAME démarré avec succès dans &#039;$container&#039;.&amp;quot;&lt;br /&gt;
             fi&lt;br /&gt;
           else&lt;br /&gt;
             bavarder &amp;quot;$WEB_SERVICE_NAME semble être en cours d&#039;exécution dans &#039;$container&#039;.&amp;quot;&lt;br /&gt;
           fi&lt;br /&gt;
         fi&lt;br /&gt;
       fi&lt;br /&gt;
     fi&lt;br /&gt;
   fi&lt;br /&gt;
 done&lt;br /&gt;
 bavarder &amp;quot;--- Fin du redémarrage des conteneurs Alpine (sauf $PROXY_CONTAINER) ---&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 # --- Redémarrage du conteneur proxy en dernier ---&lt;br /&gt;
 bavarder &amp;quot;--- Début du redémarrage du conteneur proxy ($PROXY_CONTAINER) ---&amp;quot;&lt;br /&gt;
 is_proxy_running=$(lxc list --format csv | grep &amp;quot;^${PROXY_CONTAINER},&amp;quot; | grep &amp;quot;,RUNNING,&amp;quot;)&lt;br /&gt;
 if [ -n &amp;quot;$is_proxy_running&amp;quot; ]; then&lt;br /&gt;
   bavarder &amp;quot;Redémarrage du conteneur proxy &#039;$PROXY_CONTAINER&#039;...&amp;quot;&lt;br /&gt;
   lxc restart &amp;quot;$PROXY_CONTAINER&amp;quot;&lt;br /&gt;
   result=$?&lt;br /&gt;
   if [ &amp;quot;$result&amp;quot; -ne 0 ]; then&lt;br /&gt;
     bavarder &amp;quot;Erreur lors du redémarrage du conteneur proxy &#039;$PROXY_CONTAINER&#039;.&amp;quot;&lt;br /&gt;
   fi&lt;br /&gt;
 else&lt;br /&gt;
   bavarder &amp;quot;Le conteneur proxy &#039;$PROXY_CONTAINER&#039; n&#039;est pas en cours d&#039;exécution, redémarrage ignoré.&amp;quot;&lt;br /&gt;
 fi&lt;br /&gt;
 bavarder &amp;quot;--- Fin du redémarrage du conteneur proxy ($PROXY_CONTAINER) ---&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 # Ajouter un marqueur de fin d&#039;exécution&lt;br /&gt;
 bavarder &amp;quot;$RUN_END_MARKER&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 # --- Gestion de la rotation des logs ---&lt;br /&gt;
 if [ -f &amp;quot;$LOG_FILE&amp;quot; ]; then&lt;br /&gt;
   # Récupérer toutes les occurrences du marqueur de début d&#039;exécution&lt;br /&gt;
   start_markers=$(grep -c &amp;quot;^$RUN_START_MARKER&amp;quot; &amp;quot;$LOG_FILE&amp;quot;)&lt;br /&gt;
 &lt;br /&gt;
   # Calculer le nombre d&#039;exécutions à supprimer&lt;br /&gt;
   runs_to_remove=$((start_markers - MAX_RUNS_TO_KEEP))&lt;br /&gt;
 &lt;br /&gt;
   if [ &amp;quot;$runs_to_remove&amp;quot; -gt 0 ]; then&lt;br /&gt;
     # Utiliser awk pour ne conserver que les N dernières exécutions&lt;br /&gt;
     awk -v n=&amp;quot;$MAX_RUNS_TO_KEEP&amp;quot; -v start_marker=&amp;quot;$RUN_START_MARKER&amp;quot; -v end_marker=&amp;quot;$RUN_END_MARKER&amp;quot; &#039;&lt;br /&gt;
       BEGIN { count = 0; in_run = 0; }&lt;br /&gt;
       $0 ~ start_marker {&lt;br /&gt;
         count++;&lt;br /&gt;
         if (count &amp;gt; (NR - RSTART) + 1 - (n * (RLENGTH ? 1 : 0))) {&lt;br /&gt;
           in_run = 1;&lt;br /&gt;
         } else {&lt;br /&gt;
           in_run = 0;&lt;br /&gt;
           print;&lt;br /&gt;
         }&lt;br /&gt;
       }&lt;br /&gt;
       $0 ~ end_marker {&lt;br /&gt;
         if (!in_run) {&lt;br /&gt;
           print;&lt;br /&gt;
         }&lt;br /&gt;
       }&lt;br /&gt;
       &amp;lt;nowiki&amp;gt;!($0 ~ start_marker) &amp;amp;&amp;amp; !($0 ~ end_marker) {&lt;br /&gt;
          if (!in_run) {&lt;br /&gt;
            print;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      &#039; &amp;quot;$LOG_FILE&amp;quot; &amp;gt; &amp;quot;$LOG_FILE.tmp&amp;quot; &amp;amp;&amp;amp; mv &amp;quot;$LOG_FILE.tmp&amp;quot; &amp;quot;$LOG_FILE&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
  fi&lt;br /&gt;
  &lt;br /&gt;
  #&amp;lt;/nowiki&amp;gt; Définir l&#039;adresse e-mail pour les notifications&lt;br /&gt;
 EMAIL_DESTINATAIRE=&amp;quot;toto@mail.com&amp;quot; # Remplace par ton adresse e-mail&lt;br /&gt;
 &lt;br /&gt;
 # Vérifier s&#039;il y a eu des erreurs et envoyer un e-mail si c&#039;est le cas&lt;br /&gt;
 if grep -q &amp;quot;Erreur&amp;quot; &amp;quot;$LOG_FILE&amp;quot;; then&lt;br /&gt;
   cat &amp;quot;$LOG_FILE&amp;quot; | mail -s &#039;Rapport de mise à jour LXC - Erreurs détectées&#039; &amp;quot;$EMAIL_DESTINATAIRE&amp;quot;&lt;br /&gt;
 fi&lt;br /&gt;
 &lt;br /&gt;
 exit 0&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
=Envoi des E-mails=&lt;br /&gt;
==Installation des logiciels de gestion des mails==&lt;br /&gt;
L&#039;envoi des mails nécessite l&#039;installation de &#039;&#039;&#039;mailutils&#039;&#039;&#039; et &#039;&#039;&#039;ssmtp&#039;&#039;&#039; :&lt;br /&gt;
  apt-get install mailutils ssmtp&lt;br /&gt;
==Configuration de ssmtp==&lt;br /&gt;
  vi /etc/ssmtp/ssmtp.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;ssmtp.conf&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
  #&lt;br /&gt;
  # Config file for sSMTP sendmail&lt;br /&gt;
  #&lt;br /&gt;
  # The person who gets all mail for userids &amp;lt; 1000&lt;br /&gt;
  # Make this empty to disable rewriting.&lt;br /&gt;
  root=toto@monmail.fr&lt;br /&gt;
  &lt;br /&gt;
  # The place where the mail goes. The actual machine name is required no &lt;br /&gt;
  # MX records are consulted. Commonly mailhosts are named mail.domain.com&lt;br /&gt;
  mailhub=smtp.gmail.com:587 (pour gmail)&lt;br /&gt;
  &lt;br /&gt;
  # Where will the mail seem to come from?&lt;br /&gt;
  # rewriteDomain=&lt;br /&gt;
 &lt;br /&gt;
  # The full hostname&lt;br /&gt;
  hostname=raspberrypi&lt;br /&gt;
  &lt;br /&gt;
  # Are users allowed to set their own From: address?&lt;br /&gt;
  # YES - Allow the user to specify their own From: address&lt;br /&gt;
  # NO - Use the system generated From: address&lt;br /&gt;
  FromLineOverride=YES&lt;br /&gt;
  UseTLS=YES&lt;br /&gt;
  UseSTARTTLS=YES&lt;br /&gt;
  AuthUser=toto@monfournisseur.com&lt;br /&gt;
  AuthPass=MonMotdePasseDeConnection&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Remarques :&#039;&#039;&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
::*&#039;&#039;Pour gmail, il faut créer un mot de passe d&#039;application dans les paramètre du compte google et l&#039;utiliser ici.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
::*&#039;&#039;Pour que la redirection de mails fonctionne, il faut que l&#039;adresse de destination finale soit différente de l&#039;adresse utilisée pour l&#039;identification pour l&#039;envoi des mails.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
On automatise l&#039;exécution (dimache à 2h du matin) :&lt;br /&gt;
  crontab -e&lt;br /&gt;
  0 2 * * 7 /root/scripts/lxc_auto_update.sh&lt;/div&gt;</summary>
		<author><name>Domi</name></author>
	</entry>
	<entry>
		<id>https://wiki.lesitadom.fr/index.php?title=Mises_%C3%A0_jour_automatiques&amp;diff=1636</id>
		<title>Mises à jour automatiques</title>
		<link rel="alternate" type="text/html" href="https://wiki.lesitadom.fr/index.php?title=Mises_%C3%A0_jour_automatiques&amp;diff=1636"/>
		<updated>2025-05-15T16:51:56Z</updated>

		<summary type="html">&lt;p&gt;Domi : /* script de sauvegarde */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Script de sauvegarde=&lt;br /&gt;
Au niveau du système hôte, on ajoute le script : &lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
/root/scripts/&#039;&#039;&#039;lxc_auto_update.sh&#039;&#039;&#039; :&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 &lt;br /&gt;
 LOG_FILE=&amp;quot;/var/log/lxc_update.log&amp;quot;&lt;br /&gt;
 MAX_RUNS_TO_KEEP=2&lt;br /&gt;
 RUN_START_MARKER=&amp;quot;--- Début de l&#039;exécution du script ---&amp;quot;&lt;br /&gt;
 RUN_END_MARKER=&amp;quot;--- Fin de l&#039;exécution du script ---&amp;quot;&lt;br /&gt;
 PROXY_CONTAINER=&amp;quot;proxy&amp;quot;&lt;br /&gt;
 WEB_CONTAINERS=(&amp;quot;wp&amp;quot; &amp;quot;pmb&amp;quot; &amp;quot;wiki&amp;quot; &amp;quot;tables&amp;quot;) # Liste de tous les conteneurs web&lt;br /&gt;
 WEB_SERVICE_NAME=&amp;quot;apache2&amp;quot; # Nom du service web à vérifier (adapter si nécessaire)&lt;br /&gt;
 SLEEP_AFTER_RESTART=10 # Délai après le redémarrage des conteneurs web&lt;br /&gt;
 &lt;br /&gt;
 bavarder() {&lt;br /&gt;
   local message=&amp;quot;$1&amp;quot;&lt;br /&gt;
   echo &amp;quot;$(date &#039;+%Y-%m-%d %H:%M:%S&#039;) - $message&amp;quot; &amp;gt;&amp;gt; &amp;quot;$LOG_FILE&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 # Ajouter un marqueur de début d&#039;exécution&lt;br /&gt;
 bavarder &amp;quot;$RUN_START_MARKER&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 # Récupérer la liste des noms de conteneurs Alpine&lt;br /&gt;
 containers=$(lxc list --format csv | tail -n +2 | cut -d&#039;,&#039; -f1)&lt;br /&gt;
 bavarder &amp;quot;Liste des conteneurs récupérée : &#039;$containers&#039;&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 # Séparer les noms de conteneurs en un tableau&lt;br /&gt;
 IFS=$&#039;\n&#039; read -r -d &amp;lt;nowiki&amp;gt;&#039;&#039;&amp;lt;/nowiki&amp;gt; -a container_array &amp;lt;&amp;lt;&amp;lt; &amp;quot;$containers&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 # Boucle pour lancer les mises à jour&lt;br /&gt;
 {&lt;br /&gt;
   for container in &amp;quot;${container_array[@]}&amp;quot;; do&lt;br /&gt;
     bavarder &amp;quot;--- Début du traitement du conteneur : &#039;$container&#039; ---&amp;quot;&lt;br /&gt;
     config=$(lxc config show &amp;quot;$container&amp;quot;)&lt;br /&gt;
     if echo &amp;quot;$config&amp;quot; | grep -iq &amp;quot;alpine&amp;quot;; then&lt;br /&gt;
       bavarder &amp;quot;Le conteneur &#039;$container&#039; semble être basé sur Alpine.&amp;quot;&lt;br /&gt;
       is_running=$(lxc list --format csv | grep &amp;quot;^${container},&amp;quot; | grep &amp;quot;,RUNNING,&amp;quot;)&lt;br /&gt;
       if [ -n &amp;quot;$is_running&amp;quot; ]; then&lt;br /&gt;
         bavarder &amp;quot;Le conteneur &#039;$container&#039; est en cours d&#039;exécution, lancement de la mise à jour...&amp;quot;&lt;br /&gt;
         lxc exec &amp;quot;$container&amp;quot; -- sh -c &amp;quot;apk update &amp;amp;&amp;amp; apk upgrade --available&amp;quot;&lt;br /&gt;
         result=$?&lt;br /&gt;
         if [ &amp;quot;$result&amp;quot; -ne 0 ]; then&lt;br /&gt;
           bavarder &amp;quot;Erreur lors de la mise à jour de &#039;$container&#039;.&amp;quot;&lt;br /&gt;
         fi&lt;br /&gt;
       else&lt;br /&gt;
         bavarder &amp;quot;Le conteneur &#039;$container&#039; n&#039;est pas en cours d&#039;exécution, mise à jour ignorée.&amp;quot;&lt;br /&gt;
       fi&lt;br /&gt;
     else&lt;br /&gt;
       bavarder &amp;quot;Le conteneur &#039;$container&#039; ne semble pas être basé sur Alpine, mise à jour ignorée.&amp;quot;&lt;br /&gt;
     fi&lt;br /&gt;
     bavarder &amp;quot;--- Fin du traitement du conteneur : &#039;$container&#039; ---&amp;quot;&lt;br /&gt;
   done&lt;br /&gt;
 } &amp;gt;&amp;gt; &amp;quot;$LOG_FILE&amp;quot; 2&amp;gt;&amp;amp;1&lt;br /&gt;
 &lt;br /&gt;
 bavarder &amp;quot;Fin de la tentative de mise à jour des conteneurs.&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 # --- Début du redémarrage des conteneurs Alpine (sauf le proxy) ---&lt;br /&gt;
 bavarder &amp;quot;--- Début du redémarrage des conteneurs Alpine (sauf $PROXY_CONTAINER) ---&amp;quot;&lt;br /&gt;
 for container in &amp;quot;${container_array[@]}&amp;quot;; do&lt;br /&gt;
   if [ &amp;quot;$container&amp;quot; != &amp;quot;$PROXY_CONTAINER&amp;quot; ]; then&lt;br /&gt;
     config=$(lxc config show &amp;quot;$container&amp;quot;)&lt;br /&gt;
     if echo &amp;quot;$config&amp;quot; | grep -iq &amp;quot;alpine&amp;quot;; then&lt;br /&gt;
       is_running=$(lxc list --format csv | grep &amp;quot;^${container},&amp;quot; | grep &amp;quot;,RUNNING,&amp;quot;)&lt;br /&gt;
       if [ -n &amp;quot;$is_running&amp;quot; ]; then&lt;br /&gt;
         bavarder &amp;quot;Redémarrage du conteneur &#039;$container&#039;...&amp;quot;&lt;br /&gt;
         lxc restart &amp;quot;$container&amp;quot;&lt;br /&gt;
         sleep &amp;quot;$SLEEP_AFTER_RESTART&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
         # Vérifier l&#039;état du service web pour les conteneurs web&lt;br /&gt;
         is_web_container=0&lt;br /&gt;
         for web_container in &amp;quot;${WEB_CONTAINERS[@]}&amp;quot;; do&lt;br /&gt;
           if [ &amp;quot;$container&amp;quot; == &amp;quot;$web_container&amp;quot; ]; then&lt;br /&gt;
             is_web_container=1&lt;br /&gt;
             break&lt;br /&gt;
           fi&lt;br /&gt;
         done&lt;br /&gt;
 	if [ &amp;quot;$is_web_container&amp;quot; -eq 1 ]; then&lt;br /&gt;
           service_status=$(lxc exec &amp;quot;$container&amp;quot; -- rc-service &amp;quot;$WEB_SERVICE_NAME&amp;quot; status 2&amp;gt;&amp;amp;1)&lt;br /&gt;
           if ! echo &amp;quot;$service_status&amp;quot; | grep -q &amp;quot;started&amp;quot;; then&lt;br /&gt;
             bavarder &amp;quot;$WEB_SERVICE_NAME ne semble pas en cours d&#039;exécution dans &#039;$container&#039;, tentative de démarrage...&amp;quot;&lt;br /&gt;
             lxc exec &amp;quot;$container&amp;quot; -- rc-service &amp;quot;$WEB_SERVICE_NAME&amp;quot; start&lt;br /&gt;
             sleep 5&lt;br /&gt;
             service_status_after_start=$(lxc exec &amp;quot;$container&amp;quot; -- rc-service &amp;quot;$WEB_SERVICE_NAME&amp;quot; status 2&amp;gt;&amp;amp;1)&lt;br /&gt;
             if ! echo &amp;quot;$service_status_after_start&amp;quot; | grep -q &amp;quot;started&amp;quot;; then&lt;br /&gt;
               bavarder &amp;quot;Échec du démarrage de $WEB_SERVICE_NAME dans &#039;$container&#039;.&amp;quot;&lt;br /&gt;
             else&lt;br /&gt;
               bavarder &amp;quot;$WEB_SERVICE_NAME démarré avec succès dans &#039;$container&#039;.&amp;quot;&lt;br /&gt;
             fi&lt;br /&gt;
           else&lt;br /&gt;
             bavarder &amp;quot;$WEB_SERVICE_NAME semble être en cours d&#039;exécution dans &#039;$container&#039;.&amp;quot;&lt;br /&gt;
           fi&lt;br /&gt;
         fi&lt;br /&gt;
       fi&lt;br /&gt;
     fi&lt;br /&gt;
   fi&lt;br /&gt;
 done&lt;br /&gt;
 bavarder &amp;quot;--- Fin du redémarrage des conteneurs Alpine (sauf $PROXY_CONTAINER) ---&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 # --- Redémarrage du conteneur proxy en dernier ---&lt;br /&gt;
 bavarder &amp;quot;--- Début du redémarrage du conteneur proxy ($PROXY_CONTAINER) ---&amp;quot;&lt;br /&gt;
 is_proxy_running=$(lxc list --format csv | grep &amp;quot;^${PROXY_CONTAINER},&amp;quot; | grep &amp;quot;,RUNNING,&amp;quot;)&lt;br /&gt;
 if [ -n &amp;quot;$is_proxy_running&amp;quot; ]; then&lt;br /&gt;
   bavarder &amp;quot;Redémarrage du conteneur proxy &#039;$PROXY_CONTAINER&#039;...&amp;quot;&lt;br /&gt;
   lxc restart &amp;quot;$PROXY_CONTAINER&amp;quot;&lt;br /&gt;
   result=$?&lt;br /&gt;
   if [ &amp;quot;$result&amp;quot; -ne 0 ]; then&lt;br /&gt;
     bavarder &amp;quot;Erreur lors du redémarrage du conteneur proxy &#039;$PROXY_CONTAINER&#039;.&amp;quot;&lt;br /&gt;
   fi&lt;br /&gt;
 else&lt;br /&gt;
   bavarder &amp;quot;Le conteneur proxy &#039;$PROXY_CONTAINER&#039; n&#039;est pas en cours d&#039;exécution, redémarrage ignoré.&amp;quot;&lt;br /&gt;
 fi&lt;br /&gt;
 bavarder &amp;quot;--- Fin du redémarrage du conteneur proxy ($PROXY_CONTAINER) ---&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 # Ajouter un marqueur de fin d&#039;exécution&lt;br /&gt;
 bavarder &amp;quot;$RUN_END_MARKER&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 # --- Gestion de la rotation des logs ---&lt;br /&gt;
 if [ -f &amp;quot;$LOG_FILE&amp;quot; ]; then&lt;br /&gt;
   # Récupérer toutes les occurrences du marqueur de début d&#039;exécution&lt;br /&gt;
   start_markers=$(grep -c &amp;quot;^$RUN_START_MARKER&amp;quot; &amp;quot;$LOG_FILE&amp;quot;)&lt;br /&gt;
 &lt;br /&gt;
   # Calculer le nombre d&#039;exécutions à supprimer&lt;br /&gt;
   runs_to_remove=$((start_markers - MAX_RUNS_TO_KEEP))&lt;br /&gt;
 &lt;br /&gt;
   if [ &amp;quot;$runs_to_remove&amp;quot; -gt 0 ]; then&lt;br /&gt;
     # Utiliser awk pour ne conserver que les N dernières exécutions&lt;br /&gt;
     awk -v n=&amp;quot;$MAX_RUNS_TO_KEEP&amp;quot; -v start_marker=&amp;quot;$RUN_START_MARKER&amp;quot; -v end_marker=&amp;quot;$RUN_END_MARKER&amp;quot; &#039;&lt;br /&gt;
       BEGIN { count = 0; in_run = 0; }&lt;br /&gt;
       $0 ~ start_marker {&lt;br /&gt;
         count++;&lt;br /&gt;
         if (count &amp;gt; (NR - RSTART) + 1 - (n * (RLENGTH ? 1 : 0))) {&lt;br /&gt;
           in_run = 1;&lt;br /&gt;
         } else {&lt;br /&gt;
           in_run = 0;&lt;br /&gt;
           print;&lt;br /&gt;
         }&lt;br /&gt;
       }&lt;br /&gt;
       $0 ~ end_marker {&lt;br /&gt;
         if (!in_run) {&lt;br /&gt;
           print;&lt;br /&gt;
         }&lt;br /&gt;
       }&lt;br /&gt;
       &amp;lt;nowiki&amp;gt;!($0 ~ start_marker) &amp;amp;&amp;amp; !($0 ~ end_marker) {&lt;br /&gt;
          if (!in_run) {&lt;br /&gt;
            print;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      &#039; &amp;quot;$LOG_FILE&amp;quot; &amp;gt; &amp;quot;$LOG_FILE.tmp&amp;quot; &amp;amp;&amp;amp; mv &amp;quot;$LOG_FILE.tmp&amp;quot; &amp;quot;$LOG_FILE&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
  fi&lt;br /&gt;
  &lt;br /&gt;
  #&amp;lt;/nowiki&amp;gt; Définir l&#039;adresse e-mail pour les notifications&lt;br /&gt;
 EMAIL_DESTINATAIRE=&amp;quot;toto@mail.com&amp;quot; # Remplace par ton adresse e-mail&lt;br /&gt;
 &lt;br /&gt;
 # Vérifier s&#039;il y a eu des erreurs et envoyer un e-mail si c&#039;est le cas&lt;br /&gt;
 if grep -q &amp;quot;Erreur&amp;quot; &amp;quot;$LOG_FILE&amp;quot;; then&lt;br /&gt;
   cat &amp;quot;$LOG_FILE&amp;quot; | mail -s &#039;Rapport de mise à jour LXC - Erreurs détectées&#039; &amp;quot;$EMAIL_DESTINATAIRE&amp;quot;&lt;br /&gt;
 fi&lt;br /&gt;
 &lt;br /&gt;
 exit 0&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
=Envoi des E-mails=&lt;br /&gt;
==Installation des logiciels de gestion des mails==&lt;br /&gt;
L&#039;envoi des mails nécessite l&#039;installation de &#039;&#039;&#039;mailutils&#039;&#039;&#039; et &#039;&#039;&#039;ssmtp&#039;&#039;&#039; :&lt;br /&gt;
  apt-get install mailutils ssmtp&lt;br /&gt;
==Configuration de ssmtp==&lt;br /&gt;
  vi /etc/ssmtp/ssmtp.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;ssmtp.conf&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
  #&lt;br /&gt;
  # Config file for sSMTP sendmail&lt;br /&gt;
  #&lt;br /&gt;
  # The person who gets all mail for userids &amp;lt; 1000&lt;br /&gt;
  # Make this empty to disable rewriting.&lt;br /&gt;
  root=toto@monmail.fr&lt;br /&gt;
  &lt;br /&gt;
  # The place where the mail goes. The actual machine name is required no &lt;br /&gt;
  # MX records are consulted. Commonly mailhosts are named mail.domain.com&lt;br /&gt;
  mailhub=smtp.gmail.com:587 (pour gmail)&lt;br /&gt;
  &lt;br /&gt;
  # Where will the mail seem to come from?&lt;br /&gt;
  # rewriteDomain=&lt;br /&gt;
 &lt;br /&gt;
  # The full hostname&lt;br /&gt;
  hostname=raspberrypi&lt;br /&gt;
  &lt;br /&gt;
  # Are users allowed to set their own From: address?&lt;br /&gt;
  # YES - Allow the user to specify their own From: address&lt;br /&gt;
  # NO - Use the system generated From: address&lt;br /&gt;
  FromLineOverride=YES&lt;br /&gt;
  UseTLS=YES&lt;br /&gt;
  UseSTARTTLS=YES&lt;br /&gt;
  AuthUser=toto@monfournisseur.com&lt;br /&gt;
  AuthPass=MonMotdePasseDeConnection&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Remarques :&#039;&#039;&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
::*&#039;&#039;Pour gmail, il faut créer un mot de passe d&#039;application dans les paramètre du compte google et l&#039;utiliser ici.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
::*&#039;&#039;Pour que la redirection de mails fonctionne, il faut que l&#039;adresse de destination finale soit différente de l&#039;adresse utilisée pour l&#039;identification pour l&#039;envoi des mails.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
On automatise l&#039;exécution (dimache à 2h du matin) :&lt;br /&gt;
  crontab -e&lt;br /&gt;
  0 2 * * 7 /root/scripts/lxc_auto_update.sh&lt;/div&gt;</summary>
		<author><name>Domi</name></author>
	</entry>
	<entry>
		<id>https://wiki.lesitadom.fr/index.php?title=Mises_%C3%A0_jour_automatiques&amp;diff=1635</id>
		<title>Mises à jour automatiques</title>
		<link rel="alternate" type="text/html" href="https://wiki.lesitadom.fr/index.php?title=Mises_%C3%A0_jour_automatiques&amp;diff=1635"/>
		<updated>2025-05-15T16:51:35Z</updated>

		<summary type="html">&lt;p&gt;Domi : Page créée avec « =script de sauvegarde= Au niveau du système hôte, on ajoute le script :  &amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt; /root/scripts/&amp;#039;&amp;#039;&amp;#039;lxc_auto_update.sh&amp;#039;&amp;#039;&amp;#039; : &amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;  #!/bin/bash    LOG_FILE=&amp;quot;/var/log/lxc_update.log&amp;quot;  MAX_RUNS_TO_KEEP=2  RUN_START_MARKER=&amp;quot;--- Début de l&amp;#039;exécution du script ---&amp;quot;  RUN_END_MARKER=&amp;quot;--- Fin de l&amp;#039;exécution du script ---&amp;quot;  PROXY_CONTAINER=&amp;quot;proxy&amp;quot;  WEB_CONTAINERS=(&amp;quot;wp&amp;quot; &amp;quot;pmb&amp;quot; &amp;quot;wiki&amp;quot; &amp;quot;tables&amp;quot;) # L... »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=script de sauvegarde=&lt;br /&gt;
Au niveau du système hôte, on ajoute le script : &lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
/root/scripts/&#039;&#039;&#039;lxc_auto_update.sh&#039;&#039;&#039; :&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 &lt;br /&gt;
 LOG_FILE=&amp;quot;/var/log/lxc_update.log&amp;quot;&lt;br /&gt;
 MAX_RUNS_TO_KEEP=2&lt;br /&gt;
 RUN_START_MARKER=&amp;quot;--- Début de l&#039;exécution du script ---&amp;quot;&lt;br /&gt;
 RUN_END_MARKER=&amp;quot;--- Fin de l&#039;exécution du script ---&amp;quot;&lt;br /&gt;
 PROXY_CONTAINER=&amp;quot;proxy&amp;quot;&lt;br /&gt;
 WEB_CONTAINERS=(&amp;quot;wp&amp;quot; &amp;quot;pmb&amp;quot; &amp;quot;wiki&amp;quot; &amp;quot;tables&amp;quot;) # Liste de tous les conteneurs web&lt;br /&gt;
 WEB_SERVICE_NAME=&amp;quot;apache2&amp;quot; # Nom du service web à vérifier (adapter si nécessaire)&lt;br /&gt;
 SLEEP_AFTER_RESTART=10 # Délai après le redémarrage des conteneurs web&lt;br /&gt;
 &lt;br /&gt;
 bavarder() {&lt;br /&gt;
   local message=&amp;quot;$1&amp;quot;&lt;br /&gt;
   echo &amp;quot;$(date &#039;+%Y-%m-%d %H:%M:%S&#039;) - $message&amp;quot; &amp;gt;&amp;gt; &amp;quot;$LOG_FILE&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 # Ajouter un marqueur de début d&#039;exécution&lt;br /&gt;
 bavarder &amp;quot;$RUN_START_MARKER&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 # Récupérer la liste des noms de conteneurs Alpine&lt;br /&gt;
 containers=$(lxc list --format csv | tail -n +2 | cut -d&#039;,&#039; -f1)&lt;br /&gt;
 bavarder &amp;quot;Liste des conteneurs récupérée : &#039;$containers&#039;&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 # Séparer les noms de conteneurs en un tableau&lt;br /&gt;
 IFS=$&#039;\n&#039; read -r -d &amp;lt;nowiki&amp;gt;&#039;&#039;&amp;lt;/nowiki&amp;gt; -a container_array &amp;lt;&amp;lt;&amp;lt; &amp;quot;$containers&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 # Boucle pour lancer les mises à jour&lt;br /&gt;
 {&lt;br /&gt;
   for container in &amp;quot;${container_array[@]}&amp;quot;; do&lt;br /&gt;
     bavarder &amp;quot;--- Début du traitement du conteneur : &#039;$container&#039; ---&amp;quot;&lt;br /&gt;
     config=$(lxc config show &amp;quot;$container&amp;quot;)&lt;br /&gt;
     if echo &amp;quot;$config&amp;quot; | grep -iq &amp;quot;alpine&amp;quot;; then&lt;br /&gt;
       bavarder &amp;quot;Le conteneur &#039;$container&#039; semble être basé sur Alpine.&amp;quot;&lt;br /&gt;
       is_running=$(lxc list --format csv | grep &amp;quot;^${container},&amp;quot; | grep &amp;quot;,RUNNING,&amp;quot;)&lt;br /&gt;
       if [ -n &amp;quot;$is_running&amp;quot; ]; then&lt;br /&gt;
         bavarder &amp;quot;Le conteneur &#039;$container&#039; est en cours d&#039;exécution, lancement de la mise à jour...&amp;quot;&lt;br /&gt;
         lxc exec &amp;quot;$container&amp;quot; -- sh -c &amp;quot;apk update &amp;amp;&amp;amp; apk upgrade --available&amp;quot;&lt;br /&gt;
         result=$?&lt;br /&gt;
         if [ &amp;quot;$result&amp;quot; -ne 0 ]; then&lt;br /&gt;
           bavarder &amp;quot;Erreur lors de la mise à jour de &#039;$container&#039;.&amp;quot;&lt;br /&gt;
         fi&lt;br /&gt;
       else&lt;br /&gt;
         bavarder &amp;quot;Le conteneur &#039;$container&#039; n&#039;est pas en cours d&#039;exécution, mise à jour ignorée.&amp;quot;&lt;br /&gt;
       fi&lt;br /&gt;
     else&lt;br /&gt;
       bavarder &amp;quot;Le conteneur &#039;$container&#039; ne semble pas être basé sur Alpine, mise à jour ignorée.&amp;quot;&lt;br /&gt;
     fi&lt;br /&gt;
     bavarder &amp;quot;--- Fin du traitement du conteneur : &#039;$container&#039; ---&amp;quot;&lt;br /&gt;
   done&lt;br /&gt;
 } &amp;gt;&amp;gt; &amp;quot;$LOG_FILE&amp;quot; 2&amp;gt;&amp;amp;1&lt;br /&gt;
 &lt;br /&gt;
 bavarder &amp;quot;Fin de la tentative de mise à jour des conteneurs.&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 # --- Début du redémarrage des conteneurs Alpine (sauf le proxy) ---&lt;br /&gt;
 bavarder &amp;quot;--- Début du redémarrage des conteneurs Alpine (sauf $PROXY_CONTAINER) ---&amp;quot;&lt;br /&gt;
 for container in &amp;quot;${container_array[@]}&amp;quot;; do&lt;br /&gt;
   if [ &amp;quot;$container&amp;quot; != &amp;quot;$PROXY_CONTAINER&amp;quot; ]; then&lt;br /&gt;
     config=$(lxc config show &amp;quot;$container&amp;quot;)&lt;br /&gt;
     if echo &amp;quot;$config&amp;quot; | grep -iq &amp;quot;alpine&amp;quot;; then&lt;br /&gt;
       is_running=$(lxc list --format csv | grep &amp;quot;^${container},&amp;quot; | grep &amp;quot;,RUNNING,&amp;quot;)&lt;br /&gt;
       if [ -n &amp;quot;$is_running&amp;quot; ]; then&lt;br /&gt;
         bavarder &amp;quot;Redémarrage du conteneur &#039;$container&#039;...&amp;quot;&lt;br /&gt;
         lxc restart &amp;quot;$container&amp;quot;&lt;br /&gt;
         sleep &amp;quot;$SLEEP_AFTER_RESTART&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
         # Vérifier l&#039;état du service web pour les conteneurs web&lt;br /&gt;
         is_web_container=0&lt;br /&gt;
         for web_container in &amp;quot;${WEB_CONTAINERS[@]}&amp;quot;; do&lt;br /&gt;
           if [ &amp;quot;$container&amp;quot; == &amp;quot;$web_container&amp;quot; ]; then&lt;br /&gt;
             is_web_container=1&lt;br /&gt;
             break&lt;br /&gt;
           fi&lt;br /&gt;
         done&lt;br /&gt;
 	if [ &amp;quot;$is_web_container&amp;quot; -eq 1 ]; then&lt;br /&gt;
           service_status=$(lxc exec &amp;quot;$container&amp;quot; -- rc-service &amp;quot;$WEB_SERVICE_NAME&amp;quot; status 2&amp;gt;&amp;amp;1)&lt;br /&gt;
           if ! echo &amp;quot;$service_status&amp;quot; | grep -q &amp;quot;started&amp;quot;; then&lt;br /&gt;
             bavarder &amp;quot;$WEB_SERVICE_NAME ne semble pas en cours d&#039;exécution dans &#039;$container&#039;, tentative de démarrage...&amp;quot;&lt;br /&gt;
             lxc exec &amp;quot;$container&amp;quot; -- rc-service &amp;quot;$WEB_SERVICE_NAME&amp;quot; start&lt;br /&gt;
             sleep 5&lt;br /&gt;
             service_status_after_start=$(lxc exec &amp;quot;$container&amp;quot; -- rc-service &amp;quot;$WEB_SERVICE_NAME&amp;quot; status 2&amp;gt;&amp;amp;1)&lt;br /&gt;
             if ! echo &amp;quot;$service_status_after_start&amp;quot; | grep -q &amp;quot;started&amp;quot;; then&lt;br /&gt;
               bavarder &amp;quot;Échec du démarrage de $WEB_SERVICE_NAME dans &#039;$container&#039;.&amp;quot;&lt;br /&gt;
             else&lt;br /&gt;
               bavarder &amp;quot;$WEB_SERVICE_NAME démarré avec succès dans &#039;$container&#039;.&amp;quot;&lt;br /&gt;
             fi&lt;br /&gt;
           else&lt;br /&gt;
             bavarder &amp;quot;$WEB_SERVICE_NAME semble être en cours d&#039;exécution dans &#039;$container&#039;.&amp;quot;&lt;br /&gt;
           fi&lt;br /&gt;
         fi&lt;br /&gt;
       fi&lt;br /&gt;
     fi&lt;br /&gt;
   fi&lt;br /&gt;
 done&lt;br /&gt;
 bavarder &amp;quot;--- Fin du redémarrage des conteneurs Alpine (sauf $PROXY_CONTAINER) ---&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 # --- Redémarrage du conteneur proxy en dernier ---&lt;br /&gt;
 bavarder &amp;quot;--- Début du redémarrage du conteneur proxy ($PROXY_CONTAINER) ---&amp;quot;&lt;br /&gt;
 is_proxy_running=$(lxc list --format csv | grep &amp;quot;^${PROXY_CONTAINER},&amp;quot; | grep &amp;quot;,RUNNING,&amp;quot;)&lt;br /&gt;
 if [ -n &amp;quot;$is_proxy_running&amp;quot; ]; then&lt;br /&gt;
   bavarder &amp;quot;Redémarrage du conteneur proxy &#039;$PROXY_CONTAINER&#039;...&amp;quot;&lt;br /&gt;
   lxc restart &amp;quot;$PROXY_CONTAINER&amp;quot;&lt;br /&gt;
   result=$?&lt;br /&gt;
   if [ &amp;quot;$result&amp;quot; -ne 0 ]; then&lt;br /&gt;
     bavarder &amp;quot;Erreur lors du redémarrage du conteneur proxy &#039;$PROXY_CONTAINER&#039;.&amp;quot;&lt;br /&gt;
   fi&lt;br /&gt;
 else&lt;br /&gt;
   bavarder &amp;quot;Le conteneur proxy &#039;$PROXY_CONTAINER&#039; n&#039;est pas en cours d&#039;exécution, redémarrage ignoré.&amp;quot;&lt;br /&gt;
 fi&lt;br /&gt;
 bavarder &amp;quot;--- Fin du redémarrage du conteneur proxy ($PROXY_CONTAINER) ---&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 # Ajouter un marqueur de fin d&#039;exécution&lt;br /&gt;
 bavarder &amp;quot;$RUN_END_MARKER&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 # --- Gestion de la rotation des logs ---&lt;br /&gt;
 if [ -f &amp;quot;$LOG_FILE&amp;quot; ]; then&lt;br /&gt;
   # Récupérer toutes les occurrences du marqueur de début d&#039;exécution&lt;br /&gt;
   start_markers=$(grep -c &amp;quot;^$RUN_START_MARKER&amp;quot; &amp;quot;$LOG_FILE&amp;quot;)&lt;br /&gt;
 &lt;br /&gt;
   # Calculer le nombre d&#039;exécutions à supprimer&lt;br /&gt;
   runs_to_remove=$((start_markers - MAX_RUNS_TO_KEEP))&lt;br /&gt;
 &lt;br /&gt;
   if [ &amp;quot;$runs_to_remove&amp;quot; -gt 0 ]; then&lt;br /&gt;
     # Utiliser awk pour ne conserver que les N dernières exécutions&lt;br /&gt;
     awk -v n=&amp;quot;$MAX_RUNS_TO_KEEP&amp;quot; -v start_marker=&amp;quot;$RUN_START_MARKER&amp;quot; -v end_marker=&amp;quot;$RUN_END_MARKER&amp;quot; &#039;&lt;br /&gt;
       BEGIN { count = 0; in_run = 0; }&lt;br /&gt;
       $0 ~ start_marker {&lt;br /&gt;
         count++;&lt;br /&gt;
         if (count &amp;gt; (NR - RSTART) + 1 - (n * (RLENGTH ? 1 : 0))) {&lt;br /&gt;
           in_run = 1;&lt;br /&gt;
         } else {&lt;br /&gt;
           in_run = 0;&lt;br /&gt;
           print;&lt;br /&gt;
         }&lt;br /&gt;
       }&lt;br /&gt;
       $0 ~ end_marker {&lt;br /&gt;
         if (!in_run) {&lt;br /&gt;
           print;&lt;br /&gt;
         }&lt;br /&gt;
       }&lt;br /&gt;
       &amp;lt;nowiki&amp;gt;!($0 ~ start_marker) &amp;amp;&amp;amp; !($0 ~ end_marker) {&lt;br /&gt;
          if (!in_run) {&lt;br /&gt;
            print;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      &#039; &amp;quot;$LOG_FILE&amp;quot; &amp;gt; &amp;quot;$LOG_FILE.tmp&amp;quot; &amp;amp;&amp;amp; mv &amp;quot;$LOG_FILE.tmp&amp;quot; &amp;quot;$LOG_FILE&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
  fi&lt;br /&gt;
  &lt;br /&gt;
  #&amp;lt;/nowiki&amp;gt; Définir l&#039;adresse e-mail pour les notifications&lt;br /&gt;
 EMAIL_DESTINATAIRE=&amp;quot;toto@mail.com&amp;quot; # Remplace par ton adresse e-mail&lt;br /&gt;
 &lt;br /&gt;
 # Vérifier s&#039;il y a eu des erreurs et envoyer un e-mail si c&#039;est le cas&lt;br /&gt;
 if grep -q &amp;quot;Erreur&amp;quot; &amp;quot;$LOG_FILE&amp;quot;; then&lt;br /&gt;
   cat &amp;quot;$LOG_FILE&amp;quot; | mail -s &#039;Rapport de mise à jour LXC - Erreurs détectées&#039; &amp;quot;$EMAIL_DESTINATAIRE&amp;quot;&lt;br /&gt;
 fi&lt;br /&gt;
 &lt;br /&gt;
 exit 0&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
=Envoi des E-mails=&lt;br /&gt;
==Installation des logiciels de gestion des mails==&lt;br /&gt;
L&#039;envoi des mails nécessite l&#039;installation de &#039;&#039;&#039;mailutils&#039;&#039;&#039; et &#039;&#039;&#039;ssmtp&#039;&#039;&#039; :&lt;br /&gt;
  apt-get install mailutils ssmtp&lt;br /&gt;
==Configuration de ssmtp==&lt;br /&gt;
  vi /etc/ssmtp/ssmtp.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;ssmtp.conf&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
  #&lt;br /&gt;
  # Config file for sSMTP sendmail&lt;br /&gt;
  #&lt;br /&gt;
  # The person who gets all mail for userids &amp;lt; 1000&lt;br /&gt;
  # Make this empty to disable rewriting.&lt;br /&gt;
  root=toto@monmail.fr&lt;br /&gt;
  &lt;br /&gt;
  # The place where the mail goes. The actual machine name is required no &lt;br /&gt;
  # MX records are consulted. Commonly mailhosts are named mail.domain.com&lt;br /&gt;
  mailhub=smtp.gmail.com:587 (pour gmail)&lt;br /&gt;
  &lt;br /&gt;
  # Where will the mail seem to come from?&lt;br /&gt;
  # rewriteDomain=&lt;br /&gt;
 &lt;br /&gt;
  # The full hostname&lt;br /&gt;
  hostname=raspberrypi&lt;br /&gt;
  &lt;br /&gt;
  # Are users allowed to set their own From: address?&lt;br /&gt;
  # YES - Allow the user to specify their own From: address&lt;br /&gt;
  # NO - Use the system generated From: address&lt;br /&gt;
  FromLineOverride=YES&lt;br /&gt;
  UseTLS=YES&lt;br /&gt;
  UseSTARTTLS=YES&lt;br /&gt;
  AuthUser=toto@monfournisseur.com&lt;br /&gt;
  AuthPass=MonMotdePasseDeConnection&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Remarques :&#039;&#039;&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
::*&#039;&#039;Pour gmail, il faut créer un mot de passe d&#039;application dans les paramètre du compte google et l&#039;utiliser ici.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
::*&#039;&#039;Pour que la redirection de mails fonctionne, il faut que l&#039;adresse de destination finale soit différente de l&#039;adresse utilisée pour l&#039;identification pour l&#039;envoi des mails.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
On automatise l&#039;exécution (dimache à 2h du matin) :&lt;br /&gt;
  crontab -e&lt;br /&gt;
  0 2 * * 7 /root/scripts/lxc_auto_update.sh&lt;/div&gt;</summary>
		<author><name>Domi</name></author>
	</entry>
	<entry>
		<id>https://wiki.lesitadom.fr/index.php?title=Lxc_Lxd&amp;diff=1634</id>
		<title>Lxc Lxd</title>
		<link rel="alternate" type="text/html" href="https://wiki.lesitadom.fr/index.php?title=Lxc_Lxd&amp;diff=1634"/>
		<updated>2025-05-15T16:40:18Z</updated>

		<summary type="html">&lt;p&gt;Domi : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Installation de lxd&lt;br /&gt;
&lt;br /&gt;
Pb : les tutos se basent sur la création de conteneurs à partir d&#039;images du site &amp;quot;images.linuxcontainers.org&amp;quot; oblsolète&lt;br /&gt;
 lxc remote list&lt;br /&gt;
 lxc remote remove images (pour supprimer l&#039;entrée de la table)&lt;br /&gt;
 lxc remote add images &amp;lt;nowiki&amp;gt;https://images.lxd.canonical.com --protocol=simplestreams&amp;lt;/nowiki&amp;gt; &#039;&#039;(pour ajouter la source qui va bien)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
:*Pour &#039;&#039;&#039;lister&#039;&#039;&#039; les images dispo :&lt;br /&gt;
 lxc image list images:&lt;br /&gt;
:*en &#039;&#039;&#039;local&#039;&#039;&#039; :&lt;br /&gt;
 lxc image list local:&lt;br /&gt;
&lt;br /&gt;
:*Créer des &#039;&#039;&#039;alias&#039;&#039;&#039; pour les images locales :&lt;br /&gt;
 lxc image alias create local:alias_choisi figerprint_Local&lt;br /&gt;
&lt;br /&gt;
:*Mettre une image en &#039;&#039;&#039;frontal&#039;&#039;&#039; (création de la règle myport80)&lt;br /&gt;
&#039;&#039;&#039;(arrêter les autres images...)&#039;&#039;&#039;&lt;br /&gt;
 lxc config device add nomConteneur myport80 proxy listen=tcp:0.0.0.0:80 connect=tcp:127.0.0.1:80&lt;br /&gt;
(idem pour le port 443)&amp;lt;br&amp;gt;&lt;br /&gt;
::*&#039;&#039;&#039;Retirer&#039;&#039;&#039; la règle :&lt;br /&gt;
 lxc config device remove nomConteneur myport80&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Sur alpine : &#039;&#039;&#039;&lt;br /&gt;
:*Installer &#039;&#039;&#039;vim-nox&#039;&#039;&#039; (coloration syntaxique).&lt;br /&gt;
&lt;br /&gt;
:*Activer le démarrage automatique d&#039;un service :&lt;br /&gt;
 rc-update add nom_du_service&lt;/div&gt;</summary>
		<author><name>Domi</name></author>
	</entry>
	<entry>
		<id>https://wiki.lesitadom.fr/index.php?title=Organigramme_d%27installation&amp;diff=1633</id>
		<title>Organigramme d&#039;installation</title>
		<link rel="alternate" type="text/html" href="https://wiki.lesitadom.fr/index.php?title=Organigramme_d%27installation&amp;diff=1633"/>
		<updated>2025-05-15T16:33:42Z</updated>

		<summary type="html">&lt;p&gt;Domi : /* Mises à jour automatiques */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Les outils ==&lt;br /&gt;
=== Conteneur proxy : [[Proxy|Voir la page]] ===&lt;br /&gt;
::* Création du conteneur&lt;br /&gt;
::* Installation et configuration de nginx&lt;br /&gt;
::* Installation de certbot pour let&#039;s encrypt&lt;br /&gt;
::* Voir pour installer des outils de sécurité (fail2ban,...)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
=== Conteneur Mariadb : [[Mariadb|Voir la page]] ===&lt;br /&gt;
::* Création du conteneur&lt;br /&gt;
::* Installation de mariadb&lt;br /&gt;
::* Configuration&lt;br /&gt;
::* Création d&#039;un utilisateur&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
=== Conteneur PhpMyadmin : [[Phpma|Voir la page]] ===&lt;br /&gt;
::* Création du conteneur&lt;br /&gt;
::* Installation d&#039;apache2 et de phpmyadmin&lt;br /&gt;
::* Configuration d&#039;apache2 et de phpmyadmin&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Les applis ==&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
=== Conteneur tables : [[Tables|Voir la page]] ===&lt;br /&gt;
:*Installation du serveur web avec apache&lt;br /&gt;
:*Installation de &#039;&#039;tables&#039;&#039; et corrections des fichiers&lt;br /&gt;
&lt;br /&gt;
=== Conteneur pmb : [[Pmb|Voir la page]]===&lt;br /&gt;
&#039;&#039;(cf pmb sur alpine léger (historique dans pmb sur alpine lourd)&#039;&#039;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Conteneur wiki : [[Wiki|Voir la page]] ===&lt;br /&gt;
::* Création d&#039;un utilisateur et d&#039;une base de donnée vide pour le wiki&lt;br /&gt;
::* Transfert de la base de données&lt;br /&gt;
::* Création du conteneur&lt;br /&gt;
::* Installation du serveur web&lt;br /&gt;
::* Installation de la nouvelle version de mediawiki&lt;br /&gt;
::* Initialisation de l&#039;application&lt;br /&gt;
::* Modification de LocalSettings.php&lt;br /&gt;
::* Récupération du contenu sur l&#039;ancien serveur et transfert des données&lt;br /&gt;
::* Corrections&lt;br /&gt;
&lt;br /&gt;
=== Conteneur wp : [[Wp|Voir la page]] ===&lt;br /&gt;
&#039;&#039;(cf wordpress sur alpine léger mais sauter à la fin. Mariadb et phpmyadmin dans d&#039;autres conteneurs...)&#039;&#039;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Stockage et sauvegardes ==&lt;br /&gt;
création d&#039;un volume pour les sauvegardes :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; lxc storage volume create default sauvegarde-lxc size=50GB&lt;br /&gt;
&lt;br /&gt;
Montage du volume dans chaque conteneur :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; lxc config device add &amp;lt;nom du conteneur&amp;gt; sauvegarde-mount disk source=sauvegarde-lxc pool=default path=/sauvegardes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
logiciel : borg sauvegarde et rétention de données. Comte chez Kiki, à pousser en ssh.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sécurisation ==&lt;br /&gt;
=== Mises à jour automatiques ===&lt;br /&gt;
&lt;br /&gt;
Au niveau du système hôte, on ajoute le script : &lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
/root/scripts/&#039;&#039;&#039;lxc_auto_update.sh&#039;&#039;&#039; :&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 &lt;br /&gt;
 LOG_FILE=&amp;quot;/var/log/lxc_update.log&amp;quot;&lt;br /&gt;
 MAX_RUNS_TO_KEEP=2&lt;br /&gt;
 RUN_START_MARKER=&amp;quot;--- Début de l&#039;exécution du script ---&amp;quot;&lt;br /&gt;
 RUN_END_MARKER=&amp;quot;--- Fin de l&#039;exécution du script ---&amp;quot;&lt;br /&gt;
 PROXY_CONTAINER=&amp;quot;proxy&amp;quot;&lt;br /&gt;
 WEB_CONTAINERS=(&amp;quot;wp&amp;quot; &amp;quot;pmb&amp;quot; &amp;quot;wiki&amp;quot; &amp;quot;tables&amp;quot;) # Liste de tous les conteneurs web&lt;br /&gt;
 WEB_SERVICE_NAME=&amp;quot;apache2&amp;quot; # Nom du service web à vérifier (adapter si nécessaire)&lt;br /&gt;
 SLEEP_AFTER_RESTART=10 # Délai après le redémarrage des conteneurs web&lt;br /&gt;
 &lt;br /&gt;
 bavarder() {&lt;br /&gt;
   local message=&amp;quot;$1&amp;quot;&lt;br /&gt;
   echo &amp;quot;$(date &#039;+%Y-%m-%d %H:%M:%S&#039;) - $message&amp;quot; &amp;gt;&amp;gt; &amp;quot;$LOG_FILE&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 # Ajouter un marqueur de début d&#039;exécution&lt;br /&gt;
 bavarder &amp;quot;$RUN_START_MARKER&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 # Récupérer la liste des noms de conteneurs Alpine&lt;br /&gt;
 containers=$(lxc list --format csv | tail -n +2 | cut -d&#039;,&#039; -f1)&lt;br /&gt;
 bavarder &amp;quot;Liste des conteneurs récupérée : &#039;$containers&#039;&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 # Séparer les noms de conteneurs en un tableau&lt;br /&gt;
 IFS=$&#039;\n&#039; read -r -d &amp;lt;nowiki&amp;gt;&#039;&#039;&amp;lt;/nowiki&amp;gt; -a container_array &amp;lt;&amp;lt;&amp;lt; &amp;quot;$containers&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 # Boucle pour lancer les mises à jour&lt;br /&gt;
 {&lt;br /&gt;
   for container in &amp;quot;${container_array[@]}&amp;quot;; do&lt;br /&gt;
     bavarder &amp;quot;--- Début du traitement du conteneur : &#039;$container&#039; ---&amp;quot;&lt;br /&gt;
     config=$(lxc config show &amp;quot;$container&amp;quot;)&lt;br /&gt;
     if echo &amp;quot;$config&amp;quot; | grep -iq &amp;quot;alpine&amp;quot;; then&lt;br /&gt;
       bavarder &amp;quot;Le conteneur &#039;$container&#039; semble être basé sur Alpine.&amp;quot;&lt;br /&gt;
       is_running=$(lxc list --format csv | grep &amp;quot;^${container},&amp;quot; | grep &amp;quot;,RUNNING,&amp;quot;)&lt;br /&gt;
       if [ -n &amp;quot;$is_running&amp;quot; ]; then&lt;br /&gt;
         bavarder &amp;quot;Le conteneur &#039;$container&#039; est en cours d&#039;exécution, lancement de la mise à jour...&amp;quot;&lt;br /&gt;
         lxc exec &amp;quot;$container&amp;quot; -- sh -c &amp;quot;apk update &amp;amp;&amp;amp; apk upgrade --available&amp;quot;&lt;br /&gt;
         result=$?&lt;br /&gt;
         if [ &amp;quot;$result&amp;quot; -ne 0 ]; then&lt;br /&gt;
           bavarder &amp;quot;Erreur lors de la mise à jour de &#039;$container&#039;.&amp;quot;&lt;br /&gt;
         fi&lt;br /&gt;
       else&lt;br /&gt;
         bavarder &amp;quot;Le conteneur &#039;$container&#039; n&#039;est pas en cours d&#039;exécution, mise à jour ignorée.&amp;quot;&lt;br /&gt;
       fi&lt;br /&gt;
     else&lt;br /&gt;
       bavarder &amp;quot;Le conteneur &#039;$container&#039; ne semble pas être basé sur Alpine, mise à jour ignorée.&amp;quot;&lt;br /&gt;
     fi&lt;br /&gt;
     bavarder &amp;quot;--- Fin du traitement du conteneur : &#039;$container&#039; ---&amp;quot;&lt;br /&gt;
   done&lt;br /&gt;
 } &amp;gt;&amp;gt; &amp;quot;$LOG_FILE&amp;quot; 2&amp;gt;&amp;amp;1&lt;br /&gt;
 &lt;br /&gt;
 bavarder &amp;quot;Fin de la tentative de mise à jour des conteneurs.&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 # --- Début du redémarrage des conteneurs Alpine (sauf le proxy) ---&lt;br /&gt;
 bavarder &amp;quot;--- Début du redémarrage des conteneurs Alpine (sauf $PROXY_CONTAINER) ---&amp;quot;&lt;br /&gt;
 for container in &amp;quot;${container_array[@]}&amp;quot;; do&lt;br /&gt;
   if [ &amp;quot;$container&amp;quot; != &amp;quot;$PROXY_CONTAINER&amp;quot; ]; then&lt;br /&gt;
     config=$(lxc config show &amp;quot;$container&amp;quot;)&lt;br /&gt;
     if echo &amp;quot;$config&amp;quot; | grep -iq &amp;quot;alpine&amp;quot;; then&lt;br /&gt;
       is_running=$(lxc list --format csv | grep &amp;quot;^${container},&amp;quot; | grep &amp;quot;,RUNNING,&amp;quot;)&lt;br /&gt;
       if [ -n &amp;quot;$is_running&amp;quot; ]; then&lt;br /&gt;
         bavarder &amp;quot;Redémarrage du conteneur &#039;$container&#039;...&amp;quot;&lt;br /&gt;
         lxc restart &amp;quot;$container&amp;quot;&lt;br /&gt;
         sleep &amp;quot;$SLEEP_AFTER_RESTART&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
         # Vérifier l&#039;état du service web pour les conteneurs web&lt;br /&gt;
         is_web_container=0&lt;br /&gt;
         for web_container in &amp;quot;${WEB_CONTAINERS[@]}&amp;quot;; do&lt;br /&gt;
           if [ &amp;quot;$container&amp;quot; == &amp;quot;$web_container&amp;quot; ]; then&lt;br /&gt;
             is_web_container=1&lt;br /&gt;
             break&lt;br /&gt;
           fi&lt;br /&gt;
         done&lt;br /&gt;
 	if [ &amp;quot;$is_web_container&amp;quot; -eq 1 ]; then&lt;br /&gt;
           service_status=$(lxc exec &amp;quot;$container&amp;quot; -- rc-service &amp;quot;$WEB_SERVICE_NAME&amp;quot; status 2&amp;gt;&amp;amp;1)&lt;br /&gt;
           if ! echo &amp;quot;$service_status&amp;quot; | grep -q &amp;quot;started&amp;quot;; then&lt;br /&gt;
             bavarder &amp;quot;$WEB_SERVICE_NAME ne semble pas en cours d&#039;exécution dans &#039;$container&#039;, tentative de démarrage...&amp;quot;&lt;br /&gt;
             lxc exec &amp;quot;$container&amp;quot; -- rc-service &amp;quot;$WEB_SERVICE_NAME&amp;quot; start&lt;br /&gt;
             sleep 5&lt;br /&gt;
             service_status_after_start=$(lxc exec &amp;quot;$container&amp;quot; -- rc-service &amp;quot;$WEB_SERVICE_NAME&amp;quot; status 2&amp;gt;&amp;amp;1)&lt;br /&gt;
             if ! echo &amp;quot;$service_status_after_start&amp;quot; | grep -q &amp;quot;started&amp;quot;; then&lt;br /&gt;
               bavarder &amp;quot;Échec du démarrage de $WEB_SERVICE_NAME dans &#039;$container&#039;.&amp;quot;&lt;br /&gt;
             else&lt;br /&gt;
               bavarder &amp;quot;$WEB_SERVICE_NAME démarré avec succès dans &#039;$container&#039;.&amp;quot;&lt;br /&gt;
             fi&lt;br /&gt;
           else&lt;br /&gt;
             bavarder &amp;quot;$WEB_SERVICE_NAME semble être en cours d&#039;exécution dans &#039;$container&#039;.&amp;quot;&lt;br /&gt;
           fi&lt;br /&gt;
         fi&lt;br /&gt;
       fi&lt;br /&gt;
     fi&lt;br /&gt;
   fi&lt;br /&gt;
 done&lt;br /&gt;
 bavarder &amp;quot;--- Fin du redémarrage des conteneurs Alpine (sauf $PROXY_CONTAINER) ---&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 # --- Redémarrage du conteneur proxy en dernier ---&lt;br /&gt;
 bavarder &amp;quot;--- Début du redémarrage du conteneur proxy ($PROXY_CONTAINER) ---&amp;quot;&lt;br /&gt;
 is_proxy_running=$(lxc list --format csv | grep &amp;quot;^${PROXY_CONTAINER},&amp;quot; | grep &amp;quot;,RUNNING,&amp;quot;)&lt;br /&gt;
 if [ -n &amp;quot;$is_proxy_running&amp;quot; ]; then&lt;br /&gt;
   bavarder &amp;quot;Redémarrage du conteneur proxy &#039;$PROXY_CONTAINER&#039;...&amp;quot;&lt;br /&gt;
   lxc restart &amp;quot;$PROXY_CONTAINER&amp;quot;&lt;br /&gt;
   result=$?&lt;br /&gt;
   if [ &amp;quot;$result&amp;quot; -ne 0 ]; then&lt;br /&gt;
     bavarder &amp;quot;Erreur lors du redémarrage du conteneur proxy &#039;$PROXY_CONTAINER&#039;.&amp;quot;&lt;br /&gt;
   fi&lt;br /&gt;
 else&lt;br /&gt;
   bavarder &amp;quot;Le conteneur proxy &#039;$PROXY_CONTAINER&#039; n&#039;est pas en cours d&#039;exécution, redémarrage ignoré.&amp;quot;&lt;br /&gt;
 fi&lt;br /&gt;
 bavarder &amp;quot;--- Fin du redémarrage du conteneur proxy ($PROXY_CONTAINER) ---&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 # Ajouter un marqueur de fin d&#039;exécution&lt;br /&gt;
 bavarder &amp;quot;$RUN_END_MARKER&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 # --- Gestion de la rotation des logs ---&lt;br /&gt;
 if [ -f &amp;quot;$LOG_FILE&amp;quot; ]; then&lt;br /&gt;
   # Récupérer toutes les occurrences du marqueur de début d&#039;exécution&lt;br /&gt;
   start_markers=$(grep -c &amp;quot;^$RUN_START_MARKER&amp;quot; &amp;quot;$LOG_FILE&amp;quot;)&lt;br /&gt;
 &lt;br /&gt;
   # Calculer le nombre d&#039;exécutions à supprimer&lt;br /&gt;
   runs_to_remove=$((start_markers - MAX_RUNS_TO_KEEP))&lt;br /&gt;
 &lt;br /&gt;
   if [ &amp;quot;$runs_to_remove&amp;quot; -gt 0 ]; then&lt;br /&gt;
     # Utiliser awk pour ne conserver que les N dernières exécutions&lt;br /&gt;
     awk -v n=&amp;quot;$MAX_RUNS_TO_KEEP&amp;quot; -v start_marker=&amp;quot;$RUN_START_MARKER&amp;quot; -v end_marker=&amp;quot;$RUN_END_MARKER&amp;quot; &#039;&lt;br /&gt;
       BEGIN { count = 0; in_run = 0; }&lt;br /&gt;
       $0 ~ start_marker {&lt;br /&gt;
         count++;&lt;br /&gt;
         if (count &amp;gt; (NR - RSTART) + 1 - (n * (RLENGTH ? 1 : 0))) {&lt;br /&gt;
           in_run = 1;&lt;br /&gt;
         } else {&lt;br /&gt;
           in_run = 0;&lt;br /&gt;
           print;&lt;br /&gt;
         }&lt;br /&gt;
       }&lt;br /&gt;
       $0 ~ end_marker {&lt;br /&gt;
         if (!in_run) {&lt;br /&gt;
           print;&lt;br /&gt;
         }&lt;br /&gt;
       }&lt;br /&gt;
       &amp;lt;nowiki&amp;gt;!($0 ~ start_marker) &amp;amp;&amp;amp; !($0 ~ end_marker) {&lt;br /&gt;
          if (!in_run) {&lt;br /&gt;
            print;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      &#039; &amp;quot;$LOG_FILE&amp;quot; &amp;gt; &amp;quot;$LOG_FILE.tmp&amp;quot; &amp;amp;&amp;amp; mv &amp;quot;$LOG_FILE.tmp&amp;quot; &amp;quot;$LOG_FILE&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
  fi&lt;br /&gt;
  &lt;br /&gt;
  #&amp;lt;/nowiki&amp;gt; Définir l&#039;adresse e-mail pour les notifications&lt;br /&gt;
 EMAIL_DESTINATAIRE=&amp;quot;toto@mail.com&amp;quot; # Remplace par ton adresse e-mail&lt;br /&gt;
 &lt;br /&gt;
 # Vérifier s&#039;il y a eu des erreurs et envoyer un e-mail si c&#039;est le cas&lt;br /&gt;
 if grep -q &amp;quot;Erreur&amp;quot; &amp;quot;$LOG_FILE&amp;quot;; then&lt;br /&gt;
   cat &amp;quot;$LOG_FILE&amp;quot; | mail -s &#039;Rapport de mise à jour LXC - Erreurs détectées&#039; &amp;quot;$EMAIL_DESTINATAIRE&amp;quot;&lt;br /&gt;
 fi&lt;br /&gt;
 &lt;br /&gt;
 exit 0&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Envoi des E-mails====&lt;br /&gt;
L&#039;envoi des mails nécessite l&#039;installation de mailutils et ssmtp :&lt;br /&gt;
  apt-get install mailutils ssmtp&lt;br /&gt;
Configuration de ssmtp :&lt;br /&gt;
  vi /etc/ssmtp/ssmtp.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;ssmtp.conf&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
  #&lt;br /&gt;
  # Config file for sSMTP sendmail&lt;br /&gt;
  #&lt;br /&gt;
  # The person who gets all mail for userids &amp;lt; 1000&lt;br /&gt;
  # Make this empty to disable rewriting.&lt;br /&gt;
  root=toto@monmail.fr&lt;br /&gt;
  &lt;br /&gt;
  # The place where the mail goes. The actual machine name is required no &lt;br /&gt;
  # MX records are consulted. Commonly mailhosts are named mail.domain.com&lt;br /&gt;
  mailhub=smtp.gmail.com:587 (pour gmail)&lt;br /&gt;
  &lt;br /&gt;
  # Where will the mail seem to come from?&lt;br /&gt;
  # rewriteDomain=&lt;br /&gt;
 &lt;br /&gt;
  # The full hostname&lt;br /&gt;
  hostname=raspberrypi&lt;br /&gt;
  &lt;br /&gt;
  # Are users allowed to set their own From: address?&lt;br /&gt;
  # YES - Allow the user to specify their own From: address&lt;br /&gt;
  # NO - Use the system generated From: address&lt;br /&gt;
  FromLineOverride=YES&lt;br /&gt;
  UseTLS=YES&lt;br /&gt;
  UseSTARTTLS=YES&lt;br /&gt;
  AuthUser=toto@monfournisseur.com&lt;br /&gt;
  AuthPass=MonMotdePasseDeConnection&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Remarques :&#039;&#039;&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
::*&#039;&#039;Pour gmail, il faut créer un mot de passe d&#039;application dans les paramètre du compte google et l&#039;utiliser ici.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
::*&#039;&#039;Pour que la redirection de mails fonctionne, il faut que l&#039;adresse de destination finale soit différente de l&#039;adresse utilisée pour l&#039;identification pour l&#039;envoi des mails.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
On automatise l&#039;exécution (dimache à 2h du matin) :&lt;br /&gt;
  crontab -e&lt;br /&gt;
  0 2 * * 7 /root/scripts/lxc_auto_update.sh&lt;br /&gt;
&lt;br /&gt;
===Sauvegardes automatiques des données des conteneurs web===&lt;br /&gt;
On va programmer une sauvegarde automatique pour chaque conteneur web, ainsi que pour le conteneur &#039;&#039;&#039;mariadb&#039;&#039;&#039;. Ces sauvegardes se feront dans un espace commun qui sera à son tour sauvegardé sur un site distant à intervalles réguliers en gérant la rotation des sauvegardes.&amp;lt;br&amp;gt;&lt;br /&gt;
Les conteneurs :&lt;br /&gt;
::* mariadb&lt;br /&gt;
::* wiki&lt;br /&gt;
::* pmb&lt;br /&gt;
::* wp&lt;br /&gt;
bénéficieront de ce mécanisme.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour les conteneurs &#039;&#039;&#039;proxy&#039;&#039;&#039;, &#039;&#039;&#039;phpma&#039;&#039;&#039; et &#039;&#039;&#039;tables&#039;&#039;&#039;, une simple sauvegarde à la main suffira.&amp;lt;br&amp;gt;&lt;br /&gt;
On commence par créer un volume de 50Gb et on le monte dans les conteneurs concernés :&lt;br /&gt;
 lxc storage volume create default sauvegarde-lxc size=50GB&lt;br /&gt;
 lxc config device add wp sauvegarde-mount disk source=sauvegarde-lxc pool=default path=/sauvegardes&lt;br /&gt;
 lxc config device add wiki sauvegarde-mount disk source=sauvegarde-lxc pool=default path=/sauvegardes&lt;br /&gt;
 lxc config device add mariadb sauvegarde-mount disk source=sauvegarde-lxc pool=default path=/sauvegardes&lt;br /&gt;
 lxc config device add pmb sauvegarde-mount disk source=sauvegarde-lxc pool=default path=/sauvegardes&lt;br /&gt;
====mariadb====&lt;br /&gt;
:* On commence par créer un utilisateur spécifique à la sauvegarde.&amp;lt;br&amp;gt; Sous phpMyAdmin, création de l&#039;utilisateur &#039;&#039;backup_user&#039;&#039; avec les privilèges &#039;&#039;SELECT&#039;&#039; et &#039;&#039;LOCK TABLES&#039;&#039; pour les tables &#039;&#039;pmb&#039;&#039;, &#039;&#039;wiki&#039;&#039; et &#039;&#039;wordpress&#039;&#039;.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
:* Création du script de sauvegarde des tables&amp;lt;br&amp;gt;On sauvegarde les tables &#039;&#039;pmb&#039;&#039;, &#039;&#039;wordpress&#039;&#039; et &#039;&#039;wiki&#039;&#039; en générant un fichier de log dans /var/log/&#039;&#039;&#039;backup_mariadb.log&#039;&#039;&#039;.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;/usr/local/bin/backup_mariadb.sh&#039;&#039;&#039; :&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 DATE=$(date +%Y%m%d_%H%M)&lt;br /&gt;
 OUTPUT_FILE=&amp;quot;/sauvegardes/db_backup_${DATE}.sql.gz&amp;quot;&lt;br /&gt;
 USER=&amp;quot;backup_user&amp;quot;  &amp;lt;br&amp;gt;PASSWORD=&amp;quot;*********&amp;quot; # &#039;&#039;Mot de passe de backup_user&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 # Liste des bases de données à sauvegarder&lt;br /&gt;
 DATABASES=&amp;quot;pmb wiki wordpress&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 # Exporte chaque base de données et la compresse&lt;br /&gt;
 for DB in $DATABASES; do&lt;br /&gt;
   echo &amp;quot;Sauvegarde de la base de données : $DB&amp;quot;&lt;br /&gt;
   mysqldump -u &amp;quot;$USER&amp;quot; -p&amp;quot;$PASSWORD&amp;quot; &amp;quot;$DB&amp;quot; | gzip &amp;gt;&amp;gt; &amp;quot;$OUTPUT_FILE&amp;quot;&lt;br /&gt;
 done&lt;br /&gt;
 &lt;br /&gt;
 chmod 600 &amp;quot;$OUTPUT_FILE&amp;quot; # Restreindre les permissions&lt;br /&gt;
 echo &amp;quot;Sauvegarde des bases de données terminée : $OUTPUT_FILE&amp;quot; &amp;gt;&amp;gt; /var/log/backup_mariadb.log&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
:* Rendre le script exécutable :&amp;lt;br&amp;gt;&lt;br /&gt;
 chmod +x /usr/local/bin/backup_mariadb.sh&amp;lt;br&amp;gt;&lt;br /&gt;
:* Automatiser le script le samedi à 2h du matin :&amp;lt;br&amp;gt;Avec &#039;&#039;&#039;crontab -e&#039;&#039;&#039;, ajouter la ligne :&lt;br /&gt;
 0 2 * * 6 /usr/local/bin/backup_mariadb.sh&lt;br /&gt;
&lt;br /&gt;
====wiki====&lt;br /&gt;
MediaWiki installe par défaut des extensions et des skins. La sauvegarde de ces extension alourdit considérablement le fichier. Le script parcourt le dossier pour les exclure et ne tenir compte que de celles nouvellement installées.&amp;lt;br&amp;gt;&lt;br /&gt;
Il crée également un fichier de log /var/log/&#039;&#039;&#039;backup_wiki.log&#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
/usr/local/bin/&#039;&#039;&#039;backup_wiki.sh&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 DATE=$(date +%Y%m%d_%H%M)&lt;br /&gt;
 OUTPUT_FILE=&amp;quot;/sauvegardes/wiki_backup_${DATE}.tar.gz&amp;quot;&lt;br /&gt;
 MEDIAWIKI_ROOT=&amp;quot;/var/www/localhost/htdocs/&amp;quot;&lt;br /&gt;
 BASE_EXTENSIONS=&amp;quot;AbuseFilter CategoryTree Cite CiteThisPage CodeEditor ConfirmEdit DiscussionTools Echo Gadgets ImageMap InputBox Interwiki Linter LoginNotify Math MultimediaViewer Nuke OATHAuth PageImages ParserFunctions PdfHandler Poem ReplaceText Scribunto SecureLinkFixer SpamBlacklist SyntaxHighlight_GeSHi TemplateData TextExtracts Thanks TitleBlacklist VisualEditor WikiEditor&amp;quot;&lt;br /&gt;
 FILES_TO_BACKUP=&amp;quot;images&lt;br /&gt;
 LocalSettings.php&lt;br /&gt;
 extensions-custom/&lt;br /&gt;
 skins-custom/&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 echo &amp;quot;--- Début du script ---&amp;quot;&lt;br /&gt;
 echo &amp;quot;Date de la sauvegarde : $DATE&amp;quot;&lt;br /&gt;
 echo &amp;quot;Fichier de sortie : $OUTPUT_FILE&amp;quot;&lt;br /&gt;
 echo &amp;quot;Racine de MediaWiki : $MEDIAWIKI_ROOT&amp;quot;&lt;br /&gt;
 echo &amp;quot;Extensions de base : $BASE_EXTENSIONS&amp;quot;&lt;br /&gt;
 echo &amp;quot;Fichiers de base à sauvegarder : $FILES_TO_BACKUP&amp;quot;&lt;br /&gt;
 echo &amp;quot;---&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 cd &amp;quot;$MEDIAWIKI_ROOT&amp;quot; || { echo &amp;quot;Erreur lors du changement de répertoire vers $MEDIAWIKI_ROOT&amp;quot;; exit 1; }&lt;br /&gt;
 echo &amp;quot;Répertoire courant : $(pwd)&amp;quot;&lt;br /&gt;
 echo &amp;quot;--- Identification des extensions personnalisées ---&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 echo &amp;quot;Création du fichier temporaire /tmp/backup_list.txt&amp;quot;&lt;br /&gt;
 echo &amp;quot;$FILES_TO_BACKUP&amp;quot; &amp;gt; /tmp/backup_list.txt&lt;br /&gt;
 cat /tmp/backup_list.txt | while IFS= read -r LINE; do&lt;br /&gt;
   echo &amp;quot;Ajout de &#039;$LINE&#039; à la liste de sauvegarde.&amp;quot;&lt;br /&gt;
 done&lt;br /&gt;
 echo &amp;quot;---&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 echo &amp;quot;Traitement des extensions dans $MEDIAWIKI_ROOT/extensions/&amp;quot;&lt;br /&gt;
 for EXTENSION_DIR in &amp;quot;$MEDIAWIKI_ROOT&amp;quot;extensions/*; do&lt;br /&gt;
     if [ -d &amp;quot;$EXTENSION_DIR&amp;quot; ]; then&lt;br /&gt;
         EXTENSION_NAME=$(basename &amp;quot;$EXTENSION_DIR&amp;quot;)&lt;br /&gt;
         echo &amp;quot;Extension trouvée : $EXTENSION_NAME \(chemin complet : $EXTENSION_DIR\)&amp;quot;&lt;br /&gt;
         IS_BASE=0&lt;br /&gt;
         for BASE_EXT in $BASE_EXTENSIONS; do&lt;br /&gt;
             if [ &amp;quot;$EXTENSION_NAME&amp;quot; = &amp;quot;$BASE_EXT&amp;quot; ]; then&lt;br /&gt;
                 IS_BASE=1&lt;br /&gt;
                 echo &amp;quot;  &#039;$EXTENSION_NAME&#039; est une extension de base.&amp;quot;&lt;br /&gt;
                 break&lt;br /&gt;
             fi&lt;br /&gt;
         done&lt;br /&gt;
         if [ &amp;quot;$IS_BASE&amp;quot; -eq 0 ]; then&lt;br /&gt;
             echo &amp;quot;  &#039;$EXTENSION_NAME&#039; est une extension personnalisée. Ajout à la liste de sauvegarde.&amp;quot;&lt;br /&gt;
             echo &amp;quot;extensions/$EXTENSION_NAME&amp;quot; &amp;gt;&amp;gt; /tmp/backup_list.txt&lt;br /&gt;
         fi&lt;br /&gt;
     fi&lt;br /&gt;
 done&lt;br /&gt;
 echo &amp;quot;--- Liste de sauvegarde complète ---&amp;quot;&lt;br /&gt;
 cat /tmp/backup_list.txt&lt;br /&gt;
 echo &amp;quot;---&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 echo &amp;quot;Création de l&#039;archive : $OUTPUT_FILE&amp;quot;&lt;br /&gt;
 tar czf &amp;quot;$OUTPUT_FILE&amp;quot; -T /tmp/backup_list.txt --exclude=&#039;./tmp/backup_list.txt&#039;&lt;br /&gt;
 echo &amp;quot;Commande tar exécutée.&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 if [ -f &amp;quot;$OUTPUT_FILE&amp;quot; ]; then&lt;br /&gt;
     chmod 600 &amp;quot;$OUTPUT_FILE&amp;quot;&lt;br /&gt;
     echo &amp;quot;Permissions du fichier de sauvegarde mises à 600.&amp;quot;&lt;br /&gt;
     echo &amp;quot;Sauvegarde des données essentielles et des extensions personnalisées de MediaWiki terminée : $OUTPUT_FILE&amp;quot; &amp;gt;&amp;gt; /var/log/backup_wiki.log&lt;br /&gt;
     echo &amp;quot;--- Fin du script ---&amp;quot;&lt;br /&gt;
 else&lt;br /&gt;
     echo &amp;quot;Erreur : Le fichier de sauvegarde $OUTPUT_FILE n&#039;a pas été créé.&amp;quot;&lt;br /&gt;
     echo &amp;quot;--- Fin du script \(avec erreur\) ---&amp;quot;&lt;br /&gt;
     exit 1&lt;br /&gt;
 fi&lt;br /&gt;
 &lt;br /&gt;
 rm /tmp/backup_list.txt&lt;br /&gt;
 echo &amp;quot;Fichier temporaire /tmp/backup_list.txt supprimé.&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;NB :&#039;&#039;&#039; Les nombreuses lignes &#039;&#039;echo&#039;&#039; ont été ajoutées à des fin de corrections en cours de programmation et peuvent être simplifiées...&lt;br /&gt;
:* Rendre le script exécutable :&amp;lt;br&amp;gt;&lt;br /&gt;
 chmod +x /usr/local/bin/backup_wiki.sh&amp;lt;br&amp;gt;&lt;br /&gt;
:* Automatiser le script le samedi à 3h30 du matin :&amp;lt;br&amp;gt;Avec &#039;&#039;&#039;crontab -e&#039;&#039;&#039;, ajouter la ligne :&lt;br /&gt;
 30  3  *  *  6  /usr/local/bin/backup_wiki.sh&lt;br /&gt;
&lt;br /&gt;
====wp====&lt;br /&gt;
====pmb====&lt;/div&gt;</summary>
		<author><name>Domi</name></author>
	</entry>
	<entry>
		<id>https://wiki.lesitadom.fr/index.php?title=Organigramme_d%27installation&amp;diff=1632</id>
		<title>Organigramme d&#039;installation</title>
		<link rel="alternate" type="text/html" href="https://wiki.lesitadom.fr/index.php?title=Organigramme_d%27installation&amp;diff=1632"/>
		<updated>2025-05-15T16:32:15Z</updated>

		<summary type="html">&lt;p&gt;Domi : /* Conteneur wiki : Voir la page */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Les outils ==&lt;br /&gt;
=== Conteneur proxy : [[Proxy|Voir la page]] ===&lt;br /&gt;
::* Création du conteneur&lt;br /&gt;
::* Installation et configuration de nginx&lt;br /&gt;
::* Installation de certbot pour let&#039;s encrypt&lt;br /&gt;
::* Voir pour installer des outils de sécurité (fail2ban,...)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
=== Conteneur Mariadb : [[Mariadb|Voir la page]] ===&lt;br /&gt;
::* Création du conteneur&lt;br /&gt;
::* Installation de mariadb&lt;br /&gt;
::* Configuration&lt;br /&gt;
::* Création d&#039;un utilisateur&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
=== Conteneur PhpMyadmin : [[Phpma|Voir la page]] ===&lt;br /&gt;
::* Création du conteneur&lt;br /&gt;
::* Installation d&#039;apache2 et de phpmyadmin&lt;br /&gt;
::* Configuration d&#039;apache2 et de phpmyadmin&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Les applis ==&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
=== Conteneur tables : [[Tables|Voir la page]] ===&lt;br /&gt;
:*Installation du serveur web avec apache&lt;br /&gt;
:*Installation de &#039;&#039;tables&#039;&#039; et corrections des fichiers&lt;br /&gt;
&lt;br /&gt;
=== Conteneur pmb : [[Pmb|Voir la page]]===&lt;br /&gt;
&#039;&#039;(cf pmb sur alpine léger (historique dans pmb sur alpine lourd)&#039;&#039;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Conteneur wiki : [[Wiki|Voir la page]] ===&lt;br /&gt;
::* Création d&#039;un utilisateur et d&#039;une base de donnée vide pour le wiki&lt;br /&gt;
::* Transfert de la base de données&lt;br /&gt;
::* Création du conteneur&lt;br /&gt;
::* Installation du serveur web&lt;br /&gt;
::* Installation de la nouvelle version de mediawiki&lt;br /&gt;
::* Initialisation de l&#039;application&lt;br /&gt;
::* Modification de LocalSettings.php&lt;br /&gt;
::* Récupération du contenu sur l&#039;ancien serveur et transfert des données&lt;br /&gt;
::* Corrections&lt;br /&gt;
&lt;br /&gt;
=== Conteneur wp : [[Wp|Voir la page]] ===&lt;br /&gt;
&#039;&#039;(cf wordpress sur alpine léger mais sauter à la fin. Mariadb et phpmyadmin dans d&#039;autres conteneurs...)&#039;&#039;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Stockage et sauvegardes ==&lt;br /&gt;
création d&#039;un volume pour les sauvegardes :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; lxc storage volume create default sauvegarde-lxc size=50GB&lt;br /&gt;
&lt;br /&gt;
Montage du volume dans chaque conteneur :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; lxc config device add &amp;lt;nom du conteneur&amp;gt; sauvegarde-mount disk source=sauvegarde-lxc pool=default path=/sauvegardes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
logiciel : borg sauvegarde et rétention de données. Comte chez Kiki, à pousser en ssh.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sécurisation ==&lt;br /&gt;
=== Mises à jour automatiques ===&lt;br /&gt;
&lt;br /&gt;
Installer vim-nox (coloration syntaxique).&lt;br /&gt;
&lt;br /&gt;
Au niveau du système hôte, on ajoute le script : &lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
/root/scripts/&#039;&#039;&#039;lxc_auto_update.sh&#039;&#039;&#039; :&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 &lt;br /&gt;
 LOG_FILE=&amp;quot;/var/log/lxc_update.log&amp;quot;&lt;br /&gt;
 MAX_RUNS_TO_KEEP=2&lt;br /&gt;
 RUN_START_MARKER=&amp;quot;--- Début de l&#039;exécution du script ---&amp;quot;&lt;br /&gt;
 RUN_END_MARKER=&amp;quot;--- Fin de l&#039;exécution du script ---&amp;quot;&lt;br /&gt;
 PROXY_CONTAINER=&amp;quot;proxy&amp;quot;&lt;br /&gt;
 WEB_CONTAINERS=(&amp;quot;wp&amp;quot; &amp;quot;pmb&amp;quot; &amp;quot;wiki&amp;quot; &amp;quot;tables&amp;quot;) # Liste de tous les conteneurs web&lt;br /&gt;
 WEB_SERVICE_NAME=&amp;quot;apache2&amp;quot; # Nom du service web à vérifier (adapter si nécessaire)&lt;br /&gt;
 SLEEP_AFTER_RESTART=10 # Délai après le redémarrage des conteneurs web&lt;br /&gt;
 &lt;br /&gt;
 bavarder() {&lt;br /&gt;
   local message=&amp;quot;$1&amp;quot;&lt;br /&gt;
   echo &amp;quot;$(date &#039;+%Y-%m-%d %H:%M:%S&#039;) - $message&amp;quot; &amp;gt;&amp;gt; &amp;quot;$LOG_FILE&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 # Ajouter un marqueur de début d&#039;exécution&lt;br /&gt;
 bavarder &amp;quot;$RUN_START_MARKER&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 # Récupérer la liste des noms de conteneurs Alpine&lt;br /&gt;
 containers=$(lxc list --format csv | tail -n +2 | cut -d&#039;,&#039; -f1)&lt;br /&gt;
 bavarder &amp;quot;Liste des conteneurs récupérée : &#039;$containers&#039;&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 # Séparer les noms de conteneurs en un tableau&lt;br /&gt;
 IFS=$&#039;\n&#039; read -r -d &amp;lt;nowiki&amp;gt;&#039;&#039;&amp;lt;/nowiki&amp;gt; -a container_array &amp;lt;&amp;lt;&amp;lt; &amp;quot;$containers&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 # Boucle pour lancer les mises à jour&lt;br /&gt;
 {&lt;br /&gt;
   for container in &amp;quot;${container_array[@]}&amp;quot;; do&lt;br /&gt;
     bavarder &amp;quot;--- Début du traitement du conteneur : &#039;$container&#039; ---&amp;quot;&lt;br /&gt;
     config=$(lxc config show &amp;quot;$container&amp;quot;)&lt;br /&gt;
     if echo &amp;quot;$config&amp;quot; | grep -iq &amp;quot;alpine&amp;quot;; then&lt;br /&gt;
       bavarder &amp;quot;Le conteneur &#039;$container&#039; semble être basé sur Alpine.&amp;quot;&lt;br /&gt;
       is_running=$(lxc list --format csv | grep &amp;quot;^${container},&amp;quot; | grep &amp;quot;,RUNNING,&amp;quot;)&lt;br /&gt;
       if [ -n &amp;quot;$is_running&amp;quot; ]; then&lt;br /&gt;
         bavarder &amp;quot;Le conteneur &#039;$container&#039; est en cours d&#039;exécution, lancement de la mise à jour...&amp;quot;&lt;br /&gt;
         lxc exec &amp;quot;$container&amp;quot; -- sh -c &amp;quot;apk update &amp;amp;&amp;amp; apk upgrade --available&amp;quot;&lt;br /&gt;
         result=$?&lt;br /&gt;
         if [ &amp;quot;$result&amp;quot; -ne 0 ]; then&lt;br /&gt;
           bavarder &amp;quot;Erreur lors de la mise à jour de &#039;$container&#039;.&amp;quot;&lt;br /&gt;
         fi&lt;br /&gt;
       else&lt;br /&gt;
         bavarder &amp;quot;Le conteneur &#039;$container&#039; n&#039;est pas en cours d&#039;exécution, mise à jour ignorée.&amp;quot;&lt;br /&gt;
       fi&lt;br /&gt;
     else&lt;br /&gt;
       bavarder &amp;quot;Le conteneur &#039;$container&#039; ne semble pas être basé sur Alpine, mise à jour ignorée.&amp;quot;&lt;br /&gt;
     fi&lt;br /&gt;
     bavarder &amp;quot;--- Fin du traitement du conteneur : &#039;$container&#039; ---&amp;quot;&lt;br /&gt;
   done&lt;br /&gt;
 } &amp;gt;&amp;gt; &amp;quot;$LOG_FILE&amp;quot; 2&amp;gt;&amp;amp;1&lt;br /&gt;
 &lt;br /&gt;
 bavarder &amp;quot;Fin de la tentative de mise à jour des conteneurs.&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 # --- Début du redémarrage des conteneurs Alpine (sauf le proxy) ---&lt;br /&gt;
 bavarder &amp;quot;--- Début du redémarrage des conteneurs Alpine (sauf $PROXY_CONTAINER) ---&amp;quot;&lt;br /&gt;
 for container in &amp;quot;${container_array[@]}&amp;quot;; do&lt;br /&gt;
   if [ &amp;quot;$container&amp;quot; != &amp;quot;$PROXY_CONTAINER&amp;quot; ]; then&lt;br /&gt;
     config=$(lxc config show &amp;quot;$container&amp;quot;)&lt;br /&gt;
     if echo &amp;quot;$config&amp;quot; | grep -iq &amp;quot;alpine&amp;quot;; then&lt;br /&gt;
       is_running=$(lxc list --format csv | grep &amp;quot;^${container},&amp;quot; | grep &amp;quot;,RUNNING,&amp;quot;)&lt;br /&gt;
       if [ -n &amp;quot;$is_running&amp;quot; ]; then&lt;br /&gt;
         bavarder &amp;quot;Redémarrage du conteneur &#039;$container&#039;...&amp;quot;&lt;br /&gt;
         lxc restart &amp;quot;$container&amp;quot;&lt;br /&gt;
         sleep &amp;quot;$SLEEP_AFTER_RESTART&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
         # Vérifier l&#039;état du service web pour les conteneurs web&lt;br /&gt;
         is_web_container=0&lt;br /&gt;
         for web_container in &amp;quot;${WEB_CONTAINERS[@]}&amp;quot;; do&lt;br /&gt;
           if [ &amp;quot;$container&amp;quot; == &amp;quot;$web_container&amp;quot; ]; then&lt;br /&gt;
             is_web_container=1&lt;br /&gt;
             break&lt;br /&gt;
           fi&lt;br /&gt;
         done&lt;br /&gt;
 	if [ &amp;quot;$is_web_container&amp;quot; -eq 1 ]; then&lt;br /&gt;
           service_status=$(lxc exec &amp;quot;$container&amp;quot; -- rc-service &amp;quot;$WEB_SERVICE_NAME&amp;quot; status 2&amp;gt;&amp;amp;1)&lt;br /&gt;
           if ! echo &amp;quot;$service_status&amp;quot; | grep -q &amp;quot;started&amp;quot;; then&lt;br /&gt;
             bavarder &amp;quot;$WEB_SERVICE_NAME ne semble pas en cours d&#039;exécution dans &#039;$container&#039;, tentative de démarrage...&amp;quot;&lt;br /&gt;
             lxc exec &amp;quot;$container&amp;quot; -- rc-service &amp;quot;$WEB_SERVICE_NAME&amp;quot; start&lt;br /&gt;
             sleep 5&lt;br /&gt;
             service_status_after_start=$(lxc exec &amp;quot;$container&amp;quot; -- rc-service &amp;quot;$WEB_SERVICE_NAME&amp;quot; status 2&amp;gt;&amp;amp;1)&lt;br /&gt;
             if ! echo &amp;quot;$service_status_after_start&amp;quot; | grep -q &amp;quot;started&amp;quot;; then&lt;br /&gt;
               bavarder &amp;quot;Échec du démarrage de $WEB_SERVICE_NAME dans &#039;$container&#039;.&amp;quot;&lt;br /&gt;
             else&lt;br /&gt;
               bavarder &amp;quot;$WEB_SERVICE_NAME démarré avec succès dans &#039;$container&#039;.&amp;quot;&lt;br /&gt;
             fi&lt;br /&gt;
           else&lt;br /&gt;
             bavarder &amp;quot;$WEB_SERVICE_NAME semble être en cours d&#039;exécution dans &#039;$container&#039;.&amp;quot;&lt;br /&gt;
           fi&lt;br /&gt;
         fi&lt;br /&gt;
       fi&lt;br /&gt;
     fi&lt;br /&gt;
   fi&lt;br /&gt;
 done&lt;br /&gt;
 bavarder &amp;quot;--- Fin du redémarrage des conteneurs Alpine (sauf $PROXY_CONTAINER) ---&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 # --- Redémarrage du conteneur proxy en dernier ---&lt;br /&gt;
 bavarder &amp;quot;--- Début du redémarrage du conteneur proxy ($PROXY_CONTAINER) ---&amp;quot;&lt;br /&gt;
 is_proxy_running=$(lxc list --format csv | grep &amp;quot;^${PROXY_CONTAINER},&amp;quot; | grep &amp;quot;,RUNNING,&amp;quot;)&lt;br /&gt;
 if [ -n &amp;quot;$is_proxy_running&amp;quot; ]; then&lt;br /&gt;
   bavarder &amp;quot;Redémarrage du conteneur proxy &#039;$PROXY_CONTAINER&#039;...&amp;quot;&lt;br /&gt;
   lxc restart &amp;quot;$PROXY_CONTAINER&amp;quot;&lt;br /&gt;
   result=$?&lt;br /&gt;
   if [ &amp;quot;$result&amp;quot; -ne 0 ]; then&lt;br /&gt;
     bavarder &amp;quot;Erreur lors du redémarrage du conteneur proxy &#039;$PROXY_CONTAINER&#039;.&amp;quot;&lt;br /&gt;
   fi&lt;br /&gt;
 else&lt;br /&gt;
   bavarder &amp;quot;Le conteneur proxy &#039;$PROXY_CONTAINER&#039; n&#039;est pas en cours d&#039;exécution, redémarrage ignoré.&amp;quot;&lt;br /&gt;
 fi&lt;br /&gt;
 bavarder &amp;quot;--- Fin du redémarrage du conteneur proxy ($PROXY_CONTAINER) ---&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 # Ajouter un marqueur de fin d&#039;exécution&lt;br /&gt;
 bavarder &amp;quot;$RUN_END_MARKER&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 # --- Gestion de la rotation des logs ---&lt;br /&gt;
 if [ -f &amp;quot;$LOG_FILE&amp;quot; ]; then&lt;br /&gt;
   # Récupérer toutes les occurrences du marqueur de début d&#039;exécution&lt;br /&gt;
   start_markers=$(grep -c &amp;quot;^$RUN_START_MARKER&amp;quot; &amp;quot;$LOG_FILE&amp;quot;)&lt;br /&gt;
 &lt;br /&gt;
   # Calculer le nombre d&#039;exécutions à supprimer&lt;br /&gt;
   runs_to_remove=$((start_markers - MAX_RUNS_TO_KEEP))&lt;br /&gt;
 &lt;br /&gt;
   if [ &amp;quot;$runs_to_remove&amp;quot; -gt 0 ]; then&lt;br /&gt;
     # Utiliser awk pour ne conserver que les N dernières exécutions&lt;br /&gt;
     awk -v n=&amp;quot;$MAX_RUNS_TO_KEEP&amp;quot; -v start_marker=&amp;quot;$RUN_START_MARKER&amp;quot; -v end_marker=&amp;quot;$RUN_END_MARKER&amp;quot; &#039;&lt;br /&gt;
       BEGIN { count = 0; in_run = 0; }&lt;br /&gt;
       $0 ~ start_marker {&lt;br /&gt;
         count++;&lt;br /&gt;
         if (count &amp;gt; (NR - RSTART) + 1 - (n * (RLENGTH ? 1 : 0))) {&lt;br /&gt;
           in_run = 1;&lt;br /&gt;
         } else {&lt;br /&gt;
           in_run = 0;&lt;br /&gt;
           print;&lt;br /&gt;
         }&lt;br /&gt;
       }&lt;br /&gt;
       $0 ~ end_marker {&lt;br /&gt;
         if (!in_run) {&lt;br /&gt;
           print;&lt;br /&gt;
         }&lt;br /&gt;
       }&lt;br /&gt;
       &amp;lt;nowiki&amp;gt;!($0 ~ start_marker) &amp;amp;&amp;amp; !($0 ~ end_marker) {&lt;br /&gt;
          if (!in_run) {&lt;br /&gt;
            print;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      &#039; &amp;quot;$LOG_FILE&amp;quot; &amp;gt; &amp;quot;$LOG_FILE.tmp&amp;quot; &amp;amp;&amp;amp; mv &amp;quot;$LOG_FILE.tmp&amp;quot; &amp;quot;$LOG_FILE&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
  fi&lt;br /&gt;
  &lt;br /&gt;
  #&amp;lt;/nowiki&amp;gt; Définir l&#039;adresse e-mail pour les notifications&lt;br /&gt;
 EMAIL_DESTINATAIRE=&amp;quot;toto@mail.com&amp;quot; # Remplace par ton adresse e-mail&lt;br /&gt;
 &lt;br /&gt;
 # Vérifier s&#039;il y a eu des erreurs et envoyer un e-mail si c&#039;est le cas&lt;br /&gt;
 if grep -q &amp;quot;Erreur&amp;quot; &amp;quot;$LOG_FILE&amp;quot;; then&lt;br /&gt;
   cat &amp;quot;$LOG_FILE&amp;quot; | mail -s &#039;Rapport de mise à jour LXC - Erreurs détectées&#039; &amp;quot;$EMAIL_DESTINATAIRE&amp;quot;&lt;br /&gt;
 fi&lt;br /&gt;
 &lt;br /&gt;
 exit 0&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Envoi des E-mails====&lt;br /&gt;
L&#039;envoi des mails nécessite l&#039;installation de mailutils et ssmtp :&lt;br /&gt;
  apt-get install mailutils ssmtp&lt;br /&gt;
Configuration de ssmtp :&lt;br /&gt;
  vi /etc/ssmtp/ssmtp.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;ssmtp.conf&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
  #&lt;br /&gt;
  # Config file for sSMTP sendmail&lt;br /&gt;
  #&lt;br /&gt;
  # The person who gets all mail for userids &amp;lt; 1000&lt;br /&gt;
  # Make this empty to disable rewriting.&lt;br /&gt;
  root=toto@monmail.fr&lt;br /&gt;
  &lt;br /&gt;
  # The place where the mail goes. The actual machine name is required no &lt;br /&gt;
  # MX records are consulted. Commonly mailhosts are named mail.domain.com&lt;br /&gt;
  mailhub=smtp.gmail.com:587 (pour gmail)&lt;br /&gt;
  &lt;br /&gt;
  # Where will the mail seem to come from?&lt;br /&gt;
  # rewriteDomain=&lt;br /&gt;
 &lt;br /&gt;
  # The full hostname&lt;br /&gt;
  hostname=raspberrypi&lt;br /&gt;
  &lt;br /&gt;
  # Are users allowed to set their own From: address?&lt;br /&gt;
  # YES - Allow the user to specify their own From: address&lt;br /&gt;
  # NO - Use the system generated From: address&lt;br /&gt;
  FromLineOverride=YES&lt;br /&gt;
  UseTLS=YES&lt;br /&gt;
  UseSTARTTLS=YES&lt;br /&gt;
  AuthUser=toto@monfournisseur.com&lt;br /&gt;
  AuthPass=MonMotdePasseDeConnection&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Remarques :&#039;&#039;&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
::*&#039;&#039;Pour gmail, il faut créer un mot de passe d&#039;application dans les paramètre du compte google et l&#039;utiliser ici.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
::*&#039;&#039;Pour que la redirection de mails fonctionne, il faut que l&#039;adresse de destination finale soit différente de l&#039;adresse utilisée pour l&#039;identification pour l&#039;envoi des mails.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
On automatise l&#039;exécution (dimache à 2h du matin) :&lt;br /&gt;
  crontab -e&lt;br /&gt;
  0 2 * * 7 /root/scripts/lxc_auto_update.sh&lt;br /&gt;
&lt;br /&gt;
===Sauvegardes automatiques des données des conteneurs web===&lt;br /&gt;
On va programmer une sauvegarde automatique pour chaque conteneur web, ainsi que pour le conteneur &#039;&#039;&#039;mariadb&#039;&#039;&#039;. Ces sauvegardes se feront dans un espace commun qui sera à son tour sauvegardé sur un site distant à intervalles réguliers en gérant la rotation des sauvegardes.&amp;lt;br&amp;gt;&lt;br /&gt;
Les conteneurs :&lt;br /&gt;
::* mariadb&lt;br /&gt;
::* wiki&lt;br /&gt;
::* pmb&lt;br /&gt;
::* wp&lt;br /&gt;
bénéficieront de ce mécanisme.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour les conteneurs &#039;&#039;&#039;proxy&#039;&#039;&#039;, &#039;&#039;&#039;phpma&#039;&#039;&#039; et &#039;&#039;&#039;tables&#039;&#039;&#039;, une simple sauvegarde à la main suffira.&amp;lt;br&amp;gt;&lt;br /&gt;
On commence par créer un volume de 50Gb et on le monte dans les conteneurs concernés :&lt;br /&gt;
 lxc storage volume create default sauvegarde-lxc size=50GB&lt;br /&gt;
 lxc config device add wp sauvegarde-mount disk source=sauvegarde-lxc pool=default path=/sauvegardes&lt;br /&gt;
 lxc config device add wiki sauvegarde-mount disk source=sauvegarde-lxc pool=default path=/sauvegardes&lt;br /&gt;
 lxc config device add mariadb sauvegarde-mount disk source=sauvegarde-lxc pool=default path=/sauvegardes&lt;br /&gt;
 lxc config device add pmb sauvegarde-mount disk source=sauvegarde-lxc pool=default path=/sauvegardes&lt;br /&gt;
====mariadb====&lt;br /&gt;
:* On commence par créer un utilisateur spécifique à la sauvegarde.&amp;lt;br&amp;gt; Sous phpMyAdmin, création de l&#039;utilisateur &#039;&#039;backup_user&#039;&#039; avec les privilèges &#039;&#039;SELECT&#039;&#039; et &#039;&#039;LOCK TABLES&#039;&#039; pour les tables &#039;&#039;pmb&#039;&#039;, &#039;&#039;wiki&#039;&#039; et &#039;&#039;wordpress&#039;&#039;.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
:* Création du script de sauvegarde des tables&amp;lt;br&amp;gt;On sauvegarde les tables &#039;&#039;pmb&#039;&#039;, &#039;&#039;wordpress&#039;&#039; et &#039;&#039;wiki&#039;&#039; en générant un fichier de log dans /var/log/&#039;&#039;&#039;backup_mariadb.log&#039;&#039;&#039;.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;/usr/local/bin/backup_mariadb.sh&#039;&#039;&#039; :&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 DATE=$(date +%Y%m%d_%H%M)&lt;br /&gt;
 OUTPUT_FILE=&amp;quot;/sauvegardes/db_backup_${DATE}.sql.gz&amp;quot;&lt;br /&gt;
 USER=&amp;quot;backup_user&amp;quot;  &amp;lt;br&amp;gt;PASSWORD=&amp;quot;*********&amp;quot; # &#039;&#039;Mot de passe de backup_user&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 # Liste des bases de données à sauvegarder&lt;br /&gt;
 DATABASES=&amp;quot;pmb wiki wordpress&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 # Exporte chaque base de données et la compresse&lt;br /&gt;
 for DB in $DATABASES; do&lt;br /&gt;
   echo &amp;quot;Sauvegarde de la base de données : $DB&amp;quot;&lt;br /&gt;
   mysqldump -u &amp;quot;$USER&amp;quot; -p&amp;quot;$PASSWORD&amp;quot; &amp;quot;$DB&amp;quot; | gzip &amp;gt;&amp;gt; &amp;quot;$OUTPUT_FILE&amp;quot;&lt;br /&gt;
 done&lt;br /&gt;
 &lt;br /&gt;
 chmod 600 &amp;quot;$OUTPUT_FILE&amp;quot; # Restreindre les permissions&lt;br /&gt;
 echo &amp;quot;Sauvegarde des bases de données terminée : $OUTPUT_FILE&amp;quot; &amp;gt;&amp;gt; /var/log/backup_mariadb.log&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
:* Rendre le script exécutable :&amp;lt;br&amp;gt;&lt;br /&gt;
 chmod +x /usr/local/bin/backup_mariadb.sh&amp;lt;br&amp;gt;&lt;br /&gt;
:* Automatiser le script le samedi à 2h du matin :&amp;lt;br&amp;gt;Avec &#039;&#039;&#039;crontab -e&#039;&#039;&#039;, ajouter la ligne :&lt;br /&gt;
 0 2 * * 6 /usr/local/bin/backup_mariadb.sh&lt;br /&gt;
&lt;br /&gt;
====wiki====&lt;br /&gt;
MediaWiki installe par défaut des extensions et des skins. La sauvegarde de ces extension alourdit considérablement le fichier. Le script parcourt le dossier pour les exclure et ne tenir compte que de celles nouvellement installées.&amp;lt;br&amp;gt;&lt;br /&gt;
Il crée également un fichier de log /var/log/&#039;&#039;&#039;backup_wiki.log&#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
/usr/local/bin/&#039;&#039;&#039;backup_wiki.sh&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 DATE=$(date +%Y%m%d_%H%M)&lt;br /&gt;
 OUTPUT_FILE=&amp;quot;/sauvegardes/wiki_backup_${DATE}.tar.gz&amp;quot;&lt;br /&gt;
 MEDIAWIKI_ROOT=&amp;quot;/var/www/localhost/htdocs/&amp;quot;&lt;br /&gt;
 BASE_EXTENSIONS=&amp;quot;AbuseFilter CategoryTree Cite CiteThisPage CodeEditor ConfirmEdit DiscussionTools Echo Gadgets ImageMap InputBox Interwiki Linter LoginNotify Math MultimediaViewer Nuke OATHAuth PageImages ParserFunctions PdfHandler Poem ReplaceText Scribunto SecureLinkFixer SpamBlacklist SyntaxHighlight_GeSHi TemplateData TextExtracts Thanks TitleBlacklist VisualEditor WikiEditor&amp;quot;&lt;br /&gt;
 FILES_TO_BACKUP=&amp;quot;images&lt;br /&gt;
 LocalSettings.php&lt;br /&gt;
 extensions-custom/&lt;br /&gt;
 skins-custom/&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 echo &amp;quot;--- Début du script ---&amp;quot;&lt;br /&gt;
 echo &amp;quot;Date de la sauvegarde : $DATE&amp;quot;&lt;br /&gt;
 echo &amp;quot;Fichier de sortie : $OUTPUT_FILE&amp;quot;&lt;br /&gt;
 echo &amp;quot;Racine de MediaWiki : $MEDIAWIKI_ROOT&amp;quot;&lt;br /&gt;
 echo &amp;quot;Extensions de base : $BASE_EXTENSIONS&amp;quot;&lt;br /&gt;
 echo &amp;quot;Fichiers de base à sauvegarder : $FILES_TO_BACKUP&amp;quot;&lt;br /&gt;
 echo &amp;quot;---&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 cd &amp;quot;$MEDIAWIKI_ROOT&amp;quot; || { echo &amp;quot;Erreur lors du changement de répertoire vers $MEDIAWIKI_ROOT&amp;quot;; exit 1; }&lt;br /&gt;
 echo &amp;quot;Répertoire courant : $(pwd)&amp;quot;&lt;br /&gt;
 echo &amp;quot;--- Identification des extensions personnalisées ---&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 echo &amp;quot;Création du fichier temporaire /tmp/backup_list.txt&amp;quot;&lt;br /&gt;
 echo &amp;quot;$FILES_TO_BACKUP&amp;quot; &amp;gt; /tmp/backup_list.txt&lt;br /&gt;
 cat /tmp/backup_list.txt | while IFS= read -r LINE; do&lt;br /&gt;
   echo &amp;quot;Ajout de &#039;$LINE&#039; à la liste de sauvegarde.&amp;quot;&lt;br /&gt;
 done&lt;br /&gt;
 echo &amp;quot;---&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 echo &amp;quot;Traitement des extensions dans $MEDIAWIKI_ROOT/extensions/&amp;quot;&lt;br /&gt;
 for EXTENSION_DIR in &amp;quot;$MEDIAWIKI_ROOT&amp;quot;extensions/*; do&lt;br /&gt;
     if [ -d &amp;quot;$EXTENSION_DIR&amp;quot; ]; then&lt;br /&gt;
         EXTENSION_NAME=$(basename &amp;quot;$EXTENSION_DIR&amp;quot;)&lt;br /&gt;
         echo &amp;quot;Extension trouvée : $EXTENSION_NAME \(chemin complet : $EXTENSION_DIR\)&amp;quot;&lt;br /&gt;
         IS_BASE=0&lt;br /&gt;
         for BASE_EXT in $BASE_EXTENSIONS; do&lt;br /&gt;
             if [ &amp;quot;$EXTENSION_NAME&amp;quot; = &amp;quot;$BASE_EXT&amp;quot; ]; then&lt;br /&gt;
                 IS_BASE=1&lt;br /&gt;
                 echo &amp;quot;  &#039;$EXTENSION_NAME&#039; est une extension de base.&amp;quot;&lt;br /&gt;
                 break&lt;br /&gt;
             fi&lt;br /&gt;
         done&lt;br /&gt;
         if [ &amp;quot;$IS_BASE&amp;quot; -eq 0 ]; then&lt;br /&gt;
             echo &amp;quot;  &#039;$EXTENSION_NAME&#039; est une extension personnalisée. Ajout à la liste de sauvegarde.&amp;quot;&lt;br /&gt;
             echo &amp;quot;extensions/$EXTENSION_NAME&amp;quot; &amp;gt;&amp;gt; /tmp/backup_list.txt&lt;br /&gt;
         fi&lt;br /&gt;
     fi&lt;br /&gt;
 done&lt;br /&gt;
 echo &amp;quot;--- Liste de sauvegarde complète ---&amp;quot;&lt;br /&gt;
 cat /tmp/backup_list.txt&lt;br /&gt;
 echo &amp;quot;---&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 echo &amp;quot;Création de l&#039;archive : $OUTPUT_FILE&amp;quot;&lt;br /&gt;
 tar czf &amp;quot;$OUTPUT_FILE&amp;quot; -T /tmp/backup_list.txt --exclude=&#039;./tmp/backup_list.txt&#039;&lt;br /&gt;
 echo &amp;quot;Commande tar exécutée.&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 if [ -f &amp;quot;$OUTPUT_FILE&amp;quot; ]; then&lt;br /&gt;
     chmod 600 &amp;quot;$OUTPUT_FILE&amp;quot;&lt;br /&gt;
     echo &amp;quot;Permissions du fichier de sauvegarde mises à 600.&amp;quot;&lt;br /&gt;
     echo &amp;quot;Sauvegarde des données essentielles et des extensions personnalisées de MediaWiki terminée : $OUTPUT_FILE&amp;quot; &amp;gt;&amp;gt; /var/log/backup_wiki.log&lt;br /&gt;
     echo &amp;quot;--- Fin du script ---&amp;quot;&lt;br /&gt;
 else&lt;br /&gt;
     echo &amp;quot;Erreur : Le fichier de sauvegarde $OUTPUT_FILE n&#039;a pas été créé.&amp;quot;&lt;br /&gt;
     echo &amp;quot;--- Fin du script \(avec erreur\) ---&amp;quot;&lt;br /&gt;
     exit 1&lt;br /&gt;
 fi&lt;br /&gt;
 &lt;br /&gt;
 rm /tmp/backup_list.txt&lt;br /&gt;
 echo &amp;quot;Fichier temporaire /tmp/backup_list.txt supprimé.&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;NB :&#039;&#039;&#039; Les nombreuses lignes &#039;&#039;echo&#039;&#039; ont été ajoutées à des fin de corrections en cours de programmation et peuvent être simplifiées...&lt;br /&gt;
:* Rendre le script exécutable :&amp;lt;br&amp;gt;&lt;br /&gt;
 chmod +x /usr/local/bin/backup_wiki.sh&amp;lt;br&amp;gt;&lt;br /&gt;
:* Automatiser le script le samedi à 3h30 du matin :&amp;lt;br&amp;gt;Avec &#039;&#039;&#039;crontab -e&#039;&#039;&#039;, ajouter la ligne :&lt;br /&gt;
 30  3  *  *  6  /usr/local/bin/backup_wiki.sh&lt;br /&gt;
&lt;br /&gt;
====wp====&lt;br /&gt;
====pmb====&lt;/div&gt;</summary>
		<author><name>Domi</name></author>
	</entry>
	<entry>
		<id>https://wiki.lesitadom.fr/index.php?title=Organigramme_d%27installation&amp;diff=1631</id>
		<title>Organigramme d&#039;installation</title>
		<link rel="alternate" type="text/html" href="https://wiki.lesitadom.fr/index.php?title=Organigramme_d%27installation&amp;diff=1631"/>
		<updated>2025-05-15T16:31:28Z</updated>

		<summary type="html">&lt;p&gt;Domi : /* Conteneur tables : Voir la page */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Les outils ==&lt;br /&gt;
=== Conteneur proxy : [[Proxy|Voir la page]] ===&lt;br /&gt;
::* Création du conteneur&lt;br /&gt;
::* Installation et configuration de nginx&lt;br /&gt;
::* Installation de certbot pour let&#039;s encrypt&lt;br /&gt;
::* Voir pour installer des outils de sécurité (fail2ban,...)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
=== Conteneur Mariadb : [[Mariadb|Voir la page]] ===&lt;br /&gt;
::* Création du conteneur&lt;br /&gt;
::* Installation de mariadb&lt;br /&gt;
::* Configuration&lt;br /&gt;
::* Création d&#039;un utilisateur&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
=== Conteneur PhpMyadmin : [[Phpma|Voir la page]] ===&lt;br /&gt;
::* Création du conteneur&lt;br /&gt;
::* Installation d&#039;apache2 et de phpmyadmin&lt;br /&gt;
::* Configuration d&#039;apache2 et de phpmyadmin&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Les applis ==&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
=== Conteneur tables : [[Tables|Voir la page]] ===&lt;br /&gt;
:*Installation du serveur web avec apache&lt;br /&gt;
:*Installation de &#039;&#039;tables&#039;&#039; et corrections des fichiers&lt;br /&gt;
&lt;br /&gt;
=== Conteneur pmb : [[Pmb|Voir la page]]===&lt;br /&gt;
&#039;&#039;(cf pmb sur alpine léger (historique dans pmb sur alpine lourd)&#039;&#039;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Conteneur wiki : [[Wiki|Voir la page]] ===&lt;br /&gt;
::* Création d&#039;un utilisateur et d&#039;une base de donnée vide pour le wiki&lt;br /&gt;
::* Transfert de la base de données&lt;br /&gt;
::* Création du conteneur&lt;br /&gt;
::* Installation du serveur web&lt;br /&gt;
::* Installation de la nouvelle version de mediawiki&lt;br /&gt;
::* Initialisation de l&#039;application&lt;br /&gt;
::* Modification de LocalSettings.php&lt;br /&gt;
::* Récupération du contenu sur l&#039;ancien serveur et transfert des données&lt;br /&gt;
::* Corrections&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Conteneur wp : [[Wp|Voir la page]] ===&lt;br /&gt;
&#039;&#039;(cf wordpress sur alpine léger mais sauter à la fin. Mariadb et phpmyadmin dans d&#039;autres conteneurs...)&#039;&#039;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Stockage et sauvegardes ==&lt;br /&gt;
création d&#039;un volume pour les sauvegardes :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; lxc storage volume create default sauvegarde-lxc size=50GB&lt;br /&gt;
&lt;br /&gt;
Montage du volume dans chaque conteneur :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; lxc config device add &amp;lt;nom du conteneur&amp;gt; sauvegarde-mount disk source=sauvegarde-lxc pool=default path=/sauvegardes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
logiciel : borg sauvegarde et rétention de données. Comte chez Kiki, à pousser en ssh.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sécurisation ==&lt;br /&gt;
=== Mises à jour automatiques ===&lt;br /&gt;
&lt;br /&gt;
Installer vim-nox (coloration syntaxique).&lt;br /&gt;
&lt;br /&gt;
Au niveau du système hôte, on ajoute le script : &lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
/root/scripts/&#039;&#039;&#039;lxc_auto_update.sh&#039;&#039;&#039; :&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 &lt;br /&gt;
 LOG_FILE=&amp;quot;/var/log/lxc_update.log&amp;quot;&lt;br /&gt;
 MAX_RUNS_TO_KEEP=2&lt;br /&gt;
 RUN_START_MARKER=&amp;quot;--- Début de l&#039;exécution du script ---&amp;quot;&lt;br /&gt;
 RUN_END_MARKER=&amp;quot;--- Fin de l&#039;exécution du script ---&amp;quot;&lt;br /&gt;
 PROXY_CONTAINER=&amp;quot;proxy&amp;quot;&lt;br /&gt;
 WEB_CONTAINERS=(&amp;quot;wp&amp;quot; &amp;quot;pmb&amp;quot; &amp;quot;wiki&amp;quot; &amp;quot;tables&amp;quot;) # Liste de tous les conteneurs web&lt;br /&gt;
 WEB_SERVICE_NAME=&amp;quot;apache2&amp;quot; # Nom du service web à vérifier (adapter si nécessaire)&lt;br /&gt;
 SLEEP_AFTER_RESTART=10 # Délai après le redémarrage des conteneurs web&lt;br /&gt;
 &lt;br /&gt;
 bavarder() {&lt;br /&gt;
   local message=&amp;quot;$1&amp;quot;&lt;br /&gt;
   echo &amp;quot;$(date &#039;+%Y-%m-%d %H:%M:%S&#039;) - $message&amp;quot; &amp;gt;&amp;gt; &amp;quot;$LOG_FILE&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 # Ajouter un marqueur de début d&#039;exécution&lt;br /&gt;
 bavarder &amp;quot;$RUN_START_MARKER&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 # Récupérer la liste des noms de conteneurs Alpine&lt;br /&gt;
 containers=$(lxc list --format csv | tail -n +2 | cut -d&#039;,&#039; -f1)&lt;br /&gt;
 bavarder &amp;quot;Liste des conteneurs récupérée : &#039;$containers&#039;&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 # Séparer les noms de conteneurs en un tableau&lt;br /&gt;
 IFS=$&#039;\n&#039; read -r -d &amp;lt;nowiki&amp;gt;&#039;&#039;&amp;lt;/nowiki&amp;gt; -a container_array &amp;lt;&amp;lt;&amp;lt; &amp;quot;$containers&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 # Boucle pour lancer les mises à jour&lt;br /&gt;
 {&lt;br /&gt;
   for container in &amp;quot;${container_array[@]}&amp;quot;; do&lt;br /&gt;
     bavarder &amp;quot;--- Début du traitement du conteneur : &#039;$container&#039; ---&amp;quot;&lt;br /&gt;
     config=$(lxc config show &amp;quot;$container&amp;quot;)&lt;br /&gt;
     if echo &amp;quot;$config&amp;quot; | grep -iq &amp;quot;alpine&amp;quot;; then&lt;br /&gt;
       bavarder &amp;quot;Le conteneur &#039;$container&#039; semble être basé sur Alpine.&amp;quot;&lt;br /&gt;
       is_running=$(lxc list --format csv | grep &amp;quot;^${container},&amp;quot; | grep &amp;quot;,RUNNING,&amp;quot;)&lt;br /&gt;
       if [ -n &amp;quot;$is_running&amp;quot; ]; then&lt;br /&gt;
         bavarder &amp;quot;Le conteneur &#039;$container&#039; est en cours d&#039;exécution, lancement de la mise à jour...&amp;quot;&lt;br /&gt;
         lxc exec &amp;quot;$container&amp;quot; -- sh -c &amp;quot;apk update &amp;amp;&amp;amp; apk upgrade --available&amp;quot;&lt;br /&gt;
         result=$?&lt;br /&gt;
         if [ &amp;quot;$result&amp;quot; -ne 0 ]; then&lt;br /&gt;
           bavarder &amp;quot;Erreur lors de la mise à jour de &#039;$container&#039;.&amp;quot;&lt;br /&gt;
         fi&lt;br /&gt;
       else&lt;br /&gt;
         bavarder &amp;quot;Le conteneur &#039;$container&#039; n&#039;est pas en cours d&#039;exécution, mise à jour ignorée.&amp;quot;&lt;br /&gt;
       fi&lt;br /&gt;
     else&lt;br /&gt;
       bavarder &amp;quot;Le conteneur &#039;$container&#039; ne semble pas être basé sur Alpine, mise à jour ignorée.&amp;quot;&lt;br /&gt;
     fi&lt;br /&gt;
     bavarder &amp;quot;--- Fin du traitement du conteneur : &#039;$container&#039; ---&amp;quot;&lt;br /&gt;
   done&lt;br /&gt;
 } &amp;gt;&amp;gt; &amp;quot;$LOG_FILE&amp;quot; 2&amp;gt;&amp;amp;1&lt;br /&gt;
 &lt;br /&gt;
 bavarder &amp;quot;Fin de la tentative de mise à jour des conteneurs.&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 # --- Début du redémarrage des conteneurs Alpine (sauf le proxy) ---&lt;br /&gt;
 bavarder &amp;quot;--- Début du redémarrage des conteneurs Alpine (sauf $PROXY_CONTAINER) ---&amp;quot;&lt;br /&gt;
 for container in &amp;quot;${container_array[@]}&amp;quot;; do&lt;br /&gt;
   if [ &amp;quot;$container&amp;quot; != &amp;quot;$PROXY_CONTAINER&amp;quot; ]; then&lt;br /&gt;
     config=$(lxc config show &amp;quot;$container&amp;quot;)&lt;br /&gt;
     if echo &amp;quot;$config&amp;quot; | grep -iq &amp;quot;alpine&amp;quot;; then&lt;br /&gt;
       is_running=$(lxc list --format csv | grep &amp;quot;^${container},&amp;quot; | grep &amp;quot;,RUNNING,&amp;quot;)&lt;br /&gt;
       if [ -n &amp;quot;$is_running&amp;quot; ]; then&lt;br /&gt;
         bavarder &amp;quot;Redémarrage du conteneur &#039;$container&#039;...&amp;quot;&lt;br /&gt;
         lxc restart &amp;quot;$container&amp;quot;&lt;br /&gt;
         sleep &amp;quot;$SLEEP_AFTER_RESTART&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
         # Vérifier l&#039;état du service web pour les conteneurs web&lt;br /&gt;
         is_web_container=0&lt;br /&gt;
         for web_container in &amp;quot;${WEB_CONTAINERS[@]}&amp;quot;; do&lt;br /&gt;
           if [ &amp;quot;$container&amp;quot; == &amp;quot;$web_container&amp;quot; ]; then&lt;br /&gt;
             is_web_container=1&lt;br /&gt;
             break&lt;br /&gt;
           fi&lt;br /&gt;
         done&lt;br /&gt;
 	if [ &amp;quot;$is_web_container&amp;quot; -eq 1 ]; then&lt;br /&gt;
           service_status=$(lxc exec &amp;quot;$container&amp;quot; -- rc-service &amp;quot;$WEB_SERVICE_NAME&amp;quot; status 2&amp;gt;&amp;amp;1)&lt;br /&gt;
           if ! echo &amp;quot;$service_status&amp;quot; | grep -q &amp;quot;started&amp;quot;; then&lt;br /&gt;
             bavarder &amp;quot;$WEB_SERVICE_NAME ne semble pas en cours d&#039;exécution dans &#039;$container&#039;, tentative de démarrage...&amp;quot;&lt;br /&gt;
             lxc exec &amp;quot;$container&amp;quot; -- rc-service &amp;quot;$WEB_SERVICE_NAME&amp;quot; start&lt;br /&gt;
             sleep 5&lt;br /&gt;
             service_status_after_start=$(lxc exec &amp;quot;$container&amp;quot; -- rc-service &amp;quot;$WEB_SERVICE_NAME&amp;quot; status 2&amp;gt;&amp;amp;1)&lt;br /&gt;
             if ! echo &amp;quot;$service_status_after_start&amp;quot; | grep -q &amp;quot;started&amp;quot;; then&lt;br /&gt;
               bavarder &amp;quot;Échec du démarrage de $WEB_SERVICE_NAME dans &#039;$container&#039;.&amp;quot;&lt;br /&gt;
             else&lt;br /&gt;
               bavarder &amp;quot;$WEB_SERVICE_NAME démarré avec succès dans &#039;$container&#039;.&amp;quot;&lt;br /&gt;
             fi&lt;br /&gt;
           else&lt;br /&gt;
             bavarder &amp;quot;$WEB_SERVICE_NAME semble être en cours d&#039;exécution dans &#039;$container&#039;.&amp;quot;&lt;br /&gt;
           fi&lt;br /&gt;
         fi&lt;br /&gt;
       fi&lt;br /&gt;
     fi&lt;br /&gt;
   fi&lt;br /&gt;
 done&lt;br /&gt;
 bavarder &amp;quot;--- Fin du redémarrage des conteneurs Alpine (sauf $PROXY_CONTAINER) ---&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 # --- Redémarrage du conteneur proxy en dernier ---&lt;br /&gt;
 bavarder &amp;quot;--- Début du redémarrage du conteneur proxy ($PROXY_CONTAINER) ---&amp;quot;&lt;br /&gt;
 is_proxy_running=$(lxc list --format csv | grep &amp;quot;^${PROXY_CONTAINER},&amp;quot; | grep &amp;quot;,RUNNING,&amp;quot;)&lt;br /&gt;
 if [ -n &amp;quot;$is_proxy_running&amp;quot; ]; then&lt;br /&gt;
   bavarder &amp;quot;Redémarrage du conteneur proxy &#039;$PROXY_CONTAINER&#039;...&amp;quot;&lt;br /&gt;
   lxc restart &amp;quot;$PROXY_CONTAINER&amp;quot;&lt;br /&gt;
   result=$?&lt;br /&gt;
   if [ &amp;quot;$result&amp;quot; -ne 0 ]; then&lt;br /&gt;
     bavarder &amp;quot;Erreur lors du redémarrage du conteneur proxy &#039;$PROXY_CONTAINER&#039;.&amp;quot;&lt;br /&gt;
   fi&lt;br /&gt;
 else&lt;br /&gt;
   bavarder &amp;quot;Le conteneur proxy &#039;$PROXY_CONTAINER&#039; n&#039;est pas en cours d&#039;exécution, redémarrage ignoré.&amp;quot;&lt;br /&gt;
 fi&lt;br /&gt;
 bavarder &amp;quot;--- Fin du redémarrage du conteneur proxy ($PROXY_CONTAINER) ---&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 # Ajouter un marqueur de fin d&#039;exécution&lt;br /&gt;
 bavarder &amp;quot;$RUN_END_MARKER&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 # --- Gestion de la rotation des logs ---&lt;br /&gt;
 if [ -f &amp;quot;$LOG_FILE&amp;quot; ]; then&lt;br /&gt;
   # Récupérer toutes les occurrences du marqueur de début d&#039;exécution&lt;br /&gt;
   start_markers=$(grep -c &amp;quot;^$RUN_START_MARKER&amp;quot; &amp;quot;$LOG_FILE&amp;quot;)&lt;br /&gt;
 &lt;br /&gt;
   # Calculer le nombre d&#039;exécutions à supprimer&lt;br /&gt;
   runs_to_remove=$((start_markers - MAX_RUNS_TO_KEEP))&lt;br /&gt;
 &lt;br /&gt;
   if [ &amp;quot;$runs_to_remove&amp;quot; -gt 0 ]; then&lt;br /&gt;
     # Utiliser awk pour ne conserver que les N dernières exécutions&lt;br /&gt;
     awk -v n=&amp;quot;$MAX_RUNS_TO_KEEP&amp;quot; -v start_marker=&amp;quot;$RUN_START_MARKER&amp;quot; -v end_marker=&amp;quot;$RUN_END_MARKER&amp;quot; &#039;&lt;br /&gt;
       BEGIN { count = 0; in_run = 0; }&lt;br /&gt;
       $0 ~ start_marker {&lt;br /&gt;
         count++;&lt;br /&gt;
         if (count &amp;gt; (NR - RSTART) + 1 - (n * (RLENGTH ? 1 : 0))) {&lt;br /&gt;
           in_run = 1;&lt;br /&gt;
         } else {&lt;br /&gt;
           in_run = 0;&lt;br /&gt;
           print;&lt;br /&gt;
         }&lt;br /&gt;
       }&lt;br /&gt;
       $0 ~ end_marker {&lt;br /&gt;
         if (!in_run) {&lt;br /&gt;
           print;&lt;br /&gt;
         }&lt;br /&gt;
       }&lt;br /&gt;
       &amp;lt;nowiki&amp;gt;!($0 ~ start_marker) &amp;amp;&amp;amp; !($0 ~ end_marker) {&lt;br /&gt;
          if (!in_run) {&lt;br /&gt;
            print;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      &#039; &amp;quot;$LOG_FILE&amp;quot; &amp;gt; &amp;quot;$LOG_FILE.tmp&amp;quot; &amp;amp;&amp;amp; mv &amp;quot;$LOG_FILE.tmp&amp;quot; &amp;quot;$LOG_FILE&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
  fi&lt;br /&gt;
  &lt;br /&gt;
  #&amp;lt;/nowiki&amp;gt; Définir l&#039;adresse e-mail pour les notifications&lt;br /&gt;
 EMAIL_DESTINATAIRE=&amp;quot;toto@mail.com&amp;quot; # Remplace par ton adresse e-mail&lt;br /&gt;
 &lt;br /&gt;
 # Vérifier s&#039;il y a eu des erreurs et envoyer un e-mail si c&#039;est le cas&lt;br /&gt;
 if grep -q &amp;quot;Erreur&amp;quot; &amp;quot;$LOG_FILE&amp;quot;; then&lt;br /&gt;
   cat &amp;quot;$LOG_FILE&amp;quot; | mail -s &#039;Rapport de mise à jour LXC - Erreurs détectées&#039; &amp;quot;$EMAIL_DESTINATAIRE&amp;quot;&lt;br /&gt;
 fi&lt;br /&gt;
 &lt;br /&gt;
 exit 0&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Envoi des E-mails====&lt;br /&gt;
L&#039;envoi des mails nécessite l&#039;installation de mailutils et ssmtp :&lt;br /&gt;
  apt-get install mailutils ssmtp&lt;br /&gt;
Configuration de ssmtp :&lt;br /&gt;
  vi /etc/ssmtp/ssmtp.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;ssmtp.conf&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
  #&lt;br /&gt;
  # Config file for sSMTP sendmail&lt;br /&gt;
  #&lt;br /&gt;
  # The person who gets all mail for userids &amp;lt; 1000&lt;br /&gt;
  # Make this empty to disable rewriting.&lt;br /&gt;
  root=toto@monmail.fr&lt;br /&gt;
  &lt;br /&gt;
  # The place where the mail goes. The actual machine name is required no &lt;br /&gt;
  # MX records are consulted. Commonly mailhosts are named mail.domain.com&lt;br /&gt;
  mailhub=smtp.gmail.com:587 (pour gmail)&lt;br /&gt;
  &lt;br /&gt;
  # Where will the mail seem to come from?&lt;br /&gt;
  # rewriteDomain=&lt;br /&gt;
 &lt;br /&gt;
  # The full hostname&lt;br /&gt;
  hostname=raspberrypi&lt;br /&gt;
  &lt;br /&gt;
  # Are users allowed to set their own From: address?&lt;br /&gt;
  # YES - Allow the user to specify their own From: address&lt;br /&gt;
  # NO - Use the system generated From: address&lt;br /&gt;
  FromLineOverride=YES&lt;br /&gt;
  UseTLS=YES&lt;br /&gt;
  UseSTARTTLS=YES&lt;br /&gt;
  AuthUser=toto@monfournisseur.com&lt;br /&gt;
  AuthPass=MonMotdePasseDeConnection&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Remarques :&#039;&#039;&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
::*&#039;&#039;Pour gmail, il faut créer un mot de passe d&#039;application dans les paramètre du compte google et l&#039;utiliser ici.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
::*&#039;&#039;Pour que la redirection de mails fonctionne, il faut que l&#039;adresse de destination finale soit différente de l&#039;adresse utilisée pour l&#039;identification pour l&#039;envoi des mails.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
On automatise l&#039;exécution (dimache à 2h du matin) :&lt;br /&gt;
  crontab -e&lt;br /&gt;
  0 2 * * 7 /root/scripts/lxc_auto_update.sh&lt;br /&gt;
&lt;br /&gt;
===Sauvegardes automatiques des données des conteneurs web===&lt;br /&gt;
On va programmer une sauvegarde automatique pour chaque conteneur web, ainsi que pour le conteneur &#039;&#039;&#039;mariadb&#039;&#039;&#039;. Ces sauvegardes se feront dans un espace commun qui sera à son tour sauvegardé sur un site distant à intervalles réguliers en gérant la rotation des sauvegardes.&amp;lt;br&amp;gt;&lt;br /&gt;
Les conteneurs :&lt;br /&gt;
::* mariadb&lt;br /&gt;
::* wiki&lt;br /&gt;
::* pmb&lt;br /&gt;
::* wp&lt;br /&gt;
bénéficieront de ce mécanisme.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour les conteneurs &#039;&#039;&#039;proxy&#039;&#039;&#039;, &#039;&#039;&#039;phpma&#039;&#039;&#039; et &#039;&#039;&#039;tables&#039;&#039;&#039;, une simple sauvegarde à la main suffira.&amp;lt;br&amp;gt;&lt;br /&gt;
On commence par créer un volume de 50Gb et on le monte dans les conteneurs concernés :&lt;br /&gt;
 lxc storage volume create default sauvegarde-lxc size=50GB&lt;br /&gt;
 lxc config device add wp sauvegarde-mount disk source=sauvegarde-lxc pool=default path=/sauvegardes&lt;br /&gt;
 lxc config device add wiki sauvegarde-mount disk source=sauvegarde-lxc pool=default path=/sauvegardes&lt;br /&gt;
 lxc config device add mariadb sauvegarde-mount disk source=sauvegarde-lxc pool=default path=/sauvegardes&lt;br /&gt;
 lxc config device add pmb sauvegarde-mount disk source=sauvegarde-lxc pool=default path=/sauvegardes&lt;br /&gt;
====mariadb====&lt;br /&gt;
:* On commence par créer un utilisateur spécifique à la sauvegarde.&amp;lt;br&amp;gt; Sous phpMyAdmin, création de l&#039;utilisateur &#039;&#039;backup_user&#039;&#039; avec les privilèges &#039;&#039;SELECT&#039;&#039; et &#039;&#039;LOCK TABLES&#039;&#039; pour les tables &#039;&#039;pmb&#039;&#039;, &#039;&#039;wiki&#039;&#039; et &#039;&#039;wordpress&#039;&#039;.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
:* Création du script de sauvegarde des tables&amp;lt;br&amp;gt;On sauvegarde les tables &#039;&#039;pmb&#039;&#039;, &#039;&#039;wordpress&#039;&#039; et &#039;&#039;wiki&#039;&#039; en générant un fichier de log dans /var/log/&#039;&#039;&#039;backup_mariadb.log&#039;&#039;&#039;.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;/usr/local/bin/backup_mariadb.sh&#039;&#039;&#039; :&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 DATE=$(date +%Y%m%d_%H%M)&lt;br /&gt;
 OUTPUT_FILE=&amp;quot;/sauvegardes/db_backup_${DATE}.sql.gz&amp;quot;&lt;br /&gt;
 USER=&amp;quot;backup_user&amp;quot;  &amp;lt;br&amp;gt;PASSWORD=&amp;quot;*********&amp;quot; # &#039;&#039;Mot de passe de backup_user&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 # Liste des bases de données à sauvegarder&lt;br /&gt;
 DATABASES=&amp;quot;pmb wiki wordpress&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 # Exporte chaque base de données et la compresse&lt;br /&gt;
 for DB in $DATABASES; do&lt;br /&gt;
   echo &amp;quot;Sauvegarde de la base de données : $DB&amp;quot;&lt;br /&gt;
   mysqldump -u &amp;quot;$USER&amp;quot; -p&amp;quot;$PASSWORD&amp;quot; &amp;quot;$DB&amp;quot; | gzip &amp;gt;&amp;gt; &amp;quot;$OUTPUT_FILE&amp;quot;&lt;br /&gt;
 done&lt;br /&gt;
 &lt;br /&gt;
 chmod 600 &amp;quot;$OUTPUT_FILE&amp;quot; # Restreindre les permissions&lt;br /&gt;
 echo &amp;quot;Sauvegarde des bases de données terminée : $OUTPUT_FILE&amp;quot; &amp;gt;&amp;gt; /var/log/backup_mariadb.log&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
:* Rendre le script exécutable :&amp;lt;br&amp;gt;&lt;br /&gt;
 chmod +x /usr/local/bin/backup_mariadb.sh&amp;lt;br&amp;gt;&lt;br /&gt;
:* Automatiser le script le samedi à 2h du matin :&amp;lt;br&amp;gt;Avec &#039;&#039;&#039;crontab -e&#039;&#039;&#039;, ajouter la ligne :&lt;br /&gt;
 0 2 * * 6 /usr/local/bin/backup_mariadb.sh&lt;br /&gt;
&lt;br /&gt;
====wiki====&lt;br /&gt;
MediaWiki installe par défaut des extensions et des skins. La sauvegarde de ces extension alourdit considérablement le fichier. Le script parcourt le dossier pour les exclure et ne tenir compte que de celles nouvellement installées.&amp;lt;br&amp;gt;&lt;br /&gt;
Il crée également un fichier de log /var/log/&#039;&#039;&#039;backup_wiki.log&#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
/usr/local/bin/&#039;&#039;&#039;backup_wiki.sh&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 DATE=$(date +%Y%m%d_%H%M)&lt;br /&gt;
 OUTPUT_FILE=&amp;quot;/sauvegardes/wiki_backup_${DATE}.tar.gz&amp;quot;&lt;br /&gt;
 MEDIAWIKI_ROOT=&amp;quot;/var/www/localhost/htdocs/&amp;quot;&lt;br /&gt;
 BASE_EXTENSIONS=&amp;quot;AbuseFilter CategoryTree Cite CiteThisPage CodeEditor ConfirmEdit DiscussionTools Echo Gadgets ImageMap InputBox Interwiki Linter LoginNotify Math MultimediaViewer Nuke OATHAuth PageImages ParserFunctions PdfHandler Poem ReplaceText Scribunto SecureLinkFixer SpamBlacklist SyntaxHighlight_GeSHi TemplateData TextExtracts Thanks TitleBlacklist VisualEditor WikiEditor&amp;quot;&lt;br /&gt;
 FILES_TO_BACKUP=&amp;quot;images&lt;br /&gt;
 LocalSettings.php&lt;br /&gt;
 extensions-custom/&lt;br /&gt;
 skins-custom/&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 echo &amp;quot;--- Début du script ---&amp;quot;&lt;br /&gt;
 echo &amp;quot;Date de la sauvegarde : $DATE&amp;quot;&lt;br /&gt;
 echo &amp;quot;Fichier de sortie : $OUTPUT_FILE&amp;quot;&lt;br /&gt;
 echo &amp;quot;Racine de MediaWiki : $MEDIAWIKI_ROOT&amp;quot;&lt;br /&gt;
 echo &amp;quot;Extensions de base : $BASE_EXTENSIONS&amp;quot;&lt;br /&gt;
 echo &amp;quot;Fichiers de base à sauvegarder : $FILES_TO_BACKUP&amp;quot;&lt;br /&gt;
 echo &amp;quot;---&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 cd &amp;quot;$MEDIAWIKI_ROOT&amp;quot; || { echo &amp;quot;Erreur lors du changement de répertoire vers $MEDIAWIKI_ROOT&amp;quot;; exit 1; }&lt;br /&gt;
 echo &amp;quot;Répertoire courant : $(pwd)&amp;quot;&lt;br /&gt;
 echo &amp;quot;--- Identification des extensions personnalisées ---&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 echo &amp;quot;Création du fichier temporaire /tmp/backup_list.txt&amp;quot;&lt;br /&gt;
 echo &amp;quot;$FILES_TO_BACKUP&amp;quot; &amp;gt; /tmp/backup_list.txt&lt;br /&gt;
 cat /tmp/backup_list.txt | while IFS= read -r LINE; do&lt;br /&gt;
   echo &amp;quot;Ajout de &#039;$LINE&#039; à la liste de sauvegarde.&amp;quot;&lt;br /&gt;
 done&lt;br /&gt;
 echo &amp;quot;---&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 echo &amp;quot;Traitement des extensions dans $MEDIAWIKI_ROOT/extensions/&amp;quot;&lt;br /&gt;
 for EXTENSION_DIR in &amp;quot;$MEDIAWIKI_ROOT&amp;quot;extensions/*; do&lt;br /&gt;
     if [ -d &amp;quot;$EXTENSION_DIR&amp;quot; ]; then&lt;br /&gt;
         EXTENSION_NAME=$(basename &amp;quot;$EXTENSION_DIR&amp;quot;)&lt;br /&gt;
         echo &amp;quot;Extension trouvée : $EXTENSION_NAME \(chemin complet : $EXTENSION_DIR\)&amp;quot;&lt;br /&gt;
         IS_BASE=0&lt;br /&gt;
         for BASE_EXT in $BASE_EXTENSIONS; do&lt;br /&gt;
             if [ &amp;quot;$EXTENSION_NAME&amp;quot; = &amp;quot;$BASE_EXT&amp;quot; ]; then&lt;br /&gt;
                 IS_BASE=1&lt;br /&gt;
                 echo &amp;quot;  &#039;$EXTENSION_NAME&#039; est une extension de base.&amp;quot;&lt;br /&gt;
                 break&lt;br /&gt;
             fi&lt;br /&gt;
         done&lt;br /&gt;
         if [ &amp;quot;$IS_BASE&amp;quot; -eq 0 ]; then&lt;br /&gt;
             echo &amp;quot;  &#039;$EXTENSION_NAME&#039; est une extension personnalisée. Ajout à la liste de sauvegarde.&amp;quot;&lt;br /&gt;
             echo &amp;quot;extensions/$EXTENSION_NAME&amp;quot; &amp;gt;&amp;gt; /tmp/backup_list.txt&lt;br /&gt;
         fi&lt;br /&gt;
     fi&lt;br /&gt;
 done&lt;br /&gt;
 echo &amp;quot;--- Liste de sauvegarde complète ---&amp;quot;&lt;br /&gt;
 cat /tmp/backup_list.txt&lt;br /&gt;
 echo &amp;quot;---&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 echo &amp;quot;Création de l&#039;archive : $OUTPUT_FILE&amp;quot;&lt;br /&gt;
 tar czf &amp;quot;$OUTPUT_FILE&amp;quot; -T /tmp/backup_list.txt --exclude=&#039;./tmp/backup_list.txt&#039;&lt;br /&gt;
 echo &amp;quot;Commande tar exécutée.&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 if [ -f &amp;quot;$OUTPUT_FILE&amp;quot; ]; then&lt;br /&gt;
     chmod 600 &amp;quot;$OUTPUT_FILE&amp;quot;&lt;br /&gt;
     echo &amp;quot;Permissions du fichier de sauvegarde mises à 600.&amp;quot;&lt;br /&gt;
     echo &amp;quot;Sauvegarde des données essentielles et des extensions personnalisées de MediaWiki terminée : $OUTPUT_FILE&amp;quot; &amp;gt;&amp;gt; /var/log/backup_wiki.log&lt;br /&gt;
     echo &amp;quot;--- Fin du script ---&amp;quot;&lt;br /&gt;
 else&lt;br /&gt;
     echo &amp;quot;Erreur : Le fichier de sauvegarde $OUTPUT_FILE n&#039;a pas été créé.&amp;quot;&lt;br /&gt;
     echo &amp;quot;--- Fin du script \(avec erreur\) ---&amp;quot;&lt;br /&gt;
     exit 1&lt;br /&gt;
 fi&lt;br /&gt;
 &lt;br /&gt;
 rm /tmp/backup_list.txt&lt;br /&gt;
 echo &amp;quot;Fichier temporaire /tmp/backup_list.txt supprimé.&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;NB :&#039;&#039;&#039; Les nombreuses lignes &#039;&#039;echo&#039;&#039; ont été ajoutées à des fin de corrections en cours de programmation et peuvent être simplifiées...&lt;br /&gt;
:* Rendre le script exécutable :&amp;lt;br&amp;gt;&lt;br /&gt;
 chmod +x /usr/local/bin/backup_wiki.sh&amp;lt;br&amp;gt;&lt;br /&gt;
:* Automatiser le script le samedi à 3h30 du matin :&amp;lt;br&amp;gt;Avec &#039;&#039;&#039;crontab -e&#039;&#039;&#039;, ajouter la ligne :&lt;br /&gt;
 30  3  *  *  6  /usr/local/bin/backup_wiki.sh&lt;br /&gt;
&lt;br /&gt;
====wp====&lt;br /&gt;
====pmb====&lt;/div&gt;</summary>
		<author><name>Domi</name></author>
	</entry>
	<entry>
		<id>https://wiki.lesitadom.fr/index.php?title=Serveur_web_frontal&amp;diff=1630</id>
		<title>Serveur web frontal</title>
		<link rel="alternate" type="text/html" href="https://wiki.lesitadom.fr/index.php?title=Serveur_web_frontal&amp;diff=1630"/>
		<updated>2025-05-15T16:29:35Z</updated>

		<summary type="html">&lt;p&gt;Domi : Page créée avec « =Test d&amp;#039;un serveur apache sur alpine léger en frontal= (arrêt des autres conteneurs) ----  apk update &amp;amp;&amp;amp; apk upgrade  apk add apache2  Modification de la page d&amp;#039;affichage par défaut :  vi /var/www/localhost/htdocs/index.html  Rendre le conteneur accessible sur le port 80 (à faire sur l&amp;#039;hôte):  lxc config device add apache myport80 proxy listen=tcp:0.0.0.0:80 connect=tcp:127.0.0.1:80  (pour vérifier à partir de lhôte -&amp;gt; curl 10.178.91.17)   rc-service apac... »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Test d&#039;un serveur apache sur alpine léger en frontal=&lt;br /&gt;
(arrêt des autres conteneurs)&lt;br /&gt;
----&lt;br /&gt;
 apk update &amp;amp;&amp;amp; apk upgrade&lt;br /&gt;
 apk add apache2&lt;br /&gt;
&lt;br /&gt;
Modification de la page d&#039;affichage par défaut :&lt;br /&gt;
 vi /var/www/localhost/htdocs/index.html&lt;br /&gt;
&lt;br /&gt;
Rendre le conteneur accessible sur le port 80 (à faire sur l&#039;hôte):&lt;br /&gt;
 lxc config device add apache myport80 proxy listen=tcp:0.0.0.0:80 connect=tcp:127.0.0.1:80&lt;br /&gt;
&lt;br /&gt;
(pour vérifier à partir de lhôte -&amp;gt; curl 10.178.91.17)&lt;br /&gt;
&lt;br /&gt;
 rc-service apache2 start&lt;br /&gt;
 netstat -ntpl&lt;br /&gt;
&lt;br /&gt;
Test à partir de l&#039;ordinateur local OK !&lt;br /&gt;
&lt;br /&gt;
Installation de php :&lt;br /&gt;
 apk add php php83-apache2 apache2-ctl mlocate&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;apache2-ctl&#039;&#039;&#039;&#039;&#039; : pour lister les modules&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;mlocate&#039;&#039;&#039;&#039;&#039; : pour localiser les fichiers et dossiers (Utiliser &#039;&#039;updatedb&#039;&#039; pour rafraîchir la base de données)&lt;br /&gt;
&lt;br /&gt;
Pour lister les modules installés :&lt;br /&gt;
 apachectl -M &lt;br /&gt;
(&#039;&#039;php_module apparaît&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
Modification de la page par défaut&lt;br /&gt;
&#039;&#039;&#039;index.php&#039;&#039;&#039; :&lt;br /&gt;
 &amp;lt;?php phpinfo(); ?&amp;gt;&lt;br /&gt;
 rc-service apache2 restart&lt;br /&gt;
&lt;br /&gt;
Test sur l&#039;ordinateur bureau : &lt;br /&gt;
-&amp;gt; ok&lt;/div&gt;</summary>
		<author><name>Domi</name></author>
	</entry>
	<entry>
		<id>https://wiki.lesitadom.fr/index.php?title=Tables&amp;diff=1629</id>
		<title>Tables</title>
		<link rel="alternate" type="text/html" href="https://wiki.lesitadom.fr/index.php?title=Tables&amp;diff=1629"/>
		<updated>2025-05-15T16:28:33Z</updated>

		<summary type="html">&lt;p&gt;Domi : /* Tables sur alpine léger */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;----&lt;br /&gt;
=Installation du serveur web=&lt;br /&gt;
&lt;br /&gt;
:*Création du conteneur alpine léger&lt;br /&gt;
 apk update /upgrade&lt;br /&gt;
 apk add apache2 php83-apache2 apache2-ctl php83-gd et php83-zlib&lt;br /&gt;
&#039;&#039;&#039;apache2-ctl&#039;&#039;&#039; permet de lister les modules installés avec &lt;br /&gt;
 apachectl -M&lt;br /&gt;
&#039;&#039;&#039;php83-gd&#039;&#039;&#039; et &#039;&#039;&#039;php83-zlib&#039;&#039;&#039; sont nécessaires pour faire fonctionner &#039;&#039;&#039;tables&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
:*Création du fichier /etc/apache2/conf.d/remoteip.conf avec&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
/etc/apache2/conf.d/&#039;&#039;&#039;remoteip.conf&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
  RemoteIPHeader X-Real-IP&lt;br /&gt;
  RemoteIPTrustedProxy proxy.lxd &lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
:*Modification de /etc/apache2/httpd.conf - décommenter :&lt;br /&gt;
 LoadModule remoteip_module modules/mod_remoteip.so&lt;br /&gt;
:*Relancer nginx dans le conteneur &#039;&#039;&#039;proxy&#039;&#039;&#039; : &lt;br /&gt;
 systemctl restart nginx&lt;br /&gt;
:*Vérifier le fonctionnement et les modules de php &lt;br /&gt;
::Supprimer /var/www/localhost/htdocs/&#039;&#039;&#039;index.html&#039;&#039;&#039; et le remplacer par :&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
/var/www/localhost/htdocs/&#039;&#039;&#039;index.php&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;?php&lt;br /&gt;
  phpinfo();&lt;br /&gt;
  ?&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Afficher la page dans un navigateur à l&#039;adresse du serveur.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Installation de &#039;Tables&#039;=&lt;br /&gt;
&lt;br /&gt;
:*Copie des fichiers/dossiers dans /tmp du conteneur :&lt;br /&gt;
 lxc file push /home/domi/Documents/transfertTables/* tables/tmp/ -pr&lt;br /&gt;
&lt;br /&gt;
:*Déplacement des fichiers/dossiers dans .../htdocs/&lt;br /&gt;
 mv /tmp/* /var/www/localhost/htdocs/&lt;br /&gt;
 rc-service apache2 reload&lt;br /&gt;
&lt;br /&gt;
:*Corriger &#039;&#039;&#039;phpToPDF.php&#039;&#039;&#039; : &lt;br /&gt;
AddPage($orientation = &#039;&#039;, $size = &#039;&#039;, $rotation = 0) (il manque deux arguments)&lt;br /&gt;
:* Corriger &#039;&#039;&#039;pdf1.php&#039;&#039;&#039; : &lt;br /&gt;
supprimer les lignes vides (au moins au début du document)&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;(Je suppose qu&#039;il y a une option pour ignorer ce genre d&#039;erreurs sur le serveur virtuel...)&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Domi</name></author>
	</entry>
	<entry>
		<id>https://wiki.lesitadom.fr/index.php?title=Tables&amp;diff=1628</id>
		<title>Tables</title>
		<link rel="alternate" type="text/html" href="https://wiki.lesitadom.fr/index.php?title=Tables&amp;diff=1628"/>
		<updated>2025-05-15T16:27:43Z</updated>

		<summary type="html">&lt;p&gt;Domi : /* Test d&amp;#039;un serveur apache sur alpine léger en frontal */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;----&lt;br /&gt;
=Tables sur alpine léger=&lt;br /&gt;
==Installation du serveur web==&lt;br /&gt;
&lt;br /&gt;
:*Création du conteneur alpine léger&lt;br /&gt;
 apk update /upgrade&lt;br /&gt;
 apk add apache2 php83-apache2 apache2-ctl php83-gd et php83-zlib&lt;br /&gt;
&#039;&#039;&#039;apache2-ctl&#039;&#039;&#039; permet de lister les modules installés avec &lt;br /&gt;
 apachectl -M&lt;br /&gt;
&#039;&#039;&#039;php83-gd&#039;&#039;&#039; et &#039;&#039;&#039;php83-zlib&#039;&#039;&#039; sont nécessaires pour faire fonctionner &#039;&#039;&#039;tables&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
:*Création du fichier /etc/apache2/conf.d/remoteip.conf avec&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
/etc/apache2/conf.d/&#039;&#039;&#039;remoteip.conf&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
  RemoteIPHeader X-Real-IP&lt;br /&gt;
  RemoteIPTrustedProxy proxy.lxd &lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
:*Modification de /etc/apache2/httpd.conf - décommenter :&lt;br /&gt;
 LoadModule remoteip_module modules/mod_remoteip.so&lt;br /&gt;
:*Relancer nginx dans le conteneur &#039;&#039;&#039;proxy&#039;&#039;&#039; : &lt;br /&gt;
 systemctl restart nginx&lt;br /&gt;
:*Vérifier le fonctionnement et les modules de php &lt;br /&gt;
::Supprimer /var/www/localhost/htdocs/&#039;&#039;&#039;index.html&#039;&#039;&#039; et le remplacer par :&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
/var/www/localhost/htdocs/&#039;&#039;&#039;index.php&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;?php&lt;br /&gt;
  phpinfo();&lt;br /&gt;
  ?&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Afficher la page dans un navigateur à l&#039;adresse du serveur.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Installation de &#039;Tables&#039;==&lt;br /&gt;
&lt;br /&gt;
:*Copie des fichiers/dossiers dans /tmp du conteneur :&lt;br /&gt;
 lxc file push /home/domi/Documents/transfertTables/* tables/tmp/ -pr&lt;br /&gt;
&lt;br /&gt;
:*Déplacement des fichiers/dossiers dans .../htdocs/&lt;br /&gt;
 mv /tmp/* /var/www/localhost/htdocs/&lt;br /&gt;
 rc-service apache2 reload&lt;br /&gt;
&lt;br /&gt;
:*Corriger &#039;&#039;&#039;phpToPDF.php&#039;&#039;&#039; : &lt;br /&gt;
AddPage($orientation = &#039;&#039;, $size = &#039;&#039;, $rotation = 0) (il manque deux arguments)&lt;br /&gt;
:* Corriger &#039;&#039;&#039;pdf1.php&#039;&#039;&#039; : &lt;br /&gt;
supprimer les lignes vides (au moins au début du document)&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;(Je suppose qu&#039;il y a une option pour ignorer ce genre d&#039;erreurs sur le serveur virtuel...)&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Domi</name></author>
	</entry>
	<entry>
		<id>https://wiki.lesitadom.fr/index.php?title=Tables&amp;diff=1627</id>
		<title>Tables</title>
		<link rel="alternate" type="text/html" href="https://wiki.lesitadom.fr/index.php?title=Tables&amp;diff=1627"/>
		<updated>2025-05-15T16:26:48Z</updated>

		<summary type="html">&lt;p&gt;Domi : /* Installation du serveur web */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;----&lt;br /&gt;
=Test d&#039;un serveur apache sur alpine léger en frontal=&lt;br /&gt;
(arrêt des autres conteneurs)&lt;br /&gt;
----&lt;br /&gt;
 apk update &amp;amp;&amp;amp; apk upgrade&lt;br /&gt;
 apk add apache2&lt;br /&gt;
&lt;br /&gt;
Modification de la page d&#039;affichage par défaut :&lt;br /&gt;
 vi /var/www/localhost/htdocs/index.html&lt;br /&gt;
&lt;br /&gt;
Rendre le conteneur accessible sur le port 80 (à faire sur l&#039;hôte):&lt;br /&gt;
 lxc config device add apache myport80 proxy listen=tcp:0.0.0.0:80 connect=tcp:127.0.0.1:80&lt;br /&gt;
&lt;br /&gt;
(pour vérifier à partir de lhôte -&amp;gt; curl 10.178.91.17)&lt;br /&gt;
&lt;br /&gt;
 rc-service apache2 start&lt;br /&gt;
 netstat -ntpl&lt;br /&gt;
&lt;br /&gt;
Test à partir de l&#039;ordinateur local OK !&lt;br /&gt;
&lt;br /&gt;
Installation de php :&lt;br /&gt;
 apk add php php83-apache2 apache2-ctl mlocate&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;apache2-ctl&#039;&#039;&#039;&#039;&#039; : pour lister les modules&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;mlocate&#039;&#039;&#039;&#039;&#039; : pour localiser les fichiers et dossiers (Utiliser &#039;&#039;updatedb&#039;&#039; pour rafraîchir la base de données)&lt;br /&gt;
&lt;br /&gt;
Pour lister les modules installés :&lt;br /&gt;
 apachectl -M &lt;br /&gt;
(&#039;&#039;php_module apparaît&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
Modification de la page par défaut&lt;br /&gt;
&#039;&#039;&#039;index.php&#039;&#039;&#039; :&lt;br /&gt;
 &amp;lt;?php phpinfo(); ?&amp;gt;&lt;br /&gt;
 rc-service apache2 restart&lt;br /&gt;
&lt;br /&gt;
Test sur l&#039;ordinateur bureau : &lt;br /&gt;
-&amp;gt; ok&lt;br /&gt;
&lt;br /&gt;
=Tables sur alpine léger=&lt;br /&gt;
==Installation du serveur web==&lt;br /&gt;
&lt;br /&gt;
:*Création du conteneur alpine léger&lt;br /&gt;
 apk update /upgrade&lt;br /&gt;
 apk add apache2 php83-apache2 apache2-ctl php83-gd et php83-zlib&lt;br /&gt;
&#039;&#039;&#039;apache2-ctl&#039;&#039;&#039; permet de lister les modules installés avec &lt;br /&gt;
 apachectl -M&lt;br /&gt;
&#039;&#039;&#039;php83-gd&#039;&#039;&#039; et &#039;&#039;&#039;php83-zlib&#039;&#039;&#039; sont nécessaires pour faire fonctionner &#039;&#039;&#039;tables&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
:*Création du fichier /etc/apache2/conf.d/remoteip.conf avec&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
/etc/apache2/conf.d/&#039;&#039;&#039;remoteip.conf&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
  RemoteIPHeader X-Real-IP&lt;br /&gt;
  RemoteIPTrustedProxy proxy.lxd &lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
:*Modification de /etc/apache2/httpd.conf - décommenter :&lt;br /&gt;
 LoadModule remoteip_module modules/mod_remoteip.so&lt;br /&gt;
:*Relancer nginx dans le conteneur &#039;&#039;&#039;proxy&#039;&#039;&#039; : &lt;br /&gt;
 systemctl restart nginx&lt;br /&gt;
:*Vérifier le fonctionnement et les modules de php &lt;br /&gt;
::Supprimer /var/www/localhost/htdocs/&#039;&#039;&#039;index.html&#039;&#039;&#039; et le remplacer par :&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
/var/www/localhost/htdocs/&#039;&#039;&#039;index.php&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;?php&lt;br /&gt;
  phpinfo();&lt;br /&gt;
  ?&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Afficher la page dans un navigateur à l&#039;adresse du serveur.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Installation de &#039;Tables&#039;==&lt;br /&gt;
&lt;br /&gt;
:*Copie des fichiers/dossiers dans /tmp du conteneur :&lt;br /&gt;
 lxc file push /home/domi/Documents/transfertTables/* tables/tmp/ -pr&lt;br /&gt;
&lt;br /&gt;
:*Déplacement des fichiers/dossiers dans .../htdocs/&lt;br /&gt;
 mv /tmp/* /var/www/localhost/htdocs/&lt;br /&gt;
 rc-service apache2 reload&lt;br /&gt;
&lt;br /&gt;
:*Corriger &#039;&#039;&#039;phpToPDF.php&#039;&#039;&#039; : &lt;br /&gt;
AddPage($orientation = &#039;&#039;, $size = &#039;&#039;, $rotation = 0) (il manque deux arguments)&lt;br /&gt;
:* Corriger &#039;&#039;&#039;pdf1.php&#039;&#039;&#039; : &lt;br /&gt;
supprimer les lignes vides (au moins au début du document)&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;(Je suppose qu&#039;il y a une option pour ignorer ce genre d&#039;erreurs sur le serveur virtuel...)&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Domi</name></author>
	</entry>
	<entry>
		<id>https://wiki.lesitadom.fr/index.php?title=Tables&amp;diff=1626</id>
		<title>Tables</title>
		<link rel="alternate" type="text/html" href="https://wiki.lesitadom.fr/index.php?title=Tables&amp;diff=1626"/>
		<updated>2025-05-15T16:24:33Z</updated>

		<summary type="html">&lt;p&gt;Domi : /* Installation du serveur web */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;----&lt;br /&gt;
=Test d&#039;un serveur apache sur alpine léger en frontal=&lt;br /&gt;
(arrêt des autres conteneurs)&lt;br /&gt;
----&lt;br /&gt;
 apk update &amp;amp;&amp;amp; apk upgrade&lt;br /&gt;
 apk add apache2&lt;br /&gt;
&lt;br /&gt;
Modification de la page d&#039;affichage par défaut :&lt;br /&gt;
 vi /var/www/localhost/htdocs/index.html&lt;br /&gt;
&lt;br /&gt;
Rendre le conteneur accessible sur le port 80 (à faire sur l&#039;hôte):&lt;br /&gt;
 lxc config device add apache myport80 proxy listen=tcp:0.0.0.0:80 connect=tcp:127.0.0.1:80&lt;br /&gt;
&lt;br /&gt;
(pour vérifier à partir de lhôte -&amp;gt; curl 10.178.91.17)&lt;br /&gt;
&lt;br /&gt;
 rc-service apache2 start&lt;br /&gt;
 netstat -ntpl&lt;br /&gt;
&lt;br /&gt;
Test à partir de l&#039;ordinateur local OK !&lt;br /&gt;
&lt;br /&gt;
Installation de php :&lt;br /&gt;
 apk add php php83-apache2 apache2-ctl mlocate&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;apache2-ctl&#039;&#039;&#039;&#039;&#039; : pour lister les modules&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;mlocate&#039;&#039;&#039;&#039;&#039; : pour localiser les fichiers et dossiers (Utiliser &#039;&#039;updatedb&#039;&#039; pour rafraîchir la base de données)&lt;br /&gt;
&lt;br /&gt;
Pour lister les modules installés :&lt;br /&gt;
 apachectl -M &lt;br /&gt;
(&#039;&#039;php_module apparaît&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
Modification de la page par défaut&lt;br /&gt;
&#039;&#039;&#039;index.php&#039;&#039;&#039; :&lt;br /&gt;
 &amp;lt;?php phpinfo(); ?&amp;gt;&lt;br /&gt;
 rc-service apache2 restart&lt;br /&gt;
&lt;br /&gt;
Test sur l&#039;ordinateur bureau : &lt;br /&gt;
-&amp;gt; ok&lt;br /&gt;
&lt;br /&gt;
=Tables sur alpine léger=&lt;br /&gt;
==Installation du serveur web==&lt;br /&gt;
&lt;br /&gt;
:*Création du conteneur alpine léger&lt;br /&gt;
 apk update /upgrade&lt;br /&gt;
 apk add apache2 php83-apache2 apache2-ctl php83-gd et php83-zlib&lt;br /&gt;
&#039;&#039;&#039;apache2-ctl&#039;&#039;&#039; permet de lister les modules installés avec &lt;br /&gt;
 apachectl -M&lt;br /&gt;
&#039;&#039;&#039;php83-gd&#039;&#039;&#039; et &#039;&#039;&#039;php83-zlib&#039;&#039;&#039; sont nécessaires pour faire fonctionner &#039;&#039;&#039;tables&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
:*Création du fichier /etc/apache2/conf.d/remoteip.conf avec&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
/etc/apache2/conf.d/&#039;&#039;&#039;remoteip.conf&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
  RemoteIPHeader X-Real-IP&lt;br /&gt;
  RemoteIPTrustedProxy proxy.lxd &lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
:*Modification de /etc/apache2/httpd.conf - décommenter :&lt;br /&gt;
 LoadModule remoteip_module modules/mod_remoteip.so&lt;br /&gt;
:*Relancer nginx dans le conteneur &#039;&#039;&#039;proxy&#039;&#039;&#039; : &lt;br /&gt;
 systemctl restart nginx&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
:*Vérifier le fonctionnement et les modules de php &lt;br /&gt;
::Supprimer /var/www/localhost/htdocs/&#039;&#039;&#039;index.html&#039;&#039;&#039; et le remplacer par :&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
/var/www/localhost/htdocs/&#039;&#039;&#039;index.php&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;?php&lt;br /&gt;
  phpinfo();&lt;br /&gt;
  ?&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Afficher la page dans un navigateur à l&#039;adresse du serveur.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Installation de &#039;Tables&#039;==&lt;br /&gt;
&lt;br /&gt;
:*Copie des fichiers/dossiers dans /tmp du conteneur :&lt;br /&gt;
 lxc file push /home/domi/Documents/transfertTables/* tables/tmp/ -pr&lt;br /&gt;
&lt;br /&gt;
:*Déplacement des fichiers/dossiers dans .../htdocs/&lt;br /&gt;
 mv /tmp/* /var/www/localhost/htdocs/&lt;br /&gt;
 rc-service apache2 reload&lt;br /&gt;
&lt;br /&gt;
:*Corriger &#039;&#039;&#039;phpToPDF.php&#039;&#039;&#039; : &lt;br /&gt;
AddPage($orientation = &#039;&#039;, $size = &#039;&#039;, $rotation = 0) (il manque deux arguments)&lt;br /&gt;
:* Corriger &#039;&#039;&#039;pdf1.php&#039;&#039;&#039; : &lt;br /&gt;
supprimer les lignes vides (au moins au début du document)&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;(Je suppose qu&#039;il y a une option pour ignorer ce genre d&#039;erreurs sur le serveur virtuel...)&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Domi</name></author>
	</entry>
	<entry>
		<id>https://wiki.lesitadom.fr/index.php?title=Tables&amp;diff=1625</id>
		<title>Tables</title>
		<link rel="alternate" type="text/html" href="https://wiki.lesitadom.fr/index.php?title=Tables&amp;diff=1625"/>
		<updated>2025-05-15T16:24:10Z</updated>

		<summary type="html">&lt;p&gt;Domi : /* Installation de &amp;#039;Tables&amp;#039; */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;----&lt;br /&gt;
=Test d&#039;un serveur apache sur alpine léger en frontal=&lt;br /&gt;
(arrêt des autres conteneurs)&lt;br /&gt;
----&lt;br /&gt;
 apk update &amp;amp;&amp;amp; apk upgrade&lt;br /&gt;
 apk add apache2&lt;br /&gt;
&lt;br /&gt;
Modification de la page d&#039;affichage par défaut :&lt;br /&gt;
 vi /var/www/localhost/htdocs/index.html&lt;br /&gt;
&lt;br /&gt;
Rendre le conteneur accessible sur le port 80 (à faire sur l&#039;hôte):&lt;br /&gt;
 lxc config device add apache myport80 proxy listen=tcp:0.0.0.0:80 connect=tcp:127.0.0.1:80&lt;br /&gt;
&lt;br /&gt;
(pour vérifier à partir de lhôte -&amp;gt; curl 10.178.91.17)&lt;br /&gt;
&lt;br /&gt;
 rc-service apache2 start&lt;br /&gt;
 netstat -ntpl&lt;br /&gt;
&lt;br /&gt;
Test à partir de l&#039;ordinateur local OK !&lt;br /&gt;
&lt;br /&gt;
Installation de php :&lt;br /&gt;
 apk add php php83-apache2 apache2-ctl mlocate&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;apache2-ctl&#039;&#039;&#039;&#039;&#039; : pour lister les modules&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;mlocate&#039;&#039;&#039;&#039;&#039; : pour localiser les fichiers et dossiers (Utiliser &#039;&#039;updatedb&#039;&#039; pour rafraîchir la base de données)&lt;br /&gt;
&lt;br /&gt;
Pour lister les modules installés :&lt;br /&gt;
 apachectl -M &lt;br /&gt;
(&#039;&#039;php_module apparaît&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
Modification de la page par défaut&lt;br /&gt;
&#039;&#039;&#039;index.php&#039;&#039;&#039; :&lt;br /&gt;
 &amp;lt;?php phpinfo(); ?&amp;gt;&lt;br /&gt;
 rc-service apache2 restart&lt;br /&gt;
&lt;br /&gt;
Test sur l&#039;ordinateur bureau : &lt;br /&gt;
-&amp;gt; ok&lt;br /&gt;
&lt;br /&gt;
=Tables sur alpine léger=&lt;br /&gt;
==Installation du serveur web==&lt;br /&gt;
&lt;br /&gt;
:*Création du conteneur alpine léger&lt;br /&gt;
 apk update /upgrade&lt;br /&gt;
 apk add apache2 php83-apache2 apache2-ctl php83-gd et php83-zlib&lt;br /&gt;
&#039;&#039;&#039;apache2-ctl&#039;&#039;&#039; permet de lister les modules installés avec &lt;br /&gt;
 apachectl -M&lt;br /&gt;
&#039;&#039;&#039;php83-gd&#039;&#039;&#039; et &#039;&#039;&#039;php83-zlib&#039;&#039;&#039; sont nécessaires pour faire fonctionner &#039;&#039;&#039;tables&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
:*Création du fichier /etc/apache2/conf.d/remoteip.conf avec&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
/etc/apache2/conf.d/&#039;&#039;&#039;remoteip.conf&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
  RemoteIPHeader X-Real-IP&lt;br /&gt;
  RemoteIPTrustedProxy proxy.lxd &lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
:*Modification de /etc/apache2/httpd.conf - décommenter :&lt;br /&gt;
 LoadModule remoteip_module modules/mod_remoteip.so&lt;br /&gt;
:*Relancer nginx dans le conteneur &#039;&#039;&#039;proxy&#039;&#039;&#039; : &lt;br /&gt;
 systemctl restart nginx&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:*Vérifier le fonctionnement et les modules de php &lt;br /&gt;
::Supprimer /var/www/localhost/htdocs/&#039;&#039;&#039;index.html&#039;&#039;&#039; et le remplacer par :&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
/var/www/localhost/htdocs/&#039;&#039;&#039;index.php&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;?php&lt;br /&gt;
  phpinfo();&lt;br /&gt;
  ?&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Afficher la page dans un navigateur à l&#039;adresse du serveur.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Installation de &#039;Tables&#039;==&lt;br /&gt;
&lt;br /&gt;
:*Copie des fichiers/dossiers dans /tmp du conteneur :&lt;br /&gt;
 lxc file push /home/domi/Documents/transfertTables/* tables/tmp/ -pr&lt;br /&gt;
&lt;br /&gt;
:*Déplacement des fichiers/dossiers dans .../htdocs/&lt;br /&gt;
 mv /tmp/* /var/www/localhost/htdocs/&lt;br /&gt;
 rc-service apache2 reload&lt;br /&gt;
&lt;br /&gt;
:*Corriger &#039;&#039;&#039;phpToPDF.php&#039;&#039;&#039; : &lt;br /&gt;
AddPage($orientation = &#039;&#039;, $size = &#039;&#039;, $rotation = 0) (il manque deux arguments)&lt;br /&gt;
:* Corriger &#039;&#039;&#039;pdf1.php&#039;&#039;&#039; : &lt;br /&gt;
supprimer les lignes vides (au moins au début du document)&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;(Je suppose qu&#039;il y a une option pour ignorer ce genre d&#039;erreurs sur le serveur virtuel...)&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Domi</name></author>
	</entry>
	<entry>
		<id>https://wiki.lesitadom.fr/index.php?title=Tables&amp;diff=1624</id>
		<title>Tables</title>
		<link rel="alternate" type="text/html" href="https://wiki.lesitadom.fr/index.php?title=Tables&amp;diff=1624"/>
		<updated>2025-05-15T16:20:48Z</updated>

		<summary type="html">&lt;p&gt;Domi : /* Tables sur alpine léger */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;----&lt;br /&gt;
=Test d&#039;un serveur apache sur alpine léger en frontal=&lt;br /&gt;
(arrêt des autres conteneurs)&lt;br /&gt;
----&lt;br /&gt;
 apk update &amp;amp;&amp;amp; apk upgrade&lt;br /&gt;
 apk add apache2&lt;br /&gt;
&lt;br /&gt;
Modification de la page d&#039;affichage par défaut :&lt;br /&gt;
 vi /var/www/localhost/htdocs/index.html&lt;br /&gt;
&lt;br /&gt;
Rendre le conteneur accessible sur le port 80 (à faire sur l&#039;hôte):&lt;br /&gt;
 lxc config device add apache myport80 proxy listen=tcp:0.0.0.0:80 connect=tcp:127.0.0.1:80&lt;br /&gt;
&lt;br /&gt;
(pour vérifier à partir de lhôte -&amp;gt; curl 10.178.91.17)&lt;br /&gt;
&lt;br /&gt;
 rc-service apache2 start&lt;br /&gt;
 netstat -ntpl&lt;br /&gt;
&lt;br /&gt;
Test à partir de l&#039;ordinateur local OK !&lt;br /&gt;
&lt;br /&gt;
Installation de php :&lt;br /&gt;
 apk add php php83-apache2 apache2-ctl mlocate&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;apache2-ctl&#039;&#039;&#039;&#039;&#039; : pour lister les modules&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;mlocate&#039;&#039;&#039;&#039;&#039; : pour localiser les fichiers et dossiers (Utiliser &#039;&#039;updatedb&#039;&#039; pour rafraîchir la base de données)&lt;br /&gt;
&lt;br /&gt;
Pour lister les modules installés :&lt;br /&gt;
 apachectl -M &lt;br /&gt;
(&#039;&#039;php_module apparaît&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
Modification de la page par défaut&lt;br /&gt;
&#039;&#039;&#039;index.php&#039;&#039;&#039; :&lt;br /&gt;
 &amp;lt;?php phpinfo(); ?&amp;gt;&lt;br /&gt;
 rc-service apache2 restart&lt;br /&gt;
&lt;br /&gt;
Test sur l&#039;ordinateur bureau : &lt;br /&gt;
-&amp;gt; ok&lt;br /&gt;
&lt;br /&gt;
=Tables sur alpine léger=&lt;br /&gt;
==Installation du serveur web==&lt;br /&gt;
&lt;br /&gt;
:*Création du conteneur alpine léger&lt;br /&gt;
 apk update /upgrade&lt;br /&gt;
 apk add apache2 php83-apache2 apache2-ctl php83-gd et php83-zlib&lt;br /&gt;
&#039;&#039;&#039;apache2-ctl&#039;&#039;&#039; permet de lister les modules installés avec &lt;br /&gt;
 apachectl -M&lt;br /&gt;
&#039;&#039;&#039;php83-gd&#039;&#039;&#039; et &#039;&#039;&#039;php83-zlib&#039;&#039;&#039; sont nécessaires pour faire fonctionner &#039;&#039;&#039;tables&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
:*Création du fichier /etc/apache2/conf.d/remoteip.conf avec&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
/etc/apache2/conf.d/&#039;&#039;&#039;remoteip.conf&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
  RemoteIPHeader X-Real-IP&lt;br /&gt;
  RemoteIPTrustedProxy proxy.lxd &lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
:*Modification de /etc/apache2/httpd.conf - décommenter :&lt;br /&gt;
 LoadModule remoteip_module modules/mod_remoteip.so&lt;br /&gt;
:*Relancer nginx dans le conteneur &#039;&#039;&#039;proxy&#039;&#039;&#039; : &lt;br /&gt;
 systemctl restart nginx&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:*Vérifier le fonctionnement et les modules de php &lt;br /&gt;
::Supprimer /var/www/localhost/htdocs/&#039;&#039;&#039;index.html&#039;&#039;&#039; et le remplacer par :&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
/var/www/localhost/htdocs/&#039;&#039;&#039;index.php&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;?php&lt;br /&gt;
  phpinfo();&lt;br /&gt;
  ?&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Afficher la page dans un navigateur à l&#039;adresse du serveur.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Installation de &#039;Tables&#039;==&lt;br /&gt;
&lt;br /&gt;
Copie des fichiers/dossiers dans /tmp du conteneur :&lt;br /&gt;
 lxc file push /home/domi/Documents/transfertTables/* tables/tmp/ -pr&lt;br /&gt;
&lt;br /&gt;
Déplacement des fichiers/dossiers dans .../htdocs/&lt;br /&gt;
 mv /tmp/* /var/www/localhost/htdocs/&lt;br /&gt;
 rc-service apache2 reload&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&#039;&#039;&#039;Solution :&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
installer php-gd et php-zlib&lt;br /&gt;
&lt;br /&gt;
Corriger phpToPDF.php : AddPage($orientation = &#039;&#039;, $size = &#039;&#039;, $rotation = 0) (il manque deux arguments)&lt;br /&gt;
Corriger pdf1.php en supprimant les lignes vides (au moins au début du document)&lt;br /&gt;
Je suppose qu&#039;il y a une option pour ignorer ce genre d&#039;erreurs sur le serveur virtuel...&lt;br /&gt;
&lt;br /&gt;
Fonctionne en frontal&lt;br /&gt;
Fonctionne derrière le proxy&lt;br /&gt;
&lt;br /&gt;
* Pour automatiser le démarrage d&#039;un service &lt;br /&gt;
sur débian :&lt;br /&gt;
  # systemctl enable *service* (p. ex. nginx)&lt;br /&gt;
sur alpine :&lt;br /&gt;
  # rc-update add *service* (p.ex. apache2)&lt;/div&gt;</summary>
		<author><name>Domi</name></author>
	</entry>
	<entry>
		<id>https://wiki.lesitadom.fr/index.php?title=Tables&amp;diff=1623</id>
		<title>Tables</title>
		<link rel="alternate" type="text/html" href="https://wiki.lesitadom.fr/index.php?title=Tables&amp;diff=1623"/>
		<updated>2025-05-15T16:19:55Z</updated>

		<summary type="html">&lt;p&gt;Domi : /* Tables sur alpine léger */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;----&lt;br /&gt;
=Test d&#039;un serveur apache sur alpine léger en frontal=&lt;br /&gt;
(arrêt des autres conteneurs)&lt;br /&gt;
----&lt;br /&gt;
 apk update &amp;amp;&amp;amp; apk upgrade&lt;br /&gt;
 apk add apache2&lt;br /&gt;
&lt;br /&gt;
Modification de la page d&#039;affichage par défaut :&lt;br /&gt;
 vi /var/www/localhost/htdocs/index.html&lt;br /&gt;
&lt;br /&gt;
Rendre le conteneur accessible sur le port 80 (à faire sur l&#039;hôte):&lt;br /&gt;
 lxc config device add apache myport80 proxy listen=tcp:0.0.0.0:80 connect=tcp:127.0.0.1:80&lt;br /&gt;
&lt;br /&gt;
(pour vérifier à partir de lhôte -&amp;gt; curl 10.178.91.17)&lt;br /&gt;
&lt;br /&gt;
 rc-service apache2 start&lt;br /&gt;
 netstat -ntpl&lt;br /&gt;
&lt;br /&gt;
Test à partir de l&#039;ordinateur local OK !&lt;br /&gt;
&lt;br /&gt;
Installation de php :&lt;br /&gt;
 apk add php php83-apache2 apache2-ctl mlocate&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;apache2-ctl&#039;&#039;&#039;&#039;&#039; : pour lister les modules&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;mlocate&#039;&#039;&#039;&#039;&#039; : pour localiser les fichiers et dossiers (Utiliser &#039;&#039;updatedb&#039;&#039; pour rafraîchir la base de données)&lt;br /&gt;
&lt;br /&gt;
Pour lister les modules installés :&lt;br /&gt;
 apachectl -M &lt;br /&gt;
(&#039;&#039;php_module apparaît&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
Modification de la page par défaut&lt;br /&gt;
&#039;&#039;&#039;index.php&#039;&#039;&#039; :&lt;br /&gt;
 &amp;lt;?php phpinfo(); ?&amp;gt;&lt;br /&gt;
 rc-service apache2 restart&lt;br /&gt;
&lt;br /&gt;
Test sur l&#039;ordinateur bureau : &lt;br /&gt;
-&amp;gt; ok&lt;br /&gt;
&lt;br /&gt;
=Tables sur alpine léger=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:*Création du conteneur alpine léger&lt;br /&gt;
 apk update /upgrade&lt;br /&gt;
 apk add apache2 php83-apache2 apache2-ctl php83-gd et php83-zlib&lt;br /&gt;
&#039;&#039;&#039;apache2-ctl&#039;&#039;&#039; permet de lister les modules installés avec &lt;br /&gt;
 apachectl -M&lt;br /&gt;
&#039;&#039;&#039;php83-gd&#039;&#039;&#039; et &#039;&#039;&#039;php83-zlib&#039;&#039;&#039; sont nécessaires pour faire fonctionner &#039;&#039;&#039;tables&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
:*Création du fichier /etc/apache2/conf.d/remoteip.conf avec&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
/etc/apache2/conf.d/&#039;&#039;&#039;remoteip.conf&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
  RemoteIPHeader X-Real-IP&lt;br /&gt;
  RemoteIPTrustedProxy proxy.lxd &lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
:*Modification de /etc/apache2/httpd.conf - décommenter :&lt;br /&gt;
 LoadModule remoteip_module modules/mod_remoteip.so&lt;br /&gt;
:*Relancer nginx dans le conteneur &#039;&#039;&#039;proxy&#039;&#039;&#039; : &lt;br /&gt;
 systemctl restart nginx&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:*Vérifier le fonctionnement et les modules de php &lt;br /&gt;
::Supprimer /var/www/localhost/htdocs/&#039;&#039;&#039;index.html&#039;&#039;&#039; et le remplacer par :&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
/var/www/localhost/htdocs/&#039;&#039;&#039;index.php&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;?php&lt;br /&gt;
  phpinfo();&lt;br /&gt;
  ?&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Afficher la page dans un navigateur à l&#039;adresse du serveur.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Installation de &#039;Tables&#039;==&lt;br /&gt;
&lt;br /&gt;
Copie des fichiers/dossiers dans /tmp du conteneur :&lt;br /&gt;
 lxc file push /home/domi/Documents/transfertTables/* tables/tmp/ -pr&lt;br /&gt;
&lt;br /&gt;
Déplacement des fichiers/dossiers dans .../htdocs/&lt;br /&gt;
 mv /tmp/* /var/www/localhost/htdocs/&lt;br /&gt;
 rc-service apache2 reload&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&#039;&#039;&#039;Solution :&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
installer php-gd et php-zlib&lt;br /&gt;
&lt;br /&gt;
Corriger phpToPDF.php : AddPage($orientation = &#039;&#039;, $size = &#039;&#039;, $rotation = 0) (il manque deux arguments)&lt;br /&gt;
Corriger pdf1.php en supprimant les lignes vides (au moins au début du document)&lt;br /&gt;
Je suppose qu&#039;il y a une option pour ignorer ce genre d&#039;erreurs sur le serveur virtuel...&lt;br /&gt;
&lt;br /&gt;
Fonctionne en frontal&lt;br /&gt;
Fonctionne derrière le proxy&lt;br /&gt;
&lt;br /&gt;
* Pour automatiser le démarrage d&#039;un service &lt;br /&gt;
sur débian :&lt;br /&gt;
  # systemctl enable *service* (p. ex. nginx)&lt;br /&gt;
sur alpine :&lt;br /&gt;
  # rc-update add *service* (p.ex. apache2)&lt;/div&gt;</summary>
		<author><name>Domi</name></author>
	</entry>
	<entry>
		<id>https://wiki.lesitadom.fr/index.php?title=Tables&amp;diff=1622</id>
		<title>Tables</title>
		<link rel="alternate" type="text/html" href="https://wiki.lesitadom.fr/index.php?title=Tables&amp;diff=1622"/>
		<updated>2025-05-15T16:19:27Z</updated>

		<summary type="html">&lt;p&gt;Domi : /* Test d&amp;#039;un serveur apache sur alpine léger en frontal */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;----&lt;br /&gt;
=Test d&#039;un serveur apache sur alpine léger en frontal=&lt;br /&gt;
(arrêt des autres conteneurs)&lt;br /&gt;
----&lt;br /&gt;
 apk update &amp;amp;&amp;amp; apk upgrade&lt;br /&gt;
 apk add apache2&lt;br /&gt;
&lt;br /&gt;
Modification de la page d&#039;affichage par défaut :&lt;br /&gt;
 vi /var/www/localhost/htdocs/index.html&lt;br /&gt;
&lt;br /&gt;
Rendre le conteneur accessible sur le port 80 (à faire sur l&#039;hôte):&lt;br /&gt;
 lxc config device add apache myport80 proxy listen=tcp:0.0.0.0:80 connect=tcp:127.0.0.1:80&lt;br /&gt;
&lt;br /&gt;
(pour vérifier à partir de lhôte -&amp;gt; curl 10.178.91.17)&lt;br /&gt;
&lt;br /&gt;
 rc-service apache2 start&lt;br /&gt;
 netstat -ntpl&lt;br /&gt;
&lt;br /&gt;
Test à partir de l&#039;ordinateur local OK !&lt;br /&gt;
&lt;br /&gt;
Installation de php :&lt;br /&gt;
 apk add php php83-apache2 apache2-ctl mlocate&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;apache2-ctl&#039;&#039;&#039;&#039;&#039; : pour lister les modules&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;mlocate&#039;&#039;&#039;&#039;&#039; : pour localiser les fichiers et dossiers (Utiliser &#039;&#039;updatedb&#039;&#039; pour rafraîchir la base de données)&lt;br /&gt;
&lt;br /&gt;
Pour lister les modules installés :&lt;br /&gt;
 apachectl -M &lt;br /&gt;
(&#039;&#039;php_module apparaît&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
Modification de la page par défaut&lt;br /&gt;
&#039;&#039;&#039;index.php&#039;&#039;&#039; :&lt;br /&gt;
 &amp;lt;?php phpinfo(); ?&amp;gt;&lt;br /&gt;
 rc-service apache2 restart&lt;br /&gt;
&lt;br /&gt;
Test sur l&#039;ordinateur bureau : &lt;br /&gt;
-&amp;gt; ok&lt;br /&gt;
&lt;br /&gt;
==Tables sur alpine léger==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:*Création du conteneur alpine léger&lt;br /&gt;
 apk update /upgrade&lt;br /&gt;
 apk add apache2 php83-apache2 apache2-ctl php83-gd et php83-zlib&lt;br /&gt;
&#039;&#039;&#039;apache2-ctl&#039;&#039;&#039; permet de lister les modules installés avec &lt;br /&gt;
 apachectl -M&lt;br /&gt;
&#039;&#039;&#039;php83-gd&#039;&#039;&#039; et &#039;&#039;&#039;php83-zlib&#039;&#039;&#039; sont nécessaires pour faire fonctionner &#039;&#039;&#039;tables&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
:*Création du fichier /etc/apache2/conf.d/remoteip.conf avec&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
/etc/apache2/conf.d/&#039;&#039;&#039;remoteip.conf&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
  RemoteIPHeader X-Real-IP&lt;br /&gt;
  RemoteIPTrustedProxy proxy.lxd &lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
:*Modification de /etc/apache2/httpd.conf - décommenter :&lt;br /&gt;
 LoadModule remoteip_module modules/mod_remoteip.so&lt;br /&gt;
:*Relancer nginx dans le conteneur &#039;&#039;&#039;proxy&#039;&#039;&#039; : &lt;br /&gt;
 systemctl restart nginx&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:*Vérifier le fonctionnement et les modules de php &lt;br /&gt;
::Supprimer /var/www/localhost/htdocs/&#039;&#039;&#039;index.html&#039;&#039;&#039; et le remplacer par :&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
/var/www/localhost/htdocs/&#039;&#039;&#039;index.php&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;?php&lt;br /&gt;
  phpinfo();&lt;br /&gt;
  ?&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Afficher la page dans un navigateur à l&#039;adresse du serveur.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Installation de &#039;Tables&#039;==&lt;br /&gt;
&lt;br /&gt;
Copie des fichiers/dossiers dans /tmp du conteneur :&lt;br /&gt;
 lxc file push /home/domi/Documents/transfertTables/* tables/tmp/ -pr&lt;br /&gt;
&lt;br /&gt;
Déplacement des fichiers/dossiers dans .../htdocs/&lt;br /&gt;
 mv /tmp/* /var/www/localhost/htdocs/&lt;br /&gt;
 rc-service apache2 reload&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&#039;&#039;&#039;Solution :&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
installer php-gd et php-zlib&lt;br /&gt;
&lt;br /&gt;
Corriger phpToPDF.php : AddPage($orientation = &#039;&#039;, $size = &#039;&#039;, $rotation = 0) (il manque deux arguments)&lt;br /&gt;
Corriger pdf1.php en supprimant les lignes vides (au moins au début du document)&lt;br /&gt;
Je suppose qu&#039;il y a une option pour ignorer ce genre d&#039;erreurs sur le serveur virtuel...&lt;br /&gt;
&lt;br /&gt;
Fonctionne en frontal&lt;br /&gt;
Fonctionne derrière le proxy&lt;br /&gt;
&lt;br /&gt;
* Pour automatiser le démarrage d&#039;un service &lt;br /&gt;
sur débian :&lt;br /&gt;
  # systemctl enable *service* (p. ex. nginx)&lt;br /&gt;
sur alpine :&lt;br /&gt;
  # rc-update add *service* (p.ex. apache2)&lt;/div&gt;</summary>
		<author><name>Domi</name></author>
	</entry>
	<entry>
		<id>https://wiki.lesitadom.fr/index.php?title=Tables&amp;diff=1621</id>
		<title>Tables</title>
		<link rel="alternate" type="text/html" href="https://wiki.lesitadom.fr/index.php?title=Tables&amp;diff=1621"/>
		<updated>2025-05-15T16:18:40Z</updated>

		<summary type="html">&lt;p&gt;Domi : /* Installation de &amp;#039;Tables&amp;#039; */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;----&lt;br /&gt;
==Test d&#039;un serveur apache sur alpine léger en frontal==&lt;br /&gt;
(arrêt des autres conteneurs)&lt;br /&gt;
----&lt;br /&gt;
 apk update &amp;amp;&amp;amp; apk upgrade&lt;br /&gt;
 apk add apache2&lt;br /&gt;
&lt;br /&gt;
Modification de la page d&#039;affichage par défaut :&lt;br /&gt;
 vi /var/www/localhost/htdocs/index.html&lt;br /&gt;
&lt;br /&gt;
Rendre le conteneur accessible sur le port 80 (à faire sur l&#039;hôte):&lt;br /&gt;
 lxc config device add apache myport80 proxy listen=tcp:0.0.0.0:80 connect=tcp:127.0.0.1:80&lt;br /&gt;
&lt;br /&gt;
(pour vérifier à partir de lhôte -&amp;gt; curl 10.178.91.17)&lt;br /&gt;
&lt;br /&gt;
 rc-service apache2 start&lt;br /&gt;
 netstat -ntpl&lt;br /&gt;
&lt;br /&gt;
Test à partir de l&#039;ordinateur local OK !&lt;br /&gt;
&lt;br /&gt;
Installation de php :&lt;br /&gt;
 apk add php php83-apache2 apache2-ctl mlocate&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;apache2-ctl&#039;&#039;&#039;&#039;&#039; : pour lister les modules&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;mlocate&#039;&#039;&#039;&#039;&#039; : pour localiser les fichiers et dossiers (Utiliser &#039;&#039;updatedb&#039;&#039; pour rafraîchir la base de données)&lt;br /&gt;
&lt;br /&gt;
Pour lister les modules installés :&lt;br /&gt;
 apachectl -M &lt;br /&gt;
(&#039;&#039;php_module apparaît&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
Modification de la page par défaut&lt;br /&gt;
&#039;&#039;&#039;index.php&#039;&#039;&#039; :&lt;br /&gt;
 &amp;lt;?php phpinfo(); ?&amp;gt;&lt;br /&gt;
 rc-service apache2 restart&lt;br /&gt;
&lt;br /&gt;
Test sur l&#039;ordinateur bureau : &lt;br /&gt;
-&amp;gt; ok&lt;br /&gt;
&lt;br /&gt;
==Tables sur alpine léger==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:*Création du conteneur alpine léger&lt;br /&gt;
 apk update /upgrade&lt;br /&gt;
 apk add apache2 php83-apache2 apache2-ctl php83-gd et php83-zlib&lt;br /&gt;
&#039;&#039;&#039;apache2-ctl&#039;&#039;&#039; permet de lister les modules installés avec &lt;br /&gt;
 apachectl -M&lt;br /&gt;
&#039;&#039;&#039;php83-gd&#039;&#039;&#039; et &#039;&#039;&#039;php83-zlib&#039;&#039;&#039; sont nécessaires pour faire fonctionner &#039;&#039;&#039;tables&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
:*Création du fichier /etc/apache2/conf.d/remoteip.conf avec&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
/etc/apache2/conf.d/&#039;&#039;&#039;remoteip.conf&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
  RemoteIPHeader X-Real-IP&lt;br /&gt;
  RemoteIPTrustedProxy proxy.lxd &lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
:*Modification de /etc/apache2/httpd.conf - décommenter :&lt;br /&gt;
 LoadModule remoteip_module modules/mod_remoteip.so&lt;br /&gt;
:*Relancer nginx dans le conteneur &#039;&#039;&#039;proxy&#039;&#039;&#039; : &lt;br /&gt;
 systemctl restart nginx&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:*Vérifier le fonctionnement et les modules de php &lt;br /&gt;
::Supprimer /var/www/localhost/htdocs/&#039;&#039;&#039;index.html&#039;&#039;&#039; et le remplacer par :&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
/var/www/localhost/htdocs/&#039;&#039;&#039;index.php&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;?php&lt;br /&gt;
  phpinfo();&lt;br /&gt;
  ?&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Afficher la page dans un navigateur à l&#039;adresse du serveur.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Installation de &#039;Tables&#039;==&lt;br /&gt;
&lt;br /&gt;
Copie des fichiers/dossiers dans /tmp du conteneur :&lt;br /&gt;
 lxc file push /home/domi/Documents/transfertTables/* tables/tmp/ -pr&lt;br /&gt;
&lt;br /&gt;
Déplacement des fichiers/dossiers dans .../htdocs/&lt;br /&gt;
 mv /tmp/* /var/www/localhost/htdocs/&lt;br /&gt;
 rc-service apache2 reload&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&#039;&#039;&#039;Solution :&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
installer php-gd et php-zlib&lt;br /&gt;
&lt;br /&gt;
Corriger phpToPDF.php : AddPage($orientation = &#039;&#039;, $size = &#039;&#039;, $rotation = 0) (il manque deux arguments)&lt;br /&gt;
Corriger pdf1.php en supprimant les lignes vides (au moins au début du document)&lt;br /&gt;
Je suppose qu&#039;il y a une option pour ignorer ce genre d&#039;erreurs sur le serveur virtuel...&lt;br /&gt;
&lt;br /&gt;
Fonctionne en frontal&lt;br /&gt;
Fonctionne derrière le proxy&lt;br /&gt;
&lt;br /&gt;
* Pour automatiser le démarrage d&#039;un service &lt;br /&gt;
sur débian :&lt;br /&gt;
  # systemctl enable *service* (p. ex. nginx)&lt;br /&gt;
sur alpine :&lt;br /&gt;
  # rc-update add *service* (p.ex. apache2)&lt;/div&gt;</summary>
		<author><name>Domi</name></author>
	</entry>
	<entry>
		<id>https://wiki.lesitadom.fr/index.php?title=Tables&amp;diff=1620</id>
		<title>Tables</title>
		<link rel="alternate" type="text/html" href="https://wiki.lesitadom.fr/index.php?title=Tables&amp;diff=1620"/>
		<updated>2025-05-15T16:17:53Z</updated>

		<summary type="html">&lt;p&gt;Domi : /* Tables sur alpine léger */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;----&lt;br /&gt;
==Test d&#039;un serveur apache sur alpine léger en frontal==&lt;br /&gt;
(arrêt des autres conteneurs)&lt;br /&gt;
----&lt;br /&gt;
 apk update &amp;amp;&amp;amp; apk upgrade&lt;br /&gt;
 apk add apache2&lt;br /&gt;
&lt;br /&gt;
Modification de la page d&#039;affichage par défaut :&lt;br /&gt;
 vi /var/www/localhost/htdocs/index.html&lt;br /&gt;
&lt;br /&gt;
Rendre le conteneur accessible sur le port 80 (à faire sur l&#039;hôte):&lt;br /&gt;
 lxc config device add apache myport80 proxy listen=tcp:0.0.0.0:80 connect=tcp:127.0.0.1:80&lt;br /&gt;
&lt;br /&gt;
(pour vérifier à partir de lhôte -&amp;gt; curl 10.178.91.17)&lt;br /&gt;
&lt;br /&gt;
 rc-service apache2 start&lt;br /&gt;
 netstat -ntpl&lt;br /&gt;
&lt;br /&gt;
Test à partir de l&#039;ordinateur local OK !&lt;br /&gt;
&lt;br /&gt;
Installation de php :&lt;br /&gt;
 apk add php php83-apache2 apache2-ctl mlocate&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;apache2-ctl&#039;&#039;&#039;&#039;&#039; : pour lister les modules&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;mlocate&#039;&#039;&#039;&#039;&#039; : pour localiser les fichiers et dossiers (Utiliser &#039;&#039;updatedb&#039;&#039; pour rafraîchir la base de données)&lt;br /&gt;
&lt;br /&gt;
Pour lister les modules installés :&lt;br /&gt;
 apachectl -M &lt;br /&gt;
(&#039;&#039;php_module apparaît&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
Modification de la page par défaut&lt;br /&gt;
&#039;&#039;&#039;index.php&#039;&#039;&#039; :&lt;br /&gt;
 &amp;lt;?php phpinfo(); ?&amp;gt;&lt;br /&gt;
 rc-service apache2 restart&lt;br /&gt;
&lt;br /&gt;
Test sur l&#039;ordinateur bureau : &lt;br /&gt;
-&amp;gt; ok&lt;br /&gt;
&lt;br /&gt;
==Tables sur alpine léger==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:*Création du conteneur alpine léger&lt;br /&gt;
 apk update /upgrade&lt;br /&gt;
 apk add apache2 php83-apache2 apache2-ctl php83-gd et php83-zlib&lt;br /&gt;
&#039;&#039;&#039;apache2-ctl&#039;&#039;&#039; permet de lister les modules installés avec &lt;br /&gt;
 apachectl -M&lt;br /&gt;
&#039;&#039;&#039;php83-gd&#039;&#039;&#039; et &#039;&#039;&#039;php83-zlib&#039;&#039;&#039; sont nécessaires pour faire fonctionner &#039;&#039;&#039;tables&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
:*Création du fichier /etc/apache2/conf.d/remoteip.conf avec&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
/etc/apache2/conf.d/&#039;&#039;&#039;remoteip.conf&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
  RemoteIPHeader X-Real-IP&lt;br /&gt;
  RemoteIPTrustedProxy proxy.lxd &lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
:*Modification de /etc/apache2/httpd.conf - décommenter :&lt;br /&gt;
 LoadModule remoteip_module modules/mod_remoteip.so&lt;br /&gt;
:*Relancer nginx dans le conteneur &#039;&#039;&#039;proxy&#039;&#039;&#039; : &lt;br /&gt;
 systemctl restart nginx&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:*Vérifier le fonctionnement et les modules de php &lt;br /&gt;
::Supprimer /var/www/localhost/htdocs/&#039;&#039;&#039;index.html&#039;&#039;&#039; et le remplacer par :&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
/var/www/localhost/htdocs/&#039;&#039;&#039;index.php&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;?php&lt;br /&gt;
  phpinfo();&lt;br /&gt;
  ?&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Afficher la page dans un navigateur à l&#039;adresse du serveur.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Installation de &#039;Tables&#039;=&lt;br /&gt;
&lt;br /&gt;
Copie des fichiers/dossiers dans /tmp du conteneur :&lt;br /&gt;
 lxc file push /home/domi/Documents/transfertTables/* tables/tmp/ -pr&lt;br /&gt;
&lt;br /&gt;
Déplacement des fichiers/dossiers dans .../htdocs/&lt;br /&gt;
 mv /tmp/* /var/www/localhost/htdocs/&lt;br /&gt;
 rc-service apache2 reload&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&#039;&#039;&#039;Solution :&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
installer php-gd et php-zlib&lt;br /&gt;
&lt;br /&gt;
Corriger phpToPDF.php : AddPage($orientation = &#039;&#039;, $size = &#039;&#039;, $rotation = 0) (il manque deux arguments)&lt;br /&gt;
Corriger pdf1.php en supprimant les lignes vides (au moins au début du document)&lt;br /&gt;
Je suppose qu&#039;il y a une option pour ignorer ce genre d&#039;erreurs sur le serveur virtuel...&lt;br /&gt;
&lt;br /&gt;
Fonctionne en frontal&lt;br /&gt;
Fonctionne derrière le proxy&lt;br /&gt;
&lt;br /&gt;
* Pour automatiser le démarrage d&#039;un service &lt;br /&gt;
sur débian :&lt;br /&gt;
  # systemctl enable *service* (p. ex. nginx)&lt;br /&gt;
sur alpine :&lt;br /&gt;
  # rc-update add *service* (p.ex. apache2)&lt;/div&gt;</summary>
		<author><name>Domi</name></author>
	</entry>
	<entry>
		<id>https://wiki.lesitadom.fr/index.php?title=Tables&amp;diff=1619</id>
		<title>Tables</title>
		<link rel="alternate" type="text/html" href="https://wiki.lesitadom.fr/index.php?title=Tables&amp;diff=1619"/>
		<updated>2025-05-15T16:15:17Z</updated>

		<summary type="html">&lt;p&gt;Domi : /* Test des modules présents sur le serveur qui fonctionne et qui pourraient avoir un rapport */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;----&lt;br /&gt;
==Test d&#039;un serveur apache sur alpine léger en frontal==&lt;br /&gt;
(arrêt des autres conteneurs)&lt;br /&gt;
----&lt;br /&gt;
 apk update &amp;amp;&amp;amp; apk upgrade&lt;br /&gt;
 apk add apache2&lt;br /&gt;
&lt;br /&gt;
Modification de la page d&#039;affichage par défaut :&lt;br /&gt;
 vi /var/www/localhost/htdocs/index.html&lt;br /&gt;
&lt;br /&gt;
Rendre le conteneur accessible sur le port 80 (à faire sur l&#039;hôte):&lt;br /&gt;
 lxc config device add apache myport80 proxy listen=tcp:0.0.0.0:80 connect=tcp:127.0.0.1:80&lt;br /&gt;
&lt;br /&gt;
(pour vérifier à partir de lhôte -&amp;gt; curl 10.178.91.17)&lt;br /&gt;
&lt;br /&gt;
 rc-service apache2 start&lt;br /&gt;
 netstat -ntpl&lt;br /&gt;
&lt;br /&gt;
Test à partir de l&#039;ordinateur local OK !&lt;br /&gt;
&lt;br /&gt;
Installation de php :&lt;br /&gt;
 apk add php php83-apache2 apache2-ctl mlocate&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;apache2-ctl&#039;&#039;&#039;&#039;&#039; : pour lister les modules&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;mlocate&#039;&#039;&#039;&#039;&#039; : pour localiser les fichiers et dossiers (Utiliser &#039;&#039;updatedb&#039;&#039; pour rafraîchir la base de données)&lt;br /&gt;
&lt;br /&gt;
Pour lister les modules installés :&lt;br /&gt;
 apachectl -M &lt;br /&gt;
(&#039;&#039;php_module apparaît&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
Modification de la page par défaut&lt;br /&gt;
&#039;&#039;&#039;index.php&#039;&#039;&#039; :&lt;br /&gt;
 &amp;lt;?php phpinfo(); ?&amp;gt;&lt;br /&gt;
 rc-service apache2 restart&lt;br /&gt;
&lt;br /&gt;
Test sur l&#039;ordinateur bureau : &lt;br /&gt;
-&amp;gt; ok&lt;br /&gt;
&lt;br /&gt;
==Tables sur alpine léger==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:*Création du conteneur alpine léger&lt;br /&gt;
 apk update /upgrade&lt;br /&gt;
 apk add apache2 php83-apache2 apache2-ctl&lt;br /&gt;
&#039;&#039;&#039;apache2-ctl&#039;&#039;&#039; permet de lister les modules installés avec &lt;br /&gt;
 apachectl -M&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
:*Création du fichier /etc/apache2/conf.d/remoteip.conf avec&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
/etc/apache2/conf.d/&#039;&#039;&#039;remoteip.conf&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
  RemoteIPHeader X-Real-IP&lt;br /&gt;
  RemoteIPTrustedProxy proxy.lxd &lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
:*Modification de /etc/apache2/httpd.conf - décommenter :&lt;br /&gt;
 LoadModule remoteip_module modules/mod_remoteip.so&lt;br /&gt;
:*Relancer nginx dans le conteneur &#039;&#039;&#039;proxy&#039;&#039;&#039; : &lt;br /&gt;
 systemctl restart nginx&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:*Vérifier le fonctionnement et les modules de php &lt;br /&gt;
::Supprimer /var/www/localhost/htdocs/&#039;&#039;&#039;index.html&#039;&#039;&#039; et le remplacer par :&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
/var/www/localhost/htdocs/&#039;&#039;&#039;index.php&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;?php&lt;br /&gt;
  phpinfo();&lt;br /&gt;
  ?&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Afficher la page dans un navigateur à l&#039;adresse du serveur.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Installation de &#039;Tables&#039;=&lt;br /&gt;
&lt;br /&gt;
Copie des fichiers/dossiers dans /tmp du conteneur :&lt;br /&gt;
 lxc file push /home/domi/Documents/transfertTables/* tables/tmp/ -pr&lt;br /&gt;
&lt;br /&gt;
Déplacement des fichiers/dossiers dans .../htdocs/&lt;br /&gt;
 mv /tmp/* /var/www/localhost/htdocs/&lt;br /&gt;
 rc-service apache2 reload&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&#039;&#039;&#039;Solution :&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
installer php-gd et php-zlib&lt;br /&gt;
&lt;br /&gt;
Corriger phpToPDF.php : AddPage($orientation = &#039;&#039;, $size = &#039;&#039;, $rotation = 0) (il manque deux arguments)&lt;br /&gt;
Corriger pdf1.php en supprimant les lignes vides (au moins au début du document)&lt;br /&gt;
Je suppose qu&#039;il y a une option pour ignorer ce genre d&#039;erreurs sur le serveur virtuel...&lt;br /&gt;
&lt;br /&gt;
Fonctionne en frontal&lt;br /&gt;
Fonctionne derrière le proxy&lt;br /&gt;
&lt;br /&gt;
* Pour automatiser le démarrage d&#039;un service &lt;br /&gt;
sur débian :&lt;br /&gt;
  # systemctl enable *service* (p. ex. nginx)&lt;br /&gt;
sur alpine :&lt;br /&gt;
  # rc-update add *service* (p.ex. apache2)&lt;/div&gt;</summary>
		<author><name>Domi</name></author>
	</entry>
	<entry>
		<id>https://wiki.lesitadom.fr/index.php?title=Tables&amp;diff=1618</id>
		<title>Tables</title>
		<link rel="alternate" type="text/html" href="https://wiki.lesitadom.fr/index.php?title=Tables&amp;diff=1618"/>
		<updated>2025-05-15T16:14:15Z</updated>

		<summary type="html">&lt;p&gt;Domi : /* Installation de &amp;#039;Tables&amp;#039; */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;----&lt;br /&gt;
==Test d&#039;un serveur apache sur alpine léger en frontal==&lt;br /&gt;
(arrêt des autres conteneurs)&lt;br /&gt;
----&lt;br /&gt;
 apk update &amp;amp;&amp;amp; apk upgrade&lt;br /&gt;
 apk add apache2&lt;br /&gt;
&lt;br /&gt;
Modification de la page d&#039;affichage par défaut :&lt;br /&gt;
 vi /var/www/localhost/htdocs/index.html&lt;br /&gt;
&lt;br /&gt;
Rendre le conteneur accessible sur le port 80 (à faire sur l&#039;hôte):&lt;br /&gt;
 lxc config device add apache myport80 proxy listen=tcp:0.0.0.0:80 connect=tcp:127.0.0.1:80&lt;br /&gt;
&lt;br /&gt;
(pour vérifier à partir de lhôte -&amp;gt; curl 10.178.91.17)&lt;br /&gt;
&lt;br /&gt;
 rc-service apache2 start&lt;br /&gt;
 netstat -ntpl&lt;br /&gt;
&lt;br /&gt;
Test à partir de l&#039;ordinateur local OK !&lt;br /&gt;
&lt;br /&gt;
Installation de php :&lt;br /&gt;
 apk add php php83-apache2 apache2-ctl mlocate&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;apache2-ctl&#039;&#039;&#039;&#039;&#039; : pour lister les modules&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;mlocate&#039;&#039;&#039;&#039;&#039; : pour localiser les fichiers et dossiers (Utiliser &#039;&#039;updatedb&#039;&#039; pour rafraîchir la base de données)&lt;br /&gt;
&lt;br /&gt;
Pour lister les modules installés :&lt;br /&gt;
 apachectl -M &lt;br /&gt;
(&#039;&#039;php_module apparaît&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
Modification de la page par défaut&lt;br /&gt;
&#039;&#039;&#039;index.php&#039;&#039;&#039; :&lt;br /&gt;
 &amp;lt;?php phpinfo(); ?&amp;gt;&lt;br /&gt;
 rc-service apache2 restart&lt;br /&gt;
&lt;br /&gt;
Test sur l&#039;ordinateur bureau : &lt;br /&gt;
-&amp;gt; ok&lt;br /&gt;
&lt;br /&gt;
==Tables sur alpine léger==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:*Création du conteneur alpine léger&lt;br /&gt;
 apk update /upgrade&lt;br /&gt;
 apk add apache2 php83-apache2 apache2-ctl&lt;br /&gt;
&#039;&#039;&#039;apache2-ctl&#039;&#039;&#039; permet de lister les modules installés avec &lt;br /&gt;
 apachectl -M&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
:*Création du fichier /etc/apache2/conf.d/remoteip.conf avec&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
/etc/apache2/conf.d/&#039;&#039;&#039;remoteip.conf&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
  RemoteIPHeader X-Real-IP&lt;br /&gt;
  RemoteIPTrustedProxy proxy.lxd &lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
:*Modification de /etc/apache2/httpd.conf - décommenter :&lt;br /&gt;
 LoadModule remoteip_module modules/mod_remoteip.so&lt;br /&gt;
:*Relancer nginx dans le conteneur &#039;&#039;&#039;proxy&#039;&#039;&#039; : &lt;br /&gt;
 systemctl restart nginx&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:*Vérifier le fonctionnement et les modules de php &lt;br /&gt;
::Supprimer /var/www/localhost/htdocs/&#039;&#039;&#039;index.html&#039;&#039;&#039; et le remplacer par :&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
/var/www/localhost/htdocs/&#039;&#039;&#039;index.php&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;?php&lt;br /&gt;
  phpinfo();&lt;br /&gt;
  ?&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Afficher la page dans un navigateur à l&#039;adresse du serveur.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Installation de &#039;Tables&#039;=&lt;br /&gt;
&lt;br /&gt;
Copie des fichiers/dossiers dans /tmp du conteneur :&lt;br /&gt;
 lxc file push /home/domi/Documents/transfertTables/* tables/tmp/ -pr&lt;br /&gt;
&lt;br /&gt;
Déplacement des fichiers/dossiers dans .../htdocs/&lt;br /&gt;
 mv /tmp/* /var/www/localhost/htdocs/&lt;br /&gt;
 rc-service apache2 reload&lt;br /&gt;
&lt;br /&gt;
=Test des modules présents sur le serveur qui fonctionne et qui pourraient avoir un rapport=&lt;br /&gt;
  php83-ctype : gestion des caractères -&amp;gt; 	marche pas&lt;br /&gt;
  php83-curl : gestion des requêtes par url -&amp;gt; 	marche pas&lt;br /&gt;
  php83-dom : Document Object Model (XML)	-&amp;gt;	marche pas&lt;br /&gt;
  php83-fileinfo : 				marche pas&lt;br /&gt;
  ftp ; gettext					marche pas&lt;br /&gt;
  iconv, imagick : ignorées&lt;br /&gt;
  intl ; mbstring					toujours pas...&lt;br /&gt;
  mysqli ; mysqld ; openssl ; pdo ; phar	: ignorées&lt;br /&gt;
  posix &lt;br /&gt;
  readline : non trouvé, mais il existe des apk -&amp;gt; installation, n&#039;apparaît pas&lt;br /&gt;
  session ; shmop : ignorées&lt;br /&gt;
  simpleXML ; sockets				marche pas&lt;br /&gt;
  sodium ; sysvmsg ; sysvsem ; sysvshm ; tokenizer : ignorées&lt;br /&gt;
  wddx introuvable, voir dans conf php&lt;br /&gt;
  xml ; xmlreader ; xmlwriter ; xsl ; opcache		marche pas&lt;br /&gt;
  zip ; zlib : ignorées&lt;br /&gt;
&lt;br /&gt;
Abandon, test avec une autre image...&lt;br /&gt;
----&lt;br /&gt;
&#039;&#039;&#039;Solution :&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
installer php-gd et php-zlib&lt;br /&gt;
&lt;br /&gt;
Corriger phpToPDF.php : AddPage($orientation = &#039;&#039;, $size = &#039;&#039;, $rotation = 0) (il manque deux arguments)&lt;br /&gt;
Corriger pdf1.php en supprimant les lignes vides (au moins au début du document)&lt;br /&gt;
Je suppose qu&#039;il y a une option pour ignorer ce genre d&#039;erreurs sur le serveur virtuel...&lt;br /&gt;
&lt;br /&gt;
Fonctionne en frontal&lt;br /&gt;
Fonctionne derrière le proxy&lt;br /&gt;
&lt;br /&gt;
* Pour automatiser le démarrage d&#039;un service &lt;br /&gt;
sur débian :&lt;br /&gt;
  # systemctl enable *service* (p. ex. nginx)&lt;br /&gt;
sur alpine :&lt;br /&gt;
  # rc-update add *service* (p.ex. apache2)&lt;/div&gt;</summary>
		<author><name>Domi</name></author>
	</entry>
	<entry>
		<id>https://wiki.lesitadom.fr/index.php?title=Tables&amp;diff=1617</id>
		<title>Tables</title>
		<link rel="alternate" type="text/html" href="https://wiki.lesitadom.fr/index.php?title=Tables&amp;diff=1617"/>
		<updated>2025-05-15T16:13:07Z</updated>

		<summary type="html">&lt;p&gt;Domi : /* Tables sur alpine léger */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;----&lt;br /&gt;
==Test d&#039;un serveur apache sur alpine léger en frontal==&lt;br /&gt;
(arrêt des autres conteneurs)&lt;br /&gt;
----&lt;br /&gt;
 apk update &amp;amp;&amp;amp; apk upgrade&lt;br /&gt;
 apk add apache2&lt;br /&gt;
&lt;br /&gt;
Modification de la page d&#039;affichage par défaut :&lt;br /&gt;
 vi /var/www/localhost/htdocs/index.html&lt;br /&gt;
&lt;br /&gt;
Rendre le conteneur accessible sur le port 80 (à faire sur l&#039;hôte):&lt;br /&gt;
 lxc config device add apache myport80 proxy listen=tcp:0.0.0.0:80 connect=tcp:127.0.0.1:80&lt;br /&gt;
&lt;br /&gt;
(pour vérifier à partir de lhôte -&amp;gt; curl 10.178.91.17)&lt;br /&gt;
&lt;br /&gt;
 rc-service apache2 start&lt;br /&gt;
 netstat -ntpl&lt;br /&gt;
&lt;br /&gt;
Test à partir de l&#039;ordinateur local OK !&lt;br /&gt;
&lt;br /&gt;
Installation de php :&lt;br /&gt;
 apk add php php83-apache2 apache2-ctl mlocate&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;apache2-ctl&#039;&#039;&#039;&#039;&#039; : pour lister les modules&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;mlocate&#039;&#039;&#039;&#039;&#039; : pour localiser les fichiers et dossiers (Utiliser &#039;&#039;updatedb&#039;&#039; pour rafraîchir la base de données)&lt;br /&gt;
&lt;br /&gt;
Pour lister les modules installés :&lt;br /&gt;
 apachectl -M &lt;br /&gt;
(&#039;&#039;php_module apparaît&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
Modification de la page par défaut&lt;br /&gt;
&#039;&#039;&#039;index.php&#039;&#039;&#039; :&lt;br /&gt;
 &amp;lt;?php phpinfo(); ?&amp;gt;&lt;br /&gt;
 rc-service apache2 restart&lt;br /&gt;
&lt;br /&gt;
Test sur l&#039;ordinateur bureau : &lt;br /&gt;
-&amp;gt; ok&lt;br /&gt;
&lt;br /&gt;
==Tables sur alpine léger==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:*Création du conteneur alpine léger&lt;br /&gt;
 apk update /upgrade&lt;br /&gt;
 apk add apache2 php83-apache2 apache2-ctl&lt;br /&gt;
&#039;&#039;&#039;apache2-ctl&#039;&#039;&#039; permet de lister les modules installés avec &lt;br /&gt;
 apachectl -M&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
:*Création du fichier /etc/apache2/conf.d/remoteip.conf avec&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
/etc/apache2/conf.d/&#039;&#039;&#039;remoteip.conf&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
  RemoteIPHeader X-Real-IP&lt;br /&gt;
  RemoteIPTrustedProxy proxy.lxd &lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
:*Modification de /etc/apache2/httpd.conf - décommenter :&lt;br /&gt;
 LoadModule remoteip_module modules/mod_remoteip.so&lt;br /&gt;
:*Relancer nginx dans le conteneur &#039;&#039;&#039;proxy&#039;&#039;&#039; : &lt;br /&gt;
 systemctl restart nginx&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:*Vérifier le fonctionnement et les modules de php &lt;br /&gt;
::Supprimer /var/www/localhost/htdocs/&#039;&#039;&#039;index.html&#039;&#039;&#039; et le remplacer par :&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
/var/www/localhost/htdocs/&#039;&#039;&#039;index.php&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;?php&lt;br /&gt;
  phpinfo();&lt;br /&gt;
  ?&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Afficher la page dans un navigateur à l&#039;adresse du serveur.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Installation de &#039;Tables&#039;=&lt;br /&gt;
&lt;br /&gt;
Copie des fichiers/dossiers dans /tmp du conteneur :&lt;br /&gt;
  # lxc file push /home/domi/Documents/transfertTables/* tables/tmp/ -pr&lt;br /&gt;
&lt;br /&gt;
Déplacement des fichiers/dossiers dans .../htdocs/&lt;br /&gt;
  # mv /tmp/* /var/www/localhost/htdocs/&lt;br /&gt;
  # rc-service apache2 reload&lt;br /&gt;
&lt;br /&gt;
La page s&#039;affiche, mais pas le PDF : error 500 -&amp;gt; il doit manquer un module...&lt;br /&gt;
&lt;br /&gt;
=Test des modules présents sur le serveur qui fonctionne et qui pourraient avoir un rapport=&lt;br /&gt;
  php83-ctype : gestion des caractères -&amp;gt; 	marche pas&lt;br /&gt;
  php83-curl : gestion des requêtes par url -&amp;gt; 	marche pas&lt;br /&gt;
  php83-dom : Document Object Model (XML)	-&amp;gt;	marche pas&lt;br /&gt;
  php83-fileinfo : 				marche pas&lt;br /&gt;
  ftp ; gettext					marche pas&lt;br /&gt;
  iconv, imagick : ignorées&lt;br /&gt;
  intl ; mbstring					toujours pas...&lt;br /&gt;
  mysqli ; mysqld ; openssl ; pdo ; phar	: ignorées&lt;br /&gt;
  posix &lt;br /&gt;
  readline : non trouvé, mais il existe des apk -&amp;gt; installation, n&#039;apparaît pas&lt;br /&gt;
  session ; shmop : ignorées&lt;br /&gt;
  simpleXML ; sockets				marche pas&lt;br /&gt;
  sodium ; sysvmsg ; sysvsem ; sysvshm ; tokenizer : ignorées&lt;br /&gt;
  wddx introuvable, voir dans conf php&lt;br /&gt;
  xml ; xmlreader ; xmlwriter ; xsl ; opcache		marche pas&lt;br /&gt;
  zip ; zlib : ignorées&lt;br /&gt;
&lt;br /&gt;
Abandon, test avec une autre image...&lt;br /&gt;
----&lt;br /&gt;
&#039;&#039;&#039;Solution :&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
installer php-gd et php-zlib&lt;br /&gt;
&lt;br /&gt;
Corriger phpToPDF.php : AddPage($orientation = &#039;&#039;, $size = &#039;&#039;, $rotation = 0) (il manque deux arguments)&lt;br /&gt;
Corriger pdf1.php en supprimant les lignes vides (au moins au début du document)&lt;br /&gt;
Je suppose qu&#039;il y a une option pour ignorer ce genre d&#039;erreurs sur le serveur virtuel...&lt;br /&gt;
&lt;br /&gt;
Fonctionne en frontal&lt;br /&gt;
Fonctionne derrière le proxy&lt;br /&gt;
&lt;br /&gt;
* Pour automatiser le démarrage d&#039;un service &lt;br /&gt;
sur débian :&lt;br /&gt;
  # systemctl enable *service* (p. ex. nginx)&lt;br /&gt;
sur alpine :&lt;br /&gt;
  # rc-update add *service* (p.ex. apache2)&lt;/div&gt;</summary>
		<author><name>Domi</name></author>
	</entry>
	<entry>
		<id>https://wiki.lesitadom.fr/index.php?title=Tables&amp;diff=1616</id>
		<title>Tables</title>
		<link rel="alternate" type="text/html" href="https://wiki.lesitadom.fr/index.php?title=Tables&amp;diff=1616"/>
		<updated>2025-05-15T16:12:51Z</updated>

		<summary type="html">&lt;p&gt;Domi : /* Tables sur alpine léger */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;----&lt;br /&gt;
==Test d&#039;un serveur apache sur alpine léger en frontal==&lt;br /&gt;
(arrêt des autres conteneurs)&lt;br /&gt;
----&lt;br /&gt;
 apk update &amp;amp;&amp;amp; apk upgrade&lt;br /&gt;
 apk add apache2&lt;br /&gt;
&lt;br /&gt;
Modification de la page d&#039;affichage par défaut :&lt;br /&gt;
 vi /var/www/localhost/htdocs/index.html&lt;br /&gt;
&lt;br /&gt;
Rendre le conteneur accessible sur le port 80 (à faire sur l&#039;hôte):&lt;br /&gt;
 lxc config device add apache myport80 proxy listen=tcp:0.0.0.0:80 connect=tcp:127.0.0.1:80&lt;br /&gt;
&lt;br /&gt;
(pour vérifier à partir de lhôte -&amp;gt; curl 10.178.91.17)&lt;br /&gt;
&lt;br /&gt;
 rc-service apache2 start&lt;br /&gt;
 netstat -ntpl&lt;br /&gt;
&lt;br /&gt;
Test à partir de l&#039;ordinateur local OK !&lt;br /&gt;
&lt;br /&gt;
Installation de php :&lt;br /&gt;
 apk add php php83-apache2 apache2-ctl mlocate&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;apache2-ctl&#039;&#039;&#039;&#039;&#039; : pour lister les modules&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;mlocate&#039;&#039;&#039;&#039;&#039; : pour localiser les fichiers et dossiers (Utiliser &#039;&#039;updatedb&#039;&#039; pour rafraîchir la base de données)&lt;br /&gt;
&lt;br /&gt;
Pour lister les modules installés :&lt;br /&gt;
 apachectl -M &lt;br /&gt;
(&#039;&#039;php_module apparaît&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
Modification de la page par défaut&lt;br /&gt;
&#039;&#039;&#039;index.php&#039;&#039;&#039; :&lt;br /&gt;
 &amp;lt;?php phpinfo(); ?&amp;gt;&lt;br /&gt;
 rc-service apache2 restart&lt;br /&gt;
&lt;br /&gt;
Test sur l&#039;ordinateur bureau : &lt;br /&gt;
-&amp;gt; ok&lt;br /&gt;
&lt;br /&gt;
==Tables sur alpine léger==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:*Création du conteneur alpine léger&lt;br /&gt;
 apk update /upgrade&lt;br /&gt;
 apk add apache2 php83-apache2 apache2-ctl&lt;br /&gt;
&#039;&#039;&#039;apache2-ctl&#039;&#039;&#039; permet de lister les modules installés avec &lt;br /&gt;
 apachectl -M&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
:*Création du fichier /etc/apache2/conf.d/remoteip.conf avec&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
/etc/apache2/conf.d/&#039;&#039;&#039;remoteip.conf&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
  RemoteIPHeader X-Real-IP&lt;br /&gt;
  RemoteIPTrustedProxy proxy.lxd &lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
:*Modification de /etc/apache2/httpd.conf - décommenter :&lt;br /&gt;
 LoadModule remoteip_module modules/mod_remoteip.so&lt;br /&gt;
:*Relancer nginx dans le conteneur &#039;&#039;&#039;proxy&#039;&#039;&#039; : &lt;br /&gt;
 systemctl restart nginx&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:*Vérifier le fonctionnement et les modules de php &lt;br /&gt;
::Supprimer /var/www/localhost/htdocs/&#039;&#039;&#039;index.html&#039;&#039;&#039; et le remplacer par :&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
/var/www/localhost/htdocs/&#039;&#039;&#039;index.php&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;?php&lt;br /&gt;
  phpinfo();&lt;br /&gt;
  ?&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Afficher la page dans un navigateur à l&#039;adresse du serveur.&lt;br /&gt;
&lt;br /&gt;
=Installation de &#039;Tables&#039;=&lt;br /&gt;
&lt;br /&gt;
Copie des fichiers/dossiers dans /tmp du conteneur :&lt;br /&gt;
  # lxc file push /home/domi/Documents/transfertTables/* tables/tmp/ -pr&lt;br /&gt;
&lt;br /&gt;
Déplacement des fichiers/dossiers dans .../htdocs/&lt;br /&gt;
  # mv /tmp/* /var/www/localhost/htdocs/&lt;br /&gt;
  # rc-service apache2 reload&lt;br /&gt;
&lt;br /&gt;
La page s&#039;affiche, mais pas le PDF : error 500 -&amp;gt; il doit manquer un module...&lt;br /&gt;
&lt;br /&gt;
=Test des modules présents sur le serveur qui fonctionne et qui pourraient avoir un rapport=&lt;br /&gt;
  php83-ctype : gestion des caractères -&amp;gt; 	marche pas&lt;br /&gt;
  php83-curl : gestion des requêtes par url -&amp;gt; 	marche pas&lt;br /&gt;
  php83-dom : Document Object Model (XML)	-&amp;gt;	marche pas&lt;br /&gt;
  php83-fileinfo : 				marche pas&lt;br /&gt;
  ftp ; gettext					marche pas&lt;br /&gt;
  iconv, imagick : ignorées&lt;br /&gt;
  intl ; mbstring					toujours pas...&lt;br /&gt;
  mysqli ; mysqld ; openssl ; pdo ; phar	: ignorées&lt;br /&gt;
  posix &lt;br /&gt;
  readline : non trouvé, mais il existe des apk -&amp;gt; installation, n&#039;apparaît pas&lt;br /&gt;
  session ; shmop : ignorées&lt;br /&gt;
  simpleXML ; sockets				marche pas&lt;br /&gt;
  sodium ; sysvmsg ; sysvsem ; sysvshm ; tokenizer : ignorées&lt;br /&gt;
  wddx introuvable, voir dans conf php&lt;br /&gt;
  xml ; xmlreader ; xmlwriter ; xsl ; opcache		marche pas&lt;br /&gt;
  zip ; zlib : ignorées&lt;br /&gt;
&lt;br /&gt;
Abandon, test avec une autre image...&lt;br /&gt;
----&lt;br /&gt;
&#039;&#039;&#039;Solution :&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
installer php-gd et php-zlib&lt;br /&gt;
&lt;br /&gt;
Corriger phpToPDF.php : AddPage($orientation = &#039;&#039;, $size = &#039;&#039;, $rotation = 0) (il manque deux arguments)&lt;br /&gt;
Corriger pdf1.php en supprimant les lignes vides (au moins au début du document)&lt;br /&gt;
Je suppose qu&#039;il y a une option pour ignorer ce genre d&#039;erreurs sur le serveur virtuel...&lt;br /&gt;
&lt;br /&gt;
Fonctionne en frontal&lt;br /&gt;
Fonctionne derrière le proxy&lt;br /&gt;
&lt;br /&gt;
* Pour automatiser le démarrage d&#039;un service &lt;br /&gt;
sur débian :&lt;br /&gt;
  # systemctl enable *service* (p. ex. nginx)&lt;br /&gt;
sur alpine :&lt;br /&gt;
  # rc-update add *service* (p.ex. apache2)&lt;/div&gt;</summary>
		<author><name>Domi</name></author>
	</entry>
	<entry>
		<id>https://wiki.lesitadom.fr/index.php?title=Tables&amp;diff=1615</id>
		<title>Tables</title>
		<link rel="alternate" type="text/html" href="https://wiki.lesitadom.fr/index.php?title=Tables&amp;diff=1615"/>
		<updated>2025-05-15T16:10:28Z</updated>

		<summary type="html">&lt;p&gt;Domi : /* Tables sur alpine léger */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;----&lt;br /&gt;
==Test d&#039;un serveur apache sur alpine léger en frontal==&lt;br /&gt;
(arrêt des autres conteneurs)&lt;br /&gt;
----&lt;br /&gt;
 apk update &amp;amp;&amp;amp; apk upgrade&lt;br /&gt;
 apk add apache2&lt;br /&gt;
&lt;br /&gt;
Modification de la page d&#039;affichage par défaut :&lt;br /&gt;
 vi /var/www/localhost/htdocs/index.html&lt;br /&gt;
&lt;br /&gt;
Rendre le conteneur accessible sur le port 80 (à faire sur l&#039;hôte):&lt;br /&gt;
 lxc config device add apache myport80 proxy listen=tcp:0.0.0.0:80 connect=tcp:127.0.0.1:80&lt;br /&gt;
&lt;br /&gt;
(pour vérifier à partir de lhôte -&amp;gt; curl 10.178.91.17)&lt;br /&gt;
&lt;br /&gt;
 rc-service apache2 start&lt;br /&gt;
 netstat -ntpl&lt;br /&gt;
&lt;br /&gt;
Test à partir de l&#039;ordinateur local OK !&lt;br /&gt;
&lt;br /&gt;
Installation de php :&lt;br /&gt;
 apk add php php83-apache2 apache2-ctl mlocate&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;apache2-ctl&#039;&#039;&#039;&#039;&#039; : pour lister les modules&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;mlocate&#039;&#039;&#039;&#039;&#039; : pour localiser les fichiers et dossiers (Utiliser &#039;&#039;updatedb&#039;&#039; pour rafraîchir la base de données)&lt;br /&gt;
&lt;br /&gt;
Pour lister les modules installés :&lt;br /&gt;
 apachectl -M &lt;br /&gt;
(&#039;&#039;php_module apparaît&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
Modification de la page par défaut&lt;br /&gt;
&#039;&#039;&#039;index.php&#039;&#039;&#039; :&lt;br /&gt;
 &amp;lt;?php phpinfo(); ?&amp;gt;&lt;br /&gt;
 rc-service apache2 restart&lt;br /&gt;
&lt;br /&gt;
Test sur l&#039;ordinateur bureau : &lt;br /&gt;
-&amp;gt; ok&lt;br /&gt;
&lt;br /&gt;
==Tables sur alpine léger==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:*Création du conteneur alpine léger&lt;br /&gt;
 apk update /upgrade&lt;br /&gt;
 apk add apache2 php83-apache2 apache2-ctl&lt;br /&gt;
&#039;&#039;&#039;apache2-ctl&#039;&#039;&#039; permet de lister les modules installés avec &lt;br /&gt;
 apachectl -M&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
:*Création du fichier /etc/apache2/conf.d/remoteip.conf avec&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
/etc/apache2/conf.d/&#039;&#039;&#039;remoteip.conf&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
  RemoteIPHeader X-Real-IP&lt;br /&gt;
  RemoteIPTrustedProxy proxy.lxd &lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
:*Modification de /etc/apache2/httpd.conf - décommenter :&lt;br /&gt;
 LoadModule remoteip_module modules/mod_remoteip.so&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
:*Relancer nginx dans proxy : &lt;br /&gt;
 systemctl restart nginx&lt;br /&gt;
&lt;br /&gt;
:*Vérifier le fonctionnement et les modules de php &lt;br /&gt;
Supprimer /var/www/localhost/htdocs/&#039;&#039;&#039;index.html&#039;&#039;&#039; et le remplacer par :&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
/var/www/localhost/htdocs/&#039;&#039;&#039;index.php&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;?php&lt;br /&gt;
  phpinfo();&lt;br /&gt;
  ?&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Afficher la page dans un navigateur à l&#039;adresse du serveur.&lt;br /&gt;
&lt;br /&gt;
=Installation de &#039;Tables&#039;=&lt;br /&gt;
&lt;br /&gt;
Copie des fichiers/dossiers dans /tmp du conteneur :&lt;br /&gt;
  # lxc file push /home/domi/Documents/transfertTables/* tables/tmp/ -pr&lt;br /&gt;
&lt;br /&gt;
Déplacement des fichiers/dossiers dans .../htdocs/&lt;br /&gt;
  # mv /tmp/* /var/www/localhost/htdocs/&lt;br /&gt;
  # rc-service apache2 reload&lt;br /&gt;
&lt;br /&gt;
La page s&#039;affiche, mais pas le PDF : error 500 -&amp;gt; il doit manquer un module...&lt;br /&gt;
&lt;br /&gt;
=Test des modules présents sur le serveur qui fonctionne et qui pourraient avoir un rapport=&lt;br /&gt;
  php83-ctype : gestion des caractères -&amp;gt; 	marche pas&lt;br /&gt;
  php83-curl : gestion des requêtes par url -&amp;gt; 	marche pas&lt;br /&gt;
  php83-dom : Document Object Model (XML)	-&amp;gt;	marche pas&lt;br /&gt;
  php83-fileinfo : 				marche pas&lt;br /&gt;
  ftp ; gettext					marche pas&lt;br /&gt;
  iconv, imagick : ignorées&lt;br /&gt;
  intl ; mbstring					toujours pas...&lt;br /&gt;
  mysqli ; mysqld ; openssl ; pdo ; phar	: ignorées&lt;br /&gt;
  posix &lt;br /&gt;
  readline : non trouvé, mais il existe des apk -&amp;gt; installation, n&#039;apparaît pas&lt;br /&gt;
  session ; shmop : ignorées&lt;br /&gt;
  simpleXML ; sockets				marche pas&lt;br /&gt;
  sodium ; sysvmsg ; sysvsem ; sysvshm ; tokenizer : ignorées&lt;br /&gt;
  wddx introuvable, voir dans conf php&lt;br /&gt;
  xml ; xmlreader ; xmlwriter ; xsl ; opcache		marche pas&lt;br /&gt;
  zip ; zlib : ignorées&lt;br /&gt;
&lt;br /&gt;
Abandon, test avec une autre image...&lt;br /&gt;
----&lt;br /&gt;
&#039;&#039;&#039;Solution :&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
installer php-gd et php-zlib&lt;br /&gt;
&lt;br /&gt;
Corriger phpToPDF.php : AddPage($orientation = &#039;&#039;, $size = &#039;&#039;, $rotation = 0) (il manque deux arguments)&lt;br /&gt;
Corriger pdf1.php en supprimant les lignes vides (au moins au début du document)&lt;br /&gt;
Je suppose qu&#039;il y a une option pour ignorer ce genre d&#039;erreurs sur le serveur virtuel...&lt;br /&gt;
&lt;br /&gt;
Fonctionne en frontal&lt;br /&gt;
Fonctionne derrière le proxy&lt;br /&gt;
&lt;br /&gt;
* Pour automatiser le démarrage d&#039;un service &lt;br /&gt;
sur débian :&lt;br /&gt;
  # systemctl enable *service* (p. ex. nginx)&lt;br /&gt;
sur alpine :&lt;br /&gt;
  # rc-update add *service* (p.ex. apache2)&lt;/div&gt;</summary>
		<author><name>Domi</name></author>
	</entry>
	<entry>
		<id>https://wiki.lesitadom.fr/index.php?title=Tables&amp;diff=1614</id>
		<title>Tables</title>
		<link rel="alternate" type="text/html" href="https://wiki.lesitadom.fr/index.php?title=Tables&amp;diff=1614"/>
		<updated>2025-05-15T15:55:04Z</updated>

		<summary type="html">&lt;p&gt;Domi : /* Tables sur alpine léger */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;----&lt;br /&gt;
==Test d&#039;un serveur apache sur alpine léger en frontal==&lt;br /&gt;
(arrêt des autres conteneurs)&lt;br /&gt;
----&lt;br /&gt;
 apk update &amp;amp;&amp;amp; apk upgrade&lt;br /&gt;
 apk add apache2&lt;br /&gt;
&lt;br /&gt;
Modification de la page d&#039;affichage par défaut :&lt;br /&gt;
 vi /var/www/localhost/htdocs/index.html&lt;br /&gt;
&lt;br /&gt;
Rendre le conteneur accessible sur le port 80 (à faire sur l&#039;hôte):&lt;br /&gt;
 lxc config device add apache myport80 proxy listen=tcp:0.0.0.0:80 connect=tcp:127.0.0.1:80&lt;br /&gt;
&lt;br /&gt;
(pour vérifier à partir de lhôte -&amp;gt; curl 10.178.91.17)&lt;br /&gt;
&lt;br /&gt;
 rc-service apache2 start&lt;br /&gt;
 netstat -ntpl&lt;br /&gt;
&lt;br /&gt;
Test à partir de l&#039;ordinateur local OK !&lt;br /&gt;
&lt;br /&gt;
Installation de php :&lt;br /&gt;
 apk add php php83-apache2 apache2-ctl mlocate&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;apache2-ctl&#039;&#039;&#039;&#039;&#039; : pour lister les modules&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;mlocate&#039;&#039;&#039;&#039;&#039; : pour localiser les fichiers et dossiers (Utiliser &#039;&#039;updatedb&#039;&#039; pour rafraîchir la base de données)&lt;br /&gt;
&lt;br /&gt;
Pour lister les modules installés :&lt;br /&gt;
 apachectl -M &lt;br /&gt;
(&#039;&#039;php_module apparaît&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
Modification de la page par défaut&lt;br /&gt;
&#039;&#039;&#039;index.php&#039;&#039;&#039; :&lt;br /&gt;
 &amp;lt;?php phpinfo(); ?&amp;gt;&lt;br /&gt;
 rc-service apache2 restart&lt;br /&gt;
&lt;br /&gt;
Test sur l&#039;ordinateur bureau : &lt;br /&gt;
-&amp;gt; ok&lt;br /&gt;
&lt;br /&gt;
==Tables sur alpine léger==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:*Création du conteneur alpine léger&lt;br /&gt;
 apk update /upgrade&lt;br /&gt;
 apk add apache2&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
:*Création du fichier /etc/apache2/conf.d/remoteip.conf avec&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
/etc/apache2/conf.d/&#039;&#039;&#039;remoteip.conf&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
  RemoteIPHeader X-Real-IP&lt;br /&gt;
  RemoteIPTrustedProxy proxy.lxd &lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
:*Modification de /etc/apache2/httpd.conf - décommenter :&lt;br /&gt;
 LoadModule remoteip_module modules/mod_remoteip.so&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
:*Relancer nginx dans proxy : &lt;br /&gt;
 systemctl restart nginx&lt;br /&gt;
&lt;br /&gt;
:*Vérifier le fonctionnement et les modules de php &lt;br /&gt;
modif de /var/www/localhost/htdocs/index.html en&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
/etc/apache2/conf.d/&#039;&#039;&#039;remoteip.conf&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;?php&lt;br /&gt;
  phpinfo();&lt;br /&gt;
  ?&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 apk add php (ajoute php)&lt;br /&gt;
 php -v -&amp;gt; indique la version&lt;br /&gt;
&lt;br /&gt;
installation d&#039;apache2-ctl pour vérifier les modules installés :&lt;br /&gt;
 apk add apache2-ctl&lt;br /&gt;
puis &lt;br /&gt;
 apachectl -M -&amp;gt; liste les modules&lt;br /&gt;
pas de mod_php&lt;br /&gt;
&lt;br /&gt;
installation de php83-apache2&lt;br /&gt;
 apk add php83-apache2 -&amp;gt; php_module apparaît, mais ça ne fonctionne pas&lt;br /&gt;
&lt;br /&gt;
tentative de modification des droits : www-data n&#039;existe pas...&lt;br /&gt;
 addgroup -g 82 -S www-data -&amp;gt; le groupe existe déjà&lt;br /&gt;
 adduser -u 82 -D -S -G www-data www-data -&amp;gt; pas d&#039;erreur&lt;br /&gt;
Vérification :&lt;br /&gt;
 cut -d: -f1 /etc/passwd -&amp;gt; l&#039;itilisateur apparaît&lt;br /&gt;
(cut -d: -f1 /etc/group -&amp;gt; liste les groupes)&lt;br /&gt;
Changement des drois sur htdocs&lt;br /&gt;
 chown -R www-data:www-data /var/www/localhost/htdocs/&lt;br /&gt;
... Ne change rien...&lt;br /&gt;
&lt;br /&gt;
!!!! RENOMMER index.html en index.php -&amp;gt; la page de php s&#039;affiche !&lt;br /&gt;
&lt;br /&gt;
=Installation de &#039;Tables&#039;=&lt;br /&gt;
&lt;br /&gt;
Copie des fichiers/dossiers dans /tmp du conteneur :&lt;br /&gt;
  # lxc file push /home/domi/Documents/transfertTables/* tables/tmp/ -pr&lt;br /&gt;
&lt;br /&gt;
Déplacement des fichiers/dossiers dans .../htdocs/&lt;br /&gt;
  # mv /tmp/* /var/www/localhost/htdocs/&lt;br /&gt;
  # rc-service apache2 reload&lt;br /&gt;
&lt;br /&gt;
La page s&#039;affiche, mais pas le PDF : error 500 -&amp;gt; il doit manquer un module...&lt;br /&gt;
&lt;br /&gt;
=Test des modules présents sur le serveur qui fonctionne et qui pourraient avoir un rapport=&lt;br /&gt;
  php83-ctype : gestion des caractères -&amp;gt; 	marche pas&lt;br /&gt;
  php83-curl : gestion des requêtes par url -&amp;gt; 	marche pas&lt;br /&gt;
  php83-dom : Document Object Model (XML)	-&amp;gt;	marche pas&lt;br /&gt;
  php83-fileinfo : 				marche pas&lt;br /&gt;
  ftp ; gettext					marche pas&lt;br /&gt;
  iconv, imagick : ignorées&lt;br /&gt;
  intl ; mbstring					toujours pas...&lt;br /&gt;
  mysqli ; mysqld ; openssl ; pdo ; phar	: ignorées&lt;br /&gt;
  posix &lt;br /&gt;
  readline : non trouvé, mais il existe des apk -&amp;gt; installation, n&#039;apparaît pas&lt;br /&gt;
  session ; shmop : ignorées&lt;br /&gt;
  simpleXML ; sockets				marche pas&lt;br /&gt;
  sodium ; sysvmsg ; sysvsem ; sysvshm ; tokenizer : ignorées&lt;br /&gt;
  wddx introuvable, voir dans conf php&lt;br /&gt;
  xml ; xmlreader ; xmlwriter ; xsl ; opcache		marche pas&lt;br /&gt;
  zip ; zlib : ignorées&lt;br /&gt;
&lt;br /&gt;
Abandon, test avec une autre image...&lt;br /&gt;
----&lt;br /&gt;
&#039;&#039;&#039;Solution :&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
installer php-gd et php-zlib&lt;br /&gt;
&lt;br /&gt;
Corriger phpToPDF.php : AddPage($orientation = &#039;&#039;, $size = &#039;&#039;, $rotation = 0) (il manque deux arguments)&lt;br /&gt;
Corriger pdf1.php en supprimant les lignes vides (au moins au début du document)&lt;br /&gt;
Je suppose qu&#039;il y a une option pour ignorer ce genre d&#039;erreurs sur le serveur virtuel...&lt;br /&gt;
&lt;br /&gt;
Fonctionne en frontal&lt;br /&gt;
Fonctionne derrière le proxy&lt;br /&gt;
&lt;br /&gt;
* Pour automatiser le démarrage d&#039;un service &lt;br /&gt;
sur débian :&lt;br /&gt;
  # systemctl enable *service* (p. ex. nginx)&lt;br /&gt;
sur alpine :&lt;br /&gt;
  # rc-update add *service* (p.ex. apache2)&lt;/div&gt;</summary>
		<author><name>Domi</name></author>
	</entry>
	<entry>
		<id>https://wiki.lesitadom.fr/index.php?title=Tables&amp;diff=1613</id>
		<title>Tables</title>
		<link rel="alternate" type="text/html" href="https://wiki.lesitadom.fr/index.php?title=Tables&amp;diff=1613"/>
		<updated>2025-05-15T15:46:20Z</updated>

		<summary type="html">&lt;p&gt;Domi : /* Tables sur alpine léger */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;----&lt;br /&gt;
==Test d&#039;un serveur apache sur alpine léger en frontal==&lt;br /&gt;
(arrêt des autres conteneurs)&lt;br /&gt;
----&lt;br /&gt;
 apk update &amp;amp;&amp;amp; apk upgrade&lt;br /&gt;
 apk add apache2&lt;br /&gt;
&lt;br /&gt;
Modification de la page d&#039;affichage par défaut :&lt;br /&gt;
 vi /var/www/localhost/htdocs/index.html&lt;br /&gt;
&lt;br /&gt;
Rendre le conteneur accessible sur le port 80 (à faire sur l&#039;hôte):&lt;br /&gt;
 lxc config device add apache myport80 proxy listen=tcp:0.0.0.0:80 connect=tcp:127.0.0.1:80&lt;br /&gt;
&lt;br /&gt;
(pour vérifier à partir de lhôte -&amp;gt; curl 10.178.91.17)&lt;br /&gt;
&lt;br /&gt;
 rc-service apache2 start&lt;br /&gt;
 netstat -ntpl&lt;br /&gt;
&lt;br /&gt;
Test à partir de l&#039;ordinateur local OK !&lt;br /&gt;
&lt;br /&gt;
Installation de php :&lt;br /&gt;
 apk add php php83-apache2 apache2-ctl mlocate&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;apache2-ctl&#039;&#039;&#039;&#039;&#039; : pour lister les modules&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;mlocate&#039;&#039;&#039;&#039;&#039; : pour localiser les fichiers et dossiers (Utiliser &#039;&#039;updatedb&#039;&#039; pour rafraîchir la base de données)&lt;br /&gt;
&lt;br /&gt;
Pour lister les modules installés :&lt;br /&gt;
 apachectl -M &lt;br /&gt;
(&#039;&#039;php_module apparaît&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
Modification de la page par défaut&lt;br /&gt;
&#039;&#039;&#039;index.php&#039;&#039;&#039; :&lt;br /&gt;
 &amp;lt;?php phpinfo(); ?&amp;gt;&lt;br /&gt;
 rc-service apache2 restart&lt;br /&gt;
&lt;br /&gt;
Test sur l&#039;ordinateur bureau : &lt;br /&gt;
-&amp;gt; ok&lt;br /&gt;
&lt;br /&gt;
==Tables sur alpine léger==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Création du conteneur alpine léger&lt;br /&gt;
 apk update /upgrade&lt;br /&gt;
 apk add apache2&lt;br /&gt;
&lt;br /&gt;
création du fichier /etc/apache2/conf.d/remoteip.conf avec&lt;br /&gt;
 RemoteIPHeader X-Real-IP&lt;br /&gt;
 RemoteIPTrustedProxy 10.178.91.228 d42:b9ca:1a60:95fc:216:3eff:fe2f:924c&lt;br /&gt;
&lt;br /&gt;
modification de /etc/apache2/httpd.conf&lt;br /&gt;
décommenter :&lt;br /&gt;
 LoadModule remoteip_module modules/mod_remoteip.so&lt;br /&gt;
&lt;br /&gt;
 rc-service apache2 start -&amp;gt; mouline&lt;br /&gt;
relancer nginx dans proxy : &lt;br /&gt;
 systemctl restart nginx&lt;br /&gt;
-&amp;gt; accès ok !&lt;br /&gt;
&lt;br /&gt;
faire fonctionner php&lt;br /&gt;
modif de /var/www/localhost/htdocs/index.html en&lt;br /&gt;
 &amp;lt;?php&lt;br /&gt;
  phpinfo();&lt;br /&gt;
  ?&amp;gt;&lt;br /&gt;
(ne fonctionne pas, normal ! php n&#039;est pas installé...)&lt;br /&gt;
&lt;br /&gt;
 apk add php (ajoute php)&lt;br /&gt;
 php -v -&amp;gt; indique la version&lt;br /&gt;
&lt;br /&gt;
installation d&#039;apache2-ctl pour vérifier les modules installés :&lt;br /&gt;
 apk add apache2-ctl&lt;br /&gt;
puis &lt;br /&gt;
 apachectl -M -&amp;gt; liste les modules&lt;br /&gt;
pas de mod_php&lt;br /&gt;
&lt;br /&gt;
installation de php83-apache2&lt;br /&gt;
 apk add php83-apache2 -&amp;gt; php_module apparaît, mais ça ne fonctionne pas&lt;br /&gt;
&lt;br /&gt;
tentative de modification des droits : www-data n&#039;existe pas...&lt;br /&gt;
 addgroup -g 82 -S www-data -&amp;gt; le groupe existe déjà&lt;br /&gt;
 adduser -u 82 -D -S -G www-data www-data -&amp;gt; pas d&#039;erreur&lt;br /&gt;
Vérification :&lt;br /&gt;
 cut -d: -f1 /etc/passwd -&amp;gt; l&#039;itilisateur apparaît&lt;br /&gt;
(cut -d: -f1 /etc/group -&amp;gt; liste les groupes)&lt;br /&gt;
Changement des drois sur htdocs&lt;br /&gt;
 chown -R www-data:www-data /var/www/localhost/htdocs/&lt;br /&gt;
... Ne change rien...&lt;br /&gt;
&lt;br /&gt;
!!!! RENOMMER index.html en index.php -&amp;gt; la page de php s&#039;affiche !&lt;br /&gt;
&lt;br /&gt;
=Installation de &#039;Tables&#039;=&lt;br /&gt;
&lt;br /&gt;
Copie des fichiers/dossiers dans /tmp du conteneur :&lt;br /&gt;
  # lxc file push /home/domi/Documents/transfertTables/* tables/tmp/ -pr&lt;br /&gt;
&lt;br /&gt;
Déplacement des fichiers/dossiers dans .../htdocs/&lt;br /&gt;
  # mv /tmp/* /var/www/localhost/htdocs/&lt;br /&gt;
  # rc-service apache2 reload&lt;br /&gt;
&lt;br /&gt;
La page s&#039;affiche, mais pas le PDF : error 500 -&amp;gt; il doit manquer un module...&lt;br /&gt;
&lt;br /&gt;
=Test des modules présents sur le serveur qui fonctionne et qui pourraient avoir un rapport=&lt;br /&gt;
  php83-ctype : gestion des caractères -&amp;gt; 	marche pas&lt;br /&gt;
  php83-curl : gestion des requêtes par url -&amp;gt; 	marche pas&lt;br /&gt;
  php83-dom : Document Object Model (XML)	-&amp;gt;	marche pas&lt;br /&gt;
  php83-fileinfo : 				marche pas&lt;br /&gt;
  ftp ; gettext					marche pas&lt;br /&gt;
  iconv, imagick : ignorées&lt;br /&gt;
  intl ; mbstring					toujours pas...&lt;br /&gt;
  mysqli ; mysqld ; openssl ; pdo ; phar	: ignorées&lt;br /&gt;
  posix &lt;br /&gt;
  readline : non trouvé, mais il existe des apk -&amp;gt; installation, n&#039;apparaît pas&lt;br /&gt;
  session ; shmop : ignorées&lt;br /&gt;
  simpleXML ; sockets				marche pas&lt;br /&gt;
  sodium ; sysvmsg ; sysvsem ; sysvshm ; tokenizer : ignorées&lt;br /&gt;
  wddx introuvable, voir dans conf php&lt;br /&gt;
  xml ; xmlreader ; xmlwriter ; xsl ; opcache		marche pas&lt;br /&gt;
  zip ; zlib : ignorées&lt;br /&gt;
&lt;br /&gt;
Abandon, test avec une autre image...&lt;br /&gt;
----&lt;br /&gt;
&#039;&#039;&#039;Solution :&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
installer php-gd et php-zlib&lt;br /&gt;
&lt;br /&gt;
Corriger phpToPDF.php : AddPage($orientation = &#039;&#039;, $size = &#039;&#039;, $rotation = 0) (il manque deux arguments)&lt;br /&gt;
Corriger pdf1.php en supprimant les lignes vides (au moins au début du document)&lt;br /&gt;
Je suppose qu&#039;il y a une option pour ignorer ce genre d&#039;erreurs sur le serveur virtuel...&lt;br /&gt;
&lt;br /&gt;
Fonctionne en frontal&lt;br /&gt;
Fonctionne derrière le proxy&lt;br /&gt;
&lt;br /&gt;
* Pour automatiser le démarrage d&#039;un service &lt;br /&gt;
sur débian :&lt;br /&gt;
  # systemctl enable *service* (p. ex. nginx)&lt;br /&gt;
sur alpine :&lt;br /&gt;
  # rc-update add *service* (p.ex. apache2)&lt;/div&gt;</summary>
		<author><name>Domi</name></author>
	</entry>
	<entry>
		<id>https://wiki.lesitadom.fr/index.php?title=Tables&amp;diff=1612</id>
		<title>Tables</title>
		<link rel="alternate" type="text/html" href="https://wiki.lesitadom.fr/index.php?title=Tables&amp;diff=1612"/>
		<updated>2025-05-15T15:43:30Z</updated>

		<summary type="html">&lt;p&gt;Domi : /* Test d&amp;#039;un serveur apache sur alpine léger en frontal */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;----&lt;br /&gt;
==Test d&#039;un serveur apache sur alpine léger en frontal==&lt;br /&gt;
(arrêt des autres conteneurs)&lt;br /&gt;
----&lt;br /&gt;
 apk update &amp;amp;&amp;amp; apk upgrade&lt;br /&gt;
 apk add apache2&lt;br /&gt;
&lt;br /&gt;
Modification de la page d&#039;affichage par défaut :&lt;br /&gt;
 vi /var/www/localhost/htdocs/index.html&lt;br /&gt;
&lt;br /&gt;
Rendre le conteneur accessible sur le port 80 (à faire sur l&#039;hôte):&lt;br /&gt;
 lxc config device add apache myport80 proxy listen=tcp:0.0.0.0:80 connect=tcp:127.0.0.1:80&lt;br /&gt;
&lt;br /&gt;
(pour vérifier à partir de lhôte -&amp;gt; curl 10.178.91.17)&lt;br /&gt;
&lt;br /&gt;
 rc-service apache2 start&lt;br /&gt;
 netstat -ntpl&lt;br /&gt;
&lt;br /&gt;
Test à partir de l&#039;ordinateur local OK !&lt;br /&gt;
&lt;br /&gt;
Installation de php :&lt;br /&gt;
 apk add php php83-apache2 apache2-ctl mlocate&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;apache2-ctl&#039;&#039;&#039;&#039;&#039; : pour lister les modules&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;mlocate&#039;&#039;&#039;&#039;&#039; : pour localiser les fichiers et dossiers (Utiliser &#039;&#039;updatedb&#039;&#039; pour rafraîchir la base de données)&lt;br /&gt;
&lt;br /&gt;
Pour lister les modules installés :&lt;br /&gt;
 apachectl -M &lt;br /&gt;
(&#039;&#039;php_module apparaît&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
Modification de la page par défaut&lt;br /&gt;
&#039;&#039;&#039;index.php&#039;&#039;&#039; :&lt;br /&gt;
 &amp;lt;?php phpinfo(); ?&amp;gt;&lt;br /&gt;
 rc-service apache2 restart&lt;br /&gt;
&lt;br /&gt;
Test sur l&#039;ordinateur bureau : &lt;br /&gt;
-&amp;gt; ok&lt;br /&gt;
&lt;br /&gt;
==Tables sur alpine léger==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Création du conteneur alpine léger&lt;br /&gt;
  # apk update /upgrade&lt;br /&gt;
  # apk add apache2&lt;br /&gt;
&lt;br /&gt;
création du fichier /etc/apache2/conf.d/remoteip.conf avec&lt;br /&gt;
  RemoteIPHeader X-Real-IP&lt;br /&gt;
  RemoteIPTrustedProxy 10.178.91.228 d42:b9ca:1a60:95fc:216:3eff:fe2f:924c&lt;br /&gt;
&lt;br /&gt;
modification de /etc/apache2/httpd.conf&lt;br /&gt;
décommenter :&lt;br /&gt;
  LoadModule remoteip_module modules/mod_remoteip.so&lt;br /&gt;
&lt;br /&gt;
  # rc-service apache2 start -&amp;gt; mouline&lt;br /&gt;
relancer nginx dans proxy : &lt;br /&gt;
  # systemctl restart nginx&lt;br /&gt;
-&amp;gt; accès ok !&lt;br /&gt;
&lt;br /&gt;
faire fonctionner php&lt;br /&gt;
modif de /var/www/localhost/htdocs/index.html en&lt;br /&gt;
  &amp;lt;?php&lt;br /&gt;
  phpinfo();&lt;br /&gt;
  ?&amp;gt;&lt;br /&gt;
(ne fonctionne pas, normal ! php n&#039;est pas installé...)&lt;br /&gt;
&lt;br /&gt;
  # apk add php (ajoute php)&lt;br /&gt;
  # php -v -&amp;gt; indique la version&lt;br /&gt;
&lt;br /&gt;
installation d&#039;apache2-ctl pour vérifier les modules installés :&lt;br /&gt;
  # apk add apache2-ctl&lt;br /&gt;
puis &lt;br /&gt;
  # apachectl -M -&amp;gt; liste les modules&lt;br /&gt;
pas de mod_php&lt;br /&gt;
&lt;br /&gt;
installation de php83-apache2&lt;br /&gt;
  # apk add php83-apache2 -&amp;gt; php_module apparaît, mais ça ne fonctionne pas&lt;br /&gt;
&lt;br /&gt;
tentative de modification des droits : www-data n&#039;existe pas...&lt;br /&gt;
  # addgroup -g 82 -S www-data -&amp;gt; le groupe existe déjà&lt;br /&gt;
  # adduser -u 82 -D -S -G www-data www-data -&amp;gt; pas d&#039;erreur&lt;br /&gt;
Vérification :&lt;br /&gt;
  # cut -d: -f1 /etc/passwd -&amp;gt; l&#039;itilisateur apparaît&lt;br /&gt;
(cut -d: -f1 /etc/group -&amp;gt; liste les groupes)&lt;br /&gt;
Changement des drois sur htdocs&lt;br /&gt;
  # chown -R www-data:www-data /var/www/localhost/htdocs/&lt;br /&gt;
... Ne change rien...&lt;br /&gt;
&lt;br /&gt;
!!!! RENOMMER index.html en index.php -&amp;gt; la page de php s&#039;affiche !&lt;br /&gt;
&lt;br /&gt;
=Installation de &#039;Tables&#039;=&lt;br /&gt;
&lt;br /&gt;
Copie des fichiers/dossiers dans /tmp du conteneur :&lt;br /&gt;
  # lxc file push /home/domi/Documents/transfertTables/* tables/tmp/ -pr&lt;br /&gt;
&lt;br /&gt;
Déplacement des fichiers/dossiers dans .../htdocs/&lt;br /&gt;
  # mv /tmp/* /var/www/localhost/htdocs/&lt;br /&gt;
  # rc-service apache2 reload&lt;br /&gt;
&lt;br /&gt;
La page s&#039;affiche, mais pas le PDF : error 500 -&amp;gt; il doit manquer un module...&lt;br /&gt;
&lt;br /&gt;
=Test des modules présents sur le serveur qui fonctionne et qui pourraient avoir un rapport=&lt;br /&gt;
  php83-ctype : gestion des caractères -&amp;gt; 	marche pas&lt;br /&gt;
  php83-curl : gestion des requêtes par url -&amp;gt; 	marche pas&lt;br /&gt;
  php83-dom : Document Object Model (XML)	-&amp;gt;	marche pas&lt;br /&gt;
  php83-fileinfo : 				marche pas&lt;br /&gt;
  ftp ; gettext					marche pas&lt;br /&gt;
  iconv, imagick : ignorées&lt;br /&gt;
  intl ; mbstring					toujours pas...&lt;br /&gt;
  mysqli ; mysqld ; openssl ; pdo ; phar	: ignorées&lt;br /&gt;
  posix &lt;br /&gt;
  readline : non trouvé, mais il existe des apk -&amp;gt; installation, n&#039;apparaît pas&lt;br /&gt;
  session ; shmop : ignorées&lt;br /&gt;
  simpleXML ; sockets				marche pas&lt;br /&gt;
  sodium ; sysvmsg ; sysvsem ; sysvshm ; tokenizer : ignorées&lt;br /&gt;
  wddx introuvable, voir dans conf php&lt;br /&gt;
  xml ; xmlreader ; xmlwriter ; xsl ; opcache		marche pas&lt;br /&gt;
  zip ; zlib : ignorées&lt;br /&gt;
&lt;br /&gt;
Abandon, test avec une autre image...&lt;br /&gt;
----&lt;br /&gt;
&#039;&#039;&#039;Solution :&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
installer php-gd et php-zlib&lt;br /&gt;
&lt;br /&gt;
Corriger phpToPDF.php : AddPage($orientation = &#039;&#039;, $size = &#039;&#039;, $rotation = 0) (il manque deux arguments)&lt;br /&gt;
Corriger pdf1.php en supprimant les lignes vides (au moins au début du document)&lt;br /&gt;
Je suppose qu&#039;il y a une option pour ignorer ce genre d&#039;erreurs sur le serveur virtuel...&lt;br /&gt;
&lt;br /&gt;
Fonctionne en frontal&lt;br /&gt;
Fonctionne derrière le proxy&lt;br /&gt;
&lt;br /&gt;
* Pour automatiser le démarrage d&#039;un service &lt;br /&gt;
sur débian :&lt;br /&gt;
  # systemctl enable *service* (p. ex. nginx)&lt;br /&gt;
sur alpine :&lt;br /&gt;
  # rc-update add *service* (p.ex. apache2)&lt;/div&gt;</summary>
		<author><name>Domi</name></author>
	</entry>
	<entry>
		<id>https://wiki.lesitadom.fr/index.php?title=Tables&amp;diff=1611</id>
		<title>Tables</title>
		<link rel="alternate" type="text/html" href="https://wiki.lesitadom.fr/index.php?title=Tables&amp;diff=1611"/>
		<updated>2025-05-15T15:36:54Z</updated>

		<summary type="html">&lt;p&gt;Domi : /* Test d&amp;#039;un serveur apache sur alpine léger en frontal */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;----&lt;br /&gt;
==Test d&#039;un serveur apache sur alpine léger en frontal==&lt;br /&gt;
(arrêt des autres conteneurs)&lt;br /&gt;
----&lt;br /&gt;
 apk update &amp;amp;&amp;amp; apk upgrade&lt;br /&gt;
 apk add apache2&lt;br /&gt;
&lt;br /&gt;
Modification de la page d&#039;affichage par défaut :&lt;br /&gt;
 vi /var/www/localhost/htdocs/index.html&lt;br /&gt;
&lt;br /&gt;
Rendre le conteneur accessible sur le port 80 (à faire sur l&#039;hôte):&lt;br /&gt;
 lxc config device add apache myport80 proxy listen=tcp:0.0.0.0:80 connect=tcp:127.0.0.1:80&lt;br /&gt;
&lt;br /&gt;
(pour vérifier à partir de lhôte -&amp;gt; curl 10.178.91.17)&lt;br /&gt;
&lt;br /&gt;
 rc-service apache2 start&lt;br /&gt;
 netstat -ntpl&lt;br /&gt;
&lt;br /&gt;
Test à partir de l&#039;ordinateur local OK !&lt;br /&gt;
&lt;br /&gt;
Installation de php :&lt;br /&gt;
 apk add php php83-apache2 apache2-ctl mlocate&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;apache2-ctl&#039;&#039;&#039;&#039;&#039; : pour lister les modules&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;mlocate&#039;&#039;&#039;&#039;&#039; : pour localiser les fichiers et dossiers (Utiliser &#039;&#039;updatedb&#039;&#039; pour rafraîchir la base de données)&lt;br /&gt;
&lt;br /&gt;
Pour lister les modules installés :&lt;br /&gt;
 apachectl -M &lt;br /&gt;
(&#039;&#039;php_module apparaît&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
Modification de la page par défaut, à renommer en &#039;&#039;index.php&#039;&#039; :&lt;br /&gt;
  &amp;lt;?php phpinfo(); ?&amp;gt;&lt;br /&gt;
 rc-service apache2 restart&lt;br /&gt;
&lt;br /&gt;
Test sur l&#039;ordinateur bureau : &lt;br /&gt;
-&amp;gt; ok&lt;br /&gt;
&lt;br /&gt;
==Tables sur alpine léger==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Création du conteneur alpine léger&lt;br /&gt;
  # apk update /upgrade&lt;br /&gt;
  # apk add apache2&lt;br /&gt;
&lt;br /&gt;
création du fichier /etc/apache2/conf.d/remoteip.conf avec&lt;br /&gt;
  RemoteIPHeader X-Real-IP&lt;br /&gt;
  RemoteIPTrustedProxy 10.178.91.228 d42:b9ca:1a60:95fc:216:3eff:fe2f:924c&lt;br /&gt;
&lt;br /&gt;
modification de /etc/apache2/httpd.conf&lt;br /&gt;
décommenter :&lt;br /&gt;
  LoadModule remoteip_module modules/mod_remoteip.so&lt;br /&gt;
&lt;br /&gt;
  # rc-service apache2 start -&amp;gt; mouline&lt;br /&gt;
relancer nginx dans proxy : &lt;br /&gt;
  # systemctl restart nginx&lt;br /&gt;
-&amp;gt; accès ok !&lt;br /&gt;
&lt;br /&gt;
faire fonctionner php&lt;br /&gt;
modif de /var/www/localhost/htdocs/index.html en&lt;br /&gt;
  &amp;lt;?php&lt;br /&gt;
  phpinfo();&lt;br /&gt;
  ?&amp;gt;&lt;br /&gt;
(ne fonctionne pas, normal ! php n&#039;est pas installé...)&lt;br /&gt;
&lt;br /&gt;
  # apk add php (ajoute php)&lt;br /&gt;
  # php -v -&amp;gt; indique la version&lt;br /&gt;
&lt;br /&gt;
installation d&#039;apache2-ctl pour vérifier les modules installés :&lt;br /&gt;
  # apk add apache2-ctl&lt;br /&gt;
puis &lt;br /&gt;
  # apachectl -M -&amp;gt; liste les modules&lt;br /&gt;
pas de mod_php&lt;br /&gt;
&lt;br /&gt;
installation de php83-apache2&lt;br /&gt;
  # apk add php83-apache2 -&amp;gt; php_module apparaît, mais ça ne fonctionne pas&lt;br /&gt;
&lt;br /&gt;
tentative de modification des droits : www-data n&#039;existe pas...&lt;br /&gt;
  # addgroup -g 82 -S www-data -&amp;gt; le groupe existe déjà&lt;br /&gt;
  # adduser -u 82 -D -S -G www-data www-data -&amp;gt; pas d&#039;erreur&lt;br /&gt;
Vérification :&lt;br /&gt;
  # cut -d: -f1 /etc/passwd -&amp;gt; l&#039;itilisateur apparaît&lt;br /&gt;
(cut -d: -f1 /etc/group -&amp;gt; liste les groupes)&lt;br /&gt;
Changement des drois sur htdocs&lt;br /&gt;
  # chown -R www-data:www-data /var/www/localhost/htdocs/&lt;br /&gt;
... Ne change rien...&lt;br /&gt;
&lt;br /&gt;
!!!! RENOMMER index.html en index.php -&amp;gt; la page de php s&#039;affiche !&lt;br /&gt;
&lt;br /&gt;
=Installation de &#039;Tables&#039;=&lt;br /&gt;
&lt;br /&gt;
Copie des fichiers/dossiers dans /tmp du conteneur :&lt;br /&gt;
  # lxc file push /home/domi/Documents/transfertTables/* tables/tmp/ -pr&lt;br /&gt;
&lt;br /&gt;
Déplacement des fichiers/dossiers dans .../htdocs/&lt;br /&gt;
  # mv /tmp/* /var/www/localhost/htdocs/&lt;br /&gt;
  # rc-service apache2 reload&lt;br /&gt;
&lt;br /&gt;
La page s&#039;affiche, mais pas le PDF : error 500 -&amp;gt; il doit manquer un module...&lt;br /&gt;
&lt;br /&gt;
=Test des modules présents sur le serveur qui fonctionne et qui pourraient avoir un rapport=&lt;br /&gt;
  php83-ctype : gestion des caractères -&amp;gt; 	marche pas&lt;br /&gt;
  php83-curl : gestion des requêtes par url -&amp;gt; 	marche pas&lt;br /&gt;
  php83-dom : Document Object Model (XML)	-&amp;gt;	marche pas&lt;br /&gt;
  php83-fileinfo : 				marche pas&lt;br /&gt;
  ftp ; gettext					marche pas&lt;br /&gt;
  iconv, imagick : ignorées&lt;br /&gt;
  intl ; mbstring					toujours pas...&lt;br /&gt;
  mysqli ; mysqld ; openssl ; pdo ; phar	: ignorées&lt;br /&gt;
  posix &lt;br /&gt;
  readline : non trouvé, mais il existe des apk -&amp;gt; installation, n&#039;apparaît pas&lt;br /&gt;
  session ; shmop : ignorées&lt;br /&gt;
  simpleXML ; sockets				marche pas&lt;br /&gt;
  sodium ; sysvmsg ; sysvsem ; sysvshm ; tokenizer : ignorées&lt;br /&gt;
  wddx introuvable, voir dans conf php&lt;br /&gt;
  xml ; xmlreader ; xmlwriter ; xsl ; opcache		marche pas&lt;br /&gt;
  zip ; zlib : ignorées&lt;br /&gt;
&lt;br /&gt;
Abandon, test avec une autre image...&lt;br /&gt;
----&lt;br /&gt;
&#039;&#039;&#039;Solution :&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
installer php-gd et php-zlib&lt;br /&gt;
&lt;br /&gt;
Corriger phpToPDF.php : AddPage($orientation = &#039;&#039;, $size = &#039;&#039;, $rotation = 0) (il manque deux arguments)&lt;br /&gt;
Corriger pdf1.php en supprimant les lignes vides (au moins au début du document)&lt;br /&gt;
Je suppose qu&#039;il y a une option pour ignorer ce genre d&#039;erreurs sur le serveur virtuel...&lt;br /&gt;
&lt;br /&gt;
Fonctionne en frontal&lt;br /&gt;
Fonctionne derrière le proxy&lt;br /&gt;
&lt;br /&gt;
* Pour automatiser le démarrage d&#039;un service &lt;br /&gt;
sur débian :&lt;br /&gt;
  # systemctl enable *service* (p. ex. nginx)&lt;br /&gt;
sur alpine :&lt;br /&gt;
  # rc-update add *service* (p.ex. apache2)&lt;/div&gt;</summary>
		<author><name>Domi</name></author>
	</entry>
	<entry>
		<id>https://wiki.lesitadom.fr/index.php?title=Organigramme_d%27installation&amp;diff=1610</id>
		<title>Organigramme d&#039;installation</title>
		<link rel="alternate" type="text/html" href="https://wiki.lesitadom.fr/index.php?title=Organigramme_d%27installation&amp;diff=1610"/>
		<updated>2025-05-15T15:33:16Z</updated>

		<summary type="html">&lt;p&gt;Domi : /* Conteneur tables : Voir la page */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Les outils ==&lt;br /&gt;
=== Conteneur proxy : [[Proxy|Voir la page]] ===&lt;br /&gt;
::* Création du conteneur&lt;br /&gt;
::* Installation et configuration de nginx&lt;br /&gt;
::* Installation de certbot pour let&#039;s encrypt&lt;br /&gt;
::* Voir pour installer des outils de sécurité (fail2ban,...)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
=== Conteneur Mariadb : [[Mariadb|Voir la page]] ===&lt;br /&gt;
::* Création du conteneur&lt;br /&gt;
::* Installation de mariadb&lt;br /&gt;
::* Configuration&lt;br /&gt;
::* Création d&#039;un utilisateur&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
=== Conteneur PhpMyadmin : [[Phpma|Voir la page]] ===&lt;br /&gt;
::* Création du conteneur&lt;br /&gt;
::* Installation d&#039;apache2 et de phpmyadmin&lt;br /&gt;
::* Configuration d&#039;apache2 et de phpmyadmin&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Les applis ==&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
=== Conteneur tables : [[Tables|Voir la page]] ===&lt;br /&gt;
&#039;&#039;(Cf tables sur alpine léger &amp;amp; pmb sur alpine léger pour apache2)&#039;&#039;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Conteneur pmb : [[Pmb|Voir la page]]===&lt;br /&gt;
&#039;&#039;(cf pmb sur alpine léger (historique dans pmb sur alpine lourd)&#039;&#039;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Conteneur wiki : [[Wiki|Voir la page]] ===&lt;br /&gt;
::* Création d&#039;un utilisateur et d&#039;une base de donnée vide pour le wiki&lt;br /&gt;
::* Transfert de la base de données&lt;br /&gt;
::* Création du conteneur&lt;br /&gt;
::* Installation du serveur web&lt;br /&gt;
::* Installation de la nouvelle version de mediawiki&lt;br /&gt;
::* Initialisation de l&#039;application&lt;br /&gt;
::* Modification de LocalSettings.php&lt;br /&gt;
::* Récupération du contenu sur l&#039;ancien serveur et transfert des données&lt;br /&gt;
::* Corrections&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Conteneur wp : [[Wp|Voir la page]] ===&lt;br /&gt;
&#039;&#039;(cf wordpress sur alpine léger mais sauter à la fin. Mariadb et phpmyadmin dans d&#039;autres conteneurs...)&#039;&#039;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Stockage et sauvegardes ==&lt;br /&gt;
création d&#039;un volume pour les sauvegardes :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; lxc storage volume create default sauvegarde-lxc size=50GB&lt;br /&gt;
&lt;br /&gt;
Montage du volume dans chaque conteneur :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; lxc config device add &amp;lt;nom du conteneur&amp;gt; sauvegarde-mount disk source=sauvegarde-lxc pool=default path=/sauvegardes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
logiciel : borg sauvegarde et rétention de données. Comte chez Kiki, à pousser en ssh.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sécurisation ==&lt;br /&gt;
=== Mises à jour automatiques ===&lt;br /&gt;
&lt;br /&gt;
Installer vim-nox (coloration syntaxique).&lt;br /&gt;
&lt;br /&gt;
Au niveau du système hôte, on ajoute le script : &lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
/root/scripts/&#039;&#039;&#039;lxc_auto_update.sh&#039;&#039;&#039; :&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 &lt;br /&gt;
 LOG_FILE=&amp;quot;/var/log/lxc_update.log&amp;quot;&lt;br /&gt;
 MAX_RUNS_TO_KEEP=2&lt;br /&gt;
 RUN_START_MARKER=&amp;quot;--- Début de l&#039;exécution du script ---&amp;quot;&lt;br /&gt;
 RUN_END_MARKER=&amp;quot;--- Fin de l&#039;exécution du script ---&amp;quot;&lt;br /&gt;
 PROXY_CONTAINER=&amp;quot;proxy&amp;quot;&lt;br /&gt;
 WEB_CONTAINERS=(&amp;quot;wp&amp;quot; &amp;quot;pmb&amp;quot; &amp;quot;wiki&amp;quot; &amp;quot;tables&amp;quot;) # Liste de tous les conteneurs web&lt;br /&gt;
 WEB_SERVICE_NAME=&amp;quot;apache2&amp;quot; # Nom du service web à vérifier (adapter si nécessaire)&lt;br /&gt;
 SLEEP_AFTER_RESTART=10 # Délai après le redémarrage des conteneurs web&lt;br /&gt;
 &lt;br /&gt;
 bavarder() {&lt;br /&gt;
   local message=&amp;quot;$1&amp;quot;&lt;br /&gt;
   echo &amp;quot;$(date &#039;+%Y-%m-%d %H:%M:%S&#039;) - $message&amp;quot; &amp;gt;&amp;gt; &amp;quot;$LOG_FILE&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 # Ajouter un marqueur de début d&#039;exécution&lt;br /&gt;
 bavarder &amp;quot;$RUN_START_MARKER&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 # Récupérer la liste des noms de conteneurs Alpine&lt;br /&gt;
 containers=$(lxc list --format csv | tail -n +2 | cut -d&#039;,&#039; -f1)&lt;br /&gt;
 bavarder &amp;quot;Liste des conteneurs récupérée : &#039;$containers&#039;&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 # Séparer les noms de conteneurs en un tableau&lt;br /&gt;
 IFS=$&#039;\n&#039; read -r -d &amp;lt;nowiki&amp;gt;&#039;&#039;&amp;lt;/nowiki&amp;gt; -a container_array &amp;lt;&amp;lt;&amp;lt; &amp;quot;$containers&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 # Boucle pour lancer les mises à jour&lt;br /&gt;
 {&lt;br /&gt;
   for container in &amp;quot;${container_array[@]}&amp;quot;; do&lt;br /&gt;
     bavarder &amp;quot;--- Début du traitement du conteneur : &#039;$container&#039; ---&amp;quot;&lt;br /&gt;
     config=$(lxc config show &amp;quot;$container&amp;quot;)&lt;br /&gt;
     if echo &amp;quot;$config&amp;quot; | grep -iq &amp;quot;alpine&amp;quot;; then&lt;br /&gt;
       bavarder &amp;quot;Le conteneur &#039;$container&#039; semble être basé sur Alpine.&amp;quot;&lt;br /&gt;
       is_running=$(lxc list --format csv | grep &amp;quot;^${container},&amp;quot; | grep &amp;quot;,RUNNING,&amp;quot;)&lt;br /&gt;
       if [ -n &amp;quot;$is_running&amp;quot; ]; then&lt;br /&gt;
         bavarder &amp;quot;Le conteneur &#039;$container&#039; est en cours d&#039;exécution, lancement de la mise à jour...&amp;quot;&lt;br /&gt;
         lxc exec &amp;quot;$container&amp;quot; -- sh -c &amp;quot;apk update &amp;amp;&amp;amp; apk upgrade --available&amp;quot;&lt;br /&gt;
         result=$?&lt;br /&gt;
         if [ &amp;quot;$result&amp;quot; -ne 0 ]; then&lt;br /&gt;
           bavarder &amp;quot;Erreur lors de la mise à jour de &#039;$container&#039;.&amp;quot;&lt;br /&gt;
         fi&lt;br /&gt;
       else&lt;br /&gt;
         bavarder &amp;quot;Le conteneur &#039;$container&#039; n&#039;est pas en cours d&#039;exécution, mise à jour ignorée.&amp;quot;&lt;br /&gt;
       fi&lt;br /&gt;
     else&lt;br /&gt;
       bavarder &amp;quot;Le conteneur &#039;$container&#039; ne semble pas être basé sur Alpine, mise à jour ignorée.&amp;quot;&lt;br /&gt;
     fi&lt;br /&gt;
     bavarder &amp;quot;--- Fin du traitement du conteneur : &#039;$container&#039; ---&amp;quot;&lt;br /&gt;
   done&lt;br /&gt;
 } &amp;gt;&amp;gt; &amp;quot;$LOG_FILE&amp;quot; 2&amp;gt;&amp;amp;1&lt;br /&gt;
 &lt;br /&gt;
 bavarder &amp;quot;Fin de la tentative de mise à jour des conteneurs.&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 # --- Début du redémarrage des conteneurs Alpine (sauf le proxy) ---&lt;br /&gt;
 bavarder &amp;quot;--- Début du redémarrage des conteneurs Alpine (sauf $PROXY_CONTAINER) ---&amp;quot;&lt;br /&gt;
 for container in &amp;quot;${container_array[@]}&amp;quot;; do&lt;br /&gt;
   if [ &amp;quot;$container&amp;quot; != &amp;quot;$PROXY_CONTAINER&amp;quot; ]; then&lt;br /&gt;
     config=$(lxc config show &amp;quot;$container&amp;quot;)&lt;br /&gt;
     if echo &amp;quot;$config&amp;quot; | grep -iq &amp;quot;alpine&amp;quot;; then&lt;br /&gt;
       is_running=$(lxc list --format csv | grep &amp;quot;^${container},&amp;quot; | grep &amp;quot;,RUNNING,&amp;quot;)&lt;br /&gt;
       if [ -n &amp;quot;$is_running&amp;quot; ]; then&lt;br /&gt;
         bavarder &amp;quot;Redémarrage du conteneur &#039;$container&#039;...&amp;quot;&lt;br /&gt;
         lxc restart &amp;quot;$container&amp;quot;&lt;br /&gt;
         sleep &amp;quot;$SLEEP_AFTER_RESTART&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
         # Vérifier l&#039;état du service web pour les conteneurs web&lt;br /&gt;
         is_web_container=0&lt;br /&gt;
         for web_container in &amp;quot;${WEB_CONTAINERS[@]}&amp;quot;; do&lt;br /&gt;
           if [ &amp;quot;$container&amp;quot; == &amp;quot;$web_container&amp;quot; ]; then&lt;br /&gt;
             is_web_container=1&lt;br /&gt;
             break&lt;br /&gt;
           fi&lt;br /&gt;
         done&lt;br /&gt;
 	if [ &amp;quot;$is_web_container&amp;quot; -eq 1 ]; then&lt;br /&gt;
           service_status=$(lxc exec &amp;quot;$container&amp;quot; -- rc-service &amp;quot;$WEB_SERVICE_NAME&amp;quot; status 2&amp;gt;&amp;amp;1)&lt;br /&gt;
           if ! echo &amp;quot;$service_status&amp;quot; | grep -q &amp;quot;started&amp;quot;; then&lt;br /&gt;
             bavarder &amp;quot;$WEB_SERVICE_NAME ne semble pas en cours d&#039;exécution dans &#039;$container&#039;, tentative de démarrage...&amp;quot;&lt;br /&gt;
             lxc exec &amp;quot;$container&amp;quot; -- rc-service &amp;quot;$WEB_SERVICE_NAME&amp;quot; start&lt;br /&gt;
             sleep 5&lt;br /&gt;
             service_status_after_start=$(lxc exec &amp;quot;$container&amp;quot; -- rc-service &amp;quot;$WEB_SERVICE_NAME&amp;quot; status 2&amp;gt;&amp;amp;1)&lt;br /&gt;
             if ! echo &amp;quot;$service_status_after_start&amp;quot; | grep -q &amp;quot;started&amp;quot;; then&lt;br /&gt;
               bavarder &amp;quot;Échec du démarrage de $WEB_SERVICE_NAME dans &#039;$container&#039;.&amp;quot;&lt;br /&gt;
             else&lt;br /&gt;
               bavarder &amp;quot;$WEB_SERVICE_NAME démarré avec succès dans &#039;$container&#039;.&amp;quot;&lt;br /&gt;
             fi&lt;br /&gt;
           else&lt;br /&gt;
             bavarder &amp;quot;$WEB_SERVICE_NAME semble être en cours d&#039;exécution dans &#039;$container&#039;.&amp;quot;&lt;br /&gt;
           fi&lt;br /&gt;
         fi&lt;br /&gt;
       fi&lt;br /&gt;
     fi&lt;br /&gt;
   fi&lt;br /&gt;
 done&lt;br /&gt;
 bavarder &amp;quot;--- Fin du redémarrage des conteneurs Alpine (sauf $PROXY_CONTAINER) ---&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 # --- Redémarrage du conteneur proxy en dernier ---&lt;br /&gt;
 bavarder &amp;quot;--- Début du redémarrage du conteneur proxy ($PROXY_CONTAINER) ---&amp;quot;&lt;br /&gt;
 is_proxy_running=$(lxc list --format csv | grep &amp;quot;^${PROXY_CONTAINER},&amp;quot; | grep &amp;quot;,RUNNING,&amp;quot;)&lt;br /&gt;
 if [ -n &amp;quot;$is_proxy_running&amp;quot; ]; then&lt;br /&gt;
   bavarder &amp;quot;Redémarrage du conteneur proxy &#039;$PROXY_CONTAINER&#039;...&amp;quot;&lt;br /&gt;
   lxc restart &amp;quot;$PROXY_CONTAINER&amp;quot;&lt;br /&gt;
   result=$?&lt;br /&gt;
   if [ &amp;quot;$result&amp;quot; -ne 0 ]; then&lt;br /&gt;
     bavarder &amp;quot;Erreur lors du redémarrage du conteneur proxy &#039;$PROXY_CONTAINER&#039;.&amp;quot;&lt;br /&gt;
   fi&lt;br /&gt;
 else&lt;br /&gt;
   bavarder &amp;quot;Le conteneur proxy &#039;$PROXY_CONTAINER&#039; n&#039;est pas en cours d&#039;exécution, redémarrage ignoré.&amp;quot;&lt;br /&gt;
 fi&lt;br /&gt;
 bavarder &amp;quot;--- Fin du redémarrage du conteneur proxy ($PROXY_CONTAINER) ---&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 # Ajouter un marqueur de fin d&#039;exécution&lt;br /&gt;
 bavarder &amp;quot;$RUN_END_MARKER&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 # --- Gestion de la rotation des logs ---&lt;br /&gt;
 if [ -f &amp;quot;$LOG_FILE&amp;quot; ]; then&lt;br /&gt;
   # Récupérer toutes les occurrences du marqueur de début d&#039;exécution&lt;br /&gt;
   start_markers=$(grep -c &amp;quot;^$RUN_START_MARKER&amp;quot; &amp;quot;$LOG_FILE&amp;quot;)&lt;br /&gt;
 &lt;br /&gt;
   # Calculer le nombre d&#039;exécutions à supprimer&lt;br /&gt;
   runs_to_remove=$((start_markers - MAX_RUNS_TO_KEEP))&lt;br /&gt;
 &lt;br /&gt;
   if [ &amp;quot;$runs_to_remove&amp;quot; -gt 0 ]; then&lt;br /&gt;
     # Utiliser awk pour ne conserver que les N dernières exécutions&lt;br /&gt;
     awk -v n=&amp;quot;$MAX_RUNS_TO_KEEP&amp;quot; -v start_marker=&amp;quot;$RUN_START_MARKER&amp;quot; -v end_marker=&amp;quot;$RUN_END_MARKER&amp;quot; &#039;&lt;br /&gt;
       BEGIN { count = 0; in_run = 0; }&lt;br /&gt;
       $0 ~ start_marker {&lt;br /&gt;
         count++;&lt;br /&gt;
         if (count &amp;gt; (NR - RSTART) + 1 - (n * (RLENGTH ? 1 : 0))) {&lt;br /&gt;
           in_run = 1;&lt;br /&gt;
         } else {&lt;br /&gt;
           in_run = 0;&lt;br /&gt;
           print;&lt;br /&gt;
         }&lt;br /&gt;
       }&lt;br /&gt;
       $0 ~ end_marker {&lt;br /&gt;
         if (!in_run) {&lt;br /&gt;
           print;&lt;br /&gt;
         }&lt;br /&gt;
       }&lt;br /&gt;
       &amp;lt;nowiki&amp;gt;!($0 ~ start_marker) &amp;amp;&amp;amp; !($0 ~ end_marker) {&lt;br /&gt;
          if (!in_run) {&lt;br /&gt;
            print;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      &#039; &amp;quot;$LOG_FILE&amp;quot; &amp;gt; &amp;quot;$LOG_FILE.tmp&amp;quot; &amp;amp;&amp;amp; mv &amp;quot;$LOG_FILE.tmp&amp;quot; &amp;quot;$LOG_FILE&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
  fi&lt;br /&gt;
  &lt;br /&gt;
  #&amp;lt;/nowiki&amp;gt; Définir l&#039;adresse e-mail pour les notifications&lt;br /&gt;
 EMAIL_DESTINATAIRE=&amp;quot;toto@mail.com&amp;quot; # Remplace par ton adresse e-mail&lt;br /&gt;
 &lt;br /&gt;
 # Vérifier s&#039;il y a eu des erreurs et envoyer un e-mail si c&#039;est le cas&lt;br /&gt;
 if grep -q &amp;quot;Erreur&amp;quot; &amp;quot;$LOG_FILE&amp;quot;; then&lt;br /&gt;
   cat &amp;quot;$LOG_FILE&amp;quot; | mail -s &#039;Rapport de mise à jour LXC - Erreurs détectées&#039; &amp;quot;$EMAIL_DESTINATAIRE&amp;quot;&lt;br /&gt;
 fi&lt;br /&gt;
 &lt;br /&gt;
 exit 0&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Envoi des E-mails====&lt;br /&gt;
L&#039;envoi des mails nécessite l&#039;installation de mailutils et ssmtp :&lt;br /&gt;
  apt-get install mailutils ssmtp&lt;br /&gt;
Configuration de ssmtp :&lt;br /&gt;
  vi /etc/ssmtp/ssmtp.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;ssmtp.conf&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
  #&lt;br /&gt;
  # Config file for sSMTP sendmail&lt;br /&gt;
  #&lt;br /&gt;
  # The person who gets all mail for userids &amp;lt; 1000&lt;br /&gt;
  # Make this empty to disable rewriting.&lt;br /&gt;
  root=toto@monmail.fr&lt;br /&gt;
  &lt;br /&gt;
  # The place where the mail goes. The actual machine name is required no &lt;br /&gt;
  # MX records are consulted. Commonly mailhosts are named mail.domain.com&lt;br /&gt;
  mailhub=smtp.gmail.com:587 (pour gmail)&lt;br /&gt;
  &lt;br /&gt;
  # Where will the mail seem to come from?&lt;br /&gt;
  # rewriteDomain=&lt;br /&gt;
 &lt;br /&gt;
  # The full hostname&lt;br /&gt;
  hostname=raspberrypi&lt;br /&gt;
  &lt;br /&gt;
  # Are users allowed to set their own From: address?&lt;br /&gt;
  # YES - Allow the user to specify their own From: address&lt;br /&gt;
  # NO - Use the system generated From: address&lt;br /&gt;
  FromLineOverride=YES&lt;br /&gt;
  UseTLS=YES&lt;br /&gt;
  UseSTARTTLS=YES&lt;br /&gt;
  AuthUser=toto@monfournisseur.com&lt;br /&gt;
  AuthPass=MonMotdePasseDeConnection&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Remarques :&#039;&#039;&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
::*&#039;&#039;Pour gmail, il faut créer un mot de passe d&#039;application dans les paramètre du compte google et l&#039;utiliser ici.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
::*&#039;&#039;Pour que la redirection de mails fonctionne, il faut que l&#039;adresse de destination finale soit différente de l&#039;adresse utilisée pour l&#039;identification pour l&#039;envoi des mails.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
On automatise l&#039;exécution (dimache à 2h du matin) :&lt;br /&gt;
  crontab -e&lt;br /&gt;
  0 2 * * 7 /root/scripts/lxc_auto_update.sh&lt;br /&gt;
&lt;br /&gt;
===Sauvegardes automatiques des données des conteneurs web===&lt;br /&gt;
On va programmer une sauvegarde automatique pour chaque conteneur web, ainsi que pour le conteneur &#039;&#039;&#039;mariadb&#039;&#039;&#039;. Ces sauvegardes se feront dans un espace commun qui sera à son tour sauvegardé sur un site distant à intervalles réguliers en gérant la rotation des sauvegardes.&amp;lt;br&amp;gt;&lt;br /&gt;
Les conteneurs :&lt;br /&gt;
::* mariadb&lt;br /&gt;
::* wiki&lt;br /&gt;
::* pmb&lt;br /&gt;
::* wp&lt;br /&gt;
bénéficieront de ce mécanisme.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour les conteneurs &#039;&#039;&#039;proxy&#039;&#039;&#039;, &#039;&#039;&#039;phpma&#039;&#039;&#039; et &#039;&#039;&#039;tables&#039;&#039;&#039;, une simple sauvegarde à la main suffira.&amp;lt;br&amp;gt;&lt;br /&gt;
On commence par créer un volume de 50Gb et on le monte dans les conteneurs concernés :&lt;br /&gt;
 lxc storage volume create default sauvegarde-lxc size=50GB&lt;br /&gt;
 lxc config device add wp sauvegarde-mount disk source=sauvegarde-lxc pool=default path=/sauvegardes&lt;br /&gt;
 lxc config device add wiki sauvegarde-mount disk source=sauvegarde-lxc pool=default path=/sauvegardes&lt;br /&gt;
 lxc config device add mariadb sauvegarde-mount disk source=sauvegarde-lxc pool=default path=/sauvegardes&lt;br /&gt;
 lxc config device add pmb sauvegarde-mount disk source=sauvegarde-lxc pool=default path=/sauvegardes&lt;br /&gt;
====mariadb====&lt;br /&gt;
:* On commence par créer un utilisateur spécifique à la sauvegarde.&amp;lt;br&amp;gt; Sous phpMyAdmin, création de l&#039;utilisateur &#039;&#039;backup_user&#039;&#039; avec les privilèges &#039;&#039;SELECT&#039;&#039; et &#039;&#039;LOCK TABLES&#039;&#039; pour les tables &#039;&#039;pmb&#039;&#039;, &#039;&#039;wiki&#039;&#039; et &#039;&#039;wordpress&#039;&#039;.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
:* Création du script de sauvegarde des tables&amp;lt;br&amp;gt;On sauvegarde les tables &#039;&#039;pmb&#039;&#039;, &#039;&#039;wordpress&#039;&#039; et &#039;&#039;wiki&#039;&#039; en générant un fichier de log dans /var/log/&#039;&#039;&#039;backup_mariadb.log&#039;&#039;&#039;.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;/usr/local/bin/backup_mariadb.sh&#039;&#039;&#039; :&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 DATE=$(date +%Y%m%d_%H%M)&lt;br /&gt;
 OUTPUT_FILE=&amp;quot;/sauvegardes/db_backup_${DATE}.sql.gz&amp;quot;&lt;br /&gt;
 USER=&amp;quot;backup_user&amp;quot;  &amp;lt;br&amp;gt;PASSWORD=&amp;quot;*********&amp;quot; # &#039;&#039;Mot de passe de backup_user&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 # Liste des bases de données à sauvegarder&lt;br /&gt;
 DATABASES=&amp;quot;pmb wiki wordpress&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 # Exporte chaque base de données et la compresse&lt;br /&gt;
 for DB in $DATABASES; do&lt;br /&gt;
   echo &amp;quot;Sauvegarde de la base de données : $DB&amp;quot;&lt;br /&gt;
   mysqldump -u &amp;quot;$USER&amp;quot; -p&amp;quot;$PASSWORD&amp;quot; &amp;quot;$DB&amp;quot; | gzip &amp;gt;&amp;gt; &amp;quot;$OUTPUT_FILE&amp;quot;&lt;br /&gt;
 done&lt;br /&gt;
 &lt;br /&gt;
 chmod 600 &amp;quot;$OUTPUT_FILE&amp;quot; # Restreindre les permissions&lt;br /&gt;
 echo &amp;quot;Sauvegarde des bases de données terminée : $OUTPUT_FILE&amp;quot; &amp;gt;&amp;gt; /var/log/backup_mariadb.log&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
:* Rendre le script exécutable :&amp;lt;br&amp;gt;&lt;br /&gt;
 chmod +x /usr/local/bin/backup_mariadb.sh&amp;lt;br&amp;gt;&lt;br /&gt;
:* Automatiser le script le samedi à 2h du matin :&amp;lt;br&amp;gt;Avec &#039;&#039;&#039;crontab -e&#039;&#039;&#039;, ajouter la ligne :&lt;br /&gt;
 0 2 * * 6 /usr/local/bin/backup_mariadb.sh&lt;br /&gt;
&lt;br /&gt;
====wiki====&lt;br /&gt;
MediaWiki installe par défaut des extensions et des skins. La sauvegarde de ces extension alourdit considérablement le fichier. Le script parcourt le dossier pour les exclure et ne tenir compte que de celles nouvellement installées.&amp;lt;br&amp;gt;&lt;br /&gt;
Il crée également un fichier de log /var/log/&#039;&#039;&#039;backup_wiki.log&#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
/usr/local/bin/&#039;&#039;&#039;backup_wiki.sh&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 DATE=$(date +%Y%m%d_%H%M)&lt;br /&gt;
 OUTPUT_FILE=&amp;quot;/sauvegardes/wiki_backup_${DATE}.tar.gz&amp;quot;&lt;br /&gt;
 MEDIAWIKI_ROOT=&amp;quot;/var/www/localhost/htdocs/&amp;quot;&lt;br /&gt;
 BASE_EXTENSIONS=&amp;quot;AbuseFilter CategoryTree Cite CiteThisPage CodeEditor ConfirmEdit DiscussionTools Echo Gadgets ImageMap InputBox Interwiki Linter LoginNotify Math MultimediaViewer Nuke OATHAuth PageImages ParserFunctions PdfHandler Poem ReplaceText Scribunto SecureLinkFixer SpamBlacklist SyntaxHighlight_GeSHi TemplateData TextExtracts Thanks TitleBlacklist VisualEditor WikiEditor&amp;quot;&lt;br /&gt;
 FILES_TO_BACKUP=&amp;quot;images&lt;br /&gt;
 LocalSettings.php&lt;br /&gt;
 extensions-custom/&lt;br /&gt;
 skins-custom/&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 echo &amp;quot;--- Début du script ---&amp;quot;&lt;br /&gt;
 echo &amp;quot;Date de la sauvegarde : $DATE&amp;quot;&lt;br /&gt;
 echo &amp;quot;Fichier de sortie : $OUTPUT_FILE&amp;quot;&lt;br /&gt;
 echo &amp;quot;Racine de MediaWiki : $MEDIAWIKI_ROOT&amp;quot;&lt;br /&gt;
 echo &amp;quot;Extensions de base : $BASE_EXTENSIONS&amp;quot;&lt;br /&gt;
 echo &amp;quot;Fichiers de base à sauvegarder : $FILES_TO_BACKUP&amp;quot;&lt;br /&gt;
 echo &amp;quot;---&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 cd &amp;quot;$MEDIAWIKI_ROOT&amp;quot; || { echo &amp;quot;Erreur lors du changement de répertoire vers $MEDIAWIKI_ROOT&amp;quot;; exit 1; }&lt;br /&gt;
 echo &amp;quot;Répertoire courant : $(pwd)&amp;quot;&lt;br /&gt;
 echo &amp;quot;--- Identification des extensions personnalisées ---&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 echo &amp;quot;Création du fichier temporaire /tmp/backup_list.txt&amp;quot;&lt;br /&gt;
 echo &amp;quot;$FILES_TO_BACKUP&amp;quot; &amp;gt; /tmp/backup_list.txt&lt;br /&gt;
 cat /tmp/backup_list.txt | while IFS= read -r LINE; do&lt;br /&gt;
   echo &amp;quot;Ajout de &#039;$LINE&#039; à la liste de sauvegarde.&amp;quot;&lt;br /&gt;
 done&lt;br /&gt;
 echo &amp;quot;---&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 echo &amp;quot;Traitement des extensions dans $MEDIAWIKI_ROOT/extensions/&amp;quot;&lt;br /&gt;
 for EXTENSION_DIR in &amp;quot;$MEDIAWIKI_ROOT&amp;quot;extensions/*; do&lt;br /&gt;
     if [ -d &amp;quot;$EXTENSION_DIR&amp;quot; ]; then&lt;br /&gt;
         EXTENSION_NAME=$(basename &amp;quot;$EXTENSION_DIR&amp;quot;)&lt;br /&gt;
         echo &amp;quot;Extension trouvée : $EXTENSION_NAME \(chemin complet : $EXTENSION_DIR\)&amp;quot;&lt;br /&gt;
         IS_BASE=0&lt;br /&gt;
         for BASE_EXT in $BASE_EXTENSIONS; do&lt;br /&gt;
             if [ &amp;quot;$EXTENSION_NAME&amp;quot; = &amp;quot;$BASE_EXT&amp;quot; ]; then&lt;br /&gt;
                 IS_BASE=1&lt;br /&gt;
                 echo &amp;quot;  &#039;$EXTENSION_NAME&#039; est une extension de base.&amp;quot;&lt;br /&gt;
                 break&lt;br /&gt;
             fi&lt;br /&gt;
         done&lt;br /&gt;
         if [ &amp;quot;$IS_BASE&amp;quot; -eq 0 ]; then&lt;br /&gt;
             echo &amp;quot;  &#039;$EXTENSION_NAME&#039; est une extension personnalisée. Ajout à la liste de sauvegarde.&amp;quot;&lt;br /&gt;
             echo &amp;quot;extensions/$EXTENSION_NAME&amp;quot; &amp;gt;&amp;gt; /tmp/backup_list.txt&lt;br /&gt;
         fi&lt;br /&gt;
     fi&lt;br /&gt;
 done&lt;br /&gt;
 echo &amp;quot;--- Liste de sauvegarde complète ---&amp;quot;&lt;br /&gt;
 cat /tmp/backup_list.txt&lt;br /&gt;
 echo &amp;quot;---&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 echo &amp;quot;Création de l&#039;archive : $OUTPUT_FILE&amp;quot;&lt;br /&gt;
 tar czf &amp;quot;$OUTPUT_FILE&amp;quot; -T /tmp/backup_list.txt --exclude=&#039;./tmp/backup_list.txt&#039;&lt;br /&gt;
 echo &amp;quot;Commande tar exécutée.&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 if [ -f &amp;quot;$OUTPUT_FILE&amp;quot; ]; then&lt;br /&gt;
     chmod 600 &amp;quot;$OUTPUT_FILE&amp;quot;&lt;br /&gt;
     echo &amp;quot;Permissions du fichier de sauvegarde mises à 600.&amp;quot;&lt;br /&gt;
     echo &amp;quot;Sauvegarde des données essentielles et des extensions personnalisées de MediaWiki terminée : $OUTPUT_FILE&amp;quot; &amp;gt;&amp;gt; /var/log/backup_wiki.log&lt;br /&gt;
     echo &amp;quot;--- Fin du script ---&amp;quot;&lt;br /&gt;
 else&lt;br /&gt;
     echo &amp;quot;Erreur : Le fichier de sauvegarde $OUTPUT_FILE n&#039;a pas été créé.&amp;quot;&lt;br /&gt;
     echo &amp;quot;--- Fin du script \(avec erreur\) ---&amp;quot;&lt;br /&gt;
     exit 1&lt;br /&gt;
 fi&lt;br /&gt;
 &lt;br /&gt;
 rm /tmp/backup_list.txt&lt;br /&gt;
 echo &amp;quot;Fichier temporaire /tmp/backup_list.txt supprimé.&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;NB :&#039;&#039;&#039; Les nombreuses lignes &#039;&#039;echo&#039;&#039; ont été ajoutées à des fin de corrections en cours de programmation et peuvent être simplifiées...&lt;br /&gt;
:* Rendre le script exécutable :&amp;lt;br&amp;gt;&lt;br /&gt;
 chmod +x /usr/local/bin/backup_wiki.sh&amp;lt;br&amp;gt;&lt;br /&gt;
:* Automatiser le script le samedi à 3h30 du matin :&amp;lt;br&amp;gt;Avec &#039;&#039;&#039;crontab -e&#039;&#039;&#039;, ajouter la ligne :&lt;br /&gt;
 30  3  *  *  6  /usr/local/bin/backup_wiki.sh&lt;br /&gt;
&lt;br /&gt;
====wp====&lt;br /&gt;
====pmb====&lt;/div&gt;</summary>
		<author><name>Domi</name></author>
	</entry>
	<entry>
		<id>https://wiki.lesitadom.fr/index.php?title=Organigramme_d%27installation&amp;diff=1609</id>
		<title>Organigramme d&#039;installation</title>
		<link rel="alternate" type="text/html" href="https://wiki.lesitadom.fr/index.php?title=Organigramme_d%27installation&amp;diff=1609"/>
		<updated>2025-05-15T11:21:18Z</updated>

		<summary type="html">&lt;p&gt;Domi : /* Conteneur wiki : Cf wiki (mediawiki) sur alpine léger */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Les outils ==&lt;br /&gt;
=== Conteneur proxy : [[Proxy|Voir la page]] ===&lt;br /&gt;
::* Création du conteneur&lt;br /&gt;
::* Installation et configuration de nginx&lt;br /&gt;
::* Installation de certbot pour let&#039;s encrypt&lt;br /&gt;
::* Voir pour installer des outils de sécurité (fail2ban,...)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
=== Conteneur Mariadb : [[Mariadb|Voir la page]] ===&lt;br /&gt;
::* Création du conteneur&lt;br /&gt;
::* Installation de mariadb&lt;br /&gt;
::* Configuration&lt;br /&gt;
::* Création d&#039;un utilisateur&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
=== Conteneur PhpMyadmin : [[Phpma|Voir la page]] ===&lt;br /&gt;
::* Création du conteneur&lt;br /&gt;
::* Installation d&#039;apache2 et de phpmyadmin&lt;br /&gt;
::* Configuration d&#039;apache2 et de phpmyadmin&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Les applis ==&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
=== Conteneur tables : [[Tables|Voir la page]] ===&lt;br /&gt;
&#039;&#039;(Cf tables sur alpine léger &amp;amp; pmb sur alpine léger pour apache2&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Conteneur pmb : [[Pmb|Voir la page]]===&lt;br /&gt;
&#039;&#039;(cf pmb sur alpine léger (historique dans pmb sur alpine lourd)&#039;&#039;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Conteneur wiki : [[Wiki|Voir la page]] ===&lt;br /&gt;
::* Création d&#039;un utilisateur et d&#039;une base de donnée vide pour le wiki&lt;br /&gt;
::* Transfert de la base de données&lt;br /&gt;
::* Création du conteneur&lt;br /&gt;
::* Installation du serveur web&lt;br /&gt;
::* Installation de la nouvelle version de mediawiki&lt;br /&gt;
::* Initialisation de l&#039;application&lt;br /&gt;
::* Modification de LocalSettings.php&lt;br /&gt;
::* Récupération du contenu sur l&#039;ancien serveur et transfert des données&lt;br /&gt;
::* Corrections&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Conteneur wp : [[Wp|Voir la page]] ===&lt;br /&gt;
&#039;&#039;(cf wordpress sur alpine léger mais sauter à la fin. Mariadb et phpmyadmin dans d&#039;autres conteneurs...)&#039;&#039;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Stockage et sauvegardes ==&lt;br /&gt;
création d&#039;un volume pour les sauvegardes :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; lxc storage volume create default sauvegarde-lxc size=50GB&lt;br /&gt;
&lt;br /&gt;
Montage du volume dans chaque conteneur :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; lxc config device add &amp;lt;nom du conteneur&amp;gt; sauvegarde-mount disk source=sauvegarde-lxc pool=default path=/sauvegardes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
logiciel : borg sauvegarde et rétention de données. Comte chez Kiki, à pousser en ssh.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sécurisation ==&lt;br /&gt;
=== Mises à jour automatiques ===&lt;br /&gt;
&lt;br /&gt;
Installer vim-nox (coloration syntaxique).&lt;br /&gt;
&lt;br /&gt;
Au niveau du système hôte, on ajoute le script : &lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
/root/scripts/&#039;&#039;&#039;lxc_auto_update.sh&#039;&#039;&#039; :&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 &lt;br /&gt;
 LOG_FILE=&amp;quot;/var/log/lxc_update.log&amp;quot;&lt;br /&gt;
 MAX_RUNS_TO_KEEP=2&lt;br /&gt;
 RUN_START_MARKER=&amp;quot;--- Début de l&#039;exécution du script ---&amp;quot;&lt;br /&gt;
 RUN_END_MARKER=&amp;quot;--- Fin de l&#039;exécution du script ---&amp;quot;&lt;br /&gt;
 PROXY_CONTAINER=&amp;quot;proxy&amp;quot;&lt;br /&gt;
 WEB_CONTAINERS=(&amp;quot;wp&amp;quot; &amp;quot;pmb&amp;quot; &amp;quot;wiki&amp;quot; &amp;quot;tables&amp;quot;) # Liste de tous les conteneurs web&lt;br /&gt;
 WEB_SERVICE_NAME=&amp;quot;apache2&amp;quot; # Nom du service web à vérifier (adapter si nécessaire)&lt;br /&gt;
 SLEEP_AFTER_RESTART=10 # Délai après le redémarrage des conteneurs web&lt;br /&gt;
 &lt;br /&gt;
 bavarder() {&lt;br /&gt;
   local message=&amp;quot;$1&amp;quot;&lt;br /&gt;
   echo &amp;quot;$(date &#039;+%Y-%m-%d %H:%M:%S&#039;) - $message&amp;quot; &amp;gt;&amp;gt; &amp;quot;$LOG_FILE&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 # Ajouter un marqueur de début d&#039;exécution&lt;br /&gt;
 bavarder &amp;quot;$RUN_START_MARKER&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 # Récupérer la liste des noms de conteneurs Alpine&lt;br /&gt;
 containers=$(lxc list --format csv | tail -n +2 | cut -d&#039;,&#039; -f1)&lt;br /&gt;
 bavarder &amp;quot;Liste des conteneurs récupérée : &#039;$containers&#039;&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 # Séparer les noms de conteneurs en un tableau&lt;br /&gt;
 IFS=$&#039;\n&#039; read -r -d &amp;lt;nowiki&amp;gt;&#039;&#039;&amp;lt;/nowiki&amp;gt; -a container_array &amp;lt;&amp;lt;&amp;lt; &amp;quot;$containers&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 # Boucle pour lancer les mises à jour&lt;br /&gt;
 {&lt;br /&gt;
   for container in &amp;quot;${container_array[@]}&amp;quot;; do&lt;br /&gt;
     bavarder &amp;quot;--- Début du traitement du conteneur : &#039;$container&#039; ---&amp;quot;&lt;br /&gt;
     config=$(lxc config show &amp;quot;$container&amp;quot;)&lt;br /&gt;
     if echo &amp;quot;$config&amp;quot; | grep -iq &amp;quot;alpine&amp;quot;; then&lt;br /&gt;
       bavarder &amp;quot;Le conteneur &#039;$container&#039; semble être basé sur Alpine.&amp;quot;&lt;br /&gt;
       is_running=$(lxc list --format csv | grep &amp;quot;^${container},&amp;quot; | grep &amp;quot;,RUNNING,&amp;quot;)&lt;br /&gt;
       if [ -n &amp;quot;$is_running&amp;quot; ]; then&lt;br /&gt;
         bavarder &amp;quot;Le conteneur &#039;$container&#039; est en cours d&#039;exécution, lancement de la mise à jour...&amp;quot;&lt;br /&gt;
         lxc exec &amp;quot;$container&amp;quot; -- sh -c &amp;quot;apk update &amp;amp;&amp;amp; apk upgrade --available&amp;quot;&lt;br /&gt;
         result=$?&lt;br /&gt;
         if [ &amp;quot;$result&amp;quot; -ne 0 ]; then&lt;br /&gt;
           bavarder &amp;quot;Erreur lors de la mise à jour de &#039;$container&#039;.&amp;quot;&lt;br /&gt;
         fi&lt;br /&gt;
       else&lt;br /&gt;
         bavarder &amp;quot;Le conteneur &#039;$container&#039; n&#039;est pas en cours d&#039;exécution, mise à jour ignorée.&amp;quot;&lt;br /&gt;
       fi&lt;br /&gt;
     else&lt;br /&gt;
       bavarder &amp;quot;Le conteneur &#039;$container&#039; ne semble pas être basé sur Alpine, mise à jour ignorée.&amp;quot;&lt;br /&gt;
     fi&lt;br /&gt;
     bavarder &amp;quot;--- Fin du traitement du conteneur : &#039;$container&#039; ---&amp;quot;&lt;br /&gt;
   done&lt;br /&gt;
 } &amp;gt;&amp;gt; &amp;quot;$LOG_FILE&amp;quot; 2&amp;gt;&amp;amp;1&lt;br /&gt;
 &lt;br /&gt;
 bavarder &amp;quot;Fin de la tentative de mise à jour des conteneurs.&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 # --- Début du redémarrage des conteneurs Alpine (sauf le proxy) ---&lt;br /&gt;
 bavarder &amp;quot;--- Début du redémarrage des conteneurs Alpine (sauf $PROXY_CONTAINER) ---&amp;quot;&lt;br /&gt;
 for container in &amp;quot;${container_array[@]}&amp;quot;; do&lt;br /&gt;
   if [ &amp;quot;$container&amp;quot; != &amp;quot;$PROXY_CONTAINER&amp;quot; ]; then&lt;br /&gt;
     config=$(lxc config show &amp;quot;$container&amp;quot;)&lt;br /&gt;
     if echo &amp;quot;$config&amp;quot; | grep -iq &amp;quot;alpine&amp;quot;; then&lt;br /&gt;
       is_running=$(lxc list --format csv | grep &amp;quot;^${container},&amp;quot; | grep &amp;quot;,RUNNING,&amp;quot;)&lt;br /&gt;
       if [ -n &amp;quot;$is_running&amp;quot; ]; then&lt;br /&gt;
         bavarder &amp;quot;Redémarrage du conteneur &#039;$container&#039;...&amp;quot;&lt;br /&gt;
         lxc restart &amp;quot;$container&amp;quot;&lt;br /&gt;
         sleep &amp;quot;$SLEEP_AFTER_RESTART&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
         # Vérifier l&#039;état du service web pour les conteneurs web&lt;br /&gt;
         is_web_container=0&lt;br /&gt;
         for web_container in &amp;quot;${WEB_CONTAINERS[@]}&amp;quot;; do&lt;br /&gt;
           if [ &amp;quot;$container&amp;quot; == &amp;quot;$web_container&amp;quot; ]; then&lt;br /&gt;
             is_web_container=1&lt;br /&gt;
             break&lt;br /&gt;
           fi&lt;br /&gt;
         done&lt;br /&gt;
 	if [ &amp;quot;$is_web_container&amp;quot; -eq 1 ]; then&lt;br /&gt;
           service_status=$(lxc exec &amp;quot;$container&amp;quot; -- rc-service &amp;quot;$WEB_SERVICE_NAME&amp;quot; status 2&amp;gt;&amp;amp;1)&lt;br /&gt;
           if ! echo &amp;quot;$service_status&amp;quot; | grep -q &amp;quot;started&amp;quot;; then&lt;br /&gt;
             bavarder &amp;quot;$WEB_SERVICE_NAME ne semble pas en cours d&#039;exécution dans &#039;$container&#039;, tentative de démarrage...&amp;quot;&lt;br /&gt;
             lxc exec &amp;quot;$container&amp;quot; -- rc-service &amp;quot;$WEB_SERVICE_NAME&amp;quot; start&lt;br /&gt;
             sleep 5&lt;br /&gt;
             service_status_after_start=$(lxc exec &amp;quot;$container&amp;quot; -- rc-service &amp;quot;$WEB_SERVICE_NAME&amp;quot; status 2&amp;gt;&amp;amp;1)&lt;br /&gt;
             if ! echo &amp;quot;$service_status_after_start&amp;quot; | grep -q &amp;quot;started&amp;quot;; then&lt;br /&gt;
               bavarder &amp;quot;Échec du démarrage de $WEB_SERVICE_NAME dans &#039;$container&#039;.&amp;quot;&lt;br /&gt;
             else&lt;br /&gt;
               bavarder &amp;quot;$WEB_SERVICE_NAME démarré avec succès dans &#039;$container&#039;.&amp;quot;&lt;br /&gt;
             fi&lt;br /&gt;
           else&lt;br /&gt;
             bavarder &amp;quot;$WEB_SERVICE_NAME semble être en cours d&#039;exécution dans &#039;$container&#039;.&amp;quot;&lt;br /&gt;
           fi&lt;br /&gt;
         fi&lt;br /&gt;
       fi&lt;br /&gt;
     fi&lt;br /&gt;
   fi&lt;br /&gt;
 done&lt;br /&gt;
 bavarder &amp;quot;--- Fin du redémarrage des conteneurs Alpine (sauf $PROXY_CONTAINER) ---&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 # --- Redémarrage du conteneur proxy en dernier ---&lt;br /&gt;
 bavarder &amp;quot;--- Début du redémarrage du conteneur proxy ($PROXY_CONTAINER) ---&amp;quot;&lt;br /&gt;
 is_proxy_running=$(lxc list --format csv | grep &amp;quot;^${PROXY_CONTAINER},&amp;quot; | grep &amp;quot;,RUNNING,&amp;quot;)&lt;br /&gt;
 if [ -n &amp;quot;$is_proxy_running&amp;quot; ]; then&lt;br /&gt;
   bavarder &amp;quot;Redémarrage du conteneur proxy &#039;$PROXY_CONTAINER&#039;...&amp;quot;&lt;br /&gt;
   lxc restart &amp;quot;$PROXY_CONTAINER&amp;quot;&lt;br /&gt;
   result=$?&lt;br /&gt;
   if [ &amp;quot;$result&amp;quot; -ne 0 ]; then&lt;br /&gt;
     bavarder &amp;quot;Erreur lors du redémarrage du conteneur proxy &#039;$PROXY_CONTAINER&#039;.&amp;quot;&lt;br /&gt;
   fi&lt;br /&gt;
 else&lt;br /&gt;
   bavarder &amp;quot;Le conteneur proxy &#039;$PROXY_CONTAINER&#039; n&#039;est pas en cours d&#039;exécution, redémarrage ignoré.&amp;quot;&lt;br /&gt;
 fi&lt;br /&gt;
 bavarder &amp;quot;--- Fin du redémarrage du conteneur proxy ($PROXY_CONTAINER) ---&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 # Ajouter un marqueur de fin d&#039;exécution&lt;br /&gt;
 bavarder &amp;quot;$RUN_END_MARKER&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 # --- Gestion de la rotation des logs ---&lt;br /&gt;
 if [ -f &amp;quot;$LOG_FILE&amp;quot; ]; then&lt;br /&gt;
   # Récupérer toutes les occurrences du marqueur de début d&#039;exécution&lt;br /&gt;
   start_markers=$(grep -c &amp;quot;^$RUN_START_MARKER&amp;quot; &amp;quot;$LOG_FILE&amp;quot;)&lt;br /&gt;
 &lt;br /&gt;
   # Calculer le nombre d&#039;exécutions à supprimer&lt;br /&gt;
   runs_to_remove=$((start_markers - MAX_RUNS_TO_KEEP))&lt;br /&gt;
 &lt;br /&gt;
   if [ &amp;quot;$runs_to_remove&amp;quot; -gt 0 ]; then&lt;br /&gt;
     # Utiliser awk pour ne conserver que les N dernières exécutions&lt;br /&gt;
     awk -v n=&amp;quot;$MAX_RUNS_TO_KEEP&amp;quot; -v start_marker=&amp;quot;$RUN_START_MARKER&amp;quot; -v end_marker=&amp;quot;$RUN_END_MARKER&amp;quot; &#039;&lt;br /&gt;
       BEGIN { count = 0; in_run = 0; }&lt;br /&gt;
       $0 ~ start_marker {&lt;br /&gt;
         count++;&lt;br /&gt;
         if (count &amp;gt; (NR - RSTART) + 1 - (n * (RLENGTH ? 1 : 0))) {&lt;br /&gt;
           in_run = 1;&lt;br /&gt;
         } else {&lt;br /&gt;
           in_run = 0;&lt;br /&gt;
           print;&lt;br /&gt;
         }&lt;br /&gt;
       }&lt;br /&gt;
       $0 ~ end_marker {&lt;br /&gt;
         if (!in_run) {&lt;br /&gt;
           print;&lt;br /&gt;
         }&lt;br /&gt;
       }&lt;br /&gt;
       &amp;lt;nowiki&amp;gt;!($0 ~ start_marker) &amp;amp;&amp;amp; !($0 ~ end_marker) {&lt;br /&gt;
          if (!in_run) {&lt;br /&gt;
            print;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      &#039; &amp;quot;$LOG_FILE&amp;quot; &amp;gt; &amp;quot;$LOG_FILE.tmp&amp;quot; &amp;amp;&amp;amp; mv &amp;quot;$LOG_FILE.tmp&amp;quot; &amp;quot;$LOG_FILE&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
  fi&lt;br /&gt;
  &lt;br /&gt;
  #&amp;lt;/nowiki&amp;gt; Définir l&#039;adresse e-mail pour les notifications&lt;br /&gt;
 EMAIL_DESTINATAIRE=&amp;quot;toto@mail.com&amp;quot; # Remplace par ton adresse e-mail&lt;br /&gt;
 &lt;br /&gt;
 # Vérifier s&#039;il y a eu des erreurs et envoyer un e-mail si c&#039;est le cas&lt;br /&gt;
 if grep -q &amp;quot;Erreur&amp;quot; &amp;quot;$LOG_FILE&amp;quot;; then&lt;br /&gt;
   cat &amp;quot;$LOG_FILE&amp;quot; | mail -s &#039;Rapport de mise à jour LXC - Erreurs détectées&#039; &amp;quot;$EMAIL_DESTINATAIRE&amp;quot;&lt;br /&gt;
 fi&lt;br /&gt;
 &lt;br /&gt;
 exit 0&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Envoi des E-mails====&lt;br /&gt;
L&#039;envoi des mails nécessite l&#039;installation de mailutils et ssmtp :&lt;br /&gt;
  apt-get install mailutils ssmtp&lt;br /&gt;
Configuration de ssmtp :&lt;br /&gt;
  vi /etc/ssmtp/ssmtp.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;ssmtp.conf&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
  #&lt;br /&gt;
  # Config file for sSMTP sendmail&lt;br /&gt;
  #&lt;br /&gt;
  # The person who gets all mail for userids &amp;lt; 1000&lt;br /&gt;
  # Make this empty to disable rewriting.&lt;br /&gt;
  root=toto@monmail.fr&lt;br /&gt;
  &lt;br /&gt;
  # The place where the mail goes. The actual machine name is required no &lt;br /&gt;
  # MX records are consulted. Commonly mailhosts are named mail.domain.com&lt;br /&gt;
  mailhub=smtp.gmail.com:587 (pour gmail)&lt;br /&gt;
  &lt;br /&gt;
  # Where will the mail seem to come from?&lt;br /&gt;
  # rewriteDomain=&lt;br /&gt;
 &lt;br /&gt;
  # The full hostname&lt;br /&gt;
  hostname=raspberrypi&lt;br /&gt;
  &lt;br /&gt;
  # Are users allowed to set their own From: address?&lt;br /&gt;
  # YES - Allow the user to specify their own From: address&lt;br /&gt;
  # NO - Use the system generated From: address&lt;br /&gt;
  FromLineOverride=YES&lt;br /&gt;
  UseTLS=YES&lt;br /&gt;
  UseSTARTTLS=YES&lt;br /&gt;
  AuthUser=toto@monfournisseur.com&lt;br /&gt;
  AuthPass=MonMotdePasseDeConnection&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Remarques :&#039;&#039;&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
::*&#039;&#039;Pour gmail, il faut créer un mot de passe d&#039;application dans les paramètre du compte google et l&#039;utiliser ici.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
::*&#039;&#039;Pour que la redirection de mails fonctionne, il faut que l&#039;adresse de destination finale soit différente de l&#039;adresse utilisée pour l&#039;identification pour l&#039;envoi des mails.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
On automatise l&#039;exécution (dimache à 2h du matin) :&lt;br /&gt;
  crontab -e&lt;br /&gt;
  0 2 * * 7 /root/scripts/lxc_auto_update.sh&lt;br /&gt;
&lt;br /&gt;
===Sauvegardes automatiques des données des conteneurs web===&lt;br /&gt;
On va programmer une sauvegarde automatique pour chaque conteneur web, ainsi que pour le conteneur &#039;&#039;&#039;mariadb&#039;&#039;&#039;. Ces sauvegardes se feront dans un espace commun qui sera à son tour sauvegardé sur un site distant à intervalles réguliers en gérant la rotation des sauvegardes.&amp;lt;br&amp;gt;&lt;br /&gt;
Les conteneurs :&lt;br /&gt;
::* mariadb&lt;br /&gt;
::* wiki&lt;br /&gt;
::* pmb&lt;br /&gt;
::* wp&lt;br /&gt;
bénéficieront de ce mécanisme.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour les conteneurs &#039;&#039;&#039;proxy&#039;&#039;&#039;, &#039;&#039;&#039;phpma&#039;&#039;&#039; et &#039;&#039;&#039;tables&#039;&#039;&#039;, une simple sauvegarde à la main suffira.&amp;lt;br&amp;gt;&lt;br /&gt;
On commence par créer un volume de 50Gb et on le monte dans les conteneurs concernés :&lt;br /&gt;
 lxc storage volume create default sauvegarde-lxc size=50GB&lt;br /&gt;
 lxc config device add wp sauvegarde-mount disk source=sauvegarde-lxc pool=default path=/sauvegardes&lt;br /&gt;
 lxc config device add wiki sauvegarde-mount disk source=sauvegarde-lxc pool=default path=/sauvegardes&lt;br /&gt;
 lxc config device add mariadb sauvegarde-mount disk source=sauvegarde-lxc pool=default path=/sauvegardes&lt;br /&gt;
 lxc config device add pmb sauvegarde-mount disk source=sauvegarde-lxc pool=default path=/sauvegardes&lt;br /&gt;
====mariadb====&lt;br /&gt;
:* On commence par créer un utilisateur spécifique à la sauvegarde.&amp;lt;br&amp;gt; Sous phpMyAdmin, création de l&#039;utilisateur &#039;&#039;backup_user&#039;&#039; avec les privilèges &#039;&#039;SELECT&#039;&#039; et &#039;&#039;LOCK TABLES&#039;&#039; pour les tables &#039;&#039;pmb&#039;&#039;, &#039;&#039;wiki&#039;&#039; et &#039;&#039;wordpress&#039;&#039;.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
:* Création du script de sauvegarde des tables&amp;lt;br&amp;gt;On sauvegarde les tables &#039;&#039;pmb&#039;&#039;, &#039;&#039;wordpress&#039;&#039; et &#039;&#039;wiki&#039;&#039; en générant un fichier de log dans /var/log/&#039;&#039;&#039;backup_mariadb.log&#039;&#039;&#039;.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;/usr/local/bin/backup_mariadb.sh&#039;&#039;&#039; :&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 DATE=$(date +%Y%m%d_%H%M)&lt;br /&gt;
 OUTPUT_FILE=&amp;quot;/sauvegardes/db_backup_${DATE}.sql.gz&amp;quot;&lt;br /&gt;
 USER=&amp;quot;backup_user&amp;quot;  &amp;lt;br&amp;gt;PASSWORD=&amp;quot;*********&amp;quot; # &#039;&#039;Mot de passe de backup_user&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 # Liste des bases de données à sauvegarder&lt;br /&gt;
 DATABASES=&amp;quot;pmb wiki wordpress&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 # Exporte chaque base de données et la compresse&lt;br /&gt;
 for DB in $DATABASES; do&lt;br /&gt;
   echo &amp;quot;Sauvegarde de la base de données : $DB&amp;quot;&lt;br /&gt;
   mysqldump -u &amp;quot;$USER&amp;quot; -p&amp;quot;$PASSWORD&amp;quot; &amp;quot;$DB&amp;quot; | gzip &amp;gt;&amp;gt; &amp;quot;$OUTPUT_FILE&amp;quot;&lt;br /&gt;
 done&lt;br /&gt;
 &lt;br /&gt;
 chmod 600 &amp;quot;$OUTPUT_FILE&amp;quot; # Restreindre les permissions&lt;br /&gt;
 echo &amp;quot;Sauvegarde des bases de données terminée : $OUTPUT_FILE&amp;quot; &amp;gt;&amp;gt; /var/log/backup_mariadb.log&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
:* Rendre le script exécutable :&amp;lt;br&amp;gt;&lt;br /&gt;
 chmod +x /usr/local/bin/backup_mariadb.sh&amp;lt;br&amp;gt;&lt;br /&gt;
:* Automatiser le script le samedi à 2h du matin :&amp;lt;br&amp;gt;Avec &#039;&#039;&#039;crontab -e&#039;&#039;&#039;, ajouter la ligne :&lt;br /&gt;
 0 2 * * 6 /usr/local/bin/backup_mariadb.sh&lt;br /&gt;
&lt;br /&gt;
====wiki====&lt;br /&gt;
MediaWiki installe par défaut des extensions et des skins. La sauvegarde de ces extension alourdit considérablement le fichier. Le script parcourt le dossier pour les exclure et ne tenir compte que de celles nouvellement installées.&amp;lt;br&amp;gt;&lt;br /&gt;
Il crée également un fichier de log /var/log/&#039;&#039;&#039;backup_wiki.log&#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
/usr/local/bin/&#039;&#039;&#039;backup_wiki.sh&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 DATE=$(date +%Y%m%d_%H%M)&lt;br /&gt;
 OUTPUT_FILE=&amp;quot;/sauvegardes/wiki_backup_${DATE}.tar.gz&amp;quot;&lt;br /&gt;
 MEDIAWIKI_ROOT=&amp;quot;/var/www/localhost/htdocs/&amp;quot;&lt;br /&gt;
 BASE_EXTENSIONS=&amp;quot;AbuseFilter CategoryTree Cite CiteThisPage CodeEditor ConfirmEdit DiscussionTools Echo Gadgets ImageMap InputBox Interwiki Linter LoginNotify Math MultimediaViewer Nuke OATHAuth PageImages ParserFunctions PdfHandler Poem ReplaceText Scribunto SecureLinkFixer SpamBlacklist SyntaxHighlight_GeSHi TemplateData TextExtracts Thanks TitleBlacklist VisualEditor WikiEditor&amp;quot;&lt;br /&gt;
 FILES_TO_BACKUP=&amp;quot;images&lt;br /&gt;
 LocalSettings.php&lt;br /&gt;
 extensions-custom/&lt;br /&gt;
 skins-custom/&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 echo &amp;quot;--- Début du script ---&amp;quot;&lt;br /&gt;
 echo &amp;quot;Date de la sauvegarde : $DATE&amp;quot;&lt;br /&gt;
 echo &amp;quot;Fichier de sortie : $OUTPUT_FILE&amp;quot;&lt;br /&gt;
 echo &amp;quot;Racine de MediaWiki : $MEDIAWIKI_ROOT&amp;quot;&lt;br /&gt;
 echo &amp;quot;Extensions de base : $BASE_EXTENSIONS&amp;quot;&lt;br /&gt;
 echo &amp;quot;Fichiers de base à sauvegarder : $FILES_TO_BACKUP&amp;quot;&lt;br /&gt;
 echo &amp;quot;---&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 cd &amp;quot;$MEDIAWIKI_ROOT&amp;quot; || { echo &amp;quot;Erreur lors du changement de répertoire vers $MEDIAWIKI_ROOT&amp;quot;; exit 1; }&lt;br /&gt;
 echo &amp;quot;Répertoire courant : $(pwd)&amp;quot;&lt;br /&gt;
 echo &amp;quot;--- Identification des extensions personnalisées ---&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 echo &amp;quot;Création du fichier temporaire /tmp/backup_list.txt&amp;quot;&lt;br /&gt;
 echo &amp;quot;$FILES_TO_BACKUP&amp;quot; &amp;gt; /tmp/backup_list.txt&lt;br /&gt;
 cat /tmp/backup_list.txt | while IFS= read -r LINE; do&lt;br /&gt;
   echo &amp;quot;Ajout de &#039;$LINE&#039; à la liste de sauvegarde.&amp;quot;&lt;br /&gt;
 done&lt;br /&gt;
 echo &amp;quot;---&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 echo &amp;quot;Traitement des extensions dans $MEDIAWIKI_ROOT/extensions/&amp;quot;&lt;br /&gt;
 for EXTENSION_DIR in &amp;quot;$MEDIAWIKI_ROOT&amp;quot;extensions/*; do&lt;br /&gt;
     if [ -d &amp;quot;$EXTENSION_DIR&amp;quot; ]; then&lt;br /&gt;
         EXTENSION_NAME=$(basename &amp;quot;$EXTENSION_DIR&amp;quot;)&lt;br /&gt;
         echo &amp;quot;Extension trouvée : $EXTENSION_NAME \(chemin complet : $EXTENSION_DIR\)&amp;quot;&lt;br /&gt;
         IS_BASE=0&lt;br /&gt;
         for BASE_EXT in $BASE_EXTENSIONS; do&lt;br /&gt;
             if [ &amp;quot;$EXTENSION_NAME&amp;quot; = &amp;quot;$BASE_EXT&amp;quot; ]; then&lt;br /&gt;
                 IS_BASE=1&lt;br /&gt;
                 echo &amp;quot;  &#039;$EXTENSION_NAME&#039; est une extension de base.&amp;quot;&lt;br /&gt;
                 break&lt;br /&gt;
             fi&lt;br /&gt;
         done&lt;br /&gt;
         if [ &amp;quot;$IS_BASE&amp;quot; -eq 0 ]; then&lt;br /&gt;
             echo &amp;quot;  &#039;$EXTENSION_NAME&#039; est une extension personnalisée. Ajout à la liste de sauvegarde.&amp;quot;&lt;br /&gt;
             echo &amp;quot;extensions/$EXTENSION_NAME&amp;quot; &amp;gt;&amp;gt; /tmp/backup_list.txt&lt;br /&gt;
         fi&lt;br /&gt;
     fi&lt;br /&gt;
 done&lt;br /&gt;
 echo &amp;quot;--- Liste de sauvegarde complète ---&amp;quot;&lt;br /&gt;
 cat /tmp/backup_list.txt&lt;br /&gt;
 echo &amp;quot;---&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 echo &amp;quot;Création de l&#039;archive : $OUTPUT_FILE&amp;quot;&lt;br /&gt;
 tar czf &amp;quot;$OUTPUT_FILE&amp;quot; -T /tmp/backup_list.txt --exclude=&#039;./tmp/backup_list.txt&#039;&lt;br /&gt;
 echo &amp;quot;Commande tar exécutée.&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 if [ -f &amp;quot;$OUTPUT_FILE&amp;quot; ]; then&lt;br /&gt;
     chmod 600 &amp;quot;$OUTPUT_FILE&amp;quot;&lt;br /&gt;
     echo &amp;quot;Permissions du fichier de sauvegarde mises à 600.&amp;quot;&lt;br /&gt;
     echo &amp;quot;Sauvegarde des données essentielles et des extensions personnalisées de MediaWiki terminée : $OUTPUT_FILE&amp;quot; &amp;gt;&amp;gt; /var/log/backup_wiki.log&lt;br /&gt;
     echo &amp;quot;--- Fin du script ---&amp;quot;&lt;br /&gt;
 else&lt;br /&gt;
     echo &amp;quot;Erreur : Le fichier de sauvegarde $OUTPUT_FILE n&#039;a pas été créé.&amp;quot;&lt;br /&gt;
     echo &amp;quot;--- Fin du script \(avec erreur\) ---&amp;quot;&lt;br /&gt;
     exit 1&lt;br /&gt;
 fi&lt;br /&gt;
 &lt;br /&gt;
 rm /tmp/backup_list.txt&lt;br /&gt;
 echo &amp;quot;Fichier temporaire /tmp/backup_list.txt supprimé.&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;NB :&#039;&#039;&#039; Les nombreuses lignes &#039;&#039;echo&#039;&#039; ont été ajoutées à des fin de corrections en cours de programmation et peuvent être simplifiées...&lt;br /&gt;
:* Rendre le script exécutable :&amp;lt;br&amp;gt;&lt;br /&gt;
 chmod +x /usr/local/bin/backup_wiki.sh&amp;lt;br&amp;gt;&lt;br /&gt;
:* Automatiser le script le samedi à 3h30 du matin :&amp;lt;br&amp;gt;Avec &#039;&#039;&#039;crontab -e&#039;&#039;&#039;, ajouter la ligne :&lt;br /&gt;
 30  3  *  *  6  /usr/local/bin/backup_wiki.sh&lt;br /&gt;
&lt;br /&gt;
====wp====&lt;br /&gt;
====pmb====&lt;/div&gt;</summary>
		<author><name>Domi</name></author>
	</entry>
</feed>