<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>NPM on Docker Lab</title>
        <link>https://dockerlab.cloud.yannickinformatik.fr/tags/npm/</link>
        <description>Recent content in NPM on Docker Lab</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>fr</language>
        <lastBuildDate>Sun, 26 Jul 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://dockerlab.cloud.yannickinformatik.fr/tags/npm/index.xml" rel="self" type="application/rss+xml" /><item>
            <title>Page de maintenance Web</title>
            <link>https://dockerlab.cloud.yannickinformatik.fr/p/page-de-maintenance-web/</link>
            <pubDate>Sun, 26 Jul 2026 00:00:00 +0000</pubDate>
            <guid>https://dockerlab.cloud.yannickinformatik.fr/p/page-de-maintenance-web/</guid>
            <description>&lt;img src=&#34;https://dockerlab.cloud.yannickinformatik.fr/p/page-de-maintenance-web/mnt.png&#34; alt=&#34;Featured image of post Page de maintenance Web&#34; /&gt;&lt;h2 id=&#34;introduction&#34;&gt;Introduction&#xA;&lt;/h2&gt;&lt;p&gt;Parfois, il est necessaire d&amp;rsquo;arrêter certains services pour effectuer des travaux divers. Nous allons utiliser une image docker basique pour afficher une page de maintenance configurable dans un fichier compose.yaml.&lt;/p&gt;&#xA;&lt;p&gt;Il suffira dans NPM de rediriger votre domaine en maintenance vers cette page le temps de vos travaux.&lt;/p&gt;&#xA;&lt;p&gt;Pour cette installation j’utilise cette image qui est présente ici : &lt;a class=&#34;link&#34; href=&#34;https://github.com/wickerlabs/maintenance&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;Simple maintenance page&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;le-fichier-composeyaml&#34;&gt;Le fichier compose.yaml&#xA;&lt;/h2&gt;&lt;p&gt;Voici le fichier &lt;em&gt;compose.yaml&lt;/em&gt; à deposer dans le répertoire contenant vos piles (par exemple &lt;strong&gt;/opt/docker/projects/&lt;/strong&gt;) ou à coller dans votre interface de gestion (autre que Arcane).&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;services&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;maintenance&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;image&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;wickerlabs/maintenance&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;container_name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;maintenance&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;environment&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;HEADLINE&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Maintenance serveur....&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;TEAM_NAME&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Yannick Informatik&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;TITLE&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Oops!&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;MAIL_ADDRESS&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;contact@yannickinformatik.fr&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;LINK_COLOR&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;#dc8100&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;THEME&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Light&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;PORT&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;8080&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;RESPONSE_CODE&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;503 Service Unavailable&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;MESSAGE&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;16 Juillet 2026 - Travaux en cours : Changement d&amp;#39;architecture et de moteur de blog...&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;CONTACT_LINK&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;contact@yannickinformatik.fr&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;ports&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;m&#34;&gt;8100&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;8080&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Vous devrez adapter ce fichier en personnalisant le message affiché et le code HHTP retourné par le serveur. Vous pouvez aussi ajuster le port d&amp;rsquo;entré (&lt;strong&gt;8100&lt;/strong&gt; chez moi pour éviter les conflits potentiels sur le port 8080).&lt;/p&gt;&#xA;&lt;h2 id=&#34;test-de-la-page-de-maintenance&#34;&gt;Test de la page de maintenance&#xA;&lt;/h2&gt;&lt;p&gt;Sélectionner l&amp;rsquo;hôte proxy à modifier sur NPM et faite le pointer vers le nouvel hôte sur le port 8100.&lt;/p&gt;&#xA;&lt;p&gt;Vous devriez tomber sur cette page :&lt;/p&gt;&#xA;&lt;p&gt;&lt;img alt=&#34;Page de maintenance&#34; class=&#34;gallery-image&#34; data-flex-basis=&#34;562px&#34; data-flex-grow=&#34;234&#34; data-title-escaped=&#34;Page de maintenance&#34; height=&#34;353&#34; loading=&#34;lazy&#34; sizes=&#34;(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px&#34; src=&#34;https://dockerlab.cloud.yannickinformatik.fr/p/page-de-maintenance-web/mnt_01.png&#34; srcset=&#34;https://dockerlab.cloud.yannickinformatik.fr/p/page-de-maintenance-web/mnt_01_hu_ecbdb4ce9cbed2fa.png 800w, https://dockerlab.cloud.yannickinformatik.fr/p/page-de-maintenance-web/mnt_01.png 828w&#34; title=&#34;Page de maintenance&#34; width=&#34;828&#34;&gt;&lt;/p&gt;&#xA;</description>
        </item><item>
            <title>Personnaliser ses logs avec Nginx Proxy Manager</title>
            <link>https://dockerlab.cloud.yannickinformatik.fr/p/personnaliser-ses-logs-avec-nginx-proxy-manager/</link>
            <pubDate>Sun, 26 Jul 2026 00:00:00 +0000</pubDate>
            <guid>https://dockerlab.cloud.yannickinformatik.fr/p/personnaliser-ses-logs-avec-nginx-proxy-manager/</guid>
            <description>&lt;img src=&#34;https://dockerlab.cloud.yannickinformatik.fr/p/personnaliser-ses-logs-avec-nginx-proxy-manager/npm_log.png&#34; alt=&#34;Featured image of post Personnaliser ses logs avec Nginx Proxy Manager&#34; /&gt;&lt;h2 id=&#34;introduction&#34;&gt;Introduction&#xA;&lt;/h2&gt;&lt;p&gt;Bien que NPM utilise Nginx ; il utilise son propre format de log ; ce qui le rend incompatible avec des outils tiers d&amp;rsquo;analyse de logs comme &amp;ldquo;&lt;strong&gt;fail2ban&lt;/strong&gt;&amp;rdquo;&lt;/p&gt;&#xA;&lt;p&gt;La personnalisation du format des logs n&amp;rsquo;est pas possible par l&amp;rsquo;interface de NPM ; il faudra donc les modifiers via un fichier de configuration accesible via un volume monté dans le fichier compose.yaml de NPM (voir &lt;a class=&#34;link&#34; href=&#34;https://dockerlab.cloud.yannickinformatik.fr/p/installation-de-nginx-proxy-manager/&#34; &gt;Installation de Nginx Proxy Manager&lt;/a&gt;)&lt;/p&gt;&#xA;&lt;h2 id=&#34;ajout-dun-template-de-log-alternatif&#34;&gt;Ajout d&amp;rsquo;un template de log alternatif&#xA;&lt;/h2&gt;&lt;p&gt;Le volume monté &amp;ldquo;&lt;strong&gt;/opt/docker/data/npm&lt;/strong&gt;&amp;rdquo; rend accessible les répertoires de configurations de bases de NPM.&lt;/p&gt;&#xA;&lt;p&gt;Nous allons créer un fichier &amp;lsquo;&lt;strong&gt;http_top.conf&lt;/strong&gt;&amp;rsquo; dans le répertoire &amp;ldquo;&lt;strong&gt;nginx/custom&lt;/strong&gt;&amp;rdquo; dont le contenu sera le suivant :&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;log_format nom_log &lt;span class=&#34;s1&#34;&gt;&amp;#39;$remote_addr $remote_user [$time_local] &amp;#34;$request&amp;#34; $status $body_bytes_sent &amp;#34;$http_referer&amp;#34; &amp;#34;$http_user_agent&amp;#34; $host&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Il faudra changer le paramètre &amp;ldquo;&lt;strong&gt;nom_log&lt;/strong&gt;&amp;rdquo; à votre convenance. Le template est au format standard &amp;lsquo;&lt;strong&gt;Nginx&lt;/strong&gt;&amp;rsquo; ; mais je lui rajoute le parametre &amp;lsquo;&lt;strong&gt;$host&lt;/strong&gt;&amp;rsquo; en fin de ligne pour afficher l&amp;rsquo;URL demandée lors d&amp;rsquo;une requête au serveur proxy NPM.&lt;/p&gt;&#xA;&lt;h2 id=&#34;utilisation-du-log-alternatif-dans-vos-hôtes-proxy&#34;&gt;Utilisation du log alternatif dans vos hôtes proxy&#xA;&lt;/h2&gt;&lt;p&gt;Pour chacun de vos hôtes proxy pour laquel vous souhaitez personnalisé les fichiers de log, il faudra allez dans la partie &amp;ldquo;&lt;strong&gt;Configuration Nginx personnalisé&lt;/strong&gt;&amp;rdquo; et y ajouter la ligne suivante  &lt;code&gt;access_log /data/logs/dockerlab.log nom_log;&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img alt=&#34;Personnalisation des logs&#34; class=&#34;gallery-image&#34; data-flex-basis=&#34;287px&#34; data-flex-grow=&#34;119&#34; data-title-escaped=&#34;Personnalisation des logs&#34; height=&#34;457&#34; loading=&#34;lazy&#34; sizes=&#34;(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px&#34; src=&#34;https://dockerlab.cloud.yannickinformatik.fr/p/personnaliser-ses-logs-avec-nginx-proxy-manager/npm_log01.png&#34; title=&#34;Personnalisation des logs&#34; width=&#34;547&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Remarque&lt;/strong&gt; : J&amp;rsquo;ai monté un volume &amp;ldquo;&lt;strong&gt;/data/logs&lt;/strong&gt;&amp;rdquo; pour pouvoir générer mes logs en dehors du container Docker pour qu&amp;rsquo;ils puissent être analyser par dse outils tiers sur mon hôte docker.&lt;/p&gt;&#xA;&lt;p&gt;Il faut relancer votre container npm pour que les modifications soient prise en compte.&lt;/p&gt;&#xA;</description>
        </item><item>
            <title>Installation de Nginx Proxy Manager</title>
            <link>https://dockerlab.cloud.yannickinformatik.fr/p/installation-de-nginx-proxy-manager/</link>
            <pubDate>Thu, 23 Jul 2026 00:00:00 +0000</pubDate>
            <guid>https://dockerlab.cloud.yannickinformatik.fr/p/installation-de-nginx-proxy-manager/</guid>
            <description>&lt;img src=&#34;https://dockerlab.cloud.yannickinformatik.fr/p/installation-de-nginx-proxy-manager/npm.png&#34; alt=&#34;Featured image of post Installation de Nginx Proxy Manager&#34; /&gt;&lt;h2 id=&#34;introduction&#34;&gt;Introduction&#xA;&lt;/h2&gt;&lt;p&gt;NPM (Nginx Proxy Manager) est une image Docker contenant le proxy inverse &lt;strong&gt;&amp;lsquo;Nginx&amp;rsquo;&lt;/strong&gt; et une interface WebUI permettant une configuration simple et convivial du serveur proxy. Il permet entre autres de gérer simplement les cerificats SSL via &lt;em&gt;Let&amp;rsquo;s Encrypt&lt;/em&gt;.&#xA;&lt;br/&gt;&lt;br/&gt;&#xA;Pour cette installation j’utilise l’image officielle qui est présente ici : &lt;a class=&#34;link&#34; href=&#34;https://github.com/NginxProxyManager/nginx-proxy-manager&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;NginxProxyManager&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;le-fichier-composeyaml&#34;&gt;Le fichier compose.yaml&#xA;&lt;/h2&gt;&lt;p&gt;Voici le fichier &lt;em&gt;compose.yaml&lt;/em&gt; à deposer dans le répertoire contenant vos piles (par exemple &lt;strong&gt;/opt/docker/projects/&lt;/strong&gt;) ou à coller dans votre interface de gestion (Arcane, Dockge, Portainer&amp;hellip;).&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;services&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;app&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;image&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;docker.io/jc21/nginx-proxy-manager:latest&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;restart&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;unless-stopped&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;container_name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;npm&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;environment&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;TZ=Europe/Paris    &lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;ports&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;m&#34;&gt;80&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;80&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# Vous pouvez spécifier l&amp;#39;IP de l&amp;#39;Hote ; Par défaut 0.0.0.0&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;m&#34;&gt;81&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;81&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# Port pour l&amp;#39;interface WebUI&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;m&#34;&gt;443&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;443&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;volumes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;/opt/docker/data/npm:/data&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;/opt/docker/data/log:/data/logs  &lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# Pour analyser les logs en dehors du container&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;/opt/docker/data/npm/letsencrypt:/etc/letsencrypt&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Vous devrez adapter ce fichier à votre environnement de travail Docker. J&amp;rsquo;utilise le chemin &lt;strong&gt;/opt/docker/data/mon_container&lt;/strong&gt; pour tous mes containers docker.&#xA;&lt;br/&gt;&lt;br/&gt;&#xA;Le volume &amp;lsquo;&lt;strong&gt;/opt/docker/data/log&lt;/strong&gt;&amp;rsquo; me permet de visualiser et d&amp;rsquo;externalyser les logs produits par NPM pour qu&amp;rsquo;ils puissent être analysés par des outils tiers (&lt;em&gt;fail2ban&lt;/em&gt;, &lt;em&gt;reaction&lt;/em&gt;&amp;hellip; etc).&#xA;&lt;br/&gt;&lt;br/&gt;&#xA;&lt;strong&gt;Remarque&lt;/strong&gt; : Vous pouvez rajouter l&amp;rsquo;adresse IP de votre hôte au niveau des ports pour restreindre l&amp;rsquo;accès à votre seul hôte (exemple : &lt;strong&gt;192.168.x.x:80:80&lt;/strong&gt;).&#xA;&lt;br/&gt;&lt;br/&gt;&#xA;Une fois le fichier créer ; déployer l&amp;rsquo;image soit en ligne de commande : &lt;code&gt;sudo docker compose up -d&lt;/code&gt; ; soit via votre interface de gestion.&#xA;&lt;br/&gt;&lt;br/&gt;&#xA;Vous pouvez maintenant accèder à l&amp;rsquo;interface de NPM : &lt;strong&gt;http://votreip:81&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;configuration&#34;&gt;Configuration&#xA;&lt;/h2&gt;&lt;h3 id=&#34;1er-lancement&#34;&gt;1er Lancement&#xA;&lt;/h3&gt;&lt;p&gt;Il faut dans un premier temps créer un compte Administrateur :&lt;/p&gt;&#xA;&lt;p&gt;&lt;img alt=&#34;création du compte Administrateur&#34; class=&#34;gallery-image&#34; data-flex-basis=&#34;193px&#34; data-flex-grow=&#34;80&#34; data-title-escaped=&#34;Creation du compte Administrateur&#34; height=&#34;678&#34; loading=&#34;lazy&#34; sizes=&#34;(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px&#34; src=&#34;https://dockerlab.cloud.yannickinformatik.fr/p/installation-de-nginx-proxy-manager/npm_01.png&#34; title=&#34;Creation du compte Administrateur&#34; width=&#34;546&#34;&gt;&#xA;&lt;br/&gt;&lt;br/&gt;&#xA;Une fois le compte créé, vous arrivez au niveau du tableau de Bord :&#xA;&lt;br/&gt;&lt;br/&gt;&#xA;&lt;img alt=&#34;Tableau de bord&#34; class=&#34;gallery-image&#34; data-flex-basis=&#34;1102px&#34; data-flex-grow=&#34;459&#34; data-title-escaped=&#34;Tableau de bord&#34; height=&#34;329&#34; loading=&#34;lazy&#34; sizes=&#34;(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px&#34; src=&#34;https://dockerlab.cloud.yannickinformatik.fr/p/installation-de-nginx-proxy-manager/npm_02.png&#34; srcset=&#34;https://dockerlab.cloud.yannickinformatik.fr/p/installation-de-nginx-proxy-manager/npm_02_hu_1d88e1be7ff0fce0.png 800w, https://dockerlab.cloud.yannickinformatik.fr/p/installation-de-nginx-proxy-manager/npm_02.png 1512w&#34; title=&#34;Tableau de bord&#34; width=&#34;1512&#34;&gt;&#xA;&lt;br/&gt;&lt;br/&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;création-dun-certificat&#34;&gt;Création d&amp;rsquo;un certificat&#xA;&lt;/h3&gt;&lt;p&gt;NPM gère la création de certificat via Let&amp;rsquo;s Encrypt. Nous utiliserons comme exemple la méthode via DNS avec l&amp;rsquo;hébergeur OVH.&lt;/p&gt;&#xA;&lt;p&gt;&lt;br/&gt;&lt;br/&gt;&#xA;&lt;img alt=&#34;Création certificat - Etape 1&#34; class=&#34;gallery-image&#34; data-flex-basis=&#34;639px&#34; data-flex-grow=&#34;266&#34; data-title-escaped=&#34;Création certificat - Etape 1&#34; height=&#34;580&#34; loading=&#34;lazy&#34; sizes=&#34;(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px&#34; src=&#34;https://dockerlab.cloud.yannickinformatik.fr/p/installation-de-nginx-proxy-manager/npm_03.png&#34; srcset=&#34;https://dockerlab.cloud.yannickinformatik.fr/p/installation-de-nginx-proxy-manager/npm_03_hu_bf366ec449208580.png 800w, https://dockerlab.cloud.yannickinformatik.fr/p/installation-de-nginx-proxy-manager/npm_03.png 1545w&#34; title=&#34;Création certificat - Etape 1&#34; width=&#34;1545&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;Une fois le choix sélectioné, nous arrivons sur l&amp;rsquo;écran de création du certificat pour votre domaine.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img alt=&#34;Création certificat - Etape 2&#34; class=&#34;gallery-image&#34; data-flex-basis=&#34;160px&#34; data-flex-grow=&#34;66&#34; data-title-escaped=&#34;Création certificat - Etape 2&#34; height=&#34;895&#34; loading=&#34;lazy&#34; sizes=&#34;(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px&#34; src=&#34;https://dockerlab.cloud.yannickinformatik.fr/p/installation-de-nginx-proxy-manager/npm_04.png&#34; title=&#34;Création certificat - Etape 2&#34; width=&#34;598&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;Je choisi mon hébergeur (&lt;em&gt;Provider DNS&lt;/em&gt;) et je choisi mon domaine.&lt;/p&gt;&#xA;&lt;p&gt;Remarque : J&amp;rsquo;utilise ici un wildcard &amp;lsquo;&lt;strong&gt;*&lt;/strong&gt;&amp;rsquo; pour générer un certificat pour tous les sous/sous domaines de mon domaine &amp;lsquo;&lt;strong&gt;subdomain.domain.fr&lt;/strong&gt;&amp;rsquo;. Le wildcard permet de cacher les services derriere le Proxy et seul les personnes connaissants le lien complet (&lt;strong&gt;service.subdomain.domain.fr&lt;/strong&gt; par exemple) pourront traverser le proxy.&lt;/p&gt;&#xA;&lt;p&gt;Chaque hébergeur à sa propre procédure de création de certificat et les informations demandées sur l&amp;rsquo;écran précédant seront différents.&lt;/p&gt;&#xA;&lt;p&gt;Pour OVH, il faut vous connecter et aller à cette adresse : &lt;a class=&#34;link&#34; href=&#34;https://www.ovh.com/auth/api/createToken&#34;  title=&#34;OVH Creation Token&#34;&#xA;     target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;OVH Creation Token&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Vous devez remplir le formulaire tel quel :&lt;/p&gt;&#xA;&lt;p&gt;&lt;img alt=&#34;Création certificat - Etape 3&#34; class=&#34;gallery-image&#34; data-flex-basis=&#34;187px&#34; data-flex-grow=&#34;78&#34; data-title-escaped=&#34;Création certificat - Etape 3&#34; height=&#34;690&#34; loading=&#34;lazy&#34; sizes=&#34;(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px&#34; src=&#34;https://dockerlab.cloud.yannickinformatik.fr/p/installation-de-nginx-proxy-manager/npm_05.png&#34; title=&#34;Création certificat - Etape 3&#34; width=&#34;539&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;Il faut utilisez pour chaque ligne le texte suivant : &lt;code&gt;/domain/zone/*&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;Vous aurez en retour les 3 Tokens nécessaires à remplacer dans l&amp;rsquo;écran plus haut au niveau de la zone &amp;lsquo;&lt;strong&gt;Credentials File Content&lt;/strong&gt;:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Application Key&lt;/li&gt;&#xA;&lt;li&gt;Application Secret&lt;/li&gt;&#xA;&lt;li&gt;Consumer Key&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Une fois cela fait, vous pourrez voir vos certificats au niveau du tableau de bord :&lt;/p&gt;&#xA;&lt;p&gt;&lt;img alt=&#34;Certificats&#34; class=&#34;gallery-image&#34; data-flex-basis=&#34;1008px&#34; data-flex-grow=&#34;420&#34; data-title-escaped=&#34;Certificats&#34; height=&#34;350&#34; loading=&#34;lazy&#34; sizes=&#34;(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px&#34; src=&#34;https://dockerlab.cloud.yannickinformatik.fr/p/installation-de-nginx-proxy-manager/npm_06.png&#34; srcset=&#34;https://dockerlab.cloud.yannickinformatik.fr/p/installation-de-nginx-proxy-manager/npm_06_hu_db2ee283a9b4c869.png 800w, https://dockerlab.cloud.yannickinformatik.fr/p/installation-de-nginx-proxy-manager/npm_06.png 1471w&#34; title=&#34;Certificats&#34; width=&#34;1471&#34;&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;création-dun-hôte-proxy&#34;&gt;Création d&amp;rsquo;un hôte proxy&#xA;&lt;/h3&gt;&lt;p&gt;Le hôte proxy permet d&amp;rsquo;exposer de facon sécurisé votre service interne avec le monde extérieur. Il fait le lien entre une URL externe publique et votre service privé situé derriere votre serveur proxy.&lt;/p&gt;&#xA;&lt;p&gt;Nous allons créér un hôte proxy en prenant comme exmple le nom de domaine &amp;ldquo;&lt;strong&gt;exemple.subdomain.domain.fr&lt;/strong&gt;&amp;rdquo; :&lt;/p&gt;&#xA;&lt;p&gt;&lt;img alt=&#34;Creation Hôte proxy - Etape 1&#34; class=&#34;gallery-image&#34; data-flex-basis=&#34;220px&#34; data-flex-grow=&#34;91&#34; data-title-escaped=&#34;Creation Hôte proxy - Etape 1&#34; height=&#34;688&#34; loading=&#34;lazy&#34; sizes=&#34;(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px&#34; src=&#34;https://dockerlab.cloud.yannickinformatik.fr/p/installation-de-nginx-proxy-manager/npm_07.png&#34; title=&#34;Creation Hôte proxy - Etape 1&#34; width=&#34;631&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;Il vous faudra compléter la zone &amp;lsquo;&lt;em&gt;Forward&lt;/em&gt;&amp;rsquo; de votre formulaire en ajoutant l&amp;rsquo;adresse &lt;strong&gt;IP&lt;/strong&gt; de votres service interne, ainsi que son &lt;strong&gt;port&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Cocher aussi l&amp;rsquo;option &amp;ldquo;&lt;strong&gt;Block Common Exploits&lt;/strong&gt;&amp;rdquo;&lt;/p&gt;&#xA;&lt;p&gt;On passe maintenant à l&amp;rsquo;onglet &amp;lsquo;&lt;strong&gt;SSL&lt;/strong&gt;&amp;rsquo; :&lt;/p&gt;&#xA;&lt;p&gt;&lt;img alt=&#34;Creation Hôte proxy - Etape 2&#34; class=&#34;gallery-image&#34; data-flex-basis=&#34;326px&#34; data-flex-grow=&#34;135&#34; data-title-escaped=&#34;Creation Hôte proxy - Etape 2&#34; height=&#34;429&#34; loading=&#34;lazy&#34; sizes=&#34;(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px&#34; src=&#34;https://dockerlab.cloud.yannickinformatik.fr/p/installation-de-nginx-proxy-manager/npm_08.png&#34; title=&#34;Creation Hôte proxy - Etape 2&#34; width=&#34;583&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;Sélectionner le certificat associé à votre domaine et cocher les 4 options.&lt;/p&gt;&#xA;&lt;p&gt;Une fois la validation du formulaire effectué ; votre service exposé apparaitra dans la liste des Hôtes proxy :&lt;/p&gt;&#xA;&lt;p&gt;&lt;img alt=&#34;Creation Hôte proxy - Etape 3&#34; class=&#34;gallery-image&#34; data-flex-basis=&#34;482px&#34; data-flex-grow=&#34;201&#34; data-title-escaped=&#34;Creation Hôte proxy - Etape 3&#34; height=&#34;729&#34; loading=&#34;lazy&#34; sizes=&#34;(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px&#34; src=&#34;https://dockerlab.cloud.yannickinformatik.fr/p/installation-de-nginx-proxy-manager/npm_09.png&#34; srcset=&#34;https://dockerlab.cloud.yannickinformatik.fr/p/installation-de-nginx-proxy-manager/npm_09_hu_99143e911c341c98.png 800w, https://dockerlab.cloud.yannickinformatik.fr/p/installation-de-nginx-proxy-manager/npm_09.png 1467w&#34; title=&#34;Creation Hôte proxy - Etape 3&#34; width=&#34;1467&#34;&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;pour-aller-plus-loin&#34;&gt;Pour aller plus loin&#xA;&lt;/h3&gt;&lt;p&gt;Nous avons vus l&amp;rsquo;installation et la configuration de bases de NPM. Pour plus de sécurité et de personnalisations, il est nécessaire parfois de passer par l&amp;rsquo;édition manuelle des fichiers de configurations quand cela n&amp;rsquo;est pas possible par l&amp;rsquo;interface graphique (la personnalisation reste possible, mais est fortement limitée).&lt;/p&gt;&#xA;&lt;p&gt;Nous verrons cela dans d&amp;rsquo;autres articles à paraitre sur le blog.&lt;/p&gt;&#xA;</description>
        </item></channel>
</rss>
