<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Tutorial on Jesuisadmin</title><link>https://jesuisadmin.fr/categories/Tutorial/</link><description>Recent content in Tutorial on Jesuisadmin</description><generator>Hugo -- gohugo.io</generator><language>fr-fr</language><lastBuildDate>Wed, 01 May 2019 16:21:00 +0000</lastBuildDate><atom:link href="https://jesuisadmin.fr/categories/Tutorial/index.xml" rel="self" type="application/rss+xml"/><item><title>Installer Rocket.chat sur Ubuntu 18.04 LTS</title><link>https://jesuisadmin.fr/installer-rocket-chat-ubuntu-16-04-lts/</link><pubDate>Wed, 01 May 2019 16:21:00 +0000</pubDate><guid>https://jesuisadmin.fr/installer-rocket-chat-ubuntu-16-04-lts/</guid><description>&lt;img src="https://jesuisadmin.fr/images/2019/05/rocket-chat.jpg" alt="Featured image of post Installer Rocket.chat sur Ubuntu 18.04 LTS" /&gt;&lt;p&gt;Rocket.Chat est une plateforme de chat open-source et particulièrement complète. Vous pouvez aussi bien l’utiliser pour créer une chat-room, avec une gestion des utilisateurs et des permissions, que pour proposer un live chat via un widget sur votre site web.Cette plateforme est d’autant plus intéressante que vous pouvez la déployer en utilisant les “snaps” sur Ubuntu. Ainsi vous n’aurez pas besoin d’installer/configurer NodeJS ou MongoDB.&lt;/p&gt;&#10;&lt;h2 id="installer-rocketchat-avec-un-snap"&gt;Installer Rocket.chat avec un snap&#13;&#10;&lt;/h2&gt;&lt;p&gt;L’installation se fait via une seule ligne de commande :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo snap install rocketchat-server&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Votre instance Rocket.Chat sera alors accessible à l’adresse : &lt;code&gt;http://IP-de-VOTRE-SERVEUR:3000&lt;/code&gt;.&lt;/p&gt;&#10;&lt;h2 id="mettre-en-place-un-reverse-proxy-avec-nginx"&gt;Mettre en place un reverse-proxy avec Nginx&#13;&#10;&lt;/h2&gt;&lt;p&gt;Il est préférable de mettre en place un reverse-proxy pour accéder à l&amp;rsquo;interface de Rocket.Chat via un port standard et d&amp;rsquo;utiliser un certificat SSL pour sécuriser les échanges. Nous allons pour cela installer Nginx et générer un certificat SSL via Let’s Encrypt.&lt;/p&gt;&#10;&lt;p&gt;Commençons par installer Nginx :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;apt update &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; apt install nginx&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;On créer ensuite notre vhost dans /etc/nginx/sites-available/ :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;nano /etc/nginx/sites-available/chat.votredomaine.tld&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Dont voici le contenu :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-nginx" data-lang="nginx"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# redirection http vers https&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;server&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;listen&lt;/span&gt; &lt;span class="mi"&gt;80&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;listen&lt;/span&gt; &lt;span class="s"&gt;[::]:80&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;server_name&lt;/span&gt; &lt;span class="s"&gt;chat.votredomaine.tld&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;301&lt;/span&gt; &lt;span class="s"&gt;https://chat.votredomaine.tld&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Upstream&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;upstream&lt;/span&gt; &lt;span class="s"&gt;backend&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;server&lt;/span&gt; &lt;span class="n"&gt;127.0.0.1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;3000&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# HTTPS Server&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;server&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;server_name&lt;/span&gt; &lt;span class="s"&gt;chat.votredomaine.tld&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;error_log&lt;/span&gt; &lt;span class="s"&gt;/var/log/nginx/rocketchat.access.log&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;location&lt;/span&gt; &lt;span class="s"&gt;/&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;proxy_pass&lt;/span&gt; &lt;span class="s"&gt;http://backend/&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;proxy_http_version&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="s"&gt;.1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;proxy_set_header&lt;/span&gt; &lt;span class="s"&gt;Upgrade&lt;/span&gt; &lt;span class="nv"&gt;$http_upgrade&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;proxy_set_header&lt;/span&gt; &lt;span class="s"&gt;Connection&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;upgrade&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;proxy_set_header&lt;/span&gt; &lt;span class="s"&gt;Host&lt;/span&gt; &lt;span class="nv"&gt;$http_host&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;proxy_set_header&lt;/span&gt; &lt;span class="s"&gt;X-Real-IP&lt;/span&gt; &lt;span class="nv"&gt;$remote_addr&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;proxy_set_header&lt;/span&gt; &lt;span class="s"&gt;X-Forward-For&lt;/span&gt; &lt;span class="nv"&gt;$proxy_add_x_forwarded_for&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;proxy_set_header&lt;/span&gt; &lt;span class="s"&gt;X-Forward-Proto&lt;/span&gt; &lt;span class="s"&gt;http&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;proxy_set_header&lt;/span&gt; &lt;span class="s"&gt;X-Nginx-Proxy&lt;/span&gt; &lt;span class="s"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;proxy_redirect&lt;/span&gt; &lt;span class="no"&gt;off&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;# permet de stocker la configuration ssl dans le répertoire du site&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;include&lt;/span&gt; &lt;span class="s"&gt;/var/www/votredomaine.tld/conf/nginx/*conf&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Pour activer ce vhost, on créer un lien symbolique vers le répertoire &lt;code&gt;/etc/nginx/sites-enabled&lt;/code&gt; avec la commande :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ln -s /etc/nginx/sites-available/chat.votredomaine.tld /etc/nginx/sites-enabled/&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Puis on relance Nginx :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;service nginx reload&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="obtenir-un-certificat-ssl-lets-encrypt-avec-acmesh"&gt;Obtenir un certificat SSL Let&amp;rsquo;s Encrypt avec acme.sh&#13;&#10;&lt;/h3&gt;&lt;p&gt;Il ne nous reste plus qu’à générer le certificat via Let’s Encrypt, on installe donc acme.sh :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;wget -O - https://get.acme.sh &lt;span class="p"&gt;|&lt;/span&gt; sh&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo &lt;span class="nb"&gt;source&lt;/span&gt; ~/.bashrc&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Puis on génère le certificat pour notre sous-domaine.&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;acme.sh --issue -d chat.votredomaine.tld --pre-hook &lt;span class="s2"&gt;&amp;#34;systemctl stop nginx&amp;#34;&lt;/span&gt; --standalone --post-hook &lt;span class="s2"&gt;&amp;#34;systemctl start nginx&amp;#34;&lt;/span&gt; --ecc -k ec-384&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;On créer un répertoire pour stocker notre certificat :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mkdir -p /etc/letsencrypt/live/chat.votredomaine.tld&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Puis on installe le certificat dans ce répertoire :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;acme.sh --install-cert -d chat.votredomaine.tld --ecc &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;--cert-file /etc/letsencrypt/live/chat.votredomaine.tld/cert.pem &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;--key-file /etc/letsencrypt/live/chat.votredomaine.tld/key.pem &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;--fullchain-file /etc/letsencrypt/live/chat.votredomaine.tld/fullchain.pem &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;--ca-file /etc/letsencrypt/live/chat.votredomaine.tld/ca.pem &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;--reloadcmd &lt;span class="s2"&gt;&amp;#34;systemctl restart nginx.service&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;On termine en ajoutant le certificat SSL à notre configuration Nginx, pour cela nous allons créer le fichier &lt;code&gt;/var/www/chat.votredomaine.tld/conf/nginx/ssl.conf&lt;/code&gt; qui sera automatiquement ajouté dans notre vhost grâce à la directive &lt;code&gt;include /var/www/chat.votredomaine.tld/conf/nginx/*conf;&lt;/code&gt;. Voici son contenu:&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-nginx" data-lang="nginx"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;listen&lt;/span&gt; &lt;span class="mi"&gt;443&lt;/span&gt; &lt;span class="s"&gt;ssl&lt;/span&gt; &lt;span class="s"&gt;http2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;listen&lt;/span&gt; &lt;span class="s"&gt;[::]:443&lt;/span&gt; &lt;span class="s"&gt;ssl&lt;/span&gt; &lt;span class="s"&gt;http2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;ssl_certificate&lt;/span&gt; &lt;span class="s"&gt;/etc/letsencrypt/live/chat.votredomaine.tld/fullchain.pem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;ssl_certificate_key&lt;/span&gt; &lt;span class="s"&gt;/etc/letsencrypt/live/chat.votredomaine.tld/key.pem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;ssl_trusted_certificate&lt;/span&gt; &lt;span class="s"&gt;/etc/letsencrypt/live/chat.votredomaine.tld/ca.pem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;La dernière étape pour pouvoir accéder à l&amp;rsquo;instance Rocket.Chat est d&amp;rsquo;appliquer la configuration avec la commande :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;service nginx reload&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Vous pourrez alors accéder à votre instance via l&amp;rsquo;adresse &lt;a class="link" href="https://chat.votredomaine.tld" target="_blank" rel="noopener"&#13;&#10; &gt;https://chat.votredomaine.tld&lt;/a&gt;. Pour accéder au panel d&amp;rsquo;administration de Rocket.chat, il vous faudra créer un premier compte utilisateur qui sera automatiquement définit en tant qu&amp;rsquo;administrateur.&lt;/p&gt;&#10;</description></item><item><title>Mettre en place un VPN Mesh avec tinc sur Debian/Ubuntu</title><link>https://jesuisadmin.fr/mettre-en-place-un-vpn-mesh-avec-tinc/</link><pubDate>Sat, 02 Mar 2019 15:07:54 +0000</pubDate><guid>https://jesuisadmin.fr/mettre-en-place-un-vpn-mesh-avec-tinc/</guid><description>&lt;img src="https://jesuisadmin.fr/images/2018/12/Mettre-en-place-un-VPN-mesh-avec-tinc-sur-Debian_Ubuntu---Raspbian.jpg" alt="Featured image of post Mettre en place un VPN Mesh avec tinc sur Debian/Ubuntu" /&gt;&lt;p&gt;Il peut-être intéressant (ou nécessaire) de mettre en place un VPN pour inter-connecter plusieurs serveurs, principalement pour garantir le chiffrement des échanges entre ces derniers. Si des solutions comme OpenVPN sont très populaires car elles proposent des clients sur toutes les plateformes, elles ne sont pas nécessairement les plus pertinentes lorsqu&amp;rsquo;il s&amp;rsquo;agit de créer un réseau privé entre plusieurs serveurs linux. Pour répondre à ce besoin, il existe heureusement d&amp;rsquo;autres solutions, notamment Tinc, le sujet que nous allons aborder aujourd&amp;rsquo;hui.&lt;/p&gt;&#10;&lt;p&gt;Dans ce tutoriel nous allons voir comment installer la dernière version stable de Tinc et comment créer un réseau privé pour connecter 3 serveurs. Cet exemple est basé sur mon utilisation &lt;del&gt;actuelle&lt;/del&gt; précédente de Tinc, à savoir connecter mon raspberry pi (derrière un NAT) et mon cluster de stockage GlusterFS, réparti sur deux serveurs dédiés. Tinc était alors la solution à deux problématiques :&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;établir une connexion securisée entre les noeuds GlusterFS (j&amp;rsquo;ai préféré mettre en place un VPN à cause des nombreux problèmes rencontrés avec les connexions SSL/TLS et GlusterFS 4.X)&lt;/li&gt;&#10;&lt;li&gt;accéder aux données d&amp;rsquo;un cluster GlusterFS depuis un client derrière un NAT&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;figure&gt;&lt;img src="https://jesuisadmin.fr/images/2019/01/Copie-de-Mettre-en-place-un-VPN-mesh-avec-tinc-sur-Debian_Ubuntu---Raspbian-1.jpg"&gt;&#10;&lt;/figure&gt;&#10;&#10;&lt;p&gt;&lt;strong&gt;Les termes utilisés dans ce tutoriel :&lt;/strong&gt;&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;une instance Tinc = un réseau privé Tinc&lt;/li&gt;&#10;&lt;li&gt;un noeud = un serveur du réseau&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="installer-tinc"&gt;Installer Tinc&#13;&#10;&lt;/h2&gt;&lt;p&gt;La méthode la plus simple pour installer Tinc est d&amp;rsquo;utiliser les dépôts APT d&amp;rsquo;Ubuntu ou de Debian. Cependant les paquets disponibles ne sont pas vraiment à jour. La version actuelle de Tinc est 1.0.35, mais les dépôts Ubuntu ne propose que la version 1.0.33 et ceux de Debian la version 1.0.31.&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;p&gt;Edit du 10/07/2019 : Les mises à jour de sécurité des paquets Debian sont rétro-actives sur les versions précédentes. Il n&amp;rsquo;y a donc pas de danger particulier à utiliser des versions antérieures à 1.0.35 sur Debian.&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;p&gt;Il est donc préférable/recommandé de compiler Tinc depuis les sources, notamment lorsqu&amp;rsquo;on sait que la version 1.0.35 est une release de sécurité suite à la découverte de deux failles qui touchent toutes les versions antérieures (CVE-2018-16737, CVE-2018-16738).&lt;/p&gt;&#10;&lt;p&gt;Ajout du 10/07/2019 : Pour simplifer l&amp;rsquo;installation sur Ubuntu 18.04 LTS, j&amp;rsquo;ai réalisé un backport du paquet tinc 1.0.35 depuis les dépôts d&amp;rsquo;Ubuntu 19.04. Le backport est disponible via le service PPA launchpad : &lt;a class="link" href="https://launchpad.net/~virtubox/&amp;#43;archive/ubuntu/tinc" target="_blank" rel="noopener"&#13;&#10; &gt;https://launchpad.net/~virtubox/+archive/ubuntu/tinc&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;Cette version n&amp;rsquo;est pas vulnérable aux CVE-2018-16737 et CVE-2018-16738.&#10;Pour l&amp;rsquo;installer rien de plus simple :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo add-apt-repository ppa:virtubox/tinc -u -y&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;apt install tinc -t bionic-backports&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="compilation"&gt;Compilation&#13;&#10;&lt;/h3&gt;&lt;p&gt;On commence par installer les dépendances permettant de compiler tinc :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt-get install git libssl-dev zlib1g-dev liblzo2-dev &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;build-essential automake autoconf gettext texinfo -y&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Puis on clone le dépôt Git :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; /usr/local/src&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git clone git://tinc-vpn.org/tinc&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; tinc&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;On réalise la configuration avant de compiler :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;autoreconf -fsi&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;./configure --prefix&lt;span class="o"&gt;=&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Puis on lance la compilation :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# -j définit le nombre de threads utilisés pour la compilation&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# $(nproc) permet d&amp;#39;obtenir le nombre de threads disponibles sur le CPU&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;make -j&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;nproc&lt;span class="k"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Si la compilation se déroule sans erreur, on peut alors installer tinc avec la commande :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo make install&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="ajout-des-services-systemd"&gt;Ajout des services systemd&#13;&#10;&lt;/h3&gt;&lt;p&gt;La dernière étape pour terminer l&amp;rsquo;installation est la création des services systemd permettant d&amp;rsquo;exécuter Tinc et ses instances (réseaux privés) dès le démarrage de la machine.&#10;Il faut en effet créer deux services distincts, le premier permettant de gérer l&amp;rsquo;exécution de Tinc, et le second l&amp;rsquo;exécution des instances Tinc (sous le format tinc@nom_du_reseau).&lt;/p&gt;&#10;&lt;h4 id="le-service-tinc"&gt;Le service tinc&#13;&#10;&lt;/h4&gt;&lt;p&gt;Le fichier à créer est &lt;code&gt;/lib/systemd/system/tinc.service&lt;/code&gt; dont le contenu est le suivant :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-service" data-lang="service"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# This is a mostly empty service, but allows commands like stop, start, reload&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# to propagate to all tinc@ service instances.&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;[Unit]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;Description&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;Tinc VPN&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;After&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;network.target&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;[Service]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;Type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;oneshot&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;RemainAfterExit&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;yes&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;ExecStart&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;/bin/true&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;ExecReload&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;/bin/true&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;WorkingDirectory&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;/etc/tinc&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;[Install]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;WantedBy&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;multi-user.target&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;On peut ensuite activer le service via la commande :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo systemctl &lt;span class="nb"&gt;enable&lt;/span&gt; tinc.service&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id="le-service-pour-les-instances-tinc"&gt;Le service pour les instances tinc@&#13;&#10;&lt;/h4&gt;&lt;p&gt;Le second service qui permet la gestion des instances Tinc est à créer dans &lt;code&gt;/lib/systemd/system/tinc@.service&lt;/code&gt;, voici son contenu :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-service" data-lang="service"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;[Unit]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;Description&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;Tinc net %i&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;PartOf&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;tinc.service&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;ReloadPropagatedFrom&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;tinc.service&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;[Service]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;Type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;simple&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;WorkingDirectory&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;/etc/tinc/%i&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;ExecStart&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;/usr/sbin/tincd -n %i -D&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;ExecReload&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;/usr/sbin/tincd -n %i -kHUP&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;KillMode&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;mixed&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;TimeoutStopSec&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;5&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;Restart&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;always&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;RestartSec&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;60&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;[Install]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;WantedBy&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;tinc.service&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Il permettra par la suite d&amp;rsquo;activer séparément les réseaux privés (instances) Tinc via la commande :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo systemctl &lt;span class="nb"&gt;enable&lt;/span&gt; tinc@nom_du_reseau&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Il n&amp;rsquo;est donc pas nécessaire d&amp;rsquo;utiliser cette commande immédiatement, puisqu&amp;rsquo;il faut tout d&amp;rsquo;abord réaliser la configuration de notre réseau privé.&lt;/p&gt;&#10;&lt;h2 id="configurer-tinc"&gt;Configurer Tinc&#13;&#10;&lt;/h2&gt;&lt;h3 id="la-configuration-dune-instance-tinc"&gt;La configuration d&amp;rsquo;une instance Tinc&#13;&#10;&lt;/h3&gt;&lt;p&gt;L&amp;rsquo;ensemble des fichiers de configuration de Tinc sont à placer dans le répertoire &lt;code&gt;/etc/tinc&lt;/code&gt;, dans lequel la configuration de chaque instance se fera dans un répertoire portant le nom de l&amp;rsquo;instance.&lt;/p&gt;&#10;&lt;p&gt;Quelques informations sur la configuration utilisée pour notre exemple :&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;notre instance/réseau privé se nomme &lt;code&gt;jesuisadmin_reseau&lt;/code&gt;, sa configuration se trouve donc dans le répertoire &lt;code&gt;/etc/tinc/jesuisadmin_reseau&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;nos 3 serveurs se nomment respectivement gfs1, gfs2 et rbpy.&lt;/li&gt;&#10;&lt;li&gt;Nous avons choisi d&amp;rsquo;utiliser la plage d&amp;rsquo;adresses 10.0.0.0/24 pour notre réseau privé Tinc&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Afin vous donner tout de suite une vue d&amp;rsquo;ensemble de la configuration d&amp;rsquo;un réseau privé avec Tinc, voici le répertoire de configuration du réseau jesuisadmin_reseau, une fois toutes les étapes du tutoriel terminées :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;├── jesuisadmin_reseau&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│   ├── hosts&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│   │   ├── gfs1&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│   │   ├── gfs2&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│   │   └── rbpy&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│   ├── rsa_key.priv&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│   ├── tinc-down&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│   ├── tinc-up&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│   └── tinc.conf&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;On y retrouve :&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;tinc.conf&lt;/strong&gt; : fichier de configuration principal qui contient notamment le nom de la machine, l&amp;rsquo;interface réseau à utiliser et le protocole de l&amp;rsquo;instance (ipv4/ipv6).&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;tinc-up&lt;/strong&gt; et &lt;strong&gt;tinc-down&lt;/strong&gt; : les scripts permettant de démarrer et d&amp;rsquo;arrêter l&amp;rsquo;instance Tinc&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;rsa_key.priv&lt;/strong&gt; : la clé privée du serveur&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;répertoire hosts&lt;/strong&gt; : le répertoire qui contient les configurations partagées de chacun des noeuds connectés au réseau privé.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Les étapes pour configurer nos 3 machines vont donc être :&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;Réaliser la configuration initiale de chaque machine&lt;/li&gt;&#10;&lt;li&gt;Générer les clés publiques/privées de chaque machine&lt;/li&gt;&#10;&lt;li&gt;Synchroniser le répertoire hosts entre les machines&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;h3 id="configuration-initiale"&gt;Configuration initiale&#13;&#10;&lt;/h3&gt;&lt;p&gt;&amp;ndash; &lt;strong&gt;À réaliser sur les 3 serveurs&lt;/strong&gt; &amp;ndash;&lt;/p&gt;&#10;&lt;p&gt;On commence donc par créer le répertoire &lt;code&gt;/etc/tinc/jesuisadmin_reseau&lt;/code&gt; :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mkdir -p /etc/tinc/jesuisadmin_reseau&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Puis on créer le fichier de configuration principal tinc.conf dans ce nouveau répertoire :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;nano /etc/tinc/jesuisadmin_reseau/tinc.conf&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Dans lequel nous allons définir la configuration de notre réseau privé, en commençant par &lt;strong&gt;gfs1&lt;/strong&gt; :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Interface réseau à utiliser&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;Interface&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; tun0&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Identifiant de la machine sur le VPN&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;Name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;gfs1&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;AddressFamily&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; ipv4&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;On réalise la même opération sur &lt;strong&gt;gfs2&lt;/strong&gt;, avec une petite différence dans le fichier tinc.conf puisqu&amp;rsquo;on y ajoute la directive &lt;code&gt;ConnectTo&lt;/code&gt; :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Interface réseau à utiliser&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;Interface&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; tun0&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Identifiant de la machine sur le VPN&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;Name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;gfs2&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;AddressFamily&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; ipv4&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# sur le client&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;ConnectTo&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; gfs1&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;On termine par le troisième serveur &lt;strong&gt;rbpy&lt;/strong&gt; dont la configuration sera similaire à gfs2 :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Interface réseau à utiliser&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;Interface&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; tun0&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Identifiant de la machine sur le VPN&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;Name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;rbpy&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;AddressFamily&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; ipv4&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# sur le client&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;ConnectTo&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; gfs2&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="générer-les-clés-publiquesprivées"&gt;Générer les clés publiques/privées&#13;&#10;&lt;/h3&gt;&lt;p&gt;Pour pouvoir initier la connexion entre les différents serveurs, Tinc se base sur un échange de clés cryptographiques, sur le même principe que les clés SSH. Il faut donc créer un répertoire &lt;code&gt;hosts&lt;/code&gt; dans lequel nous allons définir les adresses IP publiques et privées de chacun des serveurs, ainsi que leurs clés publiques.&lt;/p&gt;&#10;&lt;p&gt;On commence donc par créer le répertoire hosts :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mkdir -p /etc/tinc/jesuisadmin_reseau/hosts&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Avant de générer la clé publique et privée d&amp;rsquo;un serveur, en utilisant la commande :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo tincd -n jesuisadmin_reseau -K4096&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;L&amp;rsquo;argument &lt;code&gt;-K4096&lt;/code&gt; définit la taille de la clé RSA à générer. Lors de l&amp;rsquo;exécution de cette commande, vous devriez obtenir deux nouveaux fichiers :&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;la clé privée du serveur &lt;code&gt;/etc/tinc/jesuisadmin_reseau/rsa_key.priv&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;la clé publique du serveur dans le fichier de configuration portant le nom de l&amp;rsquo;hôte : &lt;code&gt;/etc/tinc/jesuisadmin_reseau/hosts/nom_du_serveur&lt;/code&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Dans ce dernier fichier, nous allons devoir ajouter avant la clé publique, l&amp;rsquo;adresse publique et privée de l&amp;rsquo;hôte. Il est également possible d&amp;rsquo;y ajouter d&amp;rsquo;autres paramètres, comme par exemple les ciphers à utiliser pour la connexion.&lt;/p&gt;&#10;&lt;p&gt;Voici un exemple de fichier de configuration pour le serveur gfs1 :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Address = 5.9.XXX.XXX&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Subnet = 10.0.0.1/32&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Cipher=aes-256-cbc&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Digest=sha256&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;-----BEGIN RSA PUBLIC KEY-----&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;MIICCgKCAgEApd4Gf48I1Cnvgb8Hw67yIWmlhoe9yiz80Fr1IF0gjjbDpzsZwkg+&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;6r7KaDIWmVdoSYiOlrutohH0105daS+YyJbTVP6heGYAlStVqMFL/rT2CbZvYEfe&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;F1l/PYtEGrbTRJDQgpwByXbmgvha2DcKBJFcfduH85FnYv7KzZ94vmYBwhZe8ArA&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;f/0XeEpR7fYfIdxN7Z5jS0olkd5mUyrpXVwkmbJ/9q3j5vuVMon9BLDAf1XP4oXn&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ehRPLdh39XswFfF35rrxtLy03a+iPTZuhDBbVl2V/UVcVtyQHUNwTzrOvqBgYfaa&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Q2L8hW6U/bvvOpj2NCN3YIm8cDR2NNScORXVSqm0xpTk+vCjETrOpBGR1z2JEWdT&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;3nPw+a7oAwfgCzSOvRx1MW+w1GqF+iil/ADQXcQa78i0xRIl/xCG0taI5EdUnRAq&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;7R5Y2kDtMt6LUdvOLPGpYFdIP859jTxSXSkkvWeEO7syuvVMdMLfBIGG1zczqQ6+&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;RLKCV+l0JwZpw4YEiJLHlzZQax3J7eBxlsv3gJoEWeuPZaPP/dUcREisqhrXLLT3&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Jiq+aqMolbSzcXvRIGrcNVko4d82SStzpSJwehREhyDrgzOSMhEhTy7m/G3YvcGQ&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;v0F0bnuk1tqf6VUT9+MTBstaRTLEaRsc5RqI26lkCWwfO7c0WHkDLg0CAwEAAQ==&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;-----END RSA PUBLIC KEY-----&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Dans lequel on retrouve les options :&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;Address&lt;/strong&gt; est l&amp;rsquo;IP publique du serveur&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Subnet&lt;/strong&gt; est l&amp;rsquo;IP privée du serveur&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Cipher&lt;/strong&gt; &amp;amp; &lt;strong&gt;Digest&lt;/strong&gt; les paramètres TLS (facultatif)&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="synchroniser-le-répertoire-hosts"&gt;Synchroniser le répertoire hosts&#13;&#10;&lt;/h3&gt;&lt;p&gt;Une fois cette étape réalisée sur chacun des serveur, il faut également procéder à l&amp;rsquo;échange des clés publiques entre les serveurs. Autrement dit, le contenu du répertoire hosts doit être le même sur chaque serveur. Dans notre cas, on doit y retrouver trois fichiers configurations : gfs1, gfs2 et rpby.&lt;/p&gt;&#10;&lt;p&gt;Vous êtes libre d&amp;rsquo;utiliser la méthode de votre choix pour synchroniser le contenu du répertoire hosts entre vos serveurs, voici quelques propositions pour échanger les fichiers de configuration entre les serveur :&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Synchroniser le répertoire avec rsync&lt;/li&gt;&#10;&lt;li&gt;Transférer les fichiers avec scp&lt;/li&gt;&#10;&lt;li&gt;Utiliser un dépôt git pour ajouter chaque serveur&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Une fois de répertoire hosts synchronisé entre les serveurs, il ne reste plus qu&amp;rsquo;à configurer les scripts d&amp;rsquo;initialisation et d&amp;rsquo;arrêt de Tinc.&lt;/p&gt;&#10;&lt;h3 id="configuration-des-exécutables-tinc"&gt;Configuration des exécutables Tinc&#13;&#10;&lt;/h3&gt;&lt;p&gt;La dernière étape avant de pouvoir connecter nos serveurs est la création des scripts exécutables de créer et démarrer/arrêter l&amp;rsquo;interface réseau virtuelle utilisée pour se connecter au réseau privé. Pour cela il faut créer les fichiers tinc-up et tinc-down dans /etc/tinc/jesuisadmin_reseau dont voici le contenu pour gfs1 :&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;tinc-up&lt;/strong&gt;&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#!/bin/sh&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# /etc/tinc/jesuisadmin_reseau/tinc-up&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ip addr add 10.0.0.1/24 dev &lt;span class="nv"&gt;$INTERFACE&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ifconfig &lt;span class="nv"&gt;$INTERFACE&lt;/span&gt; up&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;tinc-down&lt;/strong&gt;&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#!/bin/sh&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# /etc/tinc/jesuisadmin_reseau/tinc-down&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ifconfig &lt;span class="nv"&gt;$INTERFACE&lt;/span&gt; down&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Sur les deux autres serveurs, le contenu des deux scripts sera quasiment le même, puisque l&amp;rsquo;unique différence sera l&amp;rsquo;adresse IP de l&amp;rsquo;interface réseau.&lt;/p&gt;&#10;&lt;p&gt;Une fois les deux fichiers créés sur chacun des serveurs, il ne reste plus qu&amp;rsquo;à les rendre exécutables :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo chmod &lt;span class="m"&gt;755&lt;/span&gt; /etc/tinc/jesuisadmin_reseau/tinc-*&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="démarrer-et-administrer-tinc"&gt;Démarrer et administrer Tinc&#13;&#10;&lt;/h2&gt;&lt;h3 id="vérifier-la-configuration-du-pare-feu"&gt;Vérifier la configuration du pare-feu&#13;&#10;&lt;/h3&gt;&lt;p&gt;Avant d&amp;rsquo;initialiser la connexion entre les serveurs, il est important de faire une vérification : le port utilisé par Tinc est-il ouvert ?&#10;Par défaut, Tinc utilise le port 655, qu&amp;rsquo;il est donc nécessaire d&amp;rsquo;ouvrir préalablement. Si vous utilisez ufw, il vous suffit d&amp;rsquo;utiliser la commande&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ufw allow &lt;span class="m"&gt;655&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Mais vous pouvez également le faire directement via iptables :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;iptables INPUT -p tcp --dport &lt;span class="m"&gt;655&lt;/span&gt; -j ACCEPT&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;iptables INPUT -p udp --dport &lt;span class="m"&gt;655&lt;/span&gt; -j ACCEPT&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="démarrer-et-arrêter-tinc"&gt;Démarrer et arrêter Tinc&#13;&#10;&lt;/h3&gt;&lt;p&gt;Si vous avez réussi à suivre toutes les étapes du tutoriel, vous êtes enfin arrivés**** au bout du tunnel (meilleur jeu de mot de l&amp;rsquo;année) puisque vous allez pouvoir initialiser votre réseau privé depuis votre premier noeud. Cela peut se faire directement via la commande &lt;code&gt;tincd&lt;/code&gt; ou en utilisant un service systemd.&lt;/p&gt;&#10;&lt;h4 id="avec-tincd"&gt;Avec tincd&#13;&#10;&lt;/h4&gt;&lt;p&gt;&lt;strong&gt;démarrer le réseau jesuisadmin_reseau&lt;/strong&gt;&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo tincd -n jesuisadmin_reseau&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Vous pouvez ensuite vérifier avec &lt;code&gt;ifconfig&lt;/code&gt; ou &lt;code&gt;ip addr show&lt;/code&gt; que la création de l&amp;rsquo;interface réseau &lt;code&gt;tun0&lt;/code&gt; s&amp;rsquo;est bien déroulée et que l&amp;rsquo;adresse IP de cette dernière correspond bien à votre configuration. Il ne reste plus qu&amp;rsquo;à tester le ping entre vos machines.&lt;/p&gt;&#10;&lt;p&gt;Un problème de connexion ? Vous pouvez à tout moment arrêter la connexion au réseau tinc avec la commande suivante :&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;arrêter le réseau jesuisadmin_reseau&lt;/strong&gt;&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo tincd -n jesuisadmin_reseau -k&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id="avec-un-service-systemd"&gt;Avec un service systemd&#13;&#10;&lt;/h4&gt;&lt;p&gt;Pour utiliser un service systemd, il faut tout d&amp;rsquo;abord activer le service associé à notre instance Tinc, ce qui se fait via la commande :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo systemctl &lt;span class="nb"&gt;enable&lt;/span&gt; tinc@jesuisadmin_reseau&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;On peut ensuite démarrer le service via la commande :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo service tinc@jesuisadmin_reseau start&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="et-après-"&gt;Et après ?&#13;&#10;&lt;/h2&gt;&lt;p&gt;Une fois la connexion entre les noeuds établie, vous pouvez librement utiliser votre réseau privé pour faire transiter vos données entre les serveurs.&lt;/p&gt;&#10;&lt;p&gt;Il sera peut-être nécessaire d&amp;rsquo;autoriser le trafic depuis le sous-réseau utilisé par Tinc via votre pare-feu. Dans le cas d&amp;rsquo;UFW, cela se fait via la commande :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo ufw allow from 10.0.0.0/24&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Enfin pour un usage derrière un NAT, il vous suffit d&amp;rsquo;ajouter une redirection de port sur votre routeur/box pour pouvoir connecter votre serveur au réseau privé.&lt;/p&gt;&#10;</description></item><item><title>Déployez vos machines virtuelles KVM sur Proxmox VE avec Cloud-Init</title><link>https://jesuisadmin.fr/deployer-des-machines-virtuelles-kvm/</link><pubDate>Tue, 04 Dec 2018 12:48:48 +0000</pubDate><guid>https://jesuisadmin.fr/deployer-des-machines-virtuelles-kvm/</guid><description>&lt;img src="https://jesuisadmin.fr/images/2018/11/D-ployez-vos-machines-virtuelles-KVM-sur-Proxmox-avec-Cloud-Init--1-.png" alt="Featured image of post Déployez vos machines virtuelles KVM sur Proxmox VE avec Cloud-Init" /&gt;&lt;p&gt;Après un &lt;a class="link" href="https://jesuisadmin.fr/configuration-reseau-machine-virtuelle-kvm-proxmox/" target="_blank" rel="noopener"&#13;&#10; &gt;premier article&lt;/a&gt; expliquant comment configurer l&amp;rsquo;interface réseau d&amp;rsquo;une machine virtuelle KVM sur Proxmox VE en utilisant qemu-nbd, il était nécessaire d&amp;rsquo;y ajouter une seconde partie pour détailler l&amp;rsquo;une des nouvelles fonctionnalités de Proxmox : le support de Cloud-Init (depuis la release 5.1). Dans ce tutoriel nous allons voir comment déployer et configurer une machine virtuelle KVM avec Cloud-init.&lt;/p&gt;&#10;&lt;h2 id="quest-ce-que-cloud-init-"&gt;Qu&amp;rsquo;est ce que Cloud-init ?&#13;&#10;&lt;/h2&gt;&lt;p&gt;Commençons par une présentation de Cloud-Init. Il s&amp;rsquo;agit d&amp;rsquo;une application (ou package en anglais) multi-plateforme dont la fonction est de réaliser la configuration initiale des machines virtuelles (ou instances public cloud) déployées depuis des templates.&lt;/p&gt;&#10;&lt;p&gt;Les tâches généralement réalisées par Cloud-Init sont :&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Définir le hostname&lt;/li&gt;&#10;&lt;li&gt;Générer les clés privées SSH&lt;/li&gt;&#10;&lt;li&gt;Configurer les interfaces réseaux&lt;/li&gt;&#10;&lt;li&gt;Définir le mot de passe de l&amp;rsquo;utilisateur&lt;/li&gt;&#10;&lt;li&gt;Ajouter une clé SSH&lt;/li&gt;&#10;&lt;li&gt;Redimensionner le(s) disque(s) (si nécessaire)&lt;/li&gt;&#10;&lt;li&gt;Mettre à jour les paquets via APT&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Dans le cas de Proxmox, Cloud-Init permet de configurer les machines virtuelles KVM aussi facilement que le containers LXC. Il n&amp;rsquo;est plus nécessaire de se connecter via la console NoVNC pour configurer une machine virtuelle.&lt;/p&gt;&#10;&lt;p&gt;Cloud-Init est d&amp;rsquo;autant plus pratique lorsqu&amp;rsquo;il s&amp;rsquo;agit de déployer une machine virtuelle nécessitant une configuration réseau particulière (comme une passerelle par défaut qui n&amp;rsquo;est pas dans le même sous-réseau que la machine virtuelle chez OVH).&lt;/p&gt;&#10;&lt;h2 id="déployer-une-machine-virtuelle-kvm-avec-cloud-init"&gt;Déployer une machine virtuelle KVM avec Cloud-Init&#13;&#10;&lt;/h2&gt;&lt;h3 id="créer-un-template-de-machine-virtuelle"&gt;Créer un template de machine virtuelle&#13;&#10;&lt;/h3&gt;&lt;p&gt;La première étape avant de pouvoir déployer notre première machine virtuelle avec Cloud-Init est la création d&amp;rsquo;un template de VM, qui pourra être cloné pour déployer une nouvelle VM.&lt;/p&gt;&#10;&lt;p&gt;À l&amp;rsquo;heure actuelle, il est déjà possible d&amp;rsquo;ajouter un disque Cloud-Init à une machine virtuelle depuis l&amp;rsquo;interface web de Proxmox, cependant l&amp;rsquo;import d&amp;rsquo;une image disque nécessite toujours l&amp;rsquo;utilisation de la CLI de Proxmox.&lt;/p&gt;&#10;&lt;p&gt;Pour nous faire gagner du temps, Canonical met à disposition des images minimales de machines virtuelles sur le site c&lt;a class="link" href="http://cloud-images.ubuntu.com/" target="_blank" rel="noopener"&#13;&#10; &gt;loud-images.ubuntu.com&lt;/a&gt;. Cloud-Init est préinstallé sur l&amp;rsquo;ensemble de ces images permettant un déploiement automatisé.&lt;/p&gt;&#10;&lt;p&gt;Ubuntu n&amp;rsquo;est pas la seule distribution linux à proposer des images cloud, vous pouvez également télécharger des images &lt;a class="link" href="http://cdimage.debian.org/cdimage/openstack/9.6.0/" target="_blank" rel="noopener"&#13;&#10; &gt;Debian&lt;/a&gt; ou &lt;a class="link" href="https://cloud.centos.org/centos/7/images/" target="_blank" rel="noopener"&#13;&#10; &gt;Centos&lt;/a&gt;.&lt;/p&gt;&#10;&lt;p&gt;Dans notre exemple, nous allons utiliser l&amp;rsquo;image Ubuntu Server 18.04 LTS Bionic.&lt;/p&gt;&#10;&lt;p&gt;Il est tout à fait possible d&amp;rsquo;installer une distribution linux depuis un ISO avant d&amp;rsquo;installer Cloud-Init pour en faire un template. Il est cependant important de noter que le redimensionnement automatique de la partition root n&amp;rsquo;est possible qu&amp;rsquo;en l&amp;rsquo;absence de partition swap (pratique courante sur les instances public cloud)&lt;/p&gt;&#10;&lt;p&gt;On se connecte donc en SSH à notre hôte Proxmox VE, et on commence par télécharger l&amp;rsquo;image Ubuntu Server 18.04 LTS :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;wget -O bionic.img &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;http://cloud-images.ubuntu.com/daily/server/bionic/current/bionic-server-cloudimg-amd64.img&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Pour simplifier l&amp;rsquo;étape suivante, nous allons définir l&amp;rsquo;ID de notre VM Proxmox via une variable. &lt;strong&gt;Notre espace de stockage se nomme ici &lt;code&gt;local&lt;/code&gt;, mais il généralement nommé &lt;code&gt;local-lvm&lt;/code&gt; lorsque Proxmox est installé depuis un ISO.&lt;/strong&gt;&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# on définit l&amp;#39;ID de la VM&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;ID_VM&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;1804&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Créer une VM avec 2GB de RAM + une interface réseau connectée au bridge vmbr0&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;qm create &lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;ID_VM&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; --memory &lt;span class="m"&gt;2048&lt;/span&gt; --net0 virtio,bridge&lt;span class="o"&gt;=&lt;/span&gt;vmbr0&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# on importe l&amp;#39;image de VM précédemment téléchargée&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;qm importdisk &lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;ID_VM&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; bionic.img &lt;span class="nb"&gt;local&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# on associe le nouveau disque virtuel à la machine&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;qm &lt;span class="nb"&gt;set&lt;/span&gt; &lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;ID_VM&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; --scsihw virtio-scsi-pci --scsi0 local:&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;ID_VM&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;/vm-&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;ID_VM&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;-disk-0.raw&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Nous avons ainsi créé notre VM puis importé l&amp;rsquo;image disque téléchargée depuis cloud-images.ubuntu.com. Il ne nous reste plus qu&amp;rsquo;à configurer Cloud-Init. Pour cela nous allons ajouter un lecteur Cloud-Init qui permettra la configuration de la VM depuis Proxmox.&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;# ajouter un disque cloudinit&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; qm &lt;span class="nb"&gt;set&lt;/span&gt; &lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;ID_VM&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; --ide2 local:cloudinit&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;# définir sur quel disque la VM doit booter&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; qm &lt;span class="nb"&gt;set&lt;/span&gt; &lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;ID_VM&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; --boot c --bootdisk scsi0&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;# ajout d&amp;#39;une interface vga connectée au serial&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; qm &lt;span class="nb"&gt;set&lt;/span&gt; &lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;ID_VM&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; --serial0 socket --vga serial0&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Voilà, notre VM est prête, on peut enfin la transformer en template avec la commande :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;# transformer la VM en template&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; qm template &lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;ID_VM&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="configurer-une-vm-avec-cloud-init"&gt;Configurer une VM avec Cloud-Init&#13;&#10;&lt;/h2&gt;&lt;p&gt;La configuration d&amp;rsquo;une VM avec Cloud-Init peut se faire via la CLI de Proxmox ou via l&amp;rsquo;interface web. Dans notre exemple, l&amp;rsquo;ID de notre VM est 158 et son IP est 192.168.0.201.&lt;/p&gt;&#10;&lt;h3 id="configuration-via-linterface-web"&gt;Configuration via l&amp;rsquo;interface web&#13;&#10;&lt;/h3&gt;&lt;p&gt;On commence par cloner notre template afin de créer une nouvelle machine virtuelle. On peut alors se diriger vers l&amp;rsquo;onget &amp;ldquo;Hardware&amp;rdquo; de notre VM pour la redimensionner selon nos besoins (notamment le disque dont la taille est de 2.5Go par défaut) :&lt;/p&gt;&#10;&lt;figure&gt;&lt;img src="https://jesuisadmin.fr/images/2018/12/prox.png"&gt;&#10;&lt;/figure&gt;&#10;&#10;&lt;p&gt;Efin, pour configurer notre VM via l&amp;rsquo;interface web, il suffit d&amp;rsquo;aller dans l&amp;rsquo;onglet &amp;ldquo;Cloud-Init&amp;rdquo; pour accéder à la liste des paramètres disponibles :&lt;/p&gt;&#10;&lt;figure&gt;&lt;img src="https://jesuisadmin.fr/images/2018/11/Screenshot_70.png"&gt;&#10;&lt;/figure&gt;&#10;&#10;&lt;p&gt;Parmi les paramètres disponibles, on retrouve&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;l&amp;rsquo;utilisateur, qui est généralement le nom de la distribution linux choisie, autrement dit &amp;ldquo;ubuntu&amp;rdquo; dans notre cas.&lt;/li&gt;&#10;&lt;li&gt;le mot de passe de l&amp;rsquo;utilisateur&lt;/li&gt;&#10;&lt;li&gt;les paramètres DNS des fichier /etc/hosts et /etc/resolv.conf&lt;/li&gt;&#10;&lt;li&gt;une ou plusieurs clé SSH publiques&lt;/li&gt;&#10;&lt;li&gt;la configuration du l&amp;rsquo;interface réseau&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;On peut lorsqu&amp;rsquo;on a terminé, démarrer notre VM.&lt;/p&gt;&#10;&lt;h3 id="configuration-via-la-cli"&gt;Configuration via la CLI&#13;&#10;&lt;/h3&gt;&lt;p&gt;Via la CLI, la démarche est relativement similaire puisqu&amp;rsquo;on commence par cloner notre template de machine virtuelle :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;qm clone &lt;span class="m"&gt;1000&lt;/span&gt; &lt;span class="m"&gt;158&lt;/span&gt; --name xenial&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Pour redimensionner le disque, il suffit d&amp;rsquo;utiliser :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;qm resize &lt;span class="m"&gt;158&lt;/span&gt; scsi0 10G&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;On peut alors ajouter une clé SSH pour pouvoir se connecter à la machine virtuelle, par exemple la clé publique de notre hôte Proxmox :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;qm &lt;span class="nb"&gt;set&lt;/span&gt; &lt;span class="m"&gt;158&lt;/span&gt; --sshkey ~/.ssh/id_rsa.pub&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Et la dernière étape est la configuration de l&amp;rsquo;interface réseau qui se fait via l&amp;rsquo;argument &lt;code&gt;--ipconfig[x]&lt;/code&gt; où &lt;code&gt;[x]&lt;/code&gt; est le numéro de l&amp;rsquo;interface réseau :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;qm &lt;span class="nb"&gt;set&lt;/span&gt; &lt;span class="m"&gt;158&lt;/span&gt; --ipconfig0 &lt;span class="nv"&gt;ip&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;192.168.0.201/24,gw&lt;span class="o"&gt;=&lt;/span&gt;192.168.0.1&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Une fois la configuration terminée, on peut démarrer notre vm avec la commande :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;qm start &lt;span class="m"&gt;158&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="quelques-informations-complémentaires"&gt;Quelques informations complémentaires&#13;&#10;&lt;/h2&gt;&lt;p&gt;Après quelques mois d&amp;rsquo;utilisation, j&amp;rsquo;ai eu l&amp;rsquo;occasion d&amp;rsquo;utiliser Cloud-Init dans un certain nombre de cas et j&amp;rsquo;ai parfois remarqué des points qu&amp;rsquo;il semble important de souligner.&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;La configuration d&amp;rsquo;IP fail-over chez OVH&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;J&amp;rsquo;ai longtemps cherché la solution pour configurer une IP fail-over OVH sur une VM Ubuntu 18.04 LTS qui utilise netplan pour la configuration de l&amp;rsquo;interface réseau. Je l&amp;rsquo;ai découvert un peu par hasard, et je ne comprends toujours pas pourquoi cette configuration fonctionne.&lt;/p&gt;&#10;&lt;p&gt;Dans mon cas, je définis l&amp;rsquo;IP de la VM dans Cloud-Init, du type 178.XX.XX.XX/32 mais au lieu de définir 54.XX.XX.254 en tant que passerelle (IP de l&amp;rsquo;hôte .254), je définis simplement l&amp;rsquo;IP de la VM en tant que passerelle.&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;La configuration post-déploiement&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;Par défaut Cloud-Init mettra à jour le fichier /etc/hosts, bloquera l&amp;rsquo;accès SSH en tant que root et mettra à jour le hostname de la machine à chaque démarrage de cette dernière.&lt;/p&gt;&#10;&lt;p&gt;Vous pouvez désactiver ces actions en éditant le fichier /etc/cloud/cloud.cfg.&lt;/p&gt;&#10;</description></item><item><title>Release Bell : ne ratez plus aucune publication de release sur Github</title><link>https://jesuisadmin.fr/ne-ratez-release-github-avec-release-bell/</link><pubDate>Wed, 24 Oct 2018 04:42:09 +0000</pubDate><guid>https://jesuisadmin.fr/ne-ratez-release-github-avec-release-bell/</guid><description>&lt;img src="https://jesuisadmin.fr/images/2018/09/release-bell-1.png" alt="Featured image of post Release Bell : ne ratez plus aucune publication de release sur Github" /&gt;&lt;p&gt;Lorsqu&amp;rsquo;on héberge un certain nombre d&amp;rsquo;applications &amp;ldquo;open-source&amp;rdquo;, il &lt;del&gt;est&lt;/del&gt; était parfois difficile de suivre le flux de mises à jour des applications. Il s&amp;rsquo;agit heureusement d&amp;rsquo;une époque révolue, grâce à l&amp;rsquo;application Release Bell developpée par l&amp;rsquo;équipe de &lt;a class="link" href="https://cloudron.io" target="_blank" rel="noopener"&#13;&#10; &gt;cloudron.io&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;Release-Bell est une application qui permet de recevoir une notification lorsqu&amp;rsquo;une nouvelle release est publiée sur Github parmi la liste des dépôts que vous avez &amp;ldquo;étoilé&amp;rdquo;. Elle est disponible via la plateforme de self-hosting cloudron que j&amp;rsquo;ai précédement présenté dans un &lt;a class="link" href="https://jesuisadmin.fr/cloudron-solution-self-hosting-facile/" target="_blank" rel="noopener"&#13;&#10; &gt;article&lt;/a&gt;, mais elle peut également être installée manuellement sur n&amp;rsquo;importe quel serveur linux disposant de Nodejs et d&amp;rsquo;un serveur MySQL.&lt;/p&gt;&#10;&lt;figure&gt;&lt;img src="https://jesuisadmin.fr/images/2018/09/Screenshot_2018-09-16-Release-Bell.png"&gt;&#10;&lt;/figure&gt;&#10;&#10;&lt;p&gt;Les notifications sont envoyées par email, mais il n&amp;rsquo;est absolument pas obligatoire d&amp;rsquo;activer cette fonctionnalité. Dans mon cas, visualiser la liste des dépôts Github qui m&amp;rsquo;intéresse, sous la forme d&amp;rsquo;un flux chronologique suivant la date de publication des releases est largement suffisant.&lt;/p&gt;&#10;&lt;p&gt;Dans ce tutoriel, nous allons voir comment installer l&amp;rsquo;application Release-Bell sur un serveur Debian(8/9) ou Ubuntu (16.04 LTS/18.04 LTS).&lt;/p&gt;&#10;&lt;h2 id="les-prérequis"&gt;Les prérequis&#13;&#10;&lt;/h2&gt;&lt;p&gt;Comme je l&amp;rsquo;ai dis précédemment, pour installer Release-Bell, vous aurez besoin d&amp;rsquo;un reverse-proxy (Nginx dans ce tutoriel), de NodeJS (dont la version LTS actuelle est 8.x) et d&amp;rsquo;un serveur MySQL (ou MariaDB).&lt;/p&gt;&#10;&lt;h4 id="nginx"&gt;Nginx&#13;&#10;&lt;/h4&gt;&lt;p&gt;Pour l&amp;rsquo;installation d&amp;rsquo;Nginx, rien de plus simple, sur Ubuntu ou Debian suffit d&amp;rsquo;utiliser :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt-get update &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; sudo apt-get install nginx -y&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id="nodejs"&gt;NodeJS&#13;&#10;&lt;/h4&gt;&lt;p&gt;Pour NodeJS, c&amp;rsquo;est également relativement simple, puisqu&amp;rsquo;il suffit d&amp;rsquo;utiliser les commandes :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl -sL https://deb.nodesource.com/setup_8.x &lt;span class="p"&gt;|&lt;/span&gt; sudo -E bash&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt-get install -y nodejs&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id="mariadb"&gt;MariaDB&#13;&#10;&lt;/h4&gt;&lt;p&gt;Enfin pour le serveur MySQL (MariaDB server 10.3 dans ce tutoriel) :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# ajout du dépôt APT de MariaDB&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo bash &amp;lt;&lt;span class="o"&gt;(&lt;/span&gt;wget -qO - https://downloads.mariadb.com/MariaDB/mariadb_repo_setup&lt;span class="o"&gt;)&lt;/span&gt; --mariadb-server-version&lt;span class="o"&gt;=&lt;/span&gt;10.3 --skip-maxscale -y&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# installation de MariaDB&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt-get update &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; sudo apt-get install mariadb-server -y&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Je vous recommande de placer les identifiants root du serveur MariaDB dans un fichier .my.cnf placé dans votre home pour pouvoir vous connecter via la commande &lt;code&gt;mysql&lt;/code&gt;, sans avoir à copier/coller le mot de passe à chaque opération. Vous trouverez plus d&amp;rsquo;informations sur le sujet dans cet &lt;a class="link" href="https://kb.virtubox.net/fr/knowledgebase/connecter-mysql-fichier-my-cnf/" target="_blank" rel="noopener"&#13;&#10; &gt;article de la KnowledgeBase de VirtuBox&lt;/a&gt;.&lt;/p&gt;&#10;&lt;p&gt;Il vous faudra créer une base de données avant de commencer l&amp;rsquo;installation de Release-Bell. Pour cela connecter vous en tant que root à votre serveur MariaDB :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mysql&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;puis créez une nouvelle base de données :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-mysql" data-lang="mysql"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;CREATE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;DATABASE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;releasebell&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Ajouter ensuite un utilisateur avec les permissions nécessaires pour utiliser cette base de données :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-mysql" data-lang="mysql"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;GRANT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;ALL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;ON&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;releasebell&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;TO&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;utilisateur_releasebell&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;localhost&amp;#39;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;IDENTIFIED&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;BY&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;motdepasse&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Terminez en flushant les privilèges pour appliquer les modifications&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-mysql" data-lang="mysql"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;FLUSH&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;PRIVILEGES&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Puis quittez l&amp;rsquo;interface en ligne de commande de MySQL :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-mysql" data-lang="mysql"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;EXIT&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="installer-release-bell"&gt;Installer Release-Bell&#13;&#10;&lt;/h2&gt;&lt;p&gt;Certaines étapes de l&amp;rsquo;installation de Release-Bell sont peut-être incomplètes ou différentes de la méthode utilisée par Cloudron. La documentation disponible sur le dépôt de l&amp;rsquo;application étant minimaliste, j&amp;rsquo;ai utilisé les mêmes étapes d&amp;rsquo;installation que d&amp;rsquo;autres applications NodeJS.&lt;/p&gt;&#10;&lt;p&gt;Pour installer Release-Bell, créer un nouvel utilisateur, de préférence sans mot de passe ou login afin d&amp;rsquo;éviter un éventuel accès non désiré via cet utilisateur :&lt;/p&gt;&#10;&lt;h4 id="mise-en-place-de-lapplication-nodejs"&gt;Mise en place de l&amp;rsquo;application NodeJS&#13;&#10;&lt;/h4&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;adduser --disabled-password --disabled-login releasebell&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Puis connecter vous en tant que cet utilisateur :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo su - releasebell&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Créez un répertoire pour héberger l&amp;rsquo;application :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mkdir releasebell&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Puis téléchargez l&amp;rsquo;application avant de extraire de son archive :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl -L https://git.cloudron.io/cloudron/releasebell/-/archive/v1.1.0/releasebell-v1.1.0.tar.gz &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;|&lt;/span&gt; tar zxf - --strip-components &lt;span class="m"&gt;1&lt;/span&gt; -C ./releasebell&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Allez dans le répertoire de l&amp;rsquo;application :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; releasebell&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Et installer des dépendances NodeJS :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;npm install&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id="importation-de-la-structure-de-la-base-de-données"&gt;Importation de la structure de la base de données&#13;&#10;&lt;/h4&gt;&lt;p&gt;Le structure de la base de donnéees de releasebell est stockée dans le dossier &lt;code&gt;migrations&lt;/code&gt; de l&amp;rsquo;application. Pour l&amp;rsquo;importer il suffit donc d&amp;rsquo;utiliser :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mysql -u utilisateur_releasebell -p releasebell &amp;lt; migrations/initial-schema.sql&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="configurer-release-bell"&gt;Configurer Release-Bell&#13;&#10;&lt;/h3&gt;&lt;p&gt;La configuration de l&amp;rsquo;application repose sur deux fichiers, il s&amp;rsquo;agit de database.json utilisé pour la configuration de la base de données MySQL, et users.json pour les identifiants des utilisateurs de l&amp;rsquo;application.&lt;/p&gt;&#10;&lt;p&gt;Il faut tout d&amp;rsquo;abord définir les paramètres d&amp;rsquo;accès à la base de données dans le fichier database.json, qui doit ressembler à l&amp;rsquo;exemple suivant :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;defaultEnv&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;local&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;local&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;host&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;localhost&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;user&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;utilisateur_releasebell&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;password&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;motdepasse&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;database&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;releasebell&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;driver&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;mysql&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;multipleStatements&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;S&amp;rsquo;il n&amp;rsquo;existe pas encore, créez le fichier users.json dont le contenu doit ressembler à l&amp;rsquo;exemple suivant :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;username&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;votre_nom_dutilisateur&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;password&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;motdepasse&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;email&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;test@example.com&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;La configuration de l&amp;rsquo;application est désormais terminée, l&amp;rsquo;application peut-être lancée avec la commande :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;node index.js&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="ajouter-un-service-systemd-pour-release-bell"&gt;Ajouter un service systemd pour Release-Bell&#13;&#10;&lt;/h3&gt;&lt;p&gt;Vous souhaitez peut-être pouvoir utiliser l&amp;rsquo;application sans avoir à laisser un terminal ouvert indéfiniment. Pour cela le plus simple sur Debian/Ubuntu est d&amp;rsquo;ajouter un service systemd pour notre application. On y définira notamment certaines variables nécessaires à la configuration de l&amp;rsquo;application.&lt;/p&gt;&#10;&lt;p&gt;Pour ajouter un service, nous allons créer un ficher .service dans la répertoire &lt;code&gt;/lib/systemd/system/&lt;/code&gt;&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo nano /lib/systemd/system/release_bell.service&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Le contenu de ce ficher de configuration doit ressembler à ceci (il vous faudra l&amp;rsquo;adapter avec vos informations) :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;Unit&lt;span class="o"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;Description&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;ReleaseBell&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;Service&lt;span class="o"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;Type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;simple&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;WorkingDirectory&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/home/utilisateur_releasebell/releasebell&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;User&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;utilisateur_releasebell&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;Environment&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;NODE_ENV=production&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;Environment&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;MAIL_SMTP_SERVER=smtp.example.com&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;Environment&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;MAIL_SMTP_PORT=25&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;Environment&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;MAIL_SMTP_USERNAME=releasebell@example.com&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;Environment&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;MAIL_SMTP_PASSWORD=MotdepasseSMTP&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;Environment&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;MAIL_FROM=releasebell@example.com&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;Environment&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;MAIL_DOMAIN=example.com&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;Environment&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;APP_ORIGIN=example.com&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;ExecStart&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/usr/bin/node index.js&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;Restart&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;always&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;Install&lt;span class="o"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;WantedBy&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;multi-user.target&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Activez le service release_bell avec la commande :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo systemctl &lt;span class="nb"&gt;enable&lt;/span&gt; release_bell.service&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Vous pouvez enfin démarrer le service avec la commande :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo service release_bell start&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="configurer-nginx"&gt;Configurer Nginx&#13;&#10;&lt;/h2&gt;&lt;p&gt;Pour terminer ce tutoriel, voici un exemple de configuration pour utiliser Nginx en tant que reverse-proxy pour notre application :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-nginx" data-lang="nginx"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;server&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;server_name&lt;/span&gt; &lt;span class="s"&gt;release.yourdomain.tld&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s"&gt;access_log&lt;/span&gt; &lt;span class="s"&gt;/var/log/nginx/release.yourdomain.tld.access.log&lt;/span&gt; &lt;span class="s"&gt;rt_cache&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;error_log&lt;/span&gt; &lt;span class="s"&gt;/var/log/nginx/release.yourdomain.tld.error.log&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;location&lt;/span&gt; &lt;span class="s"&gt;/&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;proxy_pass&lt;/span&gt; &lt;span class="s"&gt;http://127.0.0.1:3000&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;proxy_redirect&lt;/span&gt; &lt;span class="no"&gt;off&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;proxy_set_header&lt;/span&gt; &lt;span class="s"&gt;Host&lt;/span&gt; &lt;span class="nv"&gt;$host&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;proxy_set_header&lt;/span&gt; &lt;span class="s"&gt;X-Real-IP&lt;/span&gt; &lt;span class="nv"&gt;$remote_addr&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;proxy_set_header&lt;/span&gt; &lt;span class="s"&gt;X-Forwarded-For&lt;/span&gt; &lt;span class="nv"&gt;$proxy_add_x_forwarded_for&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Je ne vais pas m&amp;rsquo;étendre sur cette partie de la configuration, mais je vous invite à jeter un oeil à mon article &lt;a class="link" href="https://kb.virtubox.net/fr/knowledgebase/installer-un-certificat-ssl-lets-encrypt-avec-acme-sh/" target="_blank" rel="noopener"&#13;&#10; &gt;Installer un certificat SSL Let&amp;rsquo;s Encrypt avec acme.sh&lt;/a&gt; si vous souhaitez générer un certificat SSL pour sécuriser l&amp;rsquo;accès à l&amp;rsquo;application Release-Bell.&lt;/p&gt;&#10;</description></item><item><title>Comment convertir vos images en WebP et les afficher avec Nginx</title><link>https://jesuisadmin.fr/convertir-vos-images-en-webp-nginx/</link><pubDate>Fri, 10 Aug 2018 07:06:32 +0000</pubDate><guid>https://jesuisadmin.fr/convertir-vos-images-en-webp-nginx/</guid><description>&lt;img src="https://jesuisadmin.fr/images/2018/07/WebP-min.png" alt="Featured image of post Comment convertir vos images en WebP et les afficher avec Nginx" /&gt;&lt;p&gt;Dans ce tutoriel, nous allons voir comment convertir vos images en WebP, sans avoir recours à des plugins dans vos CMS, et comment configurer Nginx pour servir automatiquement la version WebP d&amp;rsquo;une image à condition qu&amp;rsquo;elle existe et que le format soit supporté par le navigateur du visiteur.&lt;/p&gt;&#10;&lt;p&gt;WebP est un format d&amp;rsquo;image open-source développé par Google en 2010, basé sur un autre format de fichiers également développé par Google, le VP8.&lt;/p&gt;&#10;&lt;h2 id="le-format-webp-par-rapport-aux-autres-formats"&gt;Le format WebP par rapport aux autres formats&#13;&#10;&lt;/h2&gt;&lt;p&gt;Selon Google, le niveau de compression du format WebP permet d&amp;rsquo;obtenir des images 26% plus légères que le PNG et jusqu&amp;rsquo;à 34% plus légères que le JPG. Il faut savoir que le WebP supporte la transparence (canal alpha), mais également les animations (GIF).&lt;/p&gt;&#10;&lt;p&gt;Cependant, les chiffres annoncés par Google n&amp;rsquo;ont pas convaincu tout le monde. C&amp;rsquo;est notamment le cas de la fondation Mozilla, qui estime que les gains du WebP en compression ne sont pas aussi élevés et qui remet surtout en cause les protocoles de test utilisés par Google pour obtenir ces résultats.&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;Mise à jour du 29/01/2019&lt;/strong&gt; : Mozilla FireFox supporte officiellement les images au format WebP avec la mise à jour publiée aujourd&amp;rsquo;hui (version 65.0). Les seuls navigateurs modernes qui ne supportent pas le format WebP sont Edge et Safari.&lt;/p&gt;&#10;&lt;p&gt;Ce qui nous amène à un point qu&amp;rsquo;il est important de souligner : tous les navigateurs web ne supportent pas le WebP. Ce qui induit qu&amp;rsquo;il est actuellement impossible d&amp;rsquo;utiliser uniquement des images au format WebP sur un site (du moins, pas sans impacter certains visiteurs) et qu&amp;rsquo;il est nécessaire de configurer son serveur web pour servir la version WebP d&amp;rsquo;une image, seulement si le navigateur du visiteur le supporte.&lt;/p&gt;&#10;&lt;h3 id="compatibilité-et-gains"&gt;Compatibilité et gains&#13;&#10;&lt;/h3&gt;&lt;p&gt;On peut alors se poser la question, cela vaut-il le coût de supporter le format WebP pour un site web ? Pour y répondre, il faudrait savoir si la majorité des internautes utilise un navigateur qui supporte le WebP. Il est heureusement assez facile d&amp;rsquo;obtenir la réponse, grâce au site &lt;a class="link" href="https://caniuse.com/#search=webp*" target="_blank" rel="noopener"&#13;&#10; &gt;caniuse.com&lt;/a&gt;, dont voici les résultats :&lt;/p&gt;&#10;&lt;script src="https://cdn.jsdelivr.net/gh/ireade/caniuse-embed/caniuse-embed.min.js"&gt;&lt;/script&gt;&#10;&lt;p class="ciu_embed" data-feature="webp" data-periods="future_1,current,past_1,past_2" data-accessible-colours="false"&gt;&#10; &lt;a href="http://caniuse.com/#feat=webp"&gt;Can I Use webp?&lt;/a&gt; &lt;/p&gt;&#10;&lt;p&gt;En se basant sur les parts de marché de chaque navigateur, le site estime que 73% des internautes utilisent un navigateur qui supporte le WebP. Ce qui semble tout à fait plausible étant donné la popularité du navigateur Google Chrome.&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;Et le niveau compression dans tout ça ? Est ce que le format WebP permet vraiment d&amp;rsquo;obtenir des images plus légères ?&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;D&amp;rsquo;après les tests que j&amp;rsquo;ai réalisé sur mes sites, la réponse est &lt;strong&gt;OUI&lt;/strong&gt;. Qu&amp;rsquo;il s&amp;rsquo;agisse de convertir une image au format JPEG ou au format PNG, la version WebP est plus légère même s&amp;rsquo;il ne s&amp;rsquo;agit parfois que de quelques kilo-octets. Quelques exemples sur les images du blog :&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Image&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Original&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;WebP&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;MariaDB-10.3-1.jpg&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;52Ko&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;32Ko&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;background-869581.png&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;52Ko&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;36Ko&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;cloudflare-origin.png&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;492Ko&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;344Ko&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;library-898333_1920-1.jpg&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;348Ko&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;228Ko&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;La conversion a été effectuée en mode lossless pour les images PNG , avec l&amp;rsquo;argument (-z 9) et avec un indice de qualité de 82 pour les images JPEG, avec l&amp;rsquo;argument (-q 82).&lt;/p&gt;&#10;&lt;h2 id="installer-cwebp-pour-convertir-les-images"&gt;Installer cwebp pour convertir les images&#13;&#10;&lt;/h2&gt;&lt;p&gt;Cwebp est l&amp;rsquo;utilitaire en ligne de commande qui permet de convertir les images au format WebP. Cwebp est inclus dans le paquet webp disponible depuis les dépôts APT ou YUM, mais également dans le paquet libwebp qu&amp;rsquo;il est possible de compiler depuis les sources.&lt;/p&gt;&#10;&lt;h3 id="depuis-les-dépôts-apt-ou-yum"&gt;Depuis les dépôts APT ou YUM&#13;&#10;&lt;/h3&gt;&lt;p&gt;Sous Debian/Ubuntu, vous pouvez installer cwebp avec :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt install webp -y&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Sous Centos 7, vous pouvez installer cwebp avec :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo yum install libwebp-tools -y&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="depuis-les-sources-de-libwebp"&gt;Depuis les sources de libwebp&#13;&#10;&lt;/h3&gt;&lt;p&gt;Si vous souhaitez installer la dernière version du paquet cwebp (actuellement en v1.0.2) plutôt qu&amp;rsquo;utiliser la version disponible sur les dépôts APT et YUM (version 0.6.0 sur Ubuntu 18.04 LTS), vous pouvez télécharger les sources de libwebp depuis &lt;a class="link" href="https://storage.googleapis.com/downloads.webmproject.org/releases/webp/index.html" target="_blank" rel="noopener"&#13;&#10; &gt;le dépôt Google&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;Mise à jour du 17/08/2019 : Je propose désormais un script pour automatiquement compiler la dernière version de libwebp :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl -sL git.io/fjdd6 &lt;span class="p"&gt;|&lt;/span&gt; sudo -E bash&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Le script est disponible sur Github : &lt;a class="link" href="https://github.com/VirtuBox/img-optimize/blob/master/scripts/install-webp.sh" target="_blank" rel="noopener"&#13;&#10; &gt;https://github.com/VirtuBox/img-optimize/blob/master/scripts/install-webp.sh&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;Pour cela, il faut tout d&amp;rsquo;abord installer les pré-requis à la compilation :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt-get install build-essential libjpeg-dev libpng-dev libtiff-dev libgif-dev libwebp-dev -y&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Vous pouvez ensuite télécharger les sources de libwebp et les extraire&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl -sL https://storage.googleapis.com/downloads.webmproject.org/releases/webp/libwebp-1.0.2.tar.gz &lt;span class="p"&gt;|&lt;/span&gt; tar zxf - -C /usr/local/src&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; /usr/local/src/libwebp-*&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Il ne reste plus qu&amp;rsquo;à configurer libwebp avant la compilation et l&amp;rsquo;installation&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;./configure --prefix&lt;span class="o"&gt;=&lt;/span&gt;/usr&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;make -j &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;nproc&lt;span class="k"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo make install&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="vous-pouvez-ensuite-vérifier-si-vous-utilisez-la-version-compilé-de-cwebp-avec-la-commande"&gt;Vous pouvez ensuite vérifier si vous utilisez la version compilé de cwebp avec la commande&#13;&#10;&lt;/h2&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;which cwebp&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Qui vous retournera normalement &lt;code&gt;/usr/local/bin/cwebp&lt;/code&gt;&lt;/p&gt;&#10;&lt;h2 id="la-conversion-des-images-en-webp"&gt;La conversion des images en WebP&#13;&#10;&lt;/h2&gt;&lt;h3 id="convertir-une-image-en-webp-avec-cwebp"&gt;Convertir une image en WebP avec cwebp&#13;&#10;&lt;/h3&gt;&lt;p&gt;La conversion d&amp;rsquo;une image avec cwebp est on ne peut plus simple puisqu&amp;rsquo;il suffit de définir l&amp;rsquo;image à convertir, suivie de l&amp;rsquo;argument &lt;code&gt;-o&lt;/code&gt; permettant de définir le nom du fichier en sortie.&lt;/p&gt;&#10;&lt;p&gt;Exemple :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cwebp monimage.png -o monimage.webp&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Il est ensuite possible de d&amp;rsquo;ajouter des paramètres de conversion en passant par des arguments après la commande &lt;code&gt;cwebp&lt;/code&gt;&lt;/p&gt;&#10;&lt;p&gt;Voici les paramètres principaux à utiliser en arguments avec cwebp :&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;code&gt;-lossless&lt;/code&gt; : pour encoder les images sans pertes (PNG)&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;-q&lt;/code&gt; : Est un indice de qualité, similaire au niveau de qualité des images JPEG.&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;-z&lt;/code&gt; : Est un indice de compression en mode lossless, allant de 0 à 9, où 9 est le niveau le plus haut, cela nécessite un temps de conversion plus long mais permet d&amp;rsquo;obtenir un fichier plus léger en sortie&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;-mt&lt;/code&gt; : utiliser le multi-threading si possible&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Ces paramètres sont très important pour la conversion en WebP, car l&amp;rsquo;utilisation d&amp;rsquo;un argument inadapté au type d&amp;rsquo;image peut rendre le fichier WebP plus lourd que le fichier original.&lt;/p&gt;&#10;&lt;p&gt;Pour les images JPEG, il faut privilégier l&amp;rsquo;usage de l&amp;rsquo;indice de qualité &lt;code&gt;-q&lt;/code&gt;.&#10;Pour les images PNG, le plus simple est d&amp;rsquo;utiliser &lt;code&gt;-z&lt;/code&gt; pour définir le niveau de compression en mode lossless.&lt;/p&gt;&#10;&lt;p&gt;La liste complète des options est disponible sur le site &lt;a class="link" href="https://developers.google.com/speed/webp/docs/cwebp#options" target="_blank" rel="noopener"&#13;&#10; &gt;developers.google.com&lt;/a&gt;.&lt;/p&gt;&#10;&lt;h3 id="convertir-toutes-les-images-de-votre-site-en-webp"&gt;Convertir toutes les images de votre site en WebP&#13;&#10;&lt;/h3&gt;&lt;p&gt;Après avoir vu comment convertir une image au format WebP en utilisant cwebp, nous allons aller un peu plus loin en appliquant cette méthode pour convertir toutes les images d&amp;rsquo;un site web.&lt;/p&gt;&#10;&lt;p&gt;Pour cela, il nous faut tout d&amp;rsquo;abord lister les images au format JPEG et PNG présentes dans le répertoire images de notre site, avant de les convertir au format WebP. L&amp;rsquo;objectif du tutoriel étant de pouvoir servir les images WebP avec Nginx, il est important de définir la structure que nous allons utiliser pour nommer les images WebP par rapport à la version originale de l&amp;rsquo;image.&lt;/p&gt;&#10;&lt;p&gt;Voici la structure que nous allons utiliser pour nommer les fichiers WebP :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# une image png&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;monimage.png -&amp;gt; monimage.png.webp&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# une image jpg&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;monimage.jpg -&amp;gt; monimage.jpg.webp&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Pourquoi nommer les images converties ainsi ?&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;Car cette structure va nous permettre d&amp;rsquo;utiliser la directive Nginx &lt;code&gt;try_files&lt;/code&gt;. Ainsi Nginx pourra vérifier l&amp;rsquo;existence du fichier WebP par rapport à l&amp;rsquo;image originale.&lt;/p&gt;&#10;&lt;h4 id="lister-les-images-png--jpg-dans-un-répertoire"&gt;Lister les images PNG &amp;amp; JPG dans un répertoire&#13;&#10;&lt;/h4&gt;&lt;p&gt;Pour obtenir récursivement, la liste des images PNG et JPG présentes dans un répertoire, nous allons utiliser la commande &lt;code&gt;find&lt;/code&gt;. Petite particularité pour les images au format JPEG, l&amp;rsquo;extension du fichier peut-être &lt;code&gt;.jpg&lt;/code&gt; ou &lt;code&gt;.jpeg&lt;/code&gt;.&lt;/p&gt;&#10;&lt;p&gt;On se rend dans le répertoire qui contient les images&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; /votre/répertoire/images&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;lister les images JPEG&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;find . -type f &lt;span class="se"&gt;\(&lt;/span&gt; -iname &lt;span class="s2"&gt;&amp;#34;*.jpg&amp;#34;&lt;/span&gt; -o -iname &lt;span class="s2"&gt;&amp;#34;*.jpeg&amp;#34;&lt;/span&gt; &lt;span class="se"&gt;\)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;lister les images PNG&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;find . -type f -iname &lt;span class="s1"&gt;&amp;#39;*.png&amp;#39;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id="convertir-les-images-en-webp-conditionnellement"&gt;Convertir les images en WebP conditionnellement&#13;&#10;&lt;/h4&gt;&lt;p&gt;Maintenant que nous sommes capables de lister les images PNG et JPG dans un répertoire, nous souhaitons pouvoir les convertir en WebP. Cependant nous ne voulons pas convertir une seconde fois des images déjà converties en WebP.&lt;/p&gt;&#10;&lt;p&gt;Nous allons donc procéder en deux étapes :&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;lister les images PNG &amp;amp; JPG&lt;/li&gt;&#10;&lt;li&gt;si la version WebP des images n&amp;rsquo;existe pas, les convertir en WebP&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;Ce qui nous donne :&lt;/p&gt;&#10;&lt;p&gt;Convertir les images PNG&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;find . -type f -iname &lt;span class="s2"&gt;&amp;#34;*.png&amp;#34;&lt;/span&gt; -print0 &lt;span class="p"&gt;|&lt;/span&gt; xargs -0 -I &lt;span class="o"&gt;{}&lt;/span&gt; &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;bash -c &lt;span class="s1"&gt;&amp;#39;[ ! -f &amp;#34;{}.webp&amp;#34; ] &amp;amp;&amp;amp; { cwebp -z 9 -mt {} -o {}.webp; }&amp;#39;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;convertir les images JPG&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;find . -type f &lt;span class="se"&gt;\(&lt;/span&gt; -iname &lt;span class="s2"&gt;&amp;#34;*.jpg&amp;#34;&lt;/span&gt; -o -iname &lt;span class="s2"&gt;&amp;#34;*.jpeg&amp;#34;&lt;/span&gt; &lt;span class="se"&gt;\)&lt;/span&gt; -print0 &lt;span class="p"&gt;|&lt;/span&gt; xargs -0 -I &lt;span class="o"&gt;{}&lt;/span&gt; &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;bash -c &lt;span class="s1"&gt;&amp;#39;[ ! -f &amp;#34;{}.webp&amp;#34; ] &amp;amp;&amp;amp; { cwebp -q 82 -mt {} -o {}.webp; }&amp;#39;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Détaillons un peu notre exemple :&lt;/p&gt;&#10;&lt;p&gt;On utilise tout d&amp;rsquo;abord &lt;code&gt;find&lt;/code&gt; pour obtenir la liste des images PNG ou JPG dans un répertoire, suivi de l&amp;rsquo;argument &lt;code&gt;-print0&lt;/code&gt; qui permet de transmettre le nom des fichiers à &lt;code&gt;xargs&lt;/code&gt; même s&amp;rsquo;ils contiennent des caractères spéciaux&lt;/p&gt;&#10;&lt;p&gt;On utilise ensuite un pipe &lt;code&gt;|&lt;/code&gt; pour connecter cette première commande et récupérer sa sortie standard avec &lt;code&gt;xargs&lt;/code&gt;.&lt;/p&gt;&#10;&lt;p&gt;Grâce à &lt;code&gt;xargs -0&lt;/code&gt; nous sommes capables de récupérer les résultats obtenu avec &lt;code&gt;find&lt;/code&gt; et de les passer en tant qu&amp;rsquo;argument à la seconde partie de la commande.&lt;/p&gt;&#10;&lt;p&gt;Enfin on utilise &lt;code&gt;bash -c&lt;/code&gt; pour invoquer un shell et traiter notre conversion conditionnelle en WebP. Si vous souhaitez en savoir plus, je vous conseille de lire &lt;a class="link" href="https://en.wikipedia.org/wiki/Xargs" target="_blank" rel="noopener"&#13;&#10; &gt;l&amp;rsquo;article de Wikipédia sur xargs&lt;/a&gt;.&lt;/p&gt;&#10;&lt;p&gt;Dans le shell invoqué, on créer la condition &amp;ldquo;si le fichier monimage.jpg.webp n&amp;rsquo;existe pas, alors utiliser cwebp&amp;rdquo; :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt; ! -f &lt;span class="s2"&gt;&amp;#34;{}.webp&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt; cwebp -q &lt;span class="m"&gt;82&lt;/span&gt; -mt &lt;span class="o"&gt;{}&lt;/span&gt; -o &lt;span class="o"&gt;{}&lt;/span&gt;.webp&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="o"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="img-optimize---un-script-pour-optimiser-et-convertir-vos-images-en-webp"&gt;Img-optimize - Un Script pour optimiser et convertir vos images en Webp&#13;&#10;&lt;/h2&gt;&lt;p&gt;Malgré que la conversion des images en WebP ne soit pas réellement difficile avec &lt;code&gt;cwebp&lt;/code&gt;, j&amp;rsquo;ai publié &lt;a class="link" href="https://virtubox.github.io/img-optimize/" target="_blank" rel="noopener"&#13;&#10; &gt;img-optimize&lt;/a&gt; sur Github, un script bash qui permet de réaliser la conversion de vos images en WebP mais également l&amp;rsquo;optimisation des images au format JPG et PNG, en ajoutant simplement le répertoire qui contient les images en argument.&lt;/p&gt;&#10;&lt;p&gt;Pour utiliser le script il vous suffit de clone le dépot :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git clone https://github.com/VirtuBox/img-optimize.git &lt;span class="nv"&gt;$HOME&lt;/span&gt;/.img-optimize&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Puis d&amp;rsquo;ajouter un alias via le fichier .bashrc&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;alias img-optimize=&lt;/span&gt;&lt;span class="nv"&gt;$HOME&lt;/span&gt;&lt;span class="s2"&gt;/.img-optimize/optimize.sh&amp;#34;&lt;/span&gt; &amp;gt;&amp;gt; &lt;span class="nv"&gt;$HOME&lt;/span&gt;/.bashrc&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;source&lt;/span&gt; &lt;span class="nv"&gt;$HOME&lt;/span&gt;/.bashrc&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Vous pouvez ensuite optimiser et convertir les images présentes dans un répertoire avec :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;img-optimize /dossier/des/images&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Le script supporte également les arguments suivants :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Bash script to optimize your images and convert them in WebP&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Usage: img-optimize &lt;span class="o"&gt;[&lt;/span&gt;options&lt;span class="o"&gt;]&lt;/span&gt; &amp;lt;images path&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;If images path isn&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;t defined, img-optimize will use the current directory&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Options:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --jpg &amp;lt;images path&amp;gt; ..... optimize all jpg images&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --png &amp;lt;images path&amp;gt; ..... optimize all png images&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --webp &amp;lt;images path&amp;gt; ..... convert all images in webp&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --nowebp &amp;lt;images path&amp;gt; ..... optimize all png &lt;span class="p"&gt;&amp;amp;&lt;/span&gt; jpg images&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --all &amp;lt;images path&amp;gt; ..... optimize all images &lt;span class="o"&gt;(&lt;/span&gt;png + jpg + webp&lt;span class="o"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -i, --interactive ..... run img-optimize in interactive mode&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -q, --quiet ..... run image optimization quietly&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Other options :&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -h, --help, &lt;span class="nb"&gt;help&lt;/span&gt; ... displays this &lt;span class="nb"&gt;help&lt;/span&gt; information&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Examples:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; optimize all jpg images in /var/www/images&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; img-optimize --jpg /var/www/images&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="afficher-les-images-webp-avec-nginx"&gt;Afficher les images WebP avec Nginx&#13;&#10;&lt;/h2&gt;&lt;p&gt;Il nous faut ensuite configurer Nginx pour afficher les images en WebP, mais avec plusieurs conditions :&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;Il faut que la navigateur du visiteur supporte le format WebP&lt;/li&gt;&#10;&lt;li&gt;Il faut que la version WebP de l&amp;rsquo;image existe&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;h3 id="détecter-si-un-navigateur-supporte-le-format-webp"&gt;Détecter si un navigateur supporte le format WebP&#13;&#10;&lt;/h3&gt;&lt;p&gt;Pour la première condition, il est assez facile de détecter si un navigateur supporte le WebP avec Nginx, puisque cette informations est transmise par la navigateur via les &amp;ldquo;Requests Headers&amp;rdquo;.&#10;Sur un navigateur compatible comme Google Chrome, on y retrouve la ligne :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Où l&amp;rsquo;on retrouve bien &lt;code&gt;image/webp&lt;/code&gt;. Contrairement à un navigateur comme Firefox qui ne supporte pas le format WebP :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Accept : text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="définir-lextension-à-utiliser-avec-la-directive-map"&gt;Définir l&amp;rsquo;extension à utiliser avec la directive map&#13;&#10;&lt;/h3&gt;&lt;p&gt;La directive &lt;code&gt;map&lt;/code&gt; de Nginx est particulièrement intéressante, puisqu&amp;rsquo;elle permet d&amp;rsquo;associer des valeurs à plusieurs variables, sans avoir recours au &lt;code&gt;if&lt;/code&gt;.&lt;/p&gt;&#10;&lt;p&gt;Dans notre cas, nous allons associer la variable &lt;code&gt;$http_accept&lt;/code&gt; qui fait partie des &amp;ldquo;Requests Headers&amp;rdquo; avec l&amp;rsquo;extension de nos images, variable que j&amp;rsquo;ai nommé &lt;code&gt;$webp_suffix&lt;/code&gt;.&#10;Nous allons créer un fichier webp.conf dans &lt;code&gt;/etc/nginx/conf.d&lt;/code&gt; dans lequel nous allons placer notre directive map :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-nginx" data-lang="nginx"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;map&lt;/span&gt; &lt;span class="nv"&gt;$http_accept&lt;/span&gt; &lt;span class="nv"&gt;$webp_suffix&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;default&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;&amp;#34;~*webp&amp;#34;&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;.webp&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;On définit ici la valeur de la variable &lt;code&gt;$webp_suffix&lt;/code&gt; en fonction du contenu de la variable &lt;code&gt;$http_accept&lt;/code&gt;. Par défault, &lt;code&gt;$webp_suffix&lt;/code&gt; est nulle, mais lorsque &lt;code&gt;$http_accept&lt;/code&gt; contient le mot &amp;ldquo;webp&amp;rdquo;, alors $webp_suffix est égale à &amp;ldquo;.webp&amp;rdquo;.&lt;/p&gt;&#10;&lt;h3 id="servir-sous-conditions-les-versions-webp-des-images"&gt;Servir sous conditions les versions WebP des images&#13;&#10;&lt;/h3&gt;&lt;p&gt;Pour servir une image au format WebP, les deux conditions sont :&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;que le navigateur accepte les format WebP&lt;/li&gt;&#10;&lt;li&gt;que la version WebP de l&amp;rsquo;image existe&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Pour cela nous allons utiliser notre variable &lt;code&gt;$webp_suffix&lt;/code&gt; associée à la directive &lt;code&gt;try_files&lt;/code&gt; qui permet à Nginx de vérifier si un fichier existe.&lt;/p&gt;&#10;&lt;p&gt;On commence donc par créer un bloc location pour sélectionner les images PNG &amp;amp; JPG :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-nginx" data-lang="nginx"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;location&lt;/span&gt; &lt;span class="p"&gt;~&lt;/span&gt; &lt;span class="sr"&gt;\.(png|jpe?g)$&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Dans ce bloc, nous allons ajouter plusieurs directives :&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;code&gt;add_header Vary &amp;quot;Accept-Encoding&amp;quot;;&lt;/code&gt; : permet d&amp;rsquo;annoncer qu&amp;rsquo;il peut exister plusieurs versions du même fichier selon les Requests Headers transmis.&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;add_header &amp;quot;Access-Control-Allow-Origin&amp;quot; &amp;quot;*&amp;quot;;&lt;/code&gt; : active les Cross-Origin Resource Sharing (CORS)&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt; try_files $uri$webp_suffix $uri =404;&lt;/code&gt; : demande à Nginx d&amp;rsquo;essayer l&amp;rsquo;url de l&amp;rsquo;image suivi de notre variable $webp_suffix, et de vérifier que le fichier existe bien.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;On obtient alors :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-nginx" data-lang="nginx"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;location&lt;/span&gt; &lt;span class="p"&gt;~&lt;/span&gt; &lt;span class="sr"&gt;\.(png|jpe?g)$&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;add_header&lt;/span&gt; &lt;span class="s"&gt;Vary&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;Accept-Encoding&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;add_header&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;Access-Control-Allow-Origin&amp;#34;&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;*&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;try_files&lt;/span&gt; &lt;span class="nv"&gt;$uri$webp_suffix&lt;/span&gt; &lt;span class="nv"&gt;$uri&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;404&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Auquel, on peut ajouter quelques options supplémentaires :&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;code&gt;add_header Cache-Control &amp;quot;public, no-transform&amp;quot;;&lt;/code&gt; : pour définir le cache comme public et demander aux éventuels proxy de ne pas le modifier&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;access_log off;&lt;/code&gt; : pour désactiver les logs d&amp;rsquo;accès&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;log_not_found off;&lt;/code&gt; : désactive les logs d&amp;rsquo;erreurs en cas de fichier introuvable&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;expires max;&lt;/code&gt; : définit la durée autorisée de cache par les navigateurs, le plus longtemps possible puisqu&amp;rsquo;il s&amp;rsquo;agit d&amp;rsquo;images.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Le dernier point important, est de bien définir le répertoire dans lequel nous allons demander à Nginx de servir des images WebP, plutôt que d&amp;rsquo;appliquer cela à l&amp;rsquo;ensemble d&amp;rsquo;un site.&lt;/p&gt;&#10;&lt;p&gt;Voici un exemple complet à inclure dans un vhost pour WordPress :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-nginx" data-lang="nginx"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;location&lt;/span&gt; &lt;span class="s"&gt;/wp-content/uploads/&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;location&lt;/span&gt; &lt;span class="p"&gt;~&lt;/span&gt; &lt;span class="sr"&gt;\.(png|jpe?g)$&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;add_header&lt;/span&gt; &lt;span class="s"&gt;Vary&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;Accept-Encoding&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;add_header&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;Access-Control-Allow-Origin&amp;#34;&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;*&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;add_header&lt;/span&gt; &lt;span class="s"&gt;Cache-Control&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;public,&lt;/span&gt; &lt;span class="s"&gt;no-transform&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;access_log&lt;/span&gt; &lt;span class="no"&gt;off&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;log_not_found&lt;/span&gt; &lt;span class="no"&gt;off&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;expires&lt;/span&gt; &lt;span class="s"&gt;max&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;try_files&lt;/span&gt; &lt;span class="nv"&gt;$uri$webp_suffix&lt;/span&gt; &lt;span class="nv"&gt;$uri&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;404&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Et un autre exemple pour Ghost :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-nginx" data-lang="nginx"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;location&lt;/span&gt; &lt;span class="s"&gt;/content/images&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;alias&lt;/span&gt; &lt;span class="s"&gt;/var/www/votredomaine.tld/content/images&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;location&lt;/span&gt; &lt;span class="p"&gt;~&lt;/span&gt; &lt;span class="sr"&gt;\.(png|jpe?g)$&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;add_header&lt;/span&gt; &lt;span class="s"&gt;Vary&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;Accept-Encoding&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;add_header&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;Access-Control-Allow-Origin&amp;#34;&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;*&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;add_header&lt;/span&gt; &lt;span class="s"&gt;Cache-Control&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;public,&lt;/span&gt; &lt;span class="s"&gt;no-transform&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;access_log&lt;/span&gt; &lt;span class="no"&gt;off&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;log_not_found&lt;/span&gt; &lt;span class="no"&gt;off&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;expires&lt;/span&gt; &lt;span class="s"&gt;max&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;try_files&lt;/span&gt; &lt;span class="nv"&gt;$uri$webp_suffix&lt;/span&gt; &lt;span class="nv"&gt;$uri&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;404&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;&#10;&lt;p&gt;Le script conversion des images en WebP est inspiré de l&amp;rsquo;article &lt;a href="https://www.digitalocean.com/community/tutorials/how-to-create-and-serve-webp-images-to-speed-up-your-website" target="_blank" rel="nofollow"&gt; How To Create and Serve WebP Images to Speed Up Your Website&lt;/a&gt; publié sur DigitalOcean Community&lt;/p&gt;&#10;</description></item><item><title>Installer MariaDB 10.3 sur Ubuntu 18.04 LTS</title><link>https://jesuisadmin.fr/installer-mariadb-10-3-ubuntu-18-04-lts/</link><pubDate>Sun, 03 Jun 2018 17:08:32 +0000</pubDate><guid>https://jesuisadmin.fr/installer-mariadb-10-3-ubuntu-18-04-lts/</guid><description>&lt;img src="https://jesuisadmin.fr/images/2018/07/MariaDB-10.3-1.jpg" alt="Featured image of post Installer MariaDB 10.3 sur Ubuntu 18.04 LTS" /&gt;&lt;p&gt;La nouvelle version stable de MariaDB a été publiée le 25 Mai 2018, avec la release 10.3.7. Dans ce tutoriel, nous allons voir comment installer MariaDB 10.3 sur Ubuntu 18.04 LTS et comment mettre à jour MariaDB 10.2 vers la version 10.3&lt;/p&gt;&#10;&lt;p&gt;Ce tutoriel est également applicable à Ubuntu 16.04 LTS&lt;/p&gt;&#10;&lt;p&gt;Il est tout d&amp;rsquo;abord important de préciser que les versions précédentes du serveur de base de données restent supportées jusqu&amp;rsquo;en 2020 pour la version 10.1 et 2022 pour la version 10.2. Il n&amp;rsquo;y a donc aucune raison de se précipiter pour effectuer la mise à jour sur votre serveur.&lt;/p&gt;&#10;&lt;p&gt;Cependant, comme le précise les notes de publications de MariaDB, la version 10.3 est une évolution de la version 10.2, avec de nombreuses nouvelles fonctionnalités, mais toujours les fonctionalités backportées et réimplémentées de MySQL.&lt;/p&gt;&#10;&lt;p&gt;On peut même trouver le message suivant dans l&amp;rsquo;article concernant la mise à jour de MariaDB 10.2 vers la version 10.3 :&lt;/p&gt;&#10;&#13;&#10; &lt;blockquote&gt;&#13;&#10; &lt;p&gt;On most servers upgrading from 10.2 should be painless&lt;/p&gt;&#10;&#13;&#10; &lt;/blockquote&gt;&#13;&#10;&lt;p&gt;La majorité de mes serveurs utilisant déjà MariaDB 10.2, j&amp;rsquo;ai souhaité vérifier si la mise à jour se faisait effectivement sans problème.&lt;/p&gt;&#10;&lt;h2 id="installer-mariadb-103"&gt;Installer MariaDB 10.3&#13;&#10;&lt;/h2&gt;&lt;p&gt;La première étape, que ce soit sur pour installer MariaDB sur un nouveau serveur, ou pour mettre à jour MariaDB 10.2 est l&amp;rsquo;ajout des dépôts APT. Et pour cela MariaDB propose un script qui réalise l&amp;rsquo;ajout des dépots et l&amp;rsquo;importation des clés GPG automatiquement. Il est compatible avec les distributions linux les plus populaires : Ubuntu 14/16/18.04 LTS - Debian 7/8/9 - Centos 6/7&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl -sS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;|&lt;/span&gt; sudo bash -s -- --mariadb-server-version&lt;span class="o"&gt;=&lt;/span&gt;10.3 --skip-maxscale&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Ce script réalise l&amp;rsquo;ajout des dépôts APT pour MariaDB Server/Cluster et Percona XtraBackup. L&amp;rsquo;argument &lt;code&gt;--mariadb-server-version=&lt;/code&gt; permet de choisir la version de MariaDB que l&amp;rsquo;on souhaite installer (10.1 ou 10.2 ou 10.3). Et l&amp;rsquo;argument &lt;code&gt;--skip-maxscale&lt;/code&gt; désactive l&amp;rsquo;ajout des dépôts de MariaDB MaxScale.&lt;/p&gt;&#10;&lt;h4 id="sur-un-nouveau-serveur"&gt;Sur un nouveau serveur&#13;&#10;&lt;/h4&gt;&lt;p&gt;S&amp;rsquo;il s&amp;rsquo;agit d&amp;rsquo;une installation initiale, sur un nouveau serveur, après avoir ajouté les dépôts APT, il vous suffit d&amp;rsquo;installer le paquet mariadb-server&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt-get update &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; sudo apt-get install mariadb-server -y&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Durant l&amp;rsquo;installation, vous pouvez définir le mot de passe root, ou le laisser vide afin d&amp;rsquo;utiliser ensuite la commande &lt;code&gt;mysql_secure_installation&lt;/code&gt; qui permet de sécuriser un serveur MySQL en répondant à quelques questions.&lt;/p&gt;&#10;&lt;h4 id="mise-à-jour-depuis-mariadb-102"&gt;Mise à jour depuis MariaDB 10.2&#13;&#10;&lt;/h4&gt;&lt;p&gt;Pour mettre à jour MariaDB depuis la version 10.2 vers la version 10.3, il est nécessaire de prendre quelques précautions avant de mettre à jour les paquets pour être sûr de ne pas perdre de données.&lt;/p&gt;&#10;&lt;p&gt;Pour cela, le plus simple est de réaliser une copie du dossier /var/lib/mysql qui contient vos bases de données avant de désinstaller mariadb&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# on arrête le serveur MySQL&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo service mysql stop&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# on copie le dossier /var/lib/mysql&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo cp -rf /varlib/mysql /var/lib/mysqlold&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# on désinstalle mariadb 10.2&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt-get autoremove mariadb-server&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;On peut ensuite remplacer les dépôts APT de la version 10.2 par ceux de la version 10.3 en utilisant le script mariadb_repo_setup&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl -sS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;|&lt;/span&gt; sudo bash -s -- --mariadb-server-version&lt;span class="o"&gt;=&lt;/span&gt;10.3 --skip-maxscale&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Puis mettre à jour la liste des dépôts :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt-get update&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;La dernière étape est de lancer l&amp;rsquo;installation de la nouvelle version de mariadb&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt-get install mariadb-server&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Durant la mise à jour, vous pouvez laisser le mot de passe root vide pour conserver celui que vous avez définit précédemment.&lt;/p&gt;&#10;&lt;p&gt;Une fois la mise à jour terminée, vous pouvez vérifié le status de MariaDB avec la commande :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;service mysql status&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Si la mise s&amp;rsquo;est bien déroulée, n&amp;rsquo;oubliez pas d&amp;rsquo;utiliser la commande &lt;code&gt;mysql_upgrade&lt;/code&gt; pour mettre à jour vos base de données.&#10;Si vous n&amp;rsquo;avez placé les identfiants du serveur MySQL dans un fichier .my.cnf, &lt;code&gt;mysql_upgrade&lt;/code&gt; s&amp;rsquo;utilise de la même façon que &lt;code&gt;mysql&lt;/code&gt; :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mysql_upgrade -u root -p&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="revenir-à-mariadb-102"&gt;Revenir à MariaDB 10.2&#13;&#10;&lt;/h3&gt;&lt;p&gt;J&amp;rsquo;ai déjà réalisé cette mise à jour sur 6 serveurs sans rencontrer le moindre problème. Mais dans le cas d&amp;rsquo;un problème suite à la mise à jour, vous pouvez à tout moment revenir sur la version 10.2 en utilisant la copie du dossier /var/lib/mysql réalisée plus tôt.&lt;/p&gt;&#10;&lt;p&gt;Commencez par remettre en place les dépôts APT de MariaDB 10.2, qui sont normalement récupérable dans un fichier nommé mariadb.list.old_1&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# cp -f /etc/apt/sources.list.d/mariadb.list.old_1 /etc/apt/sources.list.d/mariadb.list&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Mais que vous pouvez également ajouter en utilisant le script mariadb_repo_setup :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl -sS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;|&lt;/span&gt; sudo bash -s -- --mariadb-server-version&lt;span class="o"&gt;=&lt;/span&gt;10.2 --skip-maxscale&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Ensuite, désinstaller mariadb-server&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt-get autoremove mariadb-server&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Et Remplacez le dossier /var/lib/mysql avec le contenu du dossier /var/lib/mysqlold&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# on déplace le dossier /var/lib/mysql&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo mv /var/lib/mysql /var/lib/mysqlnew&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# on remet en place le dossier /var/lib/mysqlold&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo mv /var/lib/mysqlold /var/lib/mysql&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# on définit à nouveau le propriétaire du dossier&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo chown -R mysql:mysql /var/lib/mysql&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;La dernière étape est de réinstaller MariaDB 10.2&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt-get update&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt-get install mariadb-server&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>Configuration réseau d'une machine virtuelle KVM sur Proxmox</title><link>https://jesuisadmin.fr/configuration-reseau-machine-virtuelle-kvm-proxmox/</link><pubDate>Wed, 09 May 2018 21:14:42 +0000</pubDate><guid>https://jesuisadmin.fr/configuration-reseau-machine-virtuelle-kvm-proxmox/</guid><description>&lt;img src="https://jesuisadmin.fr/images/2018/05/R-seau-Proxmox.png" alt="Featured image of post Configuration réseau d'une machine virtuelle KVM sur Proxmox" /&gt;&lt;p&gt;Si la configuration réseau d&amp;rsquo;un container LXC peut s&amp;rsquo;effectuer directement depuis l&amp;rsquo;interface web de Proxmox VE, il &lt;del&gt;est&lt;/del&gt; était nécessaire (et pénible) de la réaliser via la console NoVNC pour les machines virtuelles KVM tournant sous Debian/Ubuntu.&lt;/p&gt;&#10;&lt;p&gt;Nous allons voir dans ce tutoriel, comment configurer le réseau d&amp;rsquo;une machine virtuelle KVM en utilisant qemu-nbd, qui permet de monter le disque d&amp;rsquo;une VM et donc d&amp;rsquo;accéder directement aux fichiers de configuration des interfaces réseau.&#10;Si la procédure peut sembler longue pour configurer une seule VM, il sera tout à fait possible de l&amp;rsquo;automatiser avec un script bash par la suite.&lt;/p&gt;&#10;&lt;p&gt;PS : Alors que j&amp;rsquo;écris ces lignes, le module cloud-init a déjà fait son apparition sur Proxmox VE 5.1, et représentera très probablement une excellente alternative à la solution présentée dans cette article. Mais cela fera sûrement l&amp;rsquo;objet d&amp;rsquo;un autre article.&lt;/p&gt;&#10;&lt;h2 id="installer-le-client-nbd"&gt;Installer le client nbd&#13;&#10;&lt;/h2&gt;&lt;p&gt;Pour commencer, il faut installer le client nbd sur votre serveur Proxmox.&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;apt-get update &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; apt-get install nbd-client -y&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Puis charger le module :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;modprobe nbd &lt;span class="nv"&gt;max_part&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;16&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Et enfin, pour rendre la configuration persistente, on utilise :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;nbd&amp;#34;&lt;/span&gt; &amp;gt;&amp;gt; /etc/modules&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cat &amp;gt; /etc/modprobe.d/nbd.conf &lt;span class="s"&gt;&amp;lt;&amp;lt;\EOT&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;options nbd max_part=16&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;EOT&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="monter-le-disque-dun-vm-avec-qemu-nbd"&gt;Monter le disque d&amp;rsquo;un VM avec qemu-nbd&#13;&#10;&lt;/h2&gt;&lt;h3 id="cas-dune-machine-virtuelle-sans-lvm"&gt;Cas d&amp;rsquo;une machine virtuelle sans LVM&#13;&#10;&lt;/h3&gt;&lt;p&gt;Pour monter le disque d&amp;rsquo;une VM, on utilise &lt;code&gt;qemu-nbd&lt;/code&gt; :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;qemu-nbd -c /dev/nbd0 vm-101* -f raw&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;vm-101 correspond à l&amp;rsquo;ID de la machine virtuelle dans Proxmox.&lt;/p&gt;&#10;&lt;p&gt;On créer ensuite un dossier dans lequel nous allons pouvoir monter le disque de la machine virtuelle :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mkdir /mnt/ma-vm&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mount /dev/nbd0p1 /mnt/ma-vm&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="cas-dune-machine-virtuelle-avec-lvm"&gt;Cas d&amp;rsquo;une machine virtuelle avec LVM&#13;&#10;&lt;/h3&gt;&lt;p&gt;Dans le cas d&amp;rsquo;un LVM, il n&amp;rsquo;est pas possible de monter directement la partition car il faut pour cela connaître le nom du volume group qui contient les fichiers de configuration.&lt;/p&gt;&#10;&lt;p&gt;La procédure pour monter le disque est quasiment la même que précédemment :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;qemu-nbd -c /dev/nbd0 vm-101*&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Mais cette fois-ci on utilise &lt;code&gt;vgscan&lt;/code&gt; pour détecter les volume groups disponibles&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;vgscan&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;On obtient alors la liste des volume group et on active le volume auquel on souhaite accéder :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;vgchange -a y vp-vg&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Nous pouvons alors monter le VG :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mkdir /mnt/ma-vm&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mount /dev/vp-vg/root /mnt/ma-vm&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="configurer-linterface-réseau"&gt;Configurer l&amp;rsquo;interface réseau&#13;&#10;&lt;/h2&gt;&lt;p&gt;Maintenant que le disque de notre machine virtuelle est monté dans le répertoire &lt;code&gt;/mnt/ma-vm&lt;/code&gt;, nous pouvons modifier la configuation de ses interfaces réseau.&#10;On se déplace à la racine du disque :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; /mnt/ma-vm/&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Et nous pouvons modifier directement le fichier &lt;code&gt;/etc/network/interfaces&lt;/code&gt; dans le cas d&amp;rsquo;une machine virtuelle tournant sous Debian ou Ubuntu (exemple avec Ubuntu 16.04 LTS sur un serveur dédié OVH) :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cat &amp;gt; etc/network/interfaces &lt;span class="s"&gt;&amp;lt;&amp;lt; EOF&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;auto ens18&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;iface ens18 inet static&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; address IP.FAIL.OVER&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; netmask 255.255.255.255&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; broadcast IP.FAIL.OVER&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; post-up route add IP.SERVEUR.DEDIE.254 dev ens18&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; post-up route add default gw IP.SERVEUR.DEDIE.254&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; pre-down route del IP.SERVEUR.DEDIE.254 dev ens18&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; pre-down route del default gw IP.SERVEUR.DEDIE.254&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; # dns-* options are implemented by the resolvconf package, if installed&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; dns-nameservers 213.186.33.99&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;iface ens18 inet6 static&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; address IP:V6:FAIL:OVER&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; netmask 64&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; post-up /sbin/ip -f inet6 route add XXXX:XXXX:XXX:XXff:ff:ff:ff:ff dev ens18&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; post-up /sbin/ip -f inet6 route add default via XXXX:XXXX:XXX:XXff:ff:ff:ff:ff&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; pre-down /sbin/ip -f inet6 route del XXXX:XXXX:XXX:XXff:ff:ff:ff:ff dev ens18&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; pre-down /sbin/ip -f inet6 route del default via XXXX:XXXX:XXX:XXff:ff:ff:ff:ff&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;EOF&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="terminer-la-configuration"&gt;Terminer la configuration&#13;&#10;&lt;/h2&gt;&lt;p&gt;Une fois la modification terminée, nous pouvons démonter le disque de la VM.&lt;/p&gt;&#10;&lt;h3 id="sans-lvm"&gt;Sans LVM&#13;&#10;&lt;/h3&gt;&lt;p&gt;Sans LVM, la méthode est la même que pour monter le disque&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; ..&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;umount /dev/nbd0p1&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;qemu-nbd -d /dev/nbd0&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;rm -r /mnt/ma-vm&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="avec-lvm"&gt;Avec LVM&#13;&#10;&lt;/h3&gt;&lt;p&gt;Avec LVM, il faut utiliser à nouveau vgchange de désactiver le volume group :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; ..&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;umount /dev/vp-vg/root&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;vgchange -a n vp-vg&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;qemu-nbd -d /dev/nbd0&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;rm -r /mnt/ma-vm&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Dernière étapes, redémarrer la machine virtuelle pour appliquer les modificiations. J&amp;rsquo;espère que cet article vous aidera à automatiser un peu plus vos création de machines virtuelles.&lt;/p&gt;&#10;</description></item><item><title>Migrer ses emails facilement avec imapsync</title><link>https://jesuisadmin.fr/migrer-emails-facilement-imapsync/</link><pubDate>Sat, 21 Apr 2018 18:53:00 +0000</pubDate><guid>https://jesuisadmin.fr/migrer-emails-facilement-imapsync/</guid><description>&lt;img src="https://jesuisadmin.fr/images/2018/07/imapsync-min.jpg" alt="Featured image of post Migrer ses emails facilement avec imapsync" /&gt;&lt;p&gt;Si la migration de sites web ne pose généralement pas de problème, il est parfois plus délicat de migrer des emails, notamment lorsque deux serveurs n&amp;rsquo;utilisent pas le même software ou lorsqu&amp;rsquo;il s&amp;rsquo;agit d&amp;rsquo;une migration depuis/vers un hébergeur tiers. Heureusement pour simplifier cette étape, il existe de nombreux outils, dont imapsync qui est celui dont nous allons parler aujourd&amp;rsquo;hui.&lt;/p&gt;&#10;&lt;p&gt;imapsync est comme son nom l&amp;rsquo;indique un outil (développé en perl) qui permet de synchroniser des boîtes mail en utilisant le protocol imap. Cela ne fonctionnera bien sûr que si vous utilisez également l&amp;rsquo;IMAP pour récupérer vos emails, ou si vous n&amp;rsquo;effacez pas vos emails du serveur avec le protocol POP.&lt;/p&gt;&#10;&lt;p&gt;Nous allons voir dans ce tutoriel comment installer Imapsync (sur Ubuntu 16.04 LTS), puis comment synchroniser deux boîtes mails ainsi que les options proposées par cet outil.&lt;/p&gt;&#10;&lt;h2 id="installer-imapsync"&gt;Installer imapsync&#13;&#10;&lt;/h2&gt;&lt;p&gt;Tout d&amp;rsquo;abord, il faut installer les pré-requis nécessaires à l&amp;rsquo;éxecution d&amp;rsquo;imapsync :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; sudo apt-get install &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;libauthen-ntlm-perl &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;libclass-load-perl &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;libcrypt-ssleay-perl &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;libdata-uniqid-perl &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;libdigest-hmac-perl &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;libdist-checkconflicts-perl &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;libfile-copy-recursive-perl &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;libio-compress-perl &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;libio-socket-inet6-perl &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;libio-socket-ssl-perl &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;libio-tee-perl &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;libmail-imapclient-perl &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;libmodule-scandeps-perl &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;libnet-ssleay-perl &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;libpar-packer-perl &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;libreadonly-perl &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;libregexp-common-perl &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;libsys-meminfo-perl &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;libterm-readkey-perl &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;libtest-fatal-perl &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;libtest-mock-guard-perl &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;libtest-pod-perl &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;libtest-requires-perl &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;libtest-simple-perl &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;libunicode-string-perl &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;liburi-perl &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;libtest-nowarnings-perl &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;libtest-deep-perl &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;libtest-warn-perl &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;make &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cpanminus&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Il peut être nécessaire de mettre à jour le client IMAP et JSON avec cpanm :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo cpanm Mail::IMAPClient&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo cpanm JSON::WebToken&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;On peut ensuite télécharger imapsync :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo wget https://imapsync.lamiral.info/dist/imapsync -O /usr/bin/imapsync&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Et il ne reste plus qu&amp;rsquo;à le rendre éxecutable :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo chmod +x /usr/bin/imapsync&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Vous pouvez ensuite obtenir la liste des variables disponibles en utilisant la commande &lt;code&gt;imapsync&lt;/code&gt;&lt;/p&gt;&#10;&lt;h2 id="synchroniser-une-boîte-mail"&gt;Synchroniser une boîte mail&#13;&#10;&lt;/h2&gt;&lt;p&gt;Pour lancer la synchronisation d&amp;rsquo;une boite mail avec imapsync avec uniquement les options requises ressemble à :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; imapsync &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --host1 serveur1.imap.tld &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9; --user1 boite@email.tld &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9; --password1 motdepasse1 &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9; --host2 serveur2.imap.tld &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9; --user2 boite@email.tld &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9; --password2 motdepasse2&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="les-options"&gt;Les options&#13;&#10;&lt;/h2&gt;&lt;h3 id="les-mots-de-passes"&gt;Les mots de passes&#13;&#10;&lt;/h3&gt;&lt;p&gt;Pour éviter d&amp;rsquo;avoir à entrer les mots de passe des boîte email en clair, vous pouvez les stockers dans des fichiers et utiliser l&amp;rsquo;argument &lt;code&gt;--passfile1&lt;/code&gt; et &lt;code&gt;--passfile2&lt;/code&gt; pour les charger automatiquement depuis les fichiers contenant les mots de passe.&lt;/p&gt;&#10;&lt;p&gt;Ce qui donne :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; imapsync &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --host1 serveur1.imap.tld &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9; --user1 boite@email.tld &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9; --passfile2 /home/user/pass1 &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9; --host2 serveur2.imap.tld &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9; --user2 boite@email.tld &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9; --passfile2 /home/user/pass2&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="la-connexion-au-serveur-imap"&gt;La connexion au serveur imap&#13;&#10;&lt;/h3&gt;&lt;p&gt;Plusieurs options sont disponibles pour connecter imapsync à votre serveur mail, notamment le type de connexion utilisée. Par défaut imapsync essaira d&amp;rsquo;utiliser SSL ou TLS sur le port 993 pour se connecter. Voici des exemples pour la connexion sur le serveur à migrer (remplacer 1 par 2 pour le deuxième serveur) :&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;code&gt;--nossl1&lt;/code&gt; pour une connexion non chiffrée via le port 143 (non recommandé)&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;--ssl1&lt;/code&gt; pour une connexion avec SSL via le port 993&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;--tls1&lt;/code&gt; pour une connexion avec TLS via le port 143&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Il y a également des options pour définir le type d&amp;rsquo;authentification que l&amp;rsquo;on peut définir via les arguments &lt;code&gt;--authmech1&lt;/code&gt; et &lt;code&gt;--authmech2&lt;/code&gt; dont les valeurs possibles sont (en majusule) :&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;PLAIN&lt;/li&gt;&#10;&lt;li&gt;LOGIN&lt;/li&gt;&#10;&lt;li&gt;CRAM-MD5&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="les-dossiers"&gt;Les dossiers&#13;&#10;&lt;/h3&gt;&lt;p&gt;La synchronisation des dossiers peut être une source de problèmes, notamment si les dossiers par défaut (Inbox, Spam, Archive, Envoyés) ne sont pas nommés de la même façon sur les deux serveurs mails.&#10;Pour cela imapsync offre plusieurs options :&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;code&gt;--automap&lt;/code&gt; pour utiliser la reconnaissance automatique des dossiers par défaut&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;--nomixfolders&lt;/code&gt; pour éviter de fusionner des dossier ayant un nom similaire selon la sensibilité à la casse&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;--prefix1&lt;/code&gt; pour retirer un prefix des dossiers à migrer&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;--prefix2&lt;/code&gt; pour ajouter un prefix aux dossiers migrés&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;--skipemptyfolders&lt;/code&gt; pour ne pas recréer les dossiers vides sur le serveur de destination&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="les-options-de-migration"&gt;Les options de migration&#13;&#10;&lt;/h3&gt;&lt;p&gt;Pour accélerer la migration des emails, vous pouvez utiliser l&amp;rsquo;argument &lt;code&gt;--usecache&lt;/code&gt; afin de stocker temporairement les UIDs des messages et accélérer les synchronisations suivantes (n&amp;rsquo;accélère pas la première migration).&#10;Vous pouvez également supprimer les messages du premier serveur avec l&amp;rsquo;argument &lt;code&gt;--delete1&lt;/code&gt;.&#10;Enfin, avant de lancer votre migration, n&amp;rsquo;hésitez pas à utiliser l&amp;rsquo;argument &lt;code&gt;--dry&lt;/code&gt; pour voir ce que ferai imapsync, sans l&amp;rsquo;appliquer.&lt;/p&gt;&#10;</description></item><item><title>Miner du Monero (XMR) avec xmr-stak - CPU &amp; GPU</title><link>https://jesuisadmin.fr/miner-du-monero-xmr-stack-linux-windows-cpu-gpu/</link><pubDate>Sun, 31 Dec 2017 13:43:51 +0000</pubDate><guid>https://jesuisadmin.fr/miner-du-monero-xmr-stack-linux-windows-cpu-gpu/</guid><description>&lt;img src="https://jesuisadmin.fr/images/2017/12/miner-du-monero.png" alt="Featured image of post Miner du Monero (XMR) avec xmr-stak - CPU &amp; GPU" /&gt;&lt;p&gt;Si le bitcoin fait beaucoup parler de lui, d&amp;rsquo;autres cryptomonnaies commencent également à s&amp;rsquo;imposer, ces dernières semblent ne pas vouloir reproduire les mêmes erreurs que le bitcoin. Avec l&amp;rsquo;usage d&amp;rsquo;algorithmes de hashage différents, il est ainsi possible d&amp;rsquo;utiliser son CPU ou son GPU pour le minage. C&amp;rsquo;est le cas du Monero, basé sur la technologie Cryptonote, dont le code monétaire est XMR.&lt;/p&gt;&#10;&lt;p&gt;Dans ce tutoriel, nous allons voir comment miner du Monero avec l&amp;rsquo;outil open-source &lt;a class="link" href="https://github.com/fireice-uk/xmr-stak" target="_blank" rel="noopener"&#13;&#10; &gt;xmr-stack&lt;/a&gt; disponible sur Github. Ce dernier est disponible sur Windows, Linux et Mac OS et permet de miner avec votre CPU et/ou votre GPU AMD/NVIDIA.&lt;/p&gt;&#10;&lt;h2 id="monero---comme-le-bitcoin-"&gt;Monero - Comme le bitcoin ?&#13;&#10;&lt;/h2&gt;&lt;p&gt;Si j&amp;rsquo;ai décidé de parler du minage du Monero dans cet article, c&amp;rsquo;est tout d&amp;rsquo;abord car cette cryptomonnaie est très différente du célèbre bitcoin. Voici les principales différences entre les deux cryptomonnaies :&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;1) Un portefeuille et des transactions anonymes&lt;/strong&gt;&#10;Alors que toutes les transactions effectuées avec des bitcoins sont affichées publiquement, elles restent confidentielles avec le Monero.&#10;Il est ainsi impossible de lister les transactions réalisées depuis un portefeuille ainsi que le montant de ces transactions.&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;2) Des frais de transactions faibles&lt;/strong&gt;&#10;Si de nombreuses personnes ont commencé à s&amp;rsquo;intéresser au bitcoin et à y investir de l&amp;rsquo;argent, la majorité d&amp;rsquo;entre elles ne l&amp;rsquo;utilisent pas comme moyen de paiement en ligne. Cependant au moment où j&amp;rsquo;écris cet article, pour envoyer l&amp;rsquo;équivalent de 1€ à un autre portefeuille bitcoin, les frais de réseaux sont de 20.88€.&lt;/p&gt;&#10;&lt;p&gt;Grâce à des blocks aux dimensions dynamiques, permettant de s&amp;rsquo;adapter aux nombre de transactions par rapport à la puissance de calcul disponible, les transactions avec le Monero sont rapides et les frais de transactions faibles.&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;3) Tout le monde peut miner&lt;/strong&gt;&#10;À l&amp;rsquo;inverse du bitcoin, il n&amp;rsquo;est pas nécessaire d&amp;rsquo;investir 1500€ dans un ASIC (Application Specific Integrated Circuit) pour pouvoir miner du Monero. L&amp;rsquo;objectif du Monero étant que chacun puisse participer au réseau et donc garantir que ce dernier soit totalement décentralisé.&lt;/p&gt;&#10;&lt;h2 id="tout-savoir-sur-le-monero"&gt;Tout savoir sur le Monero&#13;&#10;&lt;/h2&gt;&lt;p&gt;Voici quelques liens utiles si vous souhaitez en savoir plus sur le Monero :&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;Les sites principaux&lt;/strong&gt;&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://getmonero.org" target="_blank" rel="noopener"&#13;&#10; &gt;getmonero.org&lt;/a&gt; : le site officiel du Monero&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://mymonero.com/#/" target="_blank" rel="noopener"&#13;&#10; &gt;mymonero.com&lt;/a&gt; : portefeuille en ligne conseillé par getmonero.org&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://www.monero.how/" target="_blank" rel="noopener"&#13;&#10; &gt;www.monero.how&lt;/a&gt; : Tutoriaux, statisques, informations&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;&lt;strong&gt;Les sites pour en discuter&lt;/strong&gt;&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://bitcointalk.org/index.php?topic=583449.0" target="_blank" rel="noopener"&#13;&#10; &gt;bitcointalk.org&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://monero.stackexchange.com/" target="_blank" rel="noopener"&#13;&#10; &gt;stackexchange&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://www.reddit.com/r/Monero/" target="_blank" rel="noopener"&#13;&#10; &gt;reddit&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;&lt;strong&gt;Les sites pour miner&lt;/strong&gt;&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="http://monerobenchmarks.info/" target="_blank" rel="noopener"&#13;&#10; &gt;monerobenchmarks.info&lt;/a&gt; : benchmark CPU &amp;amp; GPU&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="http://moneropools.com/" target="_blank" rel="noopener"&#13;&#10; &gt;moneropools.com&lt;/a&gt; : comparateur des pools de minage&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://www.reddit.com/r/MoneroMining/" target="_blank" rel="noopener"&#13;&#10; &gt;reddit monero mining&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="miner-du-monero"&gt;Miner du Monero&#13;&#10;&lt;/h2&gt;&lt;p&gt;Comme expliqué précédemment, avec le Monero, il peut ainsi être intéressant de miner avec votre PC ou votre serveur dédié, sans pour autant utiliser tous les cores de votre CPU. Par exemple, avec 2 Cores d&amp;rsquo;un Intel Core i7-4790K, j&amp;rsquo;obtiens un hashrate moyen de 240 H/s.&lt;/p&gt;&#10;&lt;p&gt;Il reste possible de monter des machines dédiées pour le minage et pour cela les GPU AMD restent plus intéressants que ceux proposés par Nvidia. Les RX 570 &amp;amp; 580 proposent un tarif abordable pour commencer, et la nouvelle gamme VEGA est visiblement beaucoup plus intéressante pour le minage que pour les jeux-vidéos.&lt;/p&gt;&#10;&lt;p&gt;Le minage du monero est similaire au bitcoin sur le fonctionnement puisque vous pouvez miner seul ou via un pool. Pour débuter il est souvent plus intéressant d&amp;rsquo;utiliser un pool.&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;Suite à de nombreuses plaintes sur reddit, je vous déconseille l&amp;rsquo;usage du site minergate.com&lt;/strong&gt;&lt;/p&gt;&#10;&lt;h2 id="les-alternatives-à-monero"&gt;Les alternatives à Monero&#13;&#10;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;mise à jour du 24/10/2018&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;Je ne mine plus de Monero depuis Février suite à la forte augmentation du hashrate et de la difficulté sur le réseau Monero, qui a réduit de moitié la récompense obtenu à puissance égale.&#10;Monero n&amp;rsquo;est pas le seule cryptomonnaie basée sur cryptonote, et de nombreux autres projets ont vu le jour dont le Stellite (XTL) ou le Graft (GRFT) pour ne citer que les plus prometteurs. Si vous souhaitez découvrir et/ou miner d&amp;rsquo;autres cryptomonnaies similaires au Monero, je vous invite à visiter le site de référence &lt;a class="link" href="https://www.cryptunit.com/" target="_blank" rel="noopener"&#13;&#10; &gt;Cryptunit.com&lt;/a&gt;.&lt;/p&gt;&#10;&lt;p&gt;Le Monero reste un projet stable, et ses développeur nous l&amp;rsquo;ont prouvés en ce début Avril, en réalisant un nouveau hardfork, ou du moins une mise à jour de l&amp;rsquo;algorithme du PoW(Proof of Work) en Français afin de lutter contre les ASICs (application-specific integrated circuit), ces machines dédiées au minage d&amp;rsquo;une cryptomonnaie et qui propose un ratio hashrate/consommation exceptionnel.&lt;/p&gt;&#10;&lt;p&gt;Si vous vous demandez pourquoi le Monero fait la guerre aux ASICs, c&amp;rsquo;est tout simplement parce que ses développeurs ont bien retenu la leçon du bitcoin (12 sociétés représente 87% de la puissance de calcul du réseau Bitcoin).&lt;/p&gt;&#10;&lt;p&gt;Quasiment toutes les cryptomonnaies partagent une même logique de décentralisation, mais à l&amp;rsquo;heure actuelle, le projet Monero est clairement celui qui fait le plus d&amp;rsquo;efforts pour que le réseau reste décentralisé.&lt;/p&gt;&#10;&lt;p&gt;Le résultat de ce hardfork, une baisse de 50% du hashrate sur le réseau Monero. Un autre hardfork est déjà programmé dans 6 mois, et il y en aura désormais un tous les 6 mois, rendant la conception et la vente d&amp;rsquo;ASICs totalement impossible.&lt;/p&gt;&#10;&lt;h2 id="xmr-stack--un-mineur-tout-en-un"&gt;XMR-STACK : Un mineur tout-en-un&#13;&#10;&lt;/h2&gt;&lt;p&gt;Depuis sa release v2.0, xmr-stack est un mineur tout-en-un, puisqu&amp;rsquo;il permet de miner avec votre CPU et/ou GPU AMD ou Nvidia et il dispose d&amp;rsquo;un interface web pour suivre votre hashrate en temps réel.&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="xmr-stack interface web" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://jesuisadmin.fr/images/2017/12/Screenshot_223-min.png"&gt;&lt;/p&gt;&#10;&lt;h3 id="installer-xmr-stack"&gt;Installer xmr-stack&#13;&#10;&lt;/h3&gt;&lt;h4 id="sur-windows"&gt;Sur Windows&#13;&#10;&lt;/h4&gt;&lt;p&gt;Sur Windows, il vous suffit de télécharger la version pré-compilée disponible sur la &lt;a class="link" href="https://github.com/fireice-uk/xmr-stak/releases" target="_blank" rel="noopener"&#13;&#10; &gt;page release&lt;/a&gt; du projet xmr-stack.&lt;/p&gt;&#10;&lt;h4 id="sur-linux"&gt;Sur Linux&#13;&#10;&lt;/h4&gt;&lt;p&gt;Sur Linux, il est par contre nécessaire de compiler xmr-stack. Il est alors possible d&amp;rsquo;ajouter la librarie OpenCL pour un GPU AMD ou CUDA pour un GPU Nvidia.&lt;/p&gt;&#10;&lt;p&gt;Le CUDA Toolkit est disponible via le lien suivant : &lt;a class="link" href="https://developer.nvidia.com/cuda-downloads?target_os=Linux&amp;amp;target_arch=x86_64" target="_blank" rel="noopener"&#13;&#10; &gt;CUDA&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;Et l&amp;rsquo;APP SDK pour ADM est disponible via le lien suivant : &lt;a class="link" href="https://developer.amd.com/amd-accelerated-parallel-processing-app-sdk/" target="_blank" rel="noopener"&#13;&#10; &gt;AMD&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;Pour la compilation, xmr-stack nécessite gcc 5.1+. Si votre système d&amp;rsquo;exploitation vous propose uniquement une version antérieur de gcc, vous pouvez dans ce cas utiliser le script bash docker disponible sur le dépôt d&amp;rsquo;xmr-stack, pour réaliser la compilation.&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;Compiler xmr-stack avec le script bash docker&lt;/strong&gt;&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;Installer Docker&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl -fsSL get.docker.com -o get-docker.sh&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sh get-docker.sh&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start="2"&gt;&#10;&lt;li&gt;Lancer le script&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;wget https://raw.githubusercontent.com/fireice-uk/xmr-stak/master/scripts/build_xmr-stak_docker/build_xmr-stak_docker.sh&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;bash build_xmr-stak_docker.sh&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Le script réalise la compilation d&amp;rsquo;xmr-stack pour Ubuntu 14.04, 16.04, Centos 6, 7 et Fedora 27. Une fois la compilation terminée, chaque version sera disponible dans un dossier distinct.&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;Compiler xmr-stack sur Ubuntu&lt;/strong&gt;&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;gt; apt install libmicrohttpd-dev libssl-dev cmake build-essential libhwloc-dev -y&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git clone https://github.com/fireice-uk/xmr-stak.git&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mkdir xmr-stak/build&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cd xmr-stak/build&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Vous pouvez alors ajouter des arguments à la commande cmake pour désactiver les librairies OpenCL (-DOpenCL_ENABLE=OFF) et CUDA (-DCUDA_ENABLE=OFF) si vous souhaitez miner uniquement avec votre CPU. Et si vous ne souhaitez pas utiliser la dashboard web, vous pouvez également définir l&amp;rsquo;option (-DMICROHTTPD_ENABLE=OFF).&lt;/p&gt;&#10;&lt;p&gt;Ce qui donne&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# CPU only + Interface web&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cmake .. -DCUDA_ENABLE&lt;span class="o"&gt;=&lt;/span&gt;OFF -DOpenCL_ENABLE&lt;span class="o"&gt;=&lt;/span&gt;OFF&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;make install&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# AMD + CPU + Interface web&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cmake .. -DCUDA_ENABLE&lt;span class="o"&gt;=&lt;/span&gt;OFF&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;make install&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Nvidia + CPU + Interface web&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cmake .. -DOpenCL_ENABLE&lt;span class="o"&gt;=&lt;/span&gt;OFF&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;make install&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# CPU only sans Interface web&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cmake .. -DCUDA_ENABLE&lt;span class="o"&gt;=&lt;/span&gt;OFF -DOpenCL_ENABLE&lt;span class="o"&gt;=&lt;/span&gt;OFF -DMICROHTTPD_ENABLE&lt;span class="o"&gt;=&lt;/span&gt;OFF&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;make install&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;L&amp;rsquo;exécutable xmr-stack sera disponible dans le dossier bin après la compilation.&#10;Vous pouvez le lancer en vous rendant dans le dossier :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cd xmr-stack/build/bin/&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;./xmr-stack&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="configuration-dxmr-stack"&gt;Configuration d&amp;rsquo;xmr-stack&#13;&#10;&lt;/h3&gt;&lt;p&gt;Lors du premier lancement de l&amp;rsquo;application, xmr-stack va détecter la configuration de votre ordinateur (CPU &amp;amp; GPU), puis vous afficher un menu interactif pour générer les différents fichiers de configuration :&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;config.txt : fichier de configuration principal où vous pouvez définir les options relative à l&amp;rsquo;affichage console, aux logs ou à l&amp;rsquo;interface web&lt;/li&gt;&#10;&lt;li&gt;pools.txt : ficher de configuration du/des pool(s)&lt;/li&gt;&#10;&lt;li&gt;cpu.txt : fichier de configuration pour le CPU, qui définit le nombre de threads a utiliser et l&amp;rsquo;intensité&lt;/li&gt;&#10;&lt;li&gt;gpu.txt : fichier de configuration pour le GPU (si un GPU est présent)&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Globalement, les options par défaut sont optimisées grâce à la détection des périphériques disponibles. Cependant il est possible de les ajuster, en réduisant par exemple le nombre de coeurs utilisés pour le minage.&lt;/p&gt;&#10;&lt;h3 id="optimisation"&gt;Optimisation&#13;&#10;&lt;/h3&gt;&lt;h4 id="windows"&gt;Windows&#13;&#10;&lt;/h4&gt;&lt;p&gt;Afin d&amp;rsquo;obtenir un meilleur hashrate sous Windows, il est nécessaire d&amp;rsquo;autoriser le verrouillage des pages en mémoire.&#10;Pour cela, il faut se rendre dans l&amp;rsquo;éditeur de stratégie de groupe locale, accessible via le commande gpedit.msc dans le menu démarrer. Puis dans Paramètres Windows &amp;gt; Paramètres de sécurité &amp;gt; Attribution des droits utilisateur comme sur l&amp;rsquo;image ci-dessous :&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="autoriser verrouillage des pages en mémoire" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://jesuisadmin.fr/images/2017/12/Screenshot_222-min-1.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;Vous pouvez ensuite ajouter des utilisateurs (votre utilisateur et/ou l&amp;rsquo;Administrateur) dans le menu contextuel de l&amp;rsquo;option &amp;ldquo;Verrouiller les pages en mémoire&amp;rdquo;. Un redémarrage est nécessaire pour appliquer la modification.&lt;/p&gt;&#10;&lt;h4 id="linux"&gt;Linux&#13;&#10;&lt;/h4&gt;&lt;p&gt;Tout comme avec Windows, il vous faudra ajuster certaines options concernant la gestion de la mémoire de votre système pour obtenir un meilleur hashrate.&lt;/p&gt;&#10;&lt;p&gt;Via le fichier sysctl.conf&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;echo &amp;#39;vm.nr_hugepages=128&amp;#39; &amp;gt;&amp;gt; /etc/sysctl.conf&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sysctl -p&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Via le fichier limits.conf&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;echo &amp;#39;* soft memlock 262144&amp;#39; &amp;gt;&amp;gt; /etc/security/limits.conf&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;echo &amp;#39;* hard memlock 262144&amp;#39; &amp;gt;&amp;gt; /etc/security/limits.conf&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Pour appliquer la nouvelle configuration, il n&amp;rsquo;est pas nécessaire de redémarrer, mais simplement de fermer votre session, puis de l&amp;rsquo;ouvrir à nouveau.&lt;/p&gt;&#10;&lt;h3 id="mettre-à-jour-xmr-stack"&gt;Mettre à jour xmr-stack&#13;&#10;&lt;/h3&gt;&lt;h4 id="windows-1"&gt;Windows&#13;&#10;&lt;/h4&gt;&lt;p&gt;Sous Windows, il vous suffit de télécharger la nouvelle version disponible sur la page release, tout en conservant vos fichier de configurations.&lt;/p&gt;&#10;&lt;h4 id="linux-1"&gt;Linux&#13;&#10;&lt;/h4&gt;&lt;p&gt;Sous Linux, on récupère les modifications depuis le dépôt Github, avant de sélectionner la dernière release, et on relance la compilation :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cd xmr-stack&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git fetch&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git checkout v2.2.0&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cd build&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cmake .. -DCUDA_ENABLE=OFF -DOpenCL_ENABLE=OFF&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;make install&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="mes-astuces-et-chiffres"&gt;Mes astuces et chiffres&#13;&#10;&lt;/h2&gt;&lt;ul&gt;&#10;&lt;li&gt;Sur des processeurs avec suffisament de cache, il peut-être intéressant d&amp;rsquo;activer le l&amp;rsquo;option &lt;code&gt;low_power_mode&lt;/code&gt; via le fichier cpu.txt si vous ne souhaitez pas utiliser tous les cores disponibles pour miner. Sur un XEON E3-1270v6, j&amp;rsquo;obtiens ainsi un hashrate de 220 H/s avec 2 Cores.&lt;/li&gt;&#10;&lt;li&gt;Sous Windows, avec un GPU Nvidia, activer l&amp;rsquo;option &amp;ldquo;optimiser pour les performances de calcul&amp;rdquo; via le panneau de configuration Nvidia, dans la section Gérer les paramètres 3D, comme sur l&amp;rsquo;image ci-dessous :&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;&lt;img alt="Paramètres Nvidia GPU" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://jesuisadmin.fr/images/2017/12/Screenshot_224-min.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;Je suis passé d&amp;rsquo;un hashrate de 300 H/s à 430 H/s avec une GTX 970 après avoir activé cette option.&lt;/p&gt;&#10;&lt;h3 id="quelques-chiffres"&gt;Quelques chiffres&#13;&#10;&lt;/h3&gt;&lt;p&gt;GPU :&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Nvidia GTX 970 : 430 H/s&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;CPU :&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Intel(R) Core(TM) i5-2400 @ 3.10GHz : 150 H/s&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Intel(R) Core(TM) i7-3770 CPU @ 3.40GHz : 250 H/s&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Intel(R) Core(TM) i7-2600 @ 3.40GHz : 260 H/s&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Intel(R) Core(TM) i7-4790K CPU @ 4.00GHz : 260 H/s&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Intel(R) Core(TM) i7-7700 CPU @ 3.60GHz : 260 H/s&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Intel(R) Xeon(R) CPU E3-1231 v3 @ 3.40GHz : 250 H/s&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Intel(R) Xeon(R) CPU E3-1270 v6 @ 3.80GHz : 250 H/s&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Intel(R) Xeon(R) CPU E5-1630 v3 @ 3.70GHz : 280 H/s&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Intel(R) Xeon(R) CPU E3-1245 V2 @ 3.40GHz : 260 H/s&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Intel(R) Xeon(R) CPU E5-1650 v4 @ 3.60GHz : 390 H/s&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;2 x Intel(R) Xeon(R) CPU E5-2630 v3 @ 2.40GHz : 930 H/s&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;</description></item><item><title>Déployer un système de backup centralisé avec UrBackup</title><link>https://jesuisadmin.fr/deployer-systeme-backup-centralise-urbackup/</link><pubDate>Mon, 13 Nov 2017 19:03:46 +0000</pubDate><guid>https://jesuisadmin.fr/deployer-systeme-backup-centralise-urbackup/</guid><description>&lt;img src="https://jesuisadmin.fr/images/2018/07/Centraliser-Backup--2-.jpg" alt="Featured image of post Déployer un système de backup centralisé avec UrBackup" /&gt;&lt;p&gt;La gestion des backups peut rapidement devenir un problème lorsque l&amp;rsquo;on gère un grand nombre de serveurs, aussi bien pour gérer l&amp;rsquo;espace de stockage que pour le suivi des backups. Je vais donc vous présenter la solution UrBackup.&lt;/p&gt;&#10;&lt;p&gt;UrBackup est une solution de sauvegarde client/serveur qui propose plusieurs système de backup, sous forme d&amp;rsquo;image disque ou par répertoire de fichiers.&#10;Les principaux avantages de cette solution sont sa facilité de déploiement, sa gestion de l&amp;rsquo;espace de stockage avec des backups complets ou incrémentaux. Mais également sa compabilité avec Windows, MacOS et Linux.&lt;/p&gt;&#10;&lt;p&gt;Dans mon cas, UrBackup me sert à réaliser des sauvegardes de serveurs web. Il est installé sur un serveur Kimsufi KS-2A avec 2To de stockage commandé dans le cadre d&amp;rsquo;une offre à 8.99€/mois.&lt;/p&gt;&#10;&lt;p&gt;Mais il est tout à fait possible d&amp;rsquo;utiliser directement le backup storage proposé avec les serveurs OVH ou Online.net. Il suffit pour cela de monter le backup storage en NFS et de définir l&amp;rsquo;emplacement des sauvegardes UrBackup durant l&amp;rsquo;installation.&lt;/p&gt;&#10;&lt;h2 id="installation-du-serveur-urbackup"&gt;Installation du serveur UrBackup&#13;&#10;&lt;/h2&gt;&lt;p&gt;L&amp;rsquo;installation du serveur UrBackup peut se faire sur Windows, Linux mais également sur les distributions comme FreeNas, OpenMediaVault ainsi que sur des NAS QNAP.&lt;/p&gt;&#10;&lt;p&gt;Vous pouvez trouver les instructions d&amp;rsquo;installation sur la page &lt;a class="link" href="http://www.urbackup.org/download.html" target="_blank" rel="noopener"&#13;&#10; &gt;Downloads&lt;/a&gt; du site Urbackup. Dans mon cas j&amp;rsquo;ai choisi d&amp;rsquo;utiliser Ubuntu 16.04 LTS qui permet l&amp;rsquo;installation via les dépôts PPA.&lt;/p&gt;&#10;&lt;p&gt;On commence donc par ajouter le dépôt puis on installe le paquet urbackup-server :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo add-apt-repository ppa:uroni/urbackup&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt-get update&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt-get install urbackup-server&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Durant le processus, vous serez inviter à choisir le répertoire dans lequel UrBackup va réaliser les sauvegardes. On peut ensuite accéder à l&amp;rsquo;interface d&amp;rsquo;administration via l&amp;rsquo;adresse http://IP-DU-SERVEUR:55414.&lt;/p&gt;&#10;&lt;p&gt;Les réglages principaux à définir après l&amp;rsquo;installation sont :&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;la création d&amp;rsquo;un utilisateur pour protéger l&amp;rsquo;accès à l&amp;rsquo;interface&lt;/li&gt;&#10;&lt;li&gt;le type de sauvegarde que vous souhaitez utiliser (image, fichiers, les deux)&lt;/li&gt;&#10;&lt;li&gt;le dossier par défaut à sauvegarder&lt;/li&gt;&#10;&lt;li&gt;la fréquence et le nombre de sauvegardes&lt;/li&gt;&#10;&lt;li&gt;le type de réseau (local ou sur internet)&lt;/li&gt;&#10;&lt;li&gt;les informations smtp pour l&amp;rsquo;envoi des notifications&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Pour mes serveurs web, je n&amp;rsquo;utilise pour le moment que les sauvegardes de fichiers et le dossier par défaut à sauvegarder est /var/www.&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="installation-du-client-urbackup"&gt;Installation du client UrBackup&#13;&#10;&lt;/h2&gt;&lt;p&gt;Pour linux, l&amp;rsquo;installation du client UrBackup se fait via une seule ligne de commande :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;TF&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sb"&gt;`&lt;/span&gt;mktemp&lt;span class="sb"&gt;`&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; wget &lt;span class="s2"&gt;&amp;#34;https://hndl.urbackup.org/Client/2.3.4/UrBackup%20Client%20Linux%202.3.4.sh&amp;#34;&lt;/span&gt; -O &lt;span class="nv"&gt;$TF&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; sudo sh &lt;span class="nv"&gt;$TF&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; rm &lt;span class="nv"&gt;$TF&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Durant l&amp;rsquo;installation, il vous sera demandé quel type de sauvegarde vous souhaitez utiliser pour la réalisation d&amp;rsquo;image disque (dans le cas où le système de fichier le permet). Par la suite la mise à jour du client sera automatique.&#10;Il est nécessaire d&amp;rsquo;ouvrir les ports 35621, 35622 et 35623 pour pouvoir connecter votre client au serveur Urbackup.&lt;/p&gt;&#10;&lt;p&gt;Si vous utilisez UFW, vous pouvez les ouvrir uniquement vers l&amp;rsquo;IP de votre serveur Urbackup :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ufw allow from IP.DE.VOTRE.SERVEUR-URBACKUP to any port &lt;span class="m"&gt;35621&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ufw allow from IP.DE.VOTRE.SERVEUR-URBACKUP to any port &lt;span class="m"&gt;35622&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ufw allow from IP.DE.VOTRE.SERVEUR-URBACKUP to any port &lt;span class="m"&gt;35623&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Dès la première connexion au serveur (après avoir ajouté l&amp;rsquo;IP ou le hostname du client via l&amp;rsquo;interface UrBackup Server), une première sauvegarde complète du client sera réalisée, en fonction des options que vous aurez définie. Les sauvegardes suivantes seront incrémentielles.&lt;/p&gt;&#10;&lt;p&gt;La configuration du client urbackup se trouve dans le fichier &lt;code&gt;/etc/default/urbackupclient&lt;/code&gt;, dans lequel vous pouvez changer l&amp;rsquo;option &lt;code&gt;RESTORE=&amp;quot;disabled&amp;quot;&lt;/code&gt; par &lt;code&gt;RESTORE=&amp;quot;server-confirms&amp;quot;&lt;/code&gt; pour autoriser la restauration d&amp;rsquo;un backup depuis l&amp;rsquo;interface d&amp;rsquo;administration de UrBackup Server.&lt;/p&gt;&#10;&lt;p&gt;Modification qui peut être effectuée avant de connecter le client au serveur avec la commande :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sed -i &lt;span class="s1"&gt;&amp;#39;s/RESTORE=disabled/RESTORE=&amp;#34;server-confirms&amp;#34;/&amp;#39;&lt;/span&gt; /etc/default/urbackupclient&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="sauvegarder-vos-bases-de-données"&gt;Sauvegarder vos bases de données&#13;&#10;&lt;/h2&gt;&lt;p&gt;Si vous utilisez Urbackup en mode sauvegarde de fichiers, vous allez sûrement souhaitez sauvegarder vos bases de données. Et pour cela il y a deux solutions avec UrBackup.&lt;/p&gt;&#10;&lt;h3 id="utiliser-mysqldump"&gt;Utiliser mysqldump&#13;&#10;&lt;/h3&gt;&lt;p&gt;C&amp;rsquo;est la solution la plus simple à mettre en place, puisque vous pouvez utiliser un cronjob pour exécuter un script bash régulièrement.&#10;J&amp;rsquo;utilise par exemple un script modifié par mes soins disponible sur Github, que vous pouvez télécharger et utiliser librement. Voici les étapes à suivre :&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;Télécharger le script et le rendre exécutable&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;wget -O mysqldump.sh vtb.cx/mysqldump&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;chmod +x mysqldump.sh&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start="2"&gt;&#10;&lt;li&gt;Définir les identifiants root pour MySQL dans .my.cnf&#10;Pour accéder à vos bases de données, le script utilise les identifiants stockés dans le fichier ~/my.cnf. Ce fichier doit ressembler à :&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;client&lt;span class="o"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;user&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; root&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;password&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; votremotdepasse&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start="3"&gt;&#10;&lt;li&gt;ajouter un cronjob&#10;On ajoute une crontab en utilisant la commande &lt;code&gt;crontab -e&lt;/code&gt;, puis en ajoutant la ligne :&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;@daily /root/mysqldump.sh &amp;gt; /dev/null&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Il ne reste plus qu&amp;rsquo;à enregister la modification et le cronjob réalisera ainsi un backup journalier de chacune des bases de données, stocké par défaut dans le dossier /var/www/mysqldump.&lt;/p&gt;&#10;&lt;h3 id="utiliser-percona-xtrabackup-pour-des-sauvegardes-incrémentielles"&gt;Utiliser Percona XtraBackup pour des sauvegardes incrémentielles&#13;&#10;&lt;/h3&gt;&lt;p&gt;UrBackup a une fois de plus prévu tout ce qu&amp;rsquo;il vous faut, puisqu&amp;rsquo;il permet de réaliser des sauvegardes incrémentales de votre serveur MySQL, en utilisant l&amp;rsquo;outil Percona XtraBackup qui réalise des sauvegardes à chaud du dossier /var/lib/mysql que vous pouvez restaurer en quelques minutes.&lt;/p&gt;&#10;&lt;p&gt;Avant de pouvoir utiliser XtraBackup, il vous faut installer le paquet percona-xtrabackup. Pour MariaDB, le dépôt apt est automatiquement ajouté par le script mariadb_repo_setup.&lt;/p&gt;&#10;&lt;p&gt;Exemple pour MariaDB 10.1&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl -sS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;|&lt;/span&gt; sudo bash -s -- --mariadb-server-version&lt;span class="o"&gt;=&lt;/span&gt;10.1 --skip-maxscale&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt update &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; sudo apt install percona-xtrabackup -y&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Exemple pour MariaDB 10.2&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl -sS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;|&lt;/span&gt; sudo bash -s -- --mariadb-server-version&lt;span class="o"&gt;=&lt;/span&gt;10.2 --skip-maxscale&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt update &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; sudo apt install percona-xtrabackup-24 -y&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Une fois XtraBackup installé, il faut éditer le fichier &lt;code&gt;/usr/local/etc/urbackup/mariadbxtrabackup.conf&lt;/code&gt;, dans lequel il faut remplacer &lt;code&gt;MARIADB_XTRABACKUP_ENABLED=0&lt;/code&gt; par &lt;code&gt;MARIADB_XTRABACKUP_ENABLED=1&lt;/code&gt; et définir le mot de passe root de MySQL à la fin du fichier.&lt;/p&gt;&#10;&lt;p&gt;On peut ensuite activer la configuration avec la commande :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;/usr/local/share/urbackup/scripts/setup-mariadbbackup&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Et vérifier que la sauvegarde fonctionne avec la commande :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;/usr/local/share/urbackup/scripts/mariadbxtrabackup &amp;gt; /dev/null&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Pour restaurer la dernière sauvegarde, vous pourrez utiliser la commande :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;/usr/local/share/urbackup/scripts/restore-mariadb&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>Installer Isso sur Ubuntu 16.04 LTS pour remplacer disqus</title><link>https://jesuisadmin.fr/installer-isso-sur-ubuntu-16-04-lts-remplacer-disqus/</link><pubDate>Thu, 19 Oct 2017 16:55:39 +0000</pubDate><guid>https://jesuisadmin.fr/installer-isso-sur-ubuntu-16-04-lts-remplacer-disqus/</guid><description>&lt;img src="https://jesuisadmin.fr/images/2018/07/Installer-Isso-sur-Ubuntu-16.04-LTS.jpg" alt="Featured image of post Installer Isso sur Ubuntu 16.04 LTS pour remplacer disqus" /&gt;&lt;p&gt;Ayant récemment migré de WordPress vers Ghost, j&amp;rsquo;ai souhaité utiliser une autre solution que Disqus pour la gestion des commentaires sur le blog, de préférence self-hosted. Je me suis donc tourné vers Isso, un système de gestion de commentaires open-source permettant de gérer plusieurs sites.&lt;/p&gt;&#10;&lt;p&gt;Nous allons dans ce tutoriel voir comment installer Isso et comment le configurer pour gérer les commentaires de plusieurs sites.&lt;/p&gt;&#10;&lt;h2 id="installer-isso"&gt;Installer Isso&#13;&#10;&lt;/h2&gt;&lt;p&gt;Pour l&amp;rsquo;installation, on commence par créer un nouvel utilisateur avec les droits sudo. De la même façon que pour installer ghost via la ghost-cli&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;adduser isso&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;adduser isso sudo&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;On se connecte ensuite avec cet utilisateur&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;su - isso&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Et on commence par installer les paquets nécessaires pour isso&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt-get install python3-setuptools python3-virtualenv python3-dev sqlite3 build-essential&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;On définit alors notre environnement pour python.&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;python3 -m venv /opt/isso&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;source&lt;/span&gt; /opt/isso/bin/activate&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Il y a plusieurs options pour installer isso, mais la plus simple étant visiblement via pip, c&amp;rsquo;est cette dernière que j&amp;rsquo;ai utilisé :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pip install isso&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;On peut ensuite sortir du virtualenv avec la commande :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;deactivate&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Pour pouvoir utiliser directement la commande &lt;code&gt;isso&lt;/code&gt; depuis le virtualenv, il suffit de créer un symlink entre &lt;code&gt;/opt/isso/bin/isso&lt;/code&gt; et &lt;code&gt;/usr/local/bin/isso&lt;/code&gt; :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ln -s /opt/isso/bin/isso /usr/local/bin/isso&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Pour mettre à jour isso, il suffit de faire :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;source&lt;/span&gt; /opt/isso/bin/activate&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pip install --upgrade isso&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;deactivate&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="configurer-isso"&gt;Configurer Isso&#13;&#10;&lt;/h2&gt;&lt;p&gt;Nous avons terminé l&amp;rsquo;installation d&amp;rsquo;Isso, et nous allons pouvoir passer à la configuration. Pour cela on créer un fichier yourwebsite1.cfg et yourwebsite2.cfg dans le dossier de Isso dans lesquel nous allons définir les options suivantes :&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;la base de donnée&lt;/li&gt;&#10;&lt;li&gt;la modération&lt;/li&gt;&#10;&lt;li&gt;le serveur SMTP&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Pour construire vos fichiers de configuration, utilisez l&amp;rsquo;exemple officiel disponible sur github : &lt;a class="link" href="https://github.com/posativ/isso/blob/master/share/isso.conf" target="_blank" rel="noopener"&#13;&#10; &gt;https://github.com/posativ/isso/blob/master/share/isso.conf&lt;/a&gt;&#10;Comme vous pourrez le voir, il nous faut créer un dossier /var/lib/isso et créer un fichier vide pour chacun de nos sites :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mkdir -p /var/lib/isso &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;cd&lt;/span&gt; /var/lib/isso&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;touch comments.yourwebsite1.db comments.yourwebsite2.db&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;On pourra donc compléter la section générale dans la configuration de Isso :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;general&lt;span class="o"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; yourwebsite1&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;host&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; http://yourwebsite1.tld/&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;dbpath&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; /var/lib/isso/yourwebsite1.db&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="importer-des-commentaires"&gt;Importer des commentaires&#13;&#10;&lt;/h3&gt;&lt;p&gt;Avant de démarrer Isso, vous pouvez importer des commentaires provenant de WordPress ou de Disqus. Pour cela utililsez la commande suivante :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;isso -c /path/to/isso.cfg import /path/to/disqus-or-wordpress.xml&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;L&amp;rsquo;opération est à réaliser pour chaque site.&lt;/p&gt;&#10;&lt;h3 id="configuration-du-serveur-gunicorn"&gt;Configuration du serveur Gunicorn&#13;&#10;&lt;/h3&gt;&lt;p&gt;Pour exécuter Isso en multi-site, nous avons besoin d&amp;rsquo;installer Gunicorn. Cela se fait avec pip :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pip install gunicorn&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;On peut désormais lancer Isso, pour cela on définit tout d&amp;rsquo;abord l&amp;rsquo;emplacement de nos fichiers de configurations via la commande :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;ISSO_SETTINGS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;/etc/isso.d/yourwebsite1.cfg;/etc/isso.d/yourwebsite2.cfg&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Puis on lance Gunicorn :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;gunicorn isso.dispatch -b localhost:8080&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="configuration-de-nginx"&gt;Configuration de Nginx&#13;&#10;&lt;/h2&gt;&lt;p&gt;Le serveur Gunicorn écoute sur le port 8080, accessible uniquement localement, nous allons donc utiliser Nginx en tant que reverse-proxy, pour rendre accessible notre système de commentaire via un sous-domaine, et installer un certificat SSL let&amp;rsquo;s encrypt.&lt;/p&gt;&#10;&lt;p&gt;On installe donc Nginx si ce n&amp;rsquo;est pas déjà fait :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;wget -O - https://nginx.org/keys/nginx_signing.key &lt;span class="p"&gt;|&lt;/span&gt; sudo apt-key add -&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;deb http://nginx.org/packages/ubuntu/ &lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;lsb_release -sc&lt;span class="k"&gt;)&lt;/span&gt;&lt;span class="s2"&gt; nginx&amp;#34;&lt;/span&gt; &amp;gt; /etc/apt/sources.list.d/nginx.list&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt update&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt install nginx&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Et on créer notre vhost, ici sur le sous domaine comments.yourdomain.ltd&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-nginx" data-lang="nginx"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;upstream&lt;/span&gt; &lt;span class="s"&gt;app_server&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;server&lt;/span&gt; &lt;span class="n"&gt;127.0.0.1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;8080&lt;/span&gt; &lt;span class="s"&gt;fail_timeout=0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;server&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;listen&lt;/span&gt; &lt;span class="mi"&gt;443&lt;/span&gt; &lt;span class="s"&gt;ssl&lt;/span&gt; &lt;span class="s"&gt;http2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;listen&lt;/span&gt; &lt;span class="s"&gt;[::]:443&lt;/span&gt; &lt;span class="s"&gt;ssl&lt;/span&gt; &lt;span class="s"&gt;http2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;ssl&lt;/span&gt; &lt;span class="no"&gt;on&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;ssl_certificate&lt;/span&gt; &lt;span class="s"&gt;/etc/letsencrypt/live/comments.yourdomain.tld/fullchain.pem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;ssl_certificate_key&lt;/span&gt; &lt;span class="s"&gt;/etc/letsencrypt/live/comments.yourdomain.tld/privkey.pem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;keepalive_timeout&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;server_name&lt;/span&gt; &lt;span class="s"&gt;comments.yourdomain.tld&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;access_log&lt;/span&gt; &lt;span class="s"&gt;/var/log/nginx/comments.yourdomain.tld.access.log&lt;/span&gt; &lt;span class="s"&gt;rt_cache&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;error_log&lt;/span&gt; &lt;span class="s"&gt;/var/log/nginx/comments.yourdomain.tld.error.log&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;location&lt;/span&gt; &lt;span class="s"&gt;/&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;try_files&lt;/span&gt; &lt;span class="nv"&gt;$uri&lt;/span&gt; &lt;span class="s"&gt;@proxy_to_app&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;location&lt;/span&gt; &lt;span class="s"&gt;@proxy_to_app&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;proxy_set_header&lt;/span&gt; &lt;span class="s"&gt;X-Forwarded-For&lt;/span&gt; &lt;span class="nv"&gt;$proxy_add_x_forwarded_for&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;proxy_set_header&lt;/span&gt; &lt;span class="s"&gt;X-Forwarded-Proto&lt;/span&gt; &lt;span class="s"&gt;https&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;proxy_set_header&lt;/span&gt; &lt;span class="s"&gt;Host&lt;/span&gt; &lt;span class="nv"&gt;$http_host&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;proxy_redirect&lt;/span&gt; &lt;span class="no"&gt;off&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;proxy_pass&lt;/span&gt; &lt;span class="s"&gt;http://app_server&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;On installe ensuite acme.sh pour générer notre certificat SSL :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;wget -O - https://get.acme.sh &lt;span class="p"&gt;|&lt;/span&gt; sh&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;source&lt;/span&gt; ~/.bashrc&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Et on génère le certificat via le serveur standalone de validation certbot, en arrêtant le service nginx pour libérer le port 80 et 443, durant la validation.&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;acme.sh --issue -d comments.yourdomain.tld --keylength ec-384 --standalone --pre-hook &lt;span class="s2"&gt;&amp;#34;systemctl stop nginx&amp;#34;&lt;/span&gt; --post-hook &lt;span class="s2"&gt;&amp;#34;systemctl start nginx&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Il ne reste plus qu&amp;rsquo;à déployer le certificat :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# créer le répertoire&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mkdir -p /etc/letsencrypt/live/comments.yourdomain.tld&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# déployer le certificat&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;acme.sh --install-cert -d comments.yourdomain.tld --ecc &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;--cert-file /etc/letsencrypt/live/comments.yourdomain.tld/cert.pem &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;--key-file /etc/letsencrypt/live/comments.yourdomain.tld/key.pem &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;--fullchain-file /etc/letsencrypt/live/comments.yourdomain.tld/fullchain.pem &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;--reloadcmd &lt;span class="s2"&gt;&amp;#34;service nginx restart&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Et à ajouter la configuration suivante dans votre vhost Nginx :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-nginx" data-lang="nginx"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;listen&lt;/span&gt; &lt;span class="mi"&gt;443&lt;/span&gt; &lt;span class="s"&gt;ssl&lt;/span&gt; &lt;span class="s"&gt;http2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;listen&lt;/span&gt; &lt;span class="s"&gt;[::]:443&lt;/span&gt; &lt;span class="s"&gt;ssl&lt;/span&gt; &lt;span class="s"&gt;http2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;ssl_certificate/etc/letsencrypt/live/comments.yourdomain.tld/fullchain.pem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;ssl_certificate_key&lt;/span&gt; &lt;span class="s"&gt;/etc/letsencrypt/live/comments.yourdomain.tld/key.pem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;ssl_trusted_certificate/etc/letsencrypt/live/comments.yourdomain.tld/cert.pem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="lancer-isso-automatiquemement"&gt;Lancer Isso automatiquemement&#13;&#10;&lt;/h3&gt;&lt;p&gt;Pour lancer Isso automatiquement au démarrage de votre machine, nous allons le déclarer en tant que service systemd.&#10;On créer pour cela un fichier &lt;code&gt;/lib/systemd/system/isso.service&lt;/code&gt; avec le contenu suivant :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;Unit&lt;span class="o"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;Description&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;lightweight Disqus alternative&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;Service&lt;span class="o"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;User&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;isso&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;Group&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;isso&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;Environment&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;ISSO_SETTINGS=/etc/isso.d/foo.example.cfg;/etc/isso.d/other.bar.cfg&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;ExecStart&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/usr/local/bin/gunicorn --log-file /var/log/isso.log isso.dispatch -b localhost:8080&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;SyslogIdentifier&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;isso&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;Install&lt;span class="o"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;WantedBy&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;multi-user.target&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Il suffit alors d&amp;rsquo;activer le service avec systemd pour créer un symkink entre le dossier /lib/systemd/system et /etc/systemd/system avant de le lancer.&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;systemctl &lt;span class="nb"&gt;enable&lt;/span&gt; isso.service&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;systemctl start isso.service&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="ajouter-isso-à-son-site"&gt;Ajouter Isso à son site&#13;&#10;&lt;/h2&gt;&lt;p&gt;Si vous tentez d&amp;rsquo;accéder au sous-domaine d&amp;rsquo;Isso, il vous affichera les nom des différents sites sur lesquels vous pouvez installer le module de commentaire, sous la forme :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;/yourblogname&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;/yourblogname2&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;/yourblogname3&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Pour installer Isso sur votre blog, il vous suffit d&amp;rsquo;insérer le code suivant, en remplaçant &lt;code&gt;yourblogname&lt;/code&gt; par le nom de votre blog :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-html" data-lang="html"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;script&lt;/span&gt; &lt;span class="na"&gt;data-isso&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;//comments.example.tld/yourblogname/&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;src&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;//comments.example.tld/yourblogname/js/embed.min.js&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;script&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;section&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;isso-thread&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;section&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Vous pouvez également ajouter des paramètres via ce code, dont la liste est disponible dans la &lt;a class="link" href="https://posativ.org/isso/docs/configuration/client/" target="_blank" rel="noopener"&#13;&#10; &gt;documentation officielle de Isso&lt;/a&gt;.&lt;/p&gt;&#10;</description></item><item><title>Installer Redis 4.0 sur Ubuntu 16.04 LTS</title><link>https://jesuisadmin.fr/installer-redis-4-ubuntu/</link><pubDate>Sat, 16 Sep 2017 15:32:27 +0000</pubDate><guid>https://jesuisadmin.fr/installer-redis-4-ubuntu/</guid><description>&lt;img src="https://jesuisadmin.fr/images/2017/09/installer-redis--1-.png" alt="Featured image of post Installer Redis 4.0 sur Ubuntu 16.04 LTS" /&gt;&lt;p&gt;La nouvelle release 4.0 de Redis est désormais disponible en version stable, cependant si vous souhaitez installer la dernière version de redis-server, &lt;del&gt;il est nécessaire de le compiler.&lt;/del&gt;&lt;/p&gt;&#10;&lt;p&gt;==Edit du 10/10/2017 : redis-server est désormais disponible depuis les dépôts officiel pour Ubuntu 16.04 LTS==. Il vous suffit donc de mettre à jour votre liste de dépôts et d&amp;rsquo;installer redis-server via apt :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;apt update &amp;amp;&amp;amp; apt install redis-server&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Nous allons donc voir dans ce tutoriel, comment compiler redis 4.0 et comment le déclarer en tant que service via systemd, sur Ubuntu 16.04 LTS ou Debian 8/9.&lt;/p&gt;&#10;&lt;p&gt;Il nous faut tout d&amp;rsquo;abord installer les paquets nécessaires pour compiler depuis les sources :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;apt-get install build-essential&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;apt-get install tcl wget&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;On télécharge ensuite la dernière release depuis le site avant d&amp;rsquo;extraire les fichiers :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-gdscript3" data-lang="gdscript3"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;wget&lt;/span&gt; &lt;span class="n"&gt;http&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;//&lt;/span&gt;&lt;span class="n"&gt;download&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;redis&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;io&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;releases&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;redis&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;4.0&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="mf"&gt;1.&lt;/span&gt;&lt;span class="n"&gt;tar&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;gz&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;tar&lt;/span&gt; &lt;span class="n"&gt;xzf&lt;/span&gt; &lt;span class="n"&gt;redis&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;4.0&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="mf"&gt;1.&lt;/span&gt;&lt;span class="n"&gt;tar&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;gz&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;cd&lt;/span&gt; &lt;span class="n"&gt;redis&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;4.0&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;On commence par nettoyer la configuration&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;make distclean&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Puis on lance la compilation :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;make -j $(nproc)&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Avant d&amp;rsquo;installer redis-server, il est préférable d&amp;rsquo;utiliser &lt;code&gt;make test&lt;/code&gt; pour s&amp;rsquo;assurer qu&amp;rsquo;il n&amp;rsquo;y a aucune erreur. Si cette opération se déroule bien, on peut alors installer redis :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;make install&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;redis-server est désormais installé, mais pour faciliter sa gestion et pour qu&amp;rsquo;il démarre automatiquement nous allons le déclarer en tant que service systemd. Pour cela il suffit d&amp;rsquo;aller dans le dossier &lt;code&gt;utils&lt;/code&gt; situé dans le dossier redis-4.0.1, puis d&amp;rsquo;utiliser le script install_server.sh. Vous pourrez alors choisir le nom de votre service redis.&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cd utils&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;./install_server.sh&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;On peut enfin démarrer redis-server, dont le service se nomme par défaut redis_6379:&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;systemctl start redis_6379&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Redis 4.0 est maintenant installé et opérationel sur votre serveur, mais certaines options sont à ajouter dans votre fichier /etc/sysctl.conf pour assurer un bon fonctionnement, notamment la ligne :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;vm.overcommit_memory = 1&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Pour appliquer la modification, utilisez la commande &lt;code&gt;sysctl -p&lt;/code&gt;.&#10;Vous pouvez également utiliser mon fichier de configuration systcl.conf disponible sur mon &lt;a class="link" href="https://git.virtubox.net/virtubox/debian-config/src/master/etc/sysctl.conf" target="_blank" rel="noopener"&#13;&#10; &gt;instance gogs&lt;/a&gt; et qui contient la plupart des options pour optimiser les performances de votre serveur et vous protéger de certaines attaques réseaux du type SYN flood :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;wget -O /etc/sysctl.conf https://git.virtubox.net/virtubox/debian-config/raw/master/etc/sysctl.conf&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sysctl -e -p /etc/sysctl.conf&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Il peut également être nécessaire de désactiver la fonction transparent hugepage de votre kernel qui a normalement pour but d&amp;rsquo;optimiser la gestion de la mémoire. Cela se fait via la commande :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;echo never &amp;gt; /sys/kernel/mm/transparent_hugepage/enabled&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Enfin, si vous souhaitez optimiser la configuration de redis-server, vous pouvez définir les valeurs suivantes dans /etc/redis/redis.conf&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;maxclients 20000&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;tcp-backlog 8192&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>Installer Plesk Onyx sur Ubuntu 16.04 LTS et optimiser la configuration</title><link>https://jesuisadmin.fr/installer-plesk-onyx-ubuntu-16-optimiser/</link><pubDate>Fri, 15 Sep 2017 18:53:00 +0000</pubDate><guid>https://jesuisadmin.fr/installer-plesk-onyx-ubuntu-16-optimiser/</guid><description>&lt;img src="https://jesuisadmin.fr/images/2017/09/Installer-Plesk-Onyx--4-.png" alt="Featured image of post Installer Plesk Onyx sur Ubuntu 16.04 LTS et optimiser la configuration" /&gt;&lt;p&gt;Si pour mon utilisation personnelle, je préfère configurer moi même un serveur avec nginx pour bénéficier des meilleures performances possibles, il m&amp;rsquo;arrive tout de même régulièrement d&amp;rsquo;installer Plesk Onyx.&lt;/p&gt;&#10;&lt;p&gt;Voici donc un tutoriel pour installer Plesk Onyx sur Ubuntu 16.04 LTS avec une configuration optimisée permettant d&amp;rsquo;avoir un serveur stable, sécurisé et performant.&lt;/p&gt;&#10;&lt;p&gt;On commence par optimiser un peu la configuration du kernel via le fichier sysctl.conf :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;wget -O /etc/sysctl.conf https://raw.githubusercontent.com/VirtuBox/ubuntu-nginx-web-server/master/etc/sysctl.conf&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sysctl -p&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;echo never &amp;gt; /sys/kernel/mm/transparent_hugepage/enabled&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;wget -O /etc/security/limits.conf https://raw.githubusercontent.com/VirtuBox/ubuntu-nginx-web-server/master/etc/security/limits.conf&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Par défaut, Plesk Onyx utilise MySQL 5.7 sur Ubuntu Xenial, mais il est tout à fait possible d&amp;rsquo;utiliser MariaDB 10.1. Il suffit pour cela d&amp;rsquo;installer mariadb-server avant de débuter l&amp;rsquo;installation de Plesk.&lt;/p&gt;&#10;&lt;p&gt;On ajoute donc le dépôt MariaDB 10.1 :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-gdscript3" data-lang="gdscript3"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;curl&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;sS&lt;/span&gt; &lt;span class="n"&gt;https&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;//&lt;/span&gt;&lt;span class="n"&gt;downloads&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;mariadb&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;com&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;MariaDB&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;mariadb_repo_setup&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;sudo&lt;/span&gt; &lt;span class="n"&gt;bash&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="n"&gt;mariadb&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;server&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;version&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;10.1&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="n"&gt;skip&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;maxscale&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Puis on met à jour la liste des dépôts avant d&amp;rsquo;installer MariaDB. Durant l&amp;rsquo;installation, laissez le mot de passe root vide. Il sera automatiquement mis à jour durant l&amp;rsquo;installation de Plesk.&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt update&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt install mariadb-server&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;MariaDB 10.1 est désormais installé sur notre serveur, nous pouvons donc passer à l&amp;rsquo;installation de Plesk en mode personnalisé. Il vous suffit de suivre les étapes pour choisir les composants et les extensions que vous souhaitez installer :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sh &amp;lt;(curl https://autoinstall.plesk.com/plesk-installer || wget -O - https://autoinstall.plesk.com/plesk-installer)&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Une fois l&amp;rsquo;installation terminée, n&amp;rsquo;ouvrez pas tout de suite l&amp;rsquo;interface web pour réaliser la configuration initiale. Nous allons tout d&amp;rsquo;abord activer le mode vps_optimized. Ce dernier désactive un bon nombre de modules apache, qui ne sont pas nécessaires sur un VPS.&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;plesk bin vps_optimized --turn-on&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Vous pouvez enfin définir le langage par défaut via la CLI de Plesk :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;plesk bin locales --set-default fr-FR&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Pour sécuriser notre serveur, nous allons également activer l&amp;rsquo;option pci_compliance, cela va configurer les différents services pour rendre le serveur pci compliant.&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;plesk sbin pci_compliance_resolver --enable all&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Si comme moi, vous pensez qu&amp;rsquo;une clé d&amp;rsquo;échange Diffie-Hellman de 2048 bits est insuffisant, vous pouvez sans problème utiliser une clé ECC.&lt;/p&gt;&#10;&lt;p&gt;Il vous suffira ensuite de modifier la configuration SSL de Nginx, avec une meilleure suite de ciphers, et notre clé Diffie-Hellman :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;nano /etc/nginx/conf.d/ssl&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Voici le contenu de mon fichier de configuration SSL pour Nginx :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ssl_ciphers &amp;#39;EECDH+AESGCM:EECDH+CHACHA20&amp;#39;;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ssl_prefer_server_ciphers on;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ssl_protocols TLSv1.2;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ssl_ecdh_curve secp384r1;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ssl_session_cache shared:SSL:20m;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ssl_session_timeout 15m;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ssl_session_tickets off;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Il vous suffit ensuite de reload nginx pour appliquer les changement :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-gdscript3" data-lang="gdscript3"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;nginx&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;t&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;service&lt;/span&gt; &lt;span class="n"&gt;nginx&lt;/span&gt; &lt;span class="n"&gt;reload&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Après avoir optimiser la configuration Nginx, nous pouvons passer à Apache. Pour cette partie, je me contente de modifier le fichier &lt;code&gt;/etc/apache2/conf-enabled/security.conf&lt;/code&gt; et d&amp;rsquo;y ajouter les headers suivants :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Header set X-Content-Type-Options: &amp;#34;nosniff&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Header set X-Frame-Options: &amp;#34;sameorigin&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Header set Referrer-Policy &amp;#34;strict-origin-when-cross-origin&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Header set x-xss-protection &amp;#34;1; mode=block&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;On relance Apache via la commande &lt;code&gt;service apache2 restart&lt;/code&gt;&lt;/p&gt;&#10;&lt;p&gt;Vous pouvez désormais vous connecter à l&amp;rsquo;interface Plesk via l&amp;rsquo;adresse affichée après l&amp;rsquo;installation. Vous pouvez à tout moment générer une autre adresse de connexion avec la commande &lt;code&gt;plesk login&lt;/code&gt;.&lt;/p&gt;&#10;&lt;p&gt;Si vous souhaitez modifier la configuration générale de Plesk, cela est faisable en utilisant l&amp;rsquo;extension Panel.ini editor, ou en modifiant directement le fichier /usr/local/psa/admin/conf/panel.ini. L&amp;rsquo;extension vous permet de définir depuis l&amp;rsquo;interface web vos propre variables pour les options Plesk, ainsi que pour les extensions.&#10;Par exemple, pour que l&amp;rsquo;extension let&amp;rsquo;s encrypt utilise des clés RSA de 4096 bits plutôt que de 2048 bits, il vous suffit d&amp;rsquo;ajouter au fichier panel.ini (via le fichier ou via l&amp;rsquo;extension dans la partie editor), les lignes suivantes :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[ext-letsencrypt]&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;renew-before-expiration = 45&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;rsa-key-size = 4096&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Vous pouvez également désactivé les publicités pour certaines extensions, et les propositions de certificats SSL Symantec en ajoutant les lignes suivantes :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[ext-security-advisor]&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;promoteSymantec = false&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[ext-catalog]&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;contextAds = off&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Vous pouvez appliquer ces configurations en téléchargeant directement mon ficher panel.ini&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;wget https://raw.githubusercontent.com/VirtuBox/ubuntu-plesk-onyx/master/usr/local/psa/admin/conf/panel.ini -O /usr/local/psa/admin/conf/panel.ini&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Il est même possible d&amp;rsquo;aller plus loin avec Plesk Onyx, puisque vous pouvez compiler Nginx avec les modules de votre choix afin de remplacer le paquet installé par Plesk.&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;Edit du 11/12/2017 :&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;Je propose désormais un script bash pour compiler la dernière release mainline de Nginx (v1.13.8) avec certains modules tel que Brotli, support de TLS 1.3, dynamic-tls-records-patch, pagespeed etc &amp;hellip;&lt;/p&gt;&#10;&lt;p&gt;Le script est pour le moment mis à jour uniquement pour Plesk Onyx sur Ubuntu 16.04 LTS, vous pouvez trouver toutes les informations sur &lt;a class="link" href="https://github.com/VirtuBox/plesk-nginx" target="_blank" rel="noopener"&#13;&#10; &gt;mon dépôt Github&lt;/a&gt;.&lt;/p&gt;&#10;&lt;p&gt;N&amp;rsquo;hésitez pas à ouvrir une Issue sur Github si vous rencontrez des erreurs durant la compilation.&lt;/p&gt;&#10;</description></item><item><title>Ghost 1.0 - Installer Ghost avec ghost-cli et Nginx - Migrer depuis wordpress</title><link>https://jesuisadmin.fr/ghost-deploiement-ghost-cli-migration-wordpress/</link><pubDate>Mon, 28 Aug 2017 14:24:14 +0000</pubDate><guid>https://jesuisadmin.fr/ghost-deploiement-ghost-cli-migration-wordpress/</guid><description>&lt;img src="https://jesuisadmin.fr/images/2018/07/Sans-titre.jpg" alt="Featured image of post Ghost 1.0 - Installer Ghost avec ghost-cli et Nginx - Migrer depuis wordpress" /&gt;&lt;p&gt;Ghost à publié sa nouvelle release 1.0, qui introduit également l&amp;rsquo;outil ghost-cli permettant d&amp;rsquo;installer ghost, de le mettre à jour et d&amp;rsquo;intéragir plus facilement avec la plateforme.&lt;/p&gt;&#10;&lt;p&gt;Le thème de base &amp;ldquo;casper&amp;rdquo; a également été mis à jour, et je trouve le nouveau design absolument génial, bien que j&amp;rsquo;ai effectué certaines modifications dans les styles, notamment concernant la dimensions des images.&lt;/p&gt;&#10;&lt;p&gt;Je n&amp;rsquo;ai donc pas hésité trop longtemps, car je trouvais déjà que Ghost était une solution très intéressante pour écrire des articles, sans avoir pour autant à ajouter des dizaines de plugins comme sur wordpress.&lt;/p&gt;&#10;&lt;p&gt;Je vais donc expliquer dans cet article comment installer Ghost via l&amp;rsquo;outil ghost-cli, et comment réaliser la migration depuis WordPress.&lt;/p&gt;&#10;&lt;p&gt;Pour résumer les fonctionnalités principales de Ghost :&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Articles en markdown&lt;/li&gt;&#10;&lt;li&gt;Organisation des articles par tags&lt;/li&gt;&#10;&lt;li&gt;Support natif des meta datas&lt;/li&gt;&#10;&lt;li&gt;Support natif de l&amp;rsquo;AMP&lt;/li&gt;&#10;&lt;li&gt;Application Desktop&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;De quoi avons nous besoin ?&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Un VPS avec Ubuntu 16.04 LTS&lt;/li&gt;&#10;&lt;li&gt;Un serveur MySQL&lt;/li&gt;&#10;&lt;li&gt;NGINX&lt;/li&gt;&#10;&lt;li&gt;Node v6&lt;/li&gt;&#10;&lt;li&gt;Un utilisateur avec sudo&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="installation-des-pré-requis"&gt;Installation des pré-requis&#13;&#10;&lt;/h3&gt;&lt;p&gt;On commence par créer un utilisateur et lui donner les droits sudo, puis on se connecte via cet utilisateur. &lt;strong&gt;Cet utilisateur ne doit pas s&amp;rsquo;appeller ghost, car l&amp;rsquo;utilisateur ghost sera automatiquement ajouté par ghost-cli&lt;/strong&gt;&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;adduser --disabled-password --disabled-login monghost&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;usermod -aG sudo monghost&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;su - monghost&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;On met à jour la liste des paquets et le serveur&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt-get update&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt-get upgrade&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;On installe la dernière release de nginx&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;wget -O - https://nginx.org/keys/nginx_signing.key | sudo apt-key add -&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo echo &amp;#34;deb http://nginx.org/packages/ubuntu/ $(lsb_release -sc) nginx&amp;#34; &amp;gt; /etc/apt/sources.list.d/nginx.list&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt update&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt install nginx&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;On installe MariaDB 10.3&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-gdscript3" data-lang="gdscript3"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;curl&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;sS&lt;/span&gt; &lt;span class="n"&gt;https&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;//&lt;/span&gt;&lt;span class="n"&gt;downloads&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;mariadb&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;com&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;MariaDB&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;mariadb_repo_setup&lt;/span&gt; \&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;sudo&lt;/span&gt; &lt;span class="n"&gt;bash&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="n"&gt;mariadb&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;server&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;version&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;10.3&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="n"&gt;skip&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;maxscale&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;sudo&lt;/span&gt; &lt;span class="n"&gt;apt&lt;/span&gt; &lt;span class="n"&gt;update&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;sudo&lt;/span&gt; &lt;span class="n"&gt;apt&lt;/span&gt; &lt;span class="n"&gt;install&lt;/span&gt; &lt;span class="n"&gt;mariadb&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;server&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;On installe nodejs v8 LTS&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt-get install -y nodejs&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="installation-de-ghost"&gt;Installation de Ghost&#13;&#10;&lt;/h2&gt;&lt;p&gt;On commence par installer ghost-cli&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo npm i -g ghost-cli&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Puis on créer le répertoire pour notre blog&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-gdscript3" data-lang="gdscript3"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;sudo&lt;/span&gt; &lt;span class="n"&gt;mkdir&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="k"&gt;var&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;www&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;ghost&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;sudo&lt;/span&gt; &lt;span class="n"&gt;chown&lt;/span&gt; &lt;span class="n"&gt;monghost&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;monghost&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="k"&gt;var&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;www&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;ghost&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;cd&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="k"&gt;var&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;www&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;ghost&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Et on peut enfin lancer l&amp;rsquo;installation de Ghost, qui est totalement interactive et qui va :&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Configurer la base de donnée&lt;/li&gt;&#10;&lt;li&gt;Installer la dernière version de Ghost&lt;/li&gt;&#10;&lt;li&gt;Configurer Ghost&lt;/li&gt;&#10;&lt;li&gt;Configurer Nginx et installer un certificat SSL avec Let&amp;rsquo;s Encrypt&lt;/li&gt;&#10;&lt;li&gt;Déclarer Ghost en tant que service via systemd&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Vous avez le choix pour chacune des étapes, de le faire via ghost-cli ou manuellement. Dans le cas de Nginx par exemple, si vous utiliser une configuration particulière, il sera préférable d&amp;rsquo;ajouter votre vhost manuellement.&lt;/p&gt;&#10;&lt;p&gt;On lance donc l&amp;rsquo;installation avec :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ghost install&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="configuration-de-nginx"&gt;configuration de nginx&#13;&#10;&lt;/h3&gt;&lt;p&gt;Pour la configuration de Nginx, pour des performances optimales, j&amp;rsquo;utilise personnellement la fonctionnalité proxy-cache d&amp;rsquo;Nginx pour mettre en cache les pages du blog, cette technique est également appelée micro-caching puisque le délai d&amp;rsquo;expiration du cache est relative court mais autorise par contre Nginx à utiliser les fichiers en cache dans le cas ou l&amp;rsquo;upstream (le serveur nodejs Ghost dans ce cas) est indisponible.&lt;/p&gt;&#10;&lt;p&gt;Pour cela je commence par créer un répertoire pour stocker le cache nginx :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-gdscript3" data-lang="gdscript3"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;sudo&lt;/span&gt; &lt;span class="n"&gt;mkdir&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="k"&gt;var&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;cache&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;nginx&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="k"&gt;static&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;sudo&lt;/span&gt; &lt;span class="n"&gt;chown&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;R&lt;/span&gt; &lt;span class="n"&gt;www&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;www&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="k"&gt;var&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;cache&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;nginx&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Je peux ensuite créer mon vhost et définir le stockage du cache dans ce répertoire&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-nginx" data-lang="nginx"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;proxy_cache_path&lt;/span&gt; &lt;span class="s"&gt;/var/cache/nginx/static&lt;/span&gt; &lt;span class="s"&gt;levels=1:2&lt;/span&gt; &lt;span class="s"&gt;keys_zone=GHOST:75m&lt;/span&gt; &lt;span class="s"&gt;inactive=24h&lt;/span&gt; &lt;span class="s"&gt;max_size=512m&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;server&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# redirection du http vers https&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;listen&lt;/span&gt; &lt;span class="mi"&gt;80&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;listen&lt;/span&gt; &lt;span class="s"&gt;[::]:80&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;server_name&lt;/span&gt; &lt;span class="s"&gt;votredomain.tld&lt;/span&gt; &lt;span class="s"&gt;www.votredomain.tld&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;301&lt;/span&gt; &lt;span class="s"&gt;https://votredomain.tld&lt;/span&gt;&lt;span class="nv"&gt;$request_uri&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;server&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# redirection du www vers non-www&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;server_name&lt;/span&gt; &lt;span class="s"&gt;www.votredomain.tld&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s"&gt;listen&lt;/span&gt; &lt;span class="mi"&gt;443&lt;/span&gt; &lt;span class="s"&gt;ssl&lt;/span&gt; &lt;span class="s"&gt;http2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;listen&lt;/span&gt; &lt;span class="s"&gt;[::]:443&lt;/span&gt; &lt;span class="s"&gt;ssl&lt;/span&gt; &lt;span class="s"&gt;http2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;ssl&lt;/span&gt; &lt;span class="no"&gt;on&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;ssl_certificate&lt;/span&gt; &lt;span class="s"&gt;/etc/letsencrypt/live/votredomaine.tld/fullchain.pem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;ssl_certificate_key&lt;/span&gt; &lt;span class="s"&gt;/etc/letsencrypt/live/votredomaine.tld/key.pem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;ssl_trusted_certificate&lt;/span&gt; &lt;span class="s"&gt;/etc/letsencrypt/live/votredomaine.tld/cert.pem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;301&lt;/span&gt; &lt;span class="s"&gt;https://votredomain.tld&lt;/span&gt;&lt;span class="nv"&gt;$request_uri&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;server&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;server_name&lt;/span&gt; &lt;span class="s"&gt;votredomain.tld&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;root&lt;/span&gt; &lt;span class="s"&gt;/var/www/votredomain.tld/system/nginx-root&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;listen&lt;/span&gt; &lt;span class="mi"&gt;443&lt;/span&gt; &lt;span class="s"&gt;ssl&lt;/span&gt; &lt;span class="s"&gt;http2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;listen&lt;/span&gt; &lt;span class="s"&gt;[::]:443&lt;/span&gt; &lt;span class="s"&gt;ssl&lt;/span&gt; &lt;span class="s"&gt;http2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;ssl&lt;/span&gt; &lt;span class="no"&gt;on&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;ssl_certificate&lt;/span&gt; &lt;span class="s"&gt;/etc/letsencrypt/live/votredomaine.tld/fullchain.pem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;ssl_certificate_key&lt;/span&gt; &lt;span class="s"&gt;/etc/letsencrypt/live/votredomaine.tld/key.pem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;ssl_trusted_certificate&lt;/span&gt; &lt;span class="s"&gt;/etc/letsencrypt/live/votredomaine.tld/cert.pem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;access_log&lt;/span&gt; &lt;span class="s"&gt;/var/log/nginx/votredomaine.tld.access.log&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;error_log&lt;/span&gt; &lt;span class="s"&gt;/var/log/nginx/votredomaine.tld.error.log&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;location&lt;/span&gt; &lt;span class="s"&gt;/&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;proxy_cache&lt;/span&gt; &lt;span class="s"&gt;STATIC&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;proxy_cache_valid&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt; &lt;span class="mi"&gt;5m&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;proxy_cache_valid&lt;/span&gt; &lt;span class="mi"&gt;404&lt;/span&gt; &lt;span class="mi"&gt;1m&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;proxy_cache_key&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$scheme$request_method$host$request_uri&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;proxy_cache_use_stale&lt;/span&gt; &lt;span class="s"&gt;http_500&lt;/span&gt; &lt;span class="s"&gt;http_502&lt;/span&gt; &lt;span class="s"&gt;http_503&lt;/span&gt; &lt;span class="s"&gt;http_504&lt;/span&gt; &lt;span class="s"&gt;http_403&lt;/span&gt; &lt;span class="s"&gt;http_404&lt;/span&gt; &lt;span class="s"&gt;updating&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;proxy_cache_background_update&lt;/span&gt; &lt;span class="no"&gt;on&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;proxy_ignore_headers&lt;/span&gt; &lt;span class="s"&gt;X-Accel-Expires&lt;/span&gt; &lt;span class="s"&gt;Expires&lt;/span&gt; &lt;span class="s"&gt;Cache-Control&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;proxy_ignore_headers&lt;/span&gt; &lt;span class="s"&gt;Set-Cookie&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;proxy_hide_header&lt;/span&gt; &lt;span class="s"&gt;Set-Cookie&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;proxy_hide_header&lt;/span&gt; &lt;span class="s"&gt;X-powered-by&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;proxy_set_header&lt;/span&gt; &lt;span class="s"&gt;X-Forwarded-For&lt;/span&gt; &lt;span class="nv"&gt;$proxy_add_x_forwarded_for&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;proxy_set_header&lt;/span&gt; &lt;span class="s"&gt;X-Forwarded-Proto&lt;/span&gt; &lt;span class="nv"&gt;$scheme&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;proxy_set_header&lt;/span&gt; &lt;span class="s"&gt;X-Real-IP&lt;/span&gt; &lt;span class="nv"&gt;$remote_addr&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;proxy_set_header&lt;/span&gt; &lt;span class="s"&gt;Host&lt;/span&gt; &lt;span class="nv"&gt;$http_host&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;proxy_pass&lt;/span&gt; &lt;span class="s"&gt;http://127.0.0.1:2368&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;location&lt;/span&gt; &lt;span class="p"&gt;~&lt;/span&gt; &lt;span class="sr"&gt;^/(?:ghost|signout)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;proxy_set_header&lt;/span&gt; &lt;span class="s"&gt;X-Forwarded-For&lt;/span&gt; &lt;span class="nv"&gt;$proxy_add_x_forwarded_for&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;proxy_set_header&lt;/span&gt; &lt;span class="s"&gt;X-Forwarded-Proto&lt;/span&gt; &lt;span class="nv"&gt;$scheme&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;proxy_set_header&lt;/span&gt; &lt;span class="s"&gt;X-Real-IP&lt;/span&gt; &lt;span class="nv"&gt;$remote_addr&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;proxy_pass&lt;/span&gt; &lt;span class="s"&gt;http://127.0.0.1:2368&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;add_header&lt;/span&gt; &lt;span class="s"&gt;Cache-Control&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;no-cache,&lt;/span&gt; &lt;span class="s"&gt;private,&lt;/span&gt; &lt;span class="s"&gt;no-store,&lt;/span&gt; &lt;span class="s"&gt;must-revalidate,&lt;/span&gt; &lt;span class="s"&gt;max-stale=0,&lt;/span&gt; &lt;span class="s"&gt;post-check=0,&lt;/span&gt; &lt;span class="s"&gt;pre-check=0&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;location&lt;/span&gt; &lt;span class="s"&gt;/content/images&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;alias&lt;/span&gt; &lt;span class="s"&gt;/var/wwww/votredomaine.tld/content/images&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;access_log&lt;/span&gt; &lt;span class="no"&gt;off&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;expires&lt;/span&gt; &lt;span class="s"&gt;max&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;location&lt;/span&gt; &lt;span class="s"&gt;/assets&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;alias&lt;/span&gt; &lt;span class="s"&gt;/var/wwww/votredomaine.tld/content/themes/casper/assets&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;access_log&lt;/span&gt; &lt;span class="no"&gt;off&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;expires&lt;/span&gt; &lt;span class="s"&gt;30d&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;client_max_body_size&lt;/span&gt; &lt;span class="mi"&gt;50m&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Pour installer le certificat SSL, j&amp;rsquo;utilise actuellement acme.sh, un client Acme écrit en bash que je trouve plus facile à utiliser que certbot, notamment pour la mise en place des renouvellement automatique.&lt;/p&gt;&#10;&lt;p&gt;Je vous met le lien de mon article qui explique comment installer acme.sh et comment générer un certificat SSL : &lt;a class="link" href="https://kb.virtubox.net/fr/knowledgebase/installer-un-certificat-ssl-lets-encrypt-avec-acme-sh/" target="_blank" rel="noopener"&#13;&#10; &gt;Installer un certificat SSL Let&amp;rsquo;s Encrypt avec Acme.sh&lt;/a&gt;&lt;/p&gt;&#10;&lt;h3 id="mettre-à-jour-ghost"&gt;Mettre à jour Ghost&#13;&#10;&lt;/h3&gt;&lt;p&gt;Là aussi, la nouvelle CLI de Ghost facilite vraiment le processus de mise à jour, puisqu&amp;rsquo;il suffit de se rendre dans le dossier de votre blog en tant que l&amp;rsquo;utilisateur définit pour utiliser la CLI puis d&amp;rsquo;utiliser &lt;code&gt;ghost update&lt;/code&gt;&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-gdscript3" data-lang="gdscript3"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;su&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;monghost&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;cd&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="k"&gt;var&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;www&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;ghost&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;ghost&lt;/span&gt; &lt;span class="n"&gt;update&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="migrer-depuis-wordpress"&gt;Migrer depuis WordPress&#13;&#10;&lt;/h2&gt;&lt;p&gt;Pour migrer depuis WordPress, il faut tout d&amp;rsquo;abord extraire votre contenu au format .json en utilisant le plugin officiel publié par Ghost. Il est disponible dans &lt;a class="link" href="https://wordpress.org/plugins/ghost/" target="_blank" rel="noopener"&#13;&#10; &gt;l&amp;rsquo;annuaire de plugins WordPress&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;Après avoir extrait votre contenu, vous pourrez l&amp;rsquo;importer dans Ghost, il est restera cependant quelques tâches à réaliser manuellement :&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Les images devront être importées manuellement ou hébergées sur un hébergeur externe&lt;/li&gt;&#10;&lt;li&gt;Les commentaires devront être importés sur une plateforme comme Disqus ou sur une solution self-hosted comme Isso&lt;/li&gt;&#10;&lt;li&gt;Les méta-data de vos articles devront être ajoutées manuellement, l&amp;rsquo;importateur Ghost ne traite que le contenu des articles et les tags&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Je vais traiter dans un prochain article comment installer Isso pour héberger l&amp;rsquo;ensemble de vos commentaires et ne pas avoir à utiliser une solution comme disqus.&lt;/p&gt;&#10;</description></item><item><title>Mettre en place un serveur mail avec mail-in-a-box sur Ubuntu 18.04 LTS</title><link>https://jesuisadmin.fr/mettre-place-serveur-mail-mail-in-a-box/</link><pubDate>Sat, 08 Jul 2017 14:07:30 +0000</pubDate><guid>https://jesuisadmin.fr/mettre-place-serveur-mail-mail-in-a-box/</guid><description>&lt;img src="https://jesuisadmin.fr/images/2019/07/mailinabox.jpg" alt="Featured image of post Mettre en place un serveur mail avec mail-in-a-box sur Ubuntu 18.04 LTS" /&gt;&lt;p&gt;Il n’est pas toujours facile de mettre en place un serveur mail, notamment si lorsque l’on souhaite utiliser l’ensemble des protocoles qui assurent l’authentification des emails tel que SPF, DKIM et DMARC.&#10;C’est pourquoi je vais vous présenter dans ce tutoriel une solution pour installer un serveur mail sécurisé et stable avec &lt;a class="link" href="https://mailinabox.email" target="_blank" rel="noopener"&#13;&#10; &gt;mail-in-a-box&lt;/a&gt;.&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;Article mis à jour le 29/07/2019&lt;/strong&gt;&lt;/p&gt;&#10;&lt;h2 id="pourquoi-mail-in-a-box-"&gt;Pourquoi mail-in-a-box ?&#13;&#10;&lt;/h2&gt;&lt;p&gt;J’ai testé de nombreuses autres solutions dont notamment Modoboa, Mailcow ou encore iRedMail, et mail-in-a-box est d’après moi la solution la plus simple à déployer, elle propose l’ensemble des fonctionnalités requises pour avoir un serveur mail stable, sécurisé et dispose d&amp;rsquo;un système de backup.&lt;/p&gt;&#10;&lt;p&gt;Les principales fonctionnalités sont :&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Serveur Mail supportant les protocoles : SPF, DKIM &amp;amp; DMARC&lt;/li&gt;&#10;&lt;li&gt;Serveur DNS avec DNSSEC&lt;/li&gt;&#10;&lt;li&gt;Certificats SSL/TLS Let’s Encrypt&lt;/li&gt;&#10;&lt;li&gt;Webmail Roundcube&lt;/li&gt;&#10;&lt;li&gt;Gestion et synchronisation des contacts &amp;amp; calendrier via OwnCloud&lt;/li&gt;&#10;&lt;li&gt;Backup local, Amazon S3 ou via Rsync&lt;/li&gt;&#10;&lt;li&gt;Statud check hebdomadaire incluant le blacklisting de l’IP du serveur&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="installer-mail-in-a-box"&gt;Installer mail-in-a-box&#13;&#10;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;Pré-requis :&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;– Un VPS avec Ubuntu 18.04 LTS et 2Go de RAM&#10;– Un nom de domaine&#10;– Se connecter au serveur distant avec des clés SSH&lt;/p&gt;&#10;&lt;p&gt;On passe à l’installation :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl -s https://mailinabox.email/setup.sh &lt;span class="p"&gt;|&lt;/span&gt; sudo bash&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Lors de l’installation, choisissez le hostname de votre serveur en utilisant un sous-domaine. Par défaut mail-in-a-box utilisera box.votredomaine.com&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="Screenshot_55" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://jesuisadmin.fr/images/2017/08/Screenshot_55.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;Définissez ensuite la première adresse email que vous souhaitez créer, ce sera également votre nom d’utilisateur pour accéder à l’interface d’administration&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="Screenshot_54" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://jesuisadmin.fr/images/2017/08/Screenshot_54.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;Sélectionnez votre zone géographique pour mettre à jour le serveur de temps puis validez.&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="Screenshot_56" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://jesuisadmin.fr/images/2017/08/Screenshot_56.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;Sélectionnez ensuite la ville correspondant à votre fuseau horaire, dans mon cas Paris.&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="Screenshot_57" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://jesuisadmin.fr/images/2017/08/Screenshot_57.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;Une fois l’installation terminée, vous pourrez accéder au panel d’administration via l’adresse :&#10;&lt;code&gt;https://IP-de-Votre-Serveur/admin&lt;/code&gt;&lt;/p&gt;&#10;&lt;h3 id="configurer-le-serveur-mail"&gt;Configurer le serveur mail&#13;&#10;&lt;/h3&gt;&lt;p&gt;Vous avez ensuite le choix d’utiliser la box pour gérer vos DNS ou non. En effet Mail-in-a-box inclut un serveur DNS qui mettra en place automatiquement l’ensemble des enregistrements DNS nécessaires pour utiliser le serveur en tant que serveur mail pour votre domaine.&lt;/p&gt;&#10;&lt;p&gt;Cependant, vous pouvez très bien utiliser un service DNS externe et il vous suffira dans ce cas de vous rendre sur la page System &amp;gt; External DNS pour obtenir un listing complet des enregistrements DNS. Il vous faudra alors copier ces enregistrements du côté de votre registar pour utiliser la box en tant que serveur mail.&lt;/p&gt;&#10;&lt;p&gt;Les enregistrements nécessaires pour utiliser la box en tant que serveur mail sont :&lt;/p&gt;&#10;&lt;p&gt;&lt;code&gt;votredomaine.com MX(10) &amp;quot;box.votredomaine.com&amp;quot;&lt;/code&gt; : pour définir la box en tant que serveur mail principal&lt;/p&gt;&#10;&lt;p&gt;&lt;code&gt;votredomaine.com TXT &amp;quot;v=spf1 a:box.votredomaine.com -all&amp;quot;&lt;/code&gt; : pour spécifier que la box est le seul serveur autorisé à envoyer des emails pour ce domaine&lt;/p&gt;&#10;&lt;p&gt;&lt;code&gt;_dmarc.votredomaine.com TXT &amp;quot;v=DMARC1; p=quarantine&amp;quot;&lt;/code&gt; : pour indiquer que les emails ne respectant pas les règles DKIM ou SPF doivent être envoyé en quarantaine.&lt;/p&gt;&#10;&lt;p&gt;&lt;code&gt;mail._domainkey.votredomaine.com TXT &amp;quot;v=DKIM1; k=rsa; s=email; p=la-signature-très-longue-pour-le-dkim&amp;quot;&lt;/code&gt; : qui correspond à la signature DKIM utilisée pour signer les emails sortant de votre serveur.&lt;/p&gt;&#10;&lt;p&gt;Mail-in-a-box ajoute également les enregistrements associés au sous domaine www pour éviter que des emails soient envoyés via &lt;a class="link" href="https://www.votredomaine.tld" target="_blank" rel="noopener"&#13;&#10; &gt;www.votredomaine.tld&lt;/a&gt;. Ils sont facultatifs mais cela ne coûte rien de les mettre en place.&lt;/p&gt;&#10;&lt;p&gt;Une fois les enregistrements DNS configurés pour le domaine de votre box, vous pourrez aller dans l’onglet System TLS (SSL) Certificates, et installer un certificat SSL Let’s Encrypt pour sécuriser votre serveur web et mail.&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="Screenshot_58" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://jesuisadmin.fr/images/2017/08/Screenshot_58.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;Une fois le processus terminé, vous pourrez accéder à l’interface d’administration via l’adresse : &lt;a class="link" href="https://box.votredomaine.com/admin" target="_blank" rel="noopener"&#13;&#10; &gt;https://box.votredomaine.com/admin&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;N’oubliez pas également de définir le reverse-DNS sur l’IP du serveur. Cela se fait via le panel de gestion de votre VPS et nécessite que l’enregistrement DNS associé soit existant. Dans cet exemple, le reverse DNS à spécifié sur l’IP du serveur est box.vtbox.xyz&lt;/p&gt;&#10;&lt;h3 id="connecter-un-client-mail"&gt;Connecter un client mail&#13;&#10;&lt;/h3&gt;&lt;p&gt;Pour connecter vos clients mail, l’adresse pour les services pop/imap et smtp sera box.votredomaine.com. Les ports à utiliser pour se connecter avec SSL/TLS sont :&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;IMAP&lt;/strong&gt; : 993 avec SSL/TLS&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;POP&lt;/strong&gt; : 995 avec SSL/TLS&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;SMTP&lt;/strong&gt; : 587 avec TLS&lt;/p&gt;&#10;&lt;h3 id="ajouter-un-domaine"&gt;Ajouter un domaine&#13;&#10;&lt;/h3&gt;&lt;p&gt;Pour ajouter un domaine, il vous suffit d’aller dans l’onglet Mail &amp;gt; Users et d’ajouter une adresse email utilisant un autre domaine que celui de votre box.&lt;/p&gt;&#10;&lt;p&gt;Mail-in-a-box mettra automatiquement en place les enregistrements DNS associés et vous n’aurez alors qu’à modifier les nameservers du nouveau domaine, ou les retrouver dans l’onglet External DNS si vous souhaitez les copier via votre registar.&lt;/p&gt;&#10;&lt;h3 id="mettre-à-jour-mail-in-a-box"&gt;Mettre à jour mail-in-a-box&#13;&#10;&lt;/h3&gt;&lt;p&gt;Pour la mise à jour de votre serveur mail, rien de plus simple, puisqu&amp;rsquo;il vous suffit d&amp;rsquo;utiliser à nouveau la commande d&amp;rsquo;installation :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl -s https://mailinabox.email/setup.sh &lt;span class="p"&gt;|&lt;/span&gt; sudo bash&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="backup--migration"&gt;Backup &amp;amp; Migration&#13;&#10;&lt;/h3&gt;&lt;p&gt;Le processus de backup de mail-in-a-box est relativement simple, puisque par défaut les backups sont stockés dans le répertoire &lt;code&gt;/home/user-data/backup&lt;/code&gt;.&#10;Dans ce répertoire, vous trouverez un fichier &lt;code&gt;secret_key.txt&lt;/code&gt; qui contient la clé privée utilisée pour chiffrer les sauvegardes stockées dans le répertoire encrypted.&lt;/p&gt;&#10;&lt;p&gt;Pour migrer ou restaurer un serveur depuis un sauvegarde, il vous suffit de réinstaller mail-in-a-box sur un serveur, avant de transférer le dernier backup dont vous disposez ainsi que la clé privée.&lt;/p&gt;&#10;&lt;p&gt;Vous pourrez ensuite restaurer les données en utilisant l&amp;rsquo;outil duplicity :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;PASSPHRASE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;cat your_backup_secret_key_file.txt&lt;span class="k"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo -E duplicity restore --force file:///emplacement/des/backup /home/user-data/&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Il suffira ensuite d&amp;rsquo;utiliser la commande &lt;code&gt;mailinabox&lt;/code&gt; pour appliquer à nouveau la configuration du serveur :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo mailinabox&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>Installer un certificat SSL Cloudflare Origin avec Nginx</title><link>https://jesuisadmin.fr/installer-un-certificat-ssl-cloudflare-origin-avec-nginx/</link><pubDate>Thu, 20 Apr 2017 22:15:57 +0000</pubDate><guid>https://jesuisadmin.fr/installer-un-certificat-ssl-cloudflare-origin-avec-nginx/</guid><description>&lt;img src="https://jesuisadmin.fr/images/2018/07/cloudflare-origin.jpg" alt="Featured image of post Installer un certificat SSL Cloudflare Origin avec Nginx" /&gt;&lt;p&gt;Il s’agit peut-être de la fonctionnalité la plus intéressante avec Cloudflare, la possibilité d’installer un certificat SSL fournit par Cloudflare sur votre serveur web. Cela permet de chiffrer les connexions entre votre serveur et les serveurs de Cloudflare, et vous pouvez générer un certificat valide pour 15 ans, soit largement plus que les 90 jours d’un certificat Let’s Encrypt.&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="Cloudflare SSL Full Strict " loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://jesuisadmin.fr/images/2017/08/strict-ssl.png"&gt;&lt;/p&gt;&#10;&lt;h3 id="générer-un-certificat-ainsi-quune-clé-privée-avec-cloudflare"&gt;Générer un certificat ainsi qu’une clé privée avec Cloudflare&#13;&#10;&lt;/h3&gt;&lt;p&gt;Pour commencer, vous devez vous rendre dans la partie “Crypto” du domaine pour lequel vous souhaitez générer un certificat. Vous trouverez alors la section &lt;strong&gt;Origin Certificates&lt;/strong&gt; dans laquelle nous allons pouvoir générer notre certificat SSL ainsi que notre clé privée.&lt;/p&gt;&#10;&lt;p&gt;Vous pouvez donc cliquer comme dans l’exemple ci-dessous sur le bouton Create Certificate.&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="Créer un certificat SSL Cloudflare" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://jesuisadmin.fr/images/2017/08/ssl-tls-cloudflare4.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;Vous pouvez si vous le souhaitez générer une requête de Certificat nommé CSR (Certificate Signing Request) ainsi qu&amp;rsquo;une clé privée, ou laisser Cloudflare le faire pour vous. Par contre il préférable de choisir un certificat de type ECDSA plutôt que RSA, aussi bien pour les performances, que pour la sécurité.&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="Cloudflare origin certificat" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://jesuisadmin.fr/images/2018/06/Screenshot_231.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;Vous allez alors obtenir votre certificat ainsi que votre clé privée.&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="Cloudflare ECDSA Origin certificate" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://jesuisadmin.fr/images/2018/06/Screenshot_235.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;Copiez tout d&amp;rsquo;abord la clé dans un fichier votredomaine-key.pem, à conserver précieusement car vous ne pourrez pas la télécharger à nouveau depuis Cloudflare.&lt;/p&gt;&#10;&lt;p&gt;Copiez ensuite le certificat SSL dans un deuxième fichier que nous allons nommer votredomaine-crt.pem. Et placez les deux fichiers dans un dossier votre choix, par exemple un dossier nommé ssl dans /etc/nginx.&lt;/p&gt;&#10;&lt;p&gt;Cependant avant de pouvoir ajouter le certificat dans la configuration Nginx, il faut ajouter la &lt;a class="link" href="https://support.cloudflare.com/hc/en-us/articles/218689638-What-are-the-root-certificate-authorities-CAs-used-with-Cloudflare-Origin-CA-" target="_blank" rel="noopener"&#13;&#10; &gt;signature de l’autorité de certification&lt;/a&gt; dans le même fichier que notre certificat. Pour cela nous allons télécharger le certificat root de Cloudflare et le fusionner avec notre certificat :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;wget wget https://support.cloudflare.com/hc/en-us/article_attachments/206709098/cloudflare_origin_ecc.pem&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cat votredomaine-crt.pem cloudflare_origin_ecc.pem &amp;gt; votredomaine-fullchain.pem&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="installer-le-certificat-avec-nginx"&gt;Installer le certificat avec nginx&#13;&#10;&lt;/h3&gt;&lt;p&gt;Pour utiliser ce certificat dans votre configuration nginx, il vous suffit d’ajouter les lignes suivantes à votre bloc server :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;listen 443 ssl http2;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;listen [::]:443 ssl http2;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ssl on;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ssl_certificate /etc/nginx/ssl/votredomaine-fullchain.pem;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ssl_certificate_key /etc/nginx/ssl/votredomaine-key.pem;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Vous pouvez vérifier que tout est correct avant t d’appliquer la configuration en utilisant &lt;code&gt;nginx -t&lt;/code&gt;. Si il n&amp;rsquo;y a aucune erreur, vous pouvez alors utiliser &lt;code&gt;service nginx reload&lt;/code&gt;&lt;/p&gt;&#10;&lt;p&gt;Vous pouvez alors changer le niveau SSL de votre domaine en &lt;strong&gt;Full (strict)&lt;/strong&gt; via l’interface Cloudflare :&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="Cloudflare SSL Full (strict)" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://jesuisadmin.fr/images/2017/08/Screenshot_67.png"&gt;&lt;/p&gt;&#10;&lt;h3 id="allez-plus-loin-avec-les-authenticated-origin-pulls"&gt;Allez plus loin avec les Authenticated Origin Pulls&#13;&#10;&lt;/h3&gt;&lt;p&gt;Nous pouvons même aller plus loin et mettre en place un certificat pour authentifié notre serveur. Ce service est nommé “Authenticated Origin Pulls” dans le panel Cloudflare et permet d’éviter que des requêtes soient faites à votre serveur sans passer par le proxy Cloudflare.&lt;/p&gt;&#10;&lt;p&gt;Pour le mettre en place il nous suffit de télécharger le certificat suivant :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;wget -O /etc/nginx/ssl/origin-pull-ca.pem https://support.cloudflare.com/hc/en-us/article_attachments/201243967/origin-pull-ca.pem&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Et de l’inclure dans notre configuration nginx :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ssl_client_certificate /etc/nginx/ssl/origin-pull-ca.pem;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ssl_verify_client on;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Nous pouvons alors activer depuis l’interface Cloudflare la fonctionnalité Authenticated Origin Pulls.&lt;/p&gt;&#10;</description></item><item><title>Installer et configurer proftpd en serveur FTP avec TLS</title><link>https://jesuisadmin.fr/installer-serveur-ftp-plusieurs-utilisateurs-proftpd/</link><pubDate>Sun, 16 Apr 2017 17:20:02 +0000</pubDate><guid>https://jesuisadmin.fr/installer-serveur-ftp-plusieurs-utilisateurs-proftpd/</guid><description>&lt;img src="https://jesuisadmin.fr/images/2019/04/Copie-de-Mettre-en-place-un-VPN-mesh-avec-tinc-sur-Debian_Ubuntu---Raspbian.png" alt="Featured image of post Installer et configurer proftpd en serveur FTP avec TLS" /&gt;&lt;p&gt;Si vous utilisez comme moi EasyEngine/WordOps sur votre serveur, vous souhaitez peut-être proposer un accès via ftp, tout en limitant l’accès aux fichiers d’un site web pour chaque utilisateur.&lt;/p&gt;&#10;&lt;p&gt;Pour cela, nous allons installer et configurer proftpd afin que chaque utilisateur ne puisse accéder qu&amp;rsquo;à son répertoire, sans causer de problèmes de permissions sur les fichiers d&amp;rsquo;un site. Enfin nous mettrons en place un certificat SSL pour chiffrer les échanges avec le serveur distant.&lt;/p&gt;&#10;&lt;h3 id="installation-de-profpd"&gt;Installation de profpd&#13;&#10;&lt;/h3&gt;&lt;p&gt;On commence par installer proftpd :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;apt-get update &amp;amp;&amp;amp; apt-get install proftpd&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Puis on modifie la configuration de proftpd :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;nano /etc/proftpd/proftpd.conf&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Pour empêcher les utilisateurs de remonter dans l&amp;rsquo;arboresence des fichiers du serveur, il faut de décommenter la ligne suivante en supprimant le # :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;DefaultRoot ~&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Il est également préférable décommenter l&amp;rsquo;option &lt;code&gt;RequireValidShell&lt;/code&gt; afin de pouvoir ajouter des utilisateurs sans accès ssh :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;RequireValidShell off&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Enfin, si vous utilisez un pare-feu sur votre serveur, il est nécessaire de décommenter la ligne PassivePorts en définissant une intervalle de ports.&#10;Dans mon exemple, j&amp;rsquo;ai choisi d&amp;rsquo;utiliser les ports 49000 à 50000 pour les connexions FTP passives :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;PassivePorts 49000 50000&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Il suffit ensuite d&amp;rsquo;autoriser ces ports dans votre pare-feu. Si vous utilisez UFW, il suffit d&amp;rsquo;utiliser la commande :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ufw allow 49000:50000/tcp&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;On redémarre ensuite proftpd pour appliquer les modifications :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;service proftpd restart&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="ajouter-un-utilisateur"&gt;Ajouter un utilisateur&#13;&#10;&lt;/h3&gt;&lt;p&gt;Pour ajouter un utilisateur, il faut définir son dossier home qui correspond au dossier du site web concerné, et l’ajouter au groupe www-data pour qu’il n’y ai pas de problème au niveau des permissions. Remplacez dans la commande suivante le dossier utilisé après &amp;ndash;home et le nom de l&amp;rsquo;utilisateur :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-gdscript3" data-lang="gdscript3"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;adduser&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="n"&gt;home&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="k"&gt;var&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;www&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;votredomaine&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tld&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="n"&gt;shell&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;bin&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="bp"&gt;false&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="n"&gt;ingroup&lt;/span&gt; &lt;span class="n"&gt;www&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt; &lt;span class="n"&gt;votre&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;utilisateur&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;La commande précédente inclut la directive &amp;ndash;shell /bin/false, interdisant ainsi l&amp;rsquo;accès au shell pour le nouvel utilisateur puisque nous avons précédemment définit que l&amp;rsquo;utilisation du serveur FTP ne nécessitait pas un accès valide au shell.&lt;/p&gt;&#10;&lt;p&gt;Enfin pour ajouter les permissions au groupe sur un dossier on utilise :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-gdscript3" data-lang="gdscript3"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;chmod&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;R&lt;/span&gt; &lt;span class="n"&gt;g&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;rw&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="k"&gt;var&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;www&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;domainname&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Votre utilisateur pourra ainsi ajouter ou supprimer des fichiers en se connectant via un client ftp, mais il ne pourra pas accéder à d&amp;rsquo;autres fichiers que ceux présents dans son répertoire &amp;ndash;home et il ne pourra pas se connecter au serveur en SSH.&lt;/p&gt;&#10;&lt;h3 id="configuration-tls"&gt;Configuration TLS&#13;&#10;&lt;/h3&gt;&lt;p&gt;Pour les transferts de fichiers sur internet, le chiffrement, c&amp;rsquo;est mieux avec. Nous allons donc voir comment configurer proftpd pour en faire un serveur FTP&lt;strong&gt;S&lt;/strong&gt;.&lt;/p&gt;&#10;&lt;h4 id="avec-un-certificat-auto-signé"&gt;Avec un certificat auto-signé&#13;&#10;&lt;/h4&gt;&lt;p&gt;Un certificat auto-signé n&amp;rsquo;apparaîtra peut-être pas comme valide, mais vous permettra de bénéficier du chiffrement autant qu&amp;rsquo;un certificat issue d&amp;rsquo;une authorité de certificats.&lt;/p&gt;&#10;&lt;p&gt;On commence par créer un répertoire pour stocker notre certificat :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mkdir /etc/proftpd/ssl&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Puis on génère à l&amp;rsquo;aide d&amp;rsquo;OpenSSL notre certificat :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;openssl req -new -x509 -days &lt;span class="m"&gt;365&lt;/span&gt; -nodes -out /etc/proftpd/ssl/proftpd.cert.pem -keyout /etc/proftpd/ssl/proftpd.key.pem&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Voici le déroulement de la procédure :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;root@vps~# openssl req -new -x509 -days &lt;span class="m"&gt;365&lt;/span&gt; -nodes -out /etc/proftpd/ssl/proftpd.cert.pem -keyout /etc/proftpd/ssl/proftpd.key.pem&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Generating a &lt;span class="m"&gt;2048&lt;/span&gt; bit RSA private key&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;.................+++&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;..............+++&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;writing new private key to &lt;span class="s1"&gt;&amp;#39;/etc/proftpd/ssl/proftpd.key.pem&amp;#39;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;-----&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;You are about to be asked to enter information that will be incorporated&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;into your certificate request.&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;What you are about to enter is what is called a Distinguished Name or a DN.&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;There are quite a few fields but you can leave some blank&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;For some fields there will be a default value,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;If you enter &lt;span class="s1"&gt;&amp;#39;.&amp;#39;&lt;/span&gt;, the field will be left blank.&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;-----&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Country Name &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt; letter code&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;AU&lt;span class="o"&gt;]&lt;/span&gt;:FR&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;State or Province Name &lt;span class="o"&gt;(&lt;/span&gt;full name&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;Some-State&lt;span class="o"&gt;]&lt;/span&gt;:-&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Locality Name &lt;span class="o"&gt;(&lt;/span&gt;eg, city&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[]&lt;/span&gt;: Paris&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Organization Name &lt;span class="o"&gt;(&lt;/span&gt;eg, company&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;Internet Widgits Pty Ltd&lt;span class="o"&gt;]&lt;/span&gt;: VirtuBox&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Organizational Unit Name &lt;span class="o"&gt;(&lt;/span&gt;eg, section&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[]&lt;/span&gt;:IT&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Common Name &lt;span class="o"&gt;(&lt;/span&gt;e.g. server FQDN or YOUR name&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[]&lt;/span&gt;:server.virtubox.net&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Email Address &lt;span class="o"&gt;[]&lt;/span&gt;:admin@virtubox.net&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;On s&amp;rsquo;assure ensuite de définir des permissions correctes sur le certificat et la clé privée :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;chmod &lt;span class="m"&gt;600&lt;/span&gt; /etc/proftpd/ssl/proftpd.*&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Et on peut alors éditer le fichier &lt;code&gt;/etc/proftpd/tls.conf&lt;/code&gt; dont le contenu devra ressembler à :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;TLSEngine on&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;TLSLog /var/log/proftpd/tls.log&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;TLSProtocol TLSv1.2&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;TLSCipherSuite AES128+EECDH:AES128+EDH&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;TLSOptions NoCertRequest AllowClientRenegotiations NoSessionReuseRequired&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;TLSRSACertificateFile /etc/proftpd/ssl/proftpd.cert.pem&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;TLSRSACertificateKeyFile /etc/proftpd/ssl/proftpd.key.pem&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;TLSVerifyClient off&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;TLSRequired on&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;RequireValidShell no&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;lt;/IfModule&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Une fois les modifications enregistrées, il vous suffit de décommenter la ligne&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Include /etc/proftpd/tls.conf&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;dans le fichier &lt;code&gt;/etc/proftpd/protftpd.conf&lt;/code&gt;&lt;/p&gt;&#10;&lt;p&gt;Vous pouvez ensuite relancer le service proftpd pour appliqer la nouvelle configuration.&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo service proftpd restart&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>Migration d'une instance Mastodon</title><link>https://jesuisadmin.fr/migration-dune-instance-mastodon/</link><pubDate>Thu, 13 Apr 2017 13:40:33 +0000</pubDate><guid>https://jesuisadmin.fr/migration-dune-instance-mastodon/</guid><description>&lt;img src="https://jesuisadmin.fr/images/2017/08/migration-mastodon-1.png" alt="Featured image of post Migration d'une instance Mastodon" /&gt;&lt;h3 id="pourquoi-migrer-mon-instance-mastodon-"&gt;Pourquoi migrer mon instance Mastodon ?&#13;&#10;&lt;/h3&gt;&lt;p&gt;Une semaine après l’installation de ma première instance Mastodon, il est déjà temps de migrer. Mais la raison n’est pas le besoin de plus de ressources pour l’instance.&lt;/p&gt;&#10;&lt;p&gt;Non, c’est plutôt que je n’était pas totalement satisfait de ma première installation, et que je rencontrais certains bugs récurrents dont je ne trouvais pas la source.&#10;Donc je me suis dit, autant refaire une installation propre maintenant que je connais bien l’outil.&#10;Premier point, je suis passé de Ubuntu 16.04 LTS à Debian 8.7, principalement pour bénéficier des packages de dotdeb.org dont notamment redis-server en v3.2.8 contre v3.0.6 sur Ubuntu. Et pour simplifier un petit peu l’installation, j’ai utilisé &lt;a class="link" href="https://jesuisadmin.fr/easyengine-nginx-wordpress/" target="_blank" rel="noopener"&#13;&#10; &gt;EasyEngine&lt;/a&gt; pour mettre en place nginx et redis.&#10;Le principal avantage de EasyEngine est qu’il permet d’organiser très proprement les fichiers de configuration de Nginx avec une nomenclature claire et simple.&#10;Je suis également passer de Cloudflare à Let’s Encrypt notamment pour bénéficier d’un meilleur chiffrement et de plus d’options sur les headers Nginx.&lt;/p&gt;&#10;&lt;h3 id="préparer-le-nouveau-serveur"&gt;Préparer le nouveau serveur&#13;&#10;&lt;/h3&gt;&lt;p&gt;Pour la migration il vous faut exporter la base de donnée postgresql et faire une copie du dossier /home/mastodon. Pour cela il faudra arrêter tous les services de mastodon et avoir préalablement préparé le nouveau serveur. Pour cela commençons par réinstaller ce qui est nécessaire pour Mastodon.&lt;/p&gt;&#10;&lt;p&gt;Installation des dépendances&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;echo &amp;#34;deb http://ftp.debian.org/debian jessie-backports main&amp;#34; &amp;gt;&amp;gt; /etc/apt/sources.list&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;apt-get update&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;apt-get install imagemagick ffmpeg libpq-dev libxml2-dev libxslt1-dev nodejs file git curl&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Installation de NodeJS&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl -sL https://deb.nodesource.com/setup_4.x | bash -&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;apt-get install nodejs&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;npm install -g yarn&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Installation de PostgreSQL (en v9.6 via les backports) et création de l’utilisateur mastodon, avec un mot de passe et de la base de donnée mastodon_production&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;apt-get -t jessie-backports install postgresql postgresql-contrib&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;su - postgre&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;psql&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;CREATE USER mastodon CREATEDB;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ALTER USER &amp;#34;mastodon&amp;#34; WITH PASSWORD &amp;#39;new_password&amp;#39;;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;CREATE DATABASE mastodon_production OWNER mastodon;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;\q&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;exit&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Pour l’installation de Nginx et Redis, comme dit précédemment, j’ai utilisé EasyEngine, on installe donc d’abord EE :&lt;/p&gt;&#10;&lt;p&gt;&lt;code&gt;wget -qO ee rt.cx/ee &amp;amp;&amp;amp; bash ee&lt;/code&gt;&lt;/p&gt;&#10;&lt;p&gt;Et on installe Nginx et Redis :&lt;/p&gt;&#10;&lt;p&gt;&lt;code&gt;ee stack install --nginx --redis&lt;/code&gt;&lt;/p&gt;&#10;&lt;p&gt;Installation des dépendances pour Ruby :&lt;/p&gt;&#10;&lt;p&gt;&lt;code&gt;apt-get install autoconf bison build-essential libssl-dev libyaml-dev libreadline6-dev zlib1g-dev libncurses5-dev libffi-dev libgdbm3 libgdbm-dev&lt;/code&gt;&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-gdscript3" data-lang="gdscript3"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;adduser&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="n"&gt;disabled&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;password&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="n"&gt;disabled&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;login&lt;/span&gt; &lt;span class="n"&gt;mastodon&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;git&lt;/span&gt; &lt;span class="n"&gt;clone&lt;/span&gt; &lt;span class="n"&gt;https&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;//&lt;/span&gt;&lt;span class="n"&gt;github&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;com&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;rbenv&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;rbenv&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;git&lt;/span&gt; &lt;span class="o"&gt;~/.&lt;/span&gt;&lt;span class="n"&gt;rbenv&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;echo&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;export PATH=&amp;#34;$HOME/.rbenv/bin:$PATH&amp;#34;&amp;#39;&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;~/.&lt;/span&gt;&lt;span class="n"&gt;bashrc&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;echo&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;eval &amp;#34;$(rbenv init -)&amp;#34;&amp;#39;&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;~/.&lt;/span&gt;&lt;span class="n"&gt;bashrc&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;source&lt;/span&gt; &lt;span class="o"&gt;~/.&lt;/span&gt;&lt;span class="n"&gt;bashrc&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Il faut alors se déconnecter puis se reconnecter en tant que mastodon pour appliquer les modifications faites au bash&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;exit&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;su - mastodon&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;On installe ruby-build&lt;/p&gt;&#10;&lt;p&gt;&lt;code&gt;git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build&lt;/code&gt;&lt;/p&gt;&#10;&lt;p&gt;Puis on installe Ruby, en version 2.4.1 désormais&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;rbenv install 2.4.1&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;rbenv global 2.4.1&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;On peut désormais remettre en place la configuration de Nginx avant de commencer la migration.&#10;Mise en place des services :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;wget https://git.virtubox.net/virtubox/mastodon/raw/master/services/mastodon-web.service -O /etc/systemd/system/mastodon-web.service&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;wget https://git.virtubox.net/virtubox/mastodon/raw/master/services/mastodon-streaming.service -O /etc/systemd/system/mastodon-streaming.service&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;wget https://git.virtubox.net/virtubox/mastodon/raw/master/services/mastodon-sidekiq.service -O /etc/systemd/system/mastodon-sidekiq.service&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Pour créer le virtualhost avec EasyEngine :&lt;/p&gt;&#10;&lt;p&gt;&lt;code&gt;ee site create votredomaine.com&lt;/code&gt;&lt;/p&gt;&#10;&lt;p&gt;Vous pouvez ensuite editer /etc/nginx/sites-availables/votredomaine.com, en se basant sur le &lt;a class="link" href="https://angristan.fr/installer-instance-mastodon-debian-8/" target="_blank" rel="noopener"&#13;&#10; &gt;modèle d’Angristan&lt;/a&gt;&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-gdscript3" data-lang="gdscript3"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;map&lt;/span&gt; &lt;span class="o"&gt;$&lt;/span&gt;&lt;span class="n"&gt;http_upgrade&lt;/span&gt; &lt;span class="o"&gt;$&lt;/span&gt;&lt;span class="n"&gt;connection_upgrade&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;default&lt;/span&gt; &lt;span class="n"&gt;upgrade&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s1"&gt;&amp;#39;&amp;#39;&lt;/span&gt; &lt;span class="n"&gt;close&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# redirection http vers https&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;server&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;listen&lt;/span&gt; &lt;span class="mi"&gt;80&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;listen&lt;/span&gt; &lt;span class="p"&gt;[::]:&lt;/span&gt;&lt;span class="mi"&gt;80&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;server_name&lt;/span&gt; &lt;span class="n"&gt;www&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;votredomaine&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;com&lt;/span&gt; &lt;span class="n"&gt;votredomaine&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;com&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;301&lt;/span&gt; &lt;span class="n"&gt;https&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;//&lt;/span&gt;&lt;span class="n"&gt;votredomaine&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;com&lt;/span&gt;&lt;span class="o"&gt;$&lt;/span&gt;&lt;span class="n"&gt;request_uri&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;access_log&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;dev&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;null&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;error_log&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;dev&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;null&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# block https&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;server&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;listen&lt;/span&gt; &lt;span class="mi"&gt;443&lt;/span&gt; &lt;span class="n"&gt;ssl&lt;/span&gt; &lt;span class="n"&gt;http2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;listen&lt;/span&gt; &lt;span class="p"&gt;[::]:&lt;/span&gt;&lt;span class="mi"&gt;443&lt;/span&gt; &lt;span class="n"&gt;ssl&lt;/span&gt; &lt;span class="n"&gt;http2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;server_name&lt;/span&gt; &lt;span class="n"&gt;www&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;votredomaine&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;com&lt;/span&gt; &lt;span class="n"&gt;votredomaine&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;com&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;$&lt;/span&gt;&lt;span class="n"&gt;host&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;www&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;votredomaine&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;com&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;301&lt;/span&gt; &lt;span class="n"&gt;https&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;//&lt;/span&gt;&lt;span class="n"&gt;votredomaine&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;com&lt;/span&gt;&lt;span class="o"&gt;$&lt;/span&gt;&lt;span class="n"&gt;request_uri&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;access_log&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="k"&gt;var&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nb"&gt;log&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;nginx&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;votredomaine&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;com&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;access&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;log&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;error_log&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="k"&gt;var&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nb"&gt;log&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;nginx&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;votredomaine&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;com&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;error&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;log&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# configuration ssl avec letsencrypt&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;ssl_certificate&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;etc&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;letsencrypt&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;live&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;votredomaine&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;com&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;fullchain&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;pem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;ssl_certificate_key&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;etc&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;letsencrypt&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;live&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;votredomaine&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;com&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;privkey&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;pem&lt;/span&gt;&lt;span class="p"&gt;;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;ssl_protocols&lt;/span&gt; &lt;span class="n"&gt;TLSv1&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;ssl_ciphers&lt;/span&gt; &lt;span class="n"&gt;EECDH&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;AESGCM&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;EECDH&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;CHACHA20&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;EECDH&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;AES&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;ssl_prefer_server_ciphers&lt;/span&gt; &lt;span class="n"&gt;on&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# ajout des headers pour le HSTS, CSP et Referrer-Policy&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;add_header&lt;/span&gt; &lt;span class="n"&gt;Strict&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;Transport&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;Security&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;max-age=15552000; includeSubDomains; preload&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;add_header&lt;/span&gt; &lt;span class="n"&gt;Content&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;Security&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;Policy&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;default-src &amp;#39;self&amp;#39;; style-src &amp;#39;self&amp;#39; &amp;#39;unsafe-inline&amp;#39;; script-src &amp;#39;self&amp;#39; &amp;#39;unsafe-inline&amp;#39;; img-src &amp;#39;self&amp;#39; data:; connect-src &amp;#39;self&amp;#39; wss://votredomaine.com;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;add_header&lt;/span&gt; &lt;span class="n"&gt;Referrer&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;Policy&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;strict-origin-when-cross-origin&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;keepalive_timeout&lt;/span&gt; &lt;span class="mi"&gt;70&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;sendfile&lt;/span&gt; &lt;span class="n"&gt;on&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;client_max_body_size&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;gzip&lt;/span&gt; &lt;span class="n"&gt;off&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;root&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;home&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;mastodon&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;live&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;public&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;location&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;try_files&lt;/span&gt; &lt;span class="o"&gt;$&lt;/span&gt;&lt;span class="n"&gt;uri&lt;/span&gt; &lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="n"&gt;proxy&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;location&lt;/span&gt; &lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="n"&gt;proxy&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;proxy_set_header&lt;/span&gt; &lt;span class="n"&gt;Host&lt;/span&gt; &lt;span class="o"&gt;$&lt;/span&gt;&lt;span class="n"&gt;host&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;proxy_set_header&lt;/span&gt; &lt;span class="n"&gt;X&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;Real&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="ne"&gt;IP&lt;/span&gt; &lt;span class="o"&gt;$&lt;/span&gt;&lt;span class="n"&gt;remote_addr&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;proxy_set_header&lt;/span&gt; &lt;span class="n"&gt;X&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;Forwarded&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;For&lt;/span&gt; &lt;span class="o"&gt;$&lt;/span&gt;&lt;span class="n"&gt;proxy_add_x_forwarded_for&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;proxy_set_header&lt;/span&gt; &lt;span class="n"&gt;X&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;Forwarded&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;Proto&lt;/span&gt; &lt;span class="n"&gt;https&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;proxy_pass_header&lt;/span&gt; &lt;span class="n"&gt;Server&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;proxy_pass&lt;/span&gt; &lt;span class="n"&gt;http&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;//&lt;/span&gt;&lt;span class="mf"&gt;127.0&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="mf"&gt;0.1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;3000&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;proxy_buffering&lt;/span&gt; &lt;span class="n"&gt;off&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;proxy_redirect&lt;/span&gt; &lt;span class="n"&gt;off&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;proxy_http_version&lt;/span&gt; &lt;span class="mf"&gt;1.1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;proxy_set_header&lt;/span&gt; &lt;span class="n"&gt;Upgrade&lt;/span&gt; &lt;span class="o"&gt;$&lt;/span&gt;&lt;span class="n"&gt;http_upgrade&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;proxy_set_header&lt;/span&gt; &lt;span class="n"&gt;Connection&lt;/span&gt; &lt;span class="o"&gt;$&lt;/span&gt;&lt;span class="n"&gt;connection_upgrade&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;tcp_nodelay&lt;/span&gt; &lt;span class="n"&gt;on&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;location&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;api&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;v1&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;streaming&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;proxy_set_header&lt;/span&gt; &lt;span class="n"&gt;Host&lt;/span&gt; &lt;span class="o"&gt;$&lt;/span&gt;&lt;span class="n"&gt;host&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;proxy_set_header&lt;/span&gt; &lt;span class="n"&gt;X&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;Real&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="ne"&gt;IP&lt;/span&gt; &lt;span class="o"&gt;$&lt;/span&gt;&lt;span class="n"&gt;remote_addr&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;proxy_set_header&lt;/span&gt; &lt;span class="n"&gt;X&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;Forwarded&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;For&lt;/span&gt; &lt;span class="o"&gt;$&lt;/span&gt;&lt;span class="n"&gt;proxy_add_x_forwarded_for&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;proxy_set_header&lt;/span&gt; &lt;span class="n"&gt;X&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;Forwarded&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;Proto&lt;/span&gt; &lt;span class="n"&gt;https&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;proxy_pass&lt;/span&gt; &lt;span class="n"&gt;http&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;//&lt;/span&gt;&lt;span class="mf"&gt;127.0&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="mf"&gt;0.1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;4000&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;proxy_buffering&lt;/span&gt; &lt;span class="n"&gt;off&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;proxy_redirect&lt;/span&gt; &lt;span class="n"&gt;off&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;proxy_http_version&lt;/span&gt; &lt;span class="mf"&gt;1.1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;proxy_set_header&lt;/span&gt; &lt;span class="n"&gt;Upgrade&lt;/span&gt; &lt;span class="o"&gt;$&lt;/span&gt;&lt;span class="n"&gt;http_upgrade&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;proxy_set_header&lt;/span&gt; &lt;span class="n"&gt;Connection&lt;/span&gt; &lt;span class="o"&gt;$&lt;/span&gt;&lt;span class="n"&gt;connection_upgrade&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;tcp_nodelay&lt;/span&gt; &lt;span class="n"&gt;on&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;error_page&lt;/span&gt; &lt;span class="mi"&gt;500&lt;/span&gt; &lt;span class="mi"&gt;501&lt;/span&gt; &lt;span class="mi"&gt;502&lt;/span&gt; &lt;span class="mi"&gt;503&lt;/span&gt; &lt;span class="mi"&gt;504&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="mf"&gt;500.&lt;/span&gt;&lt;span class="n"&gt;html&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="transfert-des-données-depuis-lancien-serveur"&gt;Transfert des données depuis l’ancien serveur&#13;&#10;&lt;/h3&gt;&lt;p&gt;A partir de là, cette fois on ne clone pas le dépôt Github puisque l’on veut réutiliser l’installation précédente. Pour réaliser la copie depuis le serveur précédent, il faut tout d’abord arrêter les services de mastodon sur l’ancien serveur:&lt;/p&gt;&#10;&lt;p&gt;&lt;code&gt;systemctl stop mastodon* redis&lt;/code&gt;&lt;/p&gt;&#10;&lt;p&gt;On dump ensuite l’ancienne base de donnée :&lt;/p&gt;&#10;&lt;p&gt;&lt;code&gt;pg_dump mastodon_production &amp;gt; fichier_de_sortie&lt;/code&gt;&lt;/p&gt;&#10;&lt;p&gt;Pour les fichier, j’ai simplement zippé le dossier /home/mastodon avant de le transférer sur le nouveau serveur avec scp.&lt;/p&gt;&#10;&lt;p&gt;&lt;code&gt;zip backupmaston -r /home/mastodon&lt;/code&gt;&lt;/p&gt;&#10;&lt;p&gt;Pourquoi ne pas utiliser rsync ? Car lors de l’extraction du zip, il est facile de ne pas écraser les fichiers déjà présent, notamment pour rbenv et rbenv-build en utilisant “N” lorsque le programme unzip nous demande ce que l’on souhaite faire.&#10;Pour importer la base de donnée après le transfert sur le nouveau serveur :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;su - postgre&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;psql mastodon_production &amp;lt; fichier_d_entree&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;exit&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Ne pas oublier après le transfert de vérifier les propriétaires des fichiers dans /home/mastodon, ne pas hésiter à faire :&lt;/p&gt;&#10;&lt;p&gt;&lt;code&gt;chown -R mastodon:mastodon /home/mastodon&lt;/code&gt;&lt;/p&gt;&#10;&lt;p&gt;Il faut également penser à copier votre certificat Let’s Encrypt&lt;/p&gt;&#10;&lt;h3 id="relancer-mastodon-après-le-transfert"&gt;Relancer mastodon après le transfert&#13;&#10;&lt;/h3&gt;&lt;p&gt;Ne pas oublier de modifier le fichier .env.production avec le mot de passe postgreSQL notamment.&#10;Pour relancer mastodon, cela se déroule comme une mise à jour si ce n’est que l’on installe bundler&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;su - mastodon&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cd live&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;gem install bundler --no-ri&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git fetch&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git pull&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git checkout $(git tag | tail -n 1)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;bundle install --deployment --without development test&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;NODE_ENV=production npm upgrade --global yarn&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;yarn install&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;RAILS_ENV=production bundle exec rails assets:clean&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;RAILS_ENV=production bundle exec rails assets:precompile&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;RAILS_ENV=production bundle exec rails db:migrate&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;exit&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Puis activer et démarrer les services :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;systemctl enable /etc/systemd/system/mastodon-*.service&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;systemctl start mastodon-web.service mastodon-sidekiq.service mastodon-streaming.service&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Mise en place des crons&lt;/p&gt;&#10;&lt;p&gt;&lt;code&gt;crontab -e -u mastodon&lt;/code&gt;&lt;/p&gt;&#10;&lt;p&gt;Et ajouter les lignes&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;RAILS_ENV=production&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;@daily cd /home/mastodon/live &amp;amp;&amp;amp; /home/mastodon/.rbenv/shims/bundle exec rake mastodon:daily&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Voilà ! Vous pouvez désormais changer vos DNS pour pointer votre domaine vers le nouveau serveur.&#10;N’hésitez pas à me signaler d’éventuelles erreurs en commentaire ou à proposer des améliorations.&lt;/p&gt;&#10;&lt;p&gt;Si vous souhaitez mettre en place une architecture basée sur plusieurs serveurs, je vous recommande l’article &lt;a class="link" href="https://blog.matuni.xyz/article5/migration-d-une-instance-mastodon" target="_blank" rel="noopener"&#13;&#10; &gt;matuni.xyz&lt;/a&gt;.&lt;/p&gt;&#10;</description></item><item><title>Installer votre résolveur DNS avec unbound</title><link>https://jesuisadmin.fr/installer-resolveur-dns-unbound/</link><pubDate>Thu, 06 Apr 2017 13:23:11 +0000</pubDate><guid>https://jesuisadmin.fr/installer-resolveur-dns-unbound/</guid><description>&lt;img src="https://jesuisadmin.fr/images/2018/07/resolveur-DNS.jpg" alt="Featured image of post Installer votre résolveur DNS avec unbound" /&gt;&lt;h3 id="pourquoi-mettre-en-place-un-résolveur-dns-"&gt;Pourquoi mettre en place un résolveur DNS ?&#13;&#10;&lt;/h3&gt;&lt;p&gt;Avec une généralisation de la censure et de nombreuses pannes sur les résolveurs DNS des FAI, beaucoup d’articles recommandent l’utilisation des résolveurs DNS Google. Mais si ce dernier propose un service stable et performant, il peut être inquiétant de laisser google analyser l’ensemble des requêtes DNS que vous pouvez faire en naviguant sur le web.&lt;/p&gt;&#10;&lt;p&gt;Dans ce tutoriel, je vais donc vous expliquer comment mettre en place un résolveur DNS récursif, supportant la norme DNSSEC avec unbound. Pour l’installation, j’ai utilisé un VPS avec Ubuntu 16.04 LTS.&lt;/p&gt;&#10;&lt;h3 id="installer-et-configurer-unbound"&gt;Installer et configurer unbound&#13;&#10;&lt;/h3&gt;&lt;p&gt;Tout d’abord, il faut installer unbound :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;apt update&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;apt install unbound&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Après quoi, il faut créer un fichier de configuration dans le dossier /etc/unbound/unboud.conf.d/ que vous pouvez nommer mondns.conf par exemple.&#10;Voici le contenu de ce fichier :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-gdscript3" data-lang="gdscript3"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;server&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;interface&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.0&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="mf"&gt;0.0&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;interface&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;access&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;control&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.0&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="mf"&gt;0.0&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="n"&gt;allow&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;access&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;control&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="n"&gt;allow&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;root&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;hints&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;/var/lib/unbound/root.hints&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;verbosity&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;qname&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;minimisation&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;yes&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;num&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;threads&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;msg&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;cache&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;slabs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;rrset&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;cache&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;slabs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;infra&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;cache&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;slabs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;cache&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;slabs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;rrset&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;cache&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="n"&gt;m&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;msg&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;cache&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="n"&gt;m&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;outgoing&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;465&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;so&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;rcvbuf&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="n"&gt;m&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;so&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;sndbuf&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="n"&gt;m&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;port&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;53&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;do&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;ip4&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;yes&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;do&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;ip6&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;yes&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;do&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;udp&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;yes&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;do&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;tcp&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;yes&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;do&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;daemonize&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;yes&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;hide&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;identity&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;yes&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;hide&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;version&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;yes&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;harden&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;glue&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;yes&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;harden&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;dnssec&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;stripped&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;yes&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;harden&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;referral&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;yes&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;use&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;caps&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;yes&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;prefetch&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;yes&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Attention, l’option *qname-minimisation: yes *ne fonctionne que sur Ubuntu car unbound 1.5.7 n’est pas disponible sur le repository debian.&lt;/p&gt;&#10;&lt;p&gt;On télécharge ensuite le fichier contenant les IPs des 13 serveurs de la racine.&lt;/p&gt;&#10;&lt;p&gt;&lt;code&gt;wget https://www.internic.net/domain/named.cache -O /var/lib/unbound/root.hints&lt;/code&gt;&lt;/p&gt;&#10;&lt;p&gt;Il ne nous reste plus qu’à redémarrer le service unbound :&lt;/p&gt;&#10;&lt;p&gt;&lt;code&gt;service unbound restart&lt;/code&gt;&lt;/p&gt;&#10;&lt;p&gt;Et votre résolveur DNS est désormais opérationnel ! (vérifiez que le service unbound fonctionne correctement avec la commande &lt;em&gt;service unbound status&lt;/em&gt;)&#10;Vous pouvez maintenant éditer le fichier /etc/resolv.conf pour remplacer l’IP du nameserver utilisé par 127.0.0.1.&lt;/p&gt;&#10;&lt;p&gt;Ensuite, si vous souhaitez automatiser la mise à jour des serveurs de la racine, vous pouvez le faire en ajoutant un cron avec le script suivant :&lt;/p&gt;&#10;&lt;p&gt;&lt;code&gt;wget https://git.virtubox.net/virtubox/unbound-dns-server/raw/master/update-root-dns.sh&lt;/code&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;code&gt;chmod +x update-root-dns.sh&lt;/code&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;code&gt;crontab -e&lt;/code&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;code&gt;0 0 * * * ./update-root-dns.sh&lt;/code&gt;&lt;/p&gt;&#10;&lt;h3 id="résolveur-dns-public-ouverts-de-virtubox"&gt;Résolveur DNS Public Ouverts de VirtuBox&#13;&#10;&lt;/h3&gt;&lt;p&gt;Si vous n’avez pas l’envie ou la patience de mettre en place votre propre résolveur DNS, vous pouvez utiliser ceux mis à disposition par &lt;a class="link" href="https://virtubox.net" target="_blank" rel="noopener"&#13;&#10; &gt;VirtuBox&lt;/a&gt;  :&lt;/p&gt;&#10;&lt;p&gt;Nom : **dns.vtbox.net **&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;IPv4 : 163.172.189.181&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;IPv6 : 2001:bc8:4400:2100::25:5&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Nom : &lt;strong&gt;sdns.vtbox.net&lt;/strong&gt;&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;IPv4 : 217.182.205.213&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;IPv6 : 2001:41d0:302:2100::7a77&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Les deux résolveurs utilisent la même configuration que ci-dessus, avec l’ajout de trois lignes afin d’avoir les statistiques d’utilisation :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;statistics-interval: 0&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;extended-statistics: yes&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;statistics-cumulative: yes&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Si vous souhaitez aller encore plus loin, vous pouvez également mettre en place un résolveur DNSCrypt qui permet de chiffrer les requêtes faites entre votre machine et le résolveur DNS.&lt;/p&gt;&#10;&lt;p&gt;Je vous invite à jeter un coup d’œil sur le &lt;a class="link" href="https://www.noobunbox.net/noobunbox/resolveur-dnscrypt" target="_blank" rel="noopener"&#13;&#10; &gt;tutoriel de noobunbox&lt;/a&gt;.&lt;/p&gt;&#10;&lt;p&gt;Tutoriel inspiré de l’article de &lt;a class="link" href="https://www.shaftinc.fr/arretez-google-dns.html" target="_blank" rel="noopener"&#13;&#10; &gt;shaftinc.fr&lt;/a&gt;.&lt;/p&gt;&#10;</description></item><item><title>Installer une instance Mastodon sur Ubuntu 16.04 LTS</title><link>https://jesuisadmin.fr/installer-instance-mastodon-ubuntu/</link><pubDate>Wed, 05 Apr 2017 20:17:58 +0000</pubDate><guid>https://jesuisadmin.fr/installer-instance-mastodon-ubuntu/</guid><description>&lt;img src="https://jesuisadmin.fr/images/2017/08/Mastodon-setup.png" alt="Featured image of post Installer une instance Mastodon sur Ubuntu 16.04 LTS" /&gt;&lt;p&gt;Alors que ce nouveau réseau social fait actuellement beaucoup parler de lui, je me suis décidé à créer ma propre instance Mastodon pour contribuer à ce projet.&lt;/p&gt;&#10;&lt;p&gt;J’en ai donc profiter pour faire un tutorial listant les étapes à suivre pour lancer vous aussi votre instance dès aujourd’hui. Je suis parti sur un VPS tournant avec Ubuntu 16.04 LTS et du côté ressources 8 vCores, 8Go de RAM et 50Go de SSD. Je verrais à l’usage si l’instance nécessite plus de ressources.&lt;/p&gt;&#10;&lt;p&gt;Pour suivre les étapes de ce tutorial, un utilisateur avec les droits sudo est suffisant, vous n’avez pas besoin de vous connecter en tant que root.&lt;/p&gt;&#10;&lt;p&gt; &lt;/p&gt;&#10;&lt;h3 id="installer-les-pré-requis"&gt;&lt;strong&gt;Installer les pré-requis&lt;/strong&gt;&#13;&#10;&lt;/h3&gt;&lt;p&gt;&lt;code&gt;sudo apt-get update&lt;/code&gt;&lt;/p&gt;&#10;&lt;p&gt;Installation de nodejs&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl -sL https://deb.nodesource.com/setup_4.x | sudo bash -&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt-get install imagemagick ffmpeg libpq-dev libxml2-dev libxslt1-dev nodejs&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo npm install -g yarn&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Installation de redis-server&lt;/p&gt;&#10;&lt;p&gt;&lt;code&gt;sudo apt-get install redis-server redis-tools&lt;/code&gt;&lt;/p&gt;&#10;&lt;p&gt;Installation de postgresql&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt-get install postgresql postgresql-contrib&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo su - postgres&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;psql&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;CREATE USER mastodon CREATEDB;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;\q&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Il nous faut également activer le daemon d’authentification pour que les utilisateurs puissent se connecter dans mot de passe :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo sed -i &amp;#39;/^local.*postgres.*peer$/a host all all 127.0.0.1/32 ident&amp;#39; /etc/postgresql/9.?/main/pg_hba.conf&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt-get install pidentd&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo systemctl enable pidentd&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo systemctl start pidentd&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo systemctl restart postgresql&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="installation-de-ruby"&gt;Installation de Ruby&#13;&#10;&lt;/h3&gt;&lt;p&gt;On installe les dépendances pour Ruby.&lt;/p&gt;&#10;&lt;p&gt;&lt;code&gt;sudo apt-get install autoconf bison build-essential libssl-dev libyaml-dev libreadline6-dev zlib1g-dev libncurses5-dev libffi-dev libgdbm3 libgdbm-dev&lt;/code&gt;&lt;/p&gt;&#10;&lt;p&gt;On créer un utilisateur mastodon :&lt;/p&gt;&#10;&lt;p&gt;&lt;code&gt;adduser --disabled-password --disabled-login mastodon&lt;/code&gt;&lt;/p&gt;&#10;&lt;p&gt;Puis on s’identifie avec cet utilisateur&lt;/p&gt;&#10;&lt;p&gt;&lt;code&gt;su - mastodon&lt;/code&gt;&lt;/p&gt;&#10;&lt;p&gt;On installe rbenv et rbenv-build :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-gdscript3" data-lang="gdscript3"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;adduser&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="n"&gt;disabled&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;password&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="n"&gt;disabled&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;login&lt;/span&gt; &lt;span class="n"&gt;mastodon&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;git&lt;/span&gt; &lt;span class="n"&gt;clone&lt;/span&gt; &lt;span class="n"&gt;https&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;//&lt;/span&gt;&lt;span class="n"&gt;github&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;com&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;rbenv&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;rbenv&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;git&lt;/span&gt; &lt;span class="o"&gt;~/.&lt;/span&gt;&lt;span class="n"&gt;rbenv&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;echo&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;export PATH=&amp;#34;$HOME/.rbenv/bin:$PATH&amp;#34;&amp;#39;&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;~/.&lt;/span&gt;&lt;span class="n"&gt;bashrc&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;echo&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;eval &amp;#34;$(rbenv init -)&amp;#34;&amp;#39;&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;~/.&lt;/span&gt;&lt;span class="n"&gt;bashrc&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;source&lt;/span&gt; &lt;span class="o"&gt;~/.&lt;/span&gt;&lt;span class="n"&gt;bashrc&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;On se déconnecte pour appliquer la modification au bash, puis on installe ruby-build.&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;exit&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;su - mastodon&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Puis on installe Ruby v2.4.1 pour Mastodon :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;rbenv install 2.4.1&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;rbenv global 2.4.1&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;On vérifie la version de ruby installé via la commande :&lt;/p&gt;&#10;&lt;p&gt;&lt;code&gt;ruby -v&lt;/code&gt;&lt;/p&gt;&#10;&lt;h3 id="installation-de-mastodon"&gt;Installation de Mastodon&#13;&#10;&lt;/h3&gt;&lt;p&gt;Nous allons pouvoir passer à l’installation de Mastodon et pour cela on commence par cloner le dépôt Github, puis on utilise git checkout pour sélectionner la dernière release plutôt que de rester sur la branche master :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cd ~&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git clone https://github.com/tootsuite/mastodon.git live&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cd live&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git checkout $(git tag | tail -n 1)&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;On installe bundler pout gérer l’installation des dépendances et on désactive la documentation pour chaque gem.&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;echo &amp;#34;gem: --no-document&amp;#34; &amp;gt; ~/.gemrc&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;gem install bundler --no-ri&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Puis on passe à l’installation&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;bundle install --deployment --without development test&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;yarn install&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;On peut désormais copier le fichier de configuration d’exemple et l’éditer avec nos informations :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cp .env.production.sample .env.production&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;nano .env.production&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Les informations à remplir sont  :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-gdscript3" data-lang="gdscript3"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Service dependencies&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;REDIS_HOST&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;localhost&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;REDIS_PORT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;6379&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;DB_HOST&lt;/span&gt;&lt;span class="o"&gt;=/&lt;/span&gt;&lt;span class="k"&gt;var&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;run&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;postgresql&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;DB_USER&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;mastodon&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;DB_NAME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;mastodon_production&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;DB_PASS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;DB_PORT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;5432&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Federation&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;LOCAL_DOMAIN&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;votredomaine&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;com&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;LOCAL_HTTPS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;true&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Ainsi que la partie SMTP qui permettra aux utilisateurs de confirmer leur inscription :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# E-mail configuration&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;SMTP_SERVER=mail.votredomaine.com&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;SMTP_PORT=587&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;SMTP_LOGIN=noreply@votredomaine.com&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;SMTP_PASSWORD=VotreMotdePasse&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;SMTP_FROM_ADDRESS=noreply@votredomaine.com&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Pour la partie application secret, utilisez la commande &lt;em&gt;bundle exec rake secret&lt;/em&gt; pour générer 3 clés et vous n’avez plus qu’à les copier dans le fichier de configuration.&lt;/p&gt;&#10;&lt;p&gt;Pour mettre en place l’instance du côté base de donnée et assets :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;RAILS_ENV=production bundle exec rails db:setup&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;RAILS_ENV=production bundle exec rails assets:precompile&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="création-des-services-systemd"&gt;Création des services systemd&#13;&#10;&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;Pour le processus web&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;code&gt;nano /etc/systemd/system/mastodon-web.service&lt;/code&gt;&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[Unit]&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Description=mastodon-web&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; After=network.target&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[Service]&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Type=simple&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; User=mastodon&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; WorkingDirectory=/home/mastodon/live&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Environment=&amp;#34;RAILS_ENV=production&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Environment=&amp;#34;PORT=3000&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ExecStart=/home/mastodon/.rbenv/shims/bundle exec puma -C config/puma.rb&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; TimeoutSec=15&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Restart=always&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[Install]&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; WantedBy=multi-user.target&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;**Pour le processus en arrière-plan **&lt;/p&gt;&#10;&lt;p&gt;&lt;code&gt;nano /etc/systemd/system/mastodon-sidekiq.service&lt;/code&gt;&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[Unit]&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Description=mastodon-sidekiq&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; After=network.target&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[Service]&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Type=simple&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; User=mastodon&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; WorkingDirectory=/home/mastodon/live&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Environment=&amp;#34;RAILS_ENV=production&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Environment=&amp;#34;DB_POOL=5&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ExecStart=/home/mastodon/.rbenv/shims/bundle exec sidekiq -c 5 -q default -q mailers -q pull -q push&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; TimeoutSec=15&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Restart=always&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[Install]&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; WantedBy=multi-user.target&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Pour le processus de l’API&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;code&gt;nano /etc/systemd/system/mastodon-streaming.service&lt;/code&gt;&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[Unit]&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Description=mastodon-streaming&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; After=network.target&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[Service]&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Type=simple&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; User=mastodon&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; WorkingDirectory=/home/mastodon/live&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Environment=&amp;#34;NODE_ENV=production&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Environment=&amp;#34;PORT=4000&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ExecStart=/usr/bin/npm run start&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; TimeoutSec=15&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Restart=always&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[Install]&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; WantedBy=multi-user.target&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;On peut alors activer les services :&lt;/p&gt;&#10;&lt;p&gt;&lt;code&gt;systemctl enable /etc/systemd/system/mastodon-*.service&lt;/code&gt;&lt;/p&gt;&#10;&lt;p&gt;Et enfin démarrer l’instance Mastodon :&lt;/p&gt;&#10;&lt;p&gt;&lt;code&gt;sudo systemctl start mastodon-web.service mastodon-sidekiq.service mastodon-streaming.service&lt;/code&gt;&lt;/p&gt;&#10;&lt;p&gt;On ajoute alors les crons nécessaire pour Mastodon :&lt;/p&gt;&#10;&lt;p&gt;&lt;code&gt;crontab -u mastodon -e&lt;/code&gt;&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;RAILS_ENV=production&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;@daily cd /home/mastodon/live &amp;amp;&amp;amp; /home/mastodon/.rbenv/shims/bundle exec rake mastodon:daily&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="mise-en-place-du-reverse-proxy-nginx-"&gt;Mise en place du reverse-proxy Nginx :&#13;&#10;&lt;/h3&gt;&lt;p&gt;Nous avons désormais une instance mastodon qui fonctionne, mais nous allons devoir mettre en place un reverse-proxy avec Nginx afin de pouvoir utiliser directement notre domaine pour y accéder.&lt;/p&gt;&#10;&lt;p&gt;On commence par installer nginx :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;wget -O - https://nginx.org/keys/nginx_signing.key | sudo apt-key add -&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo echo &amp;#34;deb http://nginx.org/packages/ubuntu/ $(lsb_release -sc) nginx&amp;#34; &amp;gt; /etc/apt/sources.list.d/nginx.list&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt update&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt install nginx&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;On créer un fichier de configuration en se basant sur le &lt;a class="link" href="https://angristan.fr/installer-instance-mastodon-debian-8/" target="_blank" rel="noopener"&#13;&#10; &gt;modèle d’Angristan&lt;/a&gt; :&lt;/p&gt;&#10;&lt;p&gt;&lt;code&gt;nano /etc/nginx/sites-enabled/votredomaine.com&lt;/code&gt;&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-gdscript3" data-lang="gdscript3"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;map&lt;/span&gt; &lt;span class="o"&gt;$&lt;/span&gt;&lt;span class="n"&gt;http_upgrade&lt;/span&gt; &lt;span class="o"&gt;$&lt;/span&gt;&lt;span class="n"&gt;connection_upgrade&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;default&lt;/span&gt; &lt;span class="n"&gt;upgrade&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s1"&gt;&amp;#39;&amp;#39;&lt;/span&gt; &lt;span class="n"&gt;close&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# redirection http vers https&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;server&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;listen&lt;/span&gt; &lt;span class="mi"&gt;80&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;listen&lt;/span&gt; &lt;span class="p"&gt;[::]:&lt;/span&gt;&lt;span class="mi"&gt;80&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;server_name&lt;/span&gt; &lt;span class="n"&gt;www&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;votredomaine&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;com&lt;/span&gt; &lt;span class="n"&gt;votredomaine&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;com&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;301&lt;/span&gt; &lt;span class="n"&gt;https&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;//&lt;/span&gt;&lt;span class="n"&gt;votredomaine&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;com&lt;/span&gt;&lt;span class="o"&gt;$&lt;/span&gt;&lt;span class="n"&gt;request_uri&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;access_log&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;dev&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;null&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;error_log&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;dev&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;null&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# block https&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;server&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;listen&lt;/span&gt; &lt;span class="mi"&gt;443&lt;/span&gt; &lt;span class="n"&gt;ssl&lt;/span&gt; &lt;span class="n"&gt;http2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;listen&lt;/span&gt; &lt;span class="p"&gt;[::]:&lt;/span&gt;&lt;span class="mi"&gt;443&lt;/span&gt; &lt;span class="n"&gt;ssl&lt;/span&gt; &lt;span class="n"&gt;http2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;server_name&lt;/span&gt; &lt;span class="n"&gt;www&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;votredomaine&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;com&lt;/span&gt; &lt;span class="n"&gt;votredomaine&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;com&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;$&lt;/span&gt;&lt;span class="n"&gt;host&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;www&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;votredomaine&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;com&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;301&lt;/span&gt; &lt;span class="n"&gt;https&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;//&lt;/span&gt;&lt;span class="n"&gt;votredomaine&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;com&lt;/span&gt;&lt;span class="o"&gt;$&lt;/span&gt;&lt;span class="n"&gt;request_uri&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;access_log&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="k"&gt;var&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nb"&gt;log&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;nginx&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;votredomaine&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;com&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;access&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;log&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;error_log&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="k"&gt;var&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nb"&gt;log&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;nginx&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;votredomaine&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;com&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;error&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;log&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# configuration ssl avec letsencrypt&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;ssl_certificate&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;etc&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;letsencrypt&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;live&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;votredomaine&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;com&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;fullchain&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;pem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;ssl_certificate_key&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;etc&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;letsencrypt&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;live&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;votredomaine&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;com&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;privkey&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;pem&lt;/span&gt;&lt;span class="p"&gt;;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;ssl_protocols&lt;/span&gt; &lt;span class="n"&gt;TLSv1&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;ssl_ciphers&lt;/span&gt; &lt;span class="n"&gt;EECDH&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;AESGCM&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;EECDH&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;CHACHA20&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;EECDH&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;AES&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;ssl_prefer_server_ciphers&lt;/span&gt; &lt;span class="n"&gt;on&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# ajout des headers pour le HSTS, CSP et Referrer-Policy&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;add_header&lt;/span&gt; &lt;span class="n"&gt;Strict&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;Transport&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;Security&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;max-age=15552000; includeSubDomains; preload&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;add_header&lt;/span&gt; &lt;span class="n"&gt;Content&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;Security&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;Policy&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;default-src &amp;#39;self&amp;#39;; style-src &amp;#39;self&amp;#39; &amp;#39;unsafe-inline&amp;#39;; script-src &amp;#39;self&amp;#39; &amp;#39;unsafe-inline&amp;#39;; img-src &amp;#39;self&amp;#39; data:; connect-src &amp;#39;self&amp;#39; wss://votredomaine.com;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;add_header&lt;/span&gt; &lt;span class="n"&gt;Referrer&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;Policy&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;strict-origin-when-cross-origin&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;keepalive_timeout&lt;/span&gt; &lt;span class="mi"&gt;70&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;sendfile&lt;/span&gt; &lt;span class="n"&gt;on&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;client_max_body_size&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;gzip&lt;/span&gt; &lt;span class="n"&gt;off&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;root&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;home&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;mastodon&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;live&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;public&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;location&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;try_files&lt;/span&gt; &lt;span class="o"&gt;$&lt;/span&gt;&lt;span class="n"&gt;uri&lt;/span&gt; &lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="n"&gt;proxy&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;location&lt;/span&gt; &lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="n"&gt;proxy&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;proxy_set_header&lt;/span&gt; &lt;span class="n"&gt;Host&lt;/span&gt; &lt;span class="o"&gt;$&lt;/span&gt;&lt;span class="n"&gt;host&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;proxy_set_header&lt;/span&gt; &lt;span class="n"&gt;X&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;Real&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="ne"&gt;IP&lt;/span&gt; &lt;span class="o"&gt;$&lt;/span&gt;&lt;span class="n"&gt;remote_addr&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;proxy_set_header&lt;/span&gt; &lt;span class="n"&gt;X&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;Forwarded&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;For&lt;/span&gt; &lt;span class="o"&gt;$&lt;/span&gt;&lt;span class="n"&gt;proxy_add_x_forwarded_for&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;proxy_set_header&lt;/span&gt; &lt;span class="n"&gt;X&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;Forwarded&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;Proto&lt;/span&gt; &lt;span class="n"&gt;https&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;proxy_pass_header&lt;/span&gt; &lt;span class="n"&gt;Server&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;proxy_pass&lt;/span&gt; &lt;span class="n"&gt;http&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;//&lt;/span&gt;&lt;span class="mf"&gt;127.0&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="mf"&gt;0.1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;3000&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;proxy_buffering&lt;/span&gt; &lt;span class="n"&gt;off&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;proxy_redirect&lt;/span&gt; &lt;span class="n"&gt;off&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;proxy_http_version&lt;/span&gt; &lt;span class="mf"&gt;1.1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;proxy_set_header&lt;/span&gt; &lt;span class="n"&gt;Upgrade&lt;/span&gt; &lt;span class="o"&gt;$&lt;/span&gt;&lt;span class="n"&gt;http_upgrade&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;proxy_set_header&lt;/span&gt; &lt;span class="n"&gt;Connection&lt;/span&gt; &lt;span class="o"&gt;$&lt;/span&gt;&lt;span class="n"&gt;connection_upgrade&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;tcp_nodelay&lt;/span&gt; &lt;span class="n"&gt;on&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;location&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;api&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;v1&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;streaming&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;proxy_set_header&lt;/span&gt; &lt;span class="n"&gt;Host&lt;/span&gt; &lt;span class="o"&gt;$&lt;/span&gt;&lt;span class="n"&gt;host&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;proxy_set_header&lt;/span&gt; &lt;span class="n"&gt;X&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;Real&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="ne"&gt;IP&lt;/span&gt; &lt;span class="o"&gt;$&lt;/span&gt;&lt;span class="n"&gt;remote_addr&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;proxy_set_header&lt;/span&gt; &lt;span class="n"&gt;X&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;Forwarded&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;For&lt;/span&gt; &lt;span class="o"&gt;$&lt;/span&gt;&lt;span class="n"&gt;proxy_add_x_forwarded_for&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;proxy_set_header&lt;/span&gt; &lt;span class="n"&gt;X&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;Forwarded&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;Proto&lt;/span&gt; &lt;span class="n"&gt;https&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;proxy_pass&lt;/span&gt; &lt;span class="n"&gt;http&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;//&lt;/span&gt;&lt;span class="mf"&gt;127.0&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="mf"&gt;0.1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;4000&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;proxy_buffering&lt;/span&gt; &lt;span class="n"&gt;off&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;proxy_redirect&lt;/span&gt; &lt;span class="n"&gt;off&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;proxy_http_version&lt;/span&gt; &lt;span class="mf"&gt;1.1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;proxy_set_header&lt;/span&gt; &lt;span class="n"&gt;Upgrade&lt;/span&gt; &lt;span class="o"&gt;$&lt;/span&gt;&lt;span class="n"&gt;http_upgrade&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;proxy_set_header&lt;/span&gt; &lt;span class="n"&gt;Connection&lt;/span&gt; &lt;span class="o"&gt;$&lt;/span&gt;&lt;span class="n"&gt;connection_upgrade&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;tcp_nodelay&lt;/span&gt; &lt;span class="n"&gt;on&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;error_page&lt;/span&gt; &lt;span class="mi"&gt;500&lt;/span&gt; &lt;span class="mi"&gt;501&lt;/span&gt; &lt;span class="mi"&gt;502&lt;/span&gt; &lt;span class="mi"&gt;503&lt;/span&gt; &lt;span class="mi"&gt;504&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="mf"&gt;500.&lt;/span&gt;&lt;span class="n"&gt;html&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Puis on installe Let’s Encrypt pour générer notre certificat SSL :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cd /opt&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git clone https://github.com/letsencrypt/letsencrypt&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cd letsencrypt&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;./letsencrypt-auto certonly --webroot -w /home/mastodon/live -d www.votredomaine.com -d votredomaine.com --email vous@votredomaine.com --text --rsa-key-size 4096&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="mettre-à-jour-mastodon"&gt;Mettre à jour Mastodon&#13;&#10;&lt;/h3&gt;&lt;p&gt;Mastodon est très régulièrement mis à jour, cependant pour des raisons de stabilité, il est préférable d’attendre des releases pour mettre à jour son instance. Il ne sera donc pas nécessaire de lancer 10 fois par jour la commande git pull, et il vous suffit après une release d’utiliser les commandes suivantes sans oublier de remplacer tags/vX.X.X par l’identifiant de la release.&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;su - mastodon&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cd live&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git fetch&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git checkout vX.X.X&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;bundle install --deployment --without development test&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;NODE_ENV=production npm upgrade --global yarn&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;yarn install&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;RAILS_ENV=production bundle exec rails assets:clean&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;RAILS_ENV=production bundle exec rails assets:precompile&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;RAILS_ENV=production bundle exec rails db:migrate&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;exit&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;&#10;&lt;li&gt;Si une mise à jour de Ruby est nécessaire pour l’installation d’une release, il vous faudra faire :&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;rbenv install 2.4.1&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;gem install bundler --no-ri&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;&#10;&lt;li&gt;Note pour la release v1.1.2, pour utiliser la nouvelle fonctionnalitée des avatars GIF, utilisez la commande suivante pour générer une version statiques sur des avatars mis en ligne précédemmment. Sinon vos utilisateurs devront ré-uploader l’avatar pour en bénéficier.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;&lt;code&gt;RAILS_ENV=production bundle exec rake mastodon:maintenance:add_static_avatars&lt;/code&gt;&lt;/p&gt;&#10;&lt;p&gt;Il ne reste plus qu’à redémarrer l’instance :&lt;/p&gt;&#10;&lt;p&gt;&lt;code&gt;sudo systemctl restart mastodon-web.service mastodon-sidekiq.service mastodon-streaming.service&lt;/code&gt;&lt;/p&gt;&#10;&lt;h3 id="création-du-compte-administrateur"&gt;Création du compte administrateur&#13;&#10;&lt;/h3&gt;&lt;p&gt;Votre instance est désormais fonctionnelle, il vous suffit donc de vous inscrire et de valider votre adresse mail pour créer votre compte.&#10;Ensuite, pour définir ce compte en tant qu’administrateur de l’instance utiliser la commande suivante :&lt;/p&gt;&#10;&lt;p&gt;&lt;code&gt;RAILS_ENV=production bundle exec rails mastodon:make_admin USERNAME=votre-utilisateur&lt;/code&gt;&lt;/p&gt;&#10;&lt;h3 id="mon-instance-mastodontop"&gt;Mon instance Mastodon.top&#13;&#10;&lt;/h3&gt;&lt;p&gt;&lt;img alt="Screenshot_44" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://jesuisadmin.fr/images/2017/08/Screenshot_44.png"&gt;&lt;/p&gt;&#10;&lt;h3 id=""&gt;&#13;&#10;&lt;/h3&gt;&lt;p&gt;Ayant des ressources à disposition, j’ai lancé mon instance Mastodon, que vous pouvez rejoindre à l’adresse &lt;a class="link" href="https://mastodon.top" target="_blank" rel="noopener"&#13;&#10; &gt;mastodon.top&lt;/a&gt;. Nous sommes déjà 90 utilisateurs et vu l’utilisation des ressources, cela ne devrait pas être un problème d’héberger plus de monde.&#10;Vous pouvez visualiser les statistiques de l’instance sur la &lt;a class="link" href="https://mastodon.top/about/more" target="_blank" rel="noopener"&#13;&#10; &gt;page about&lt;/a&gt; ainsi que le monitoring en temps-réel à l’adresse &lt;a class="link" href="https://status.mastodon.top" target="_blank" rel="noopener"&#13;&#10; &gt;status.mastodon.top&lt;/a&gt;.&lt;/p&gt;&#10;&lt;p&gt;N’hésitez pas à donner votre avis sur ce tutoriel, à corriger d’éventuelles erreurs ou à demander de l’aide pour mettre en place votre instance !&lt;/p&gt;&#10;&lt;p&gt;Vous pouvez aussi me suivre sur Mastodon : &lt;a class="link" href="https://mastodon.top/@thomas_virtubox" target="_blank" rel="noopener"&#13;&#10; &gt;thomas_virtubox@mastodon.top&lt;/a&gt;&lt;/p&gt;&#10;</description></item><item><title>Installer Ghost avec Nginx proxy-cache et Let'sEncrypt</title><link>https://jesuisadmin.fr/installer-ghost-nginx-proxy-cache-letsencrypt/</link><pubDate>Wed, 29 Mar 2017 21:17:02 +0000</pubDate><guid>https://jesuisadmin.fr/installer-ghost-nginx-proxy-cache-letsencrypt/</guid><description>&lt;img src="https://jesuisadmin.fr/images/2018/07/Installer-Ghost-2.jpg" alt="Featured image of post Installer Ghost avec Nginx proxy-cache et Let'sEncrypt" /&gt;&lt;hr&gt;&#10;&#13;&#10; &lt;blockquote&gt;&#13;&#10; &lt;p&gt;Cet article est ancien et il peut contenir des instructions qui ne sont plus d&amp;rsquo;actualité.&lt;/p&gt;&#10;&#13;&#10; &lt;/blockquote&gt;&#13;&#10;&lt;p&gt;Si vous aussi, il vous arrive de vous plaindre à propos de WordPress, pourquoi ne pas essayer une autre solution pour votre blog ? C’est ce que j’ai fait pour mon blog &lt;a class="link" href="https://anystack.xyz" target="_blank" rel="noopener"&#13;&#10; &gt;anystack.xyz&lt;/a&gt; en passant de WordPress à Ghost. Après plusieurs mois d’utilisation, je suis plutôt satisfait de cette plateforme. Il manque effectivement quelques fonctionnalités et l’écosystème de plugins et de thèmes que l’on peut retrouver sur WordPress, mais sa simplicité d’utilisation et son orientation vers ce qui est vraiment important – le contenu – est plutôt agréable.&lt;/p&gt;&#10;&lt;p&gt;Je vais donc dans ce tutorial expliquer comment installer Ghost, puis mettre en place un reverse-proxy avec Nginx et Let’s Encrypt, en utilisant le module proxy-cache de Nginx pour rendre Ghost encore plus rapide.&lt;/p&gt;&#10;&lt;h3 id="1-installer-nodejs-v4-lts"&gt;1) Installer NodeJs v4 LTS&#13;&#10;&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;wget https://deb.nodesource.com/setup_4.x&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;chmod +x setup_4.x&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;./setup_4.x&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;apt-get install nodejs -y&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="2-installer-ghost"&gt;2) Installer Ghost&#13;&#10;&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-gdscript3" data-lang="gdscript3"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;mkdir&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="k"&gt;var&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;www&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;ghost&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;cd&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="k"&gt;var&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;www&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;ghost&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;curl&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;L&lt;/span&gt; &lt;span class="n"&gt;https&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;//&lt;/span&gt;&lt;span class="n"&gt;ghost&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;org&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;zip&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;ghost&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;latest&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;zip&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;o&lt;/span&gt; &lt;span class="n"&gt;ghost&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;zip&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;unzip&lt;/span&gt; &lt;span class="n"&gt;ghost&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;zip&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;npm&lt;/span&gt; &lt;span class="n"&gt;install&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="n"&gt;production&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Lancer Ghost :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;npm start --production&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Votre instance Ghost est donc désormais lancée, et vous pouvez y accéder à l’adresse &lt;a class="link" href="http://IP-De-Votre-Serveur:2368" target="_blank" rel="noopener"&#13;&#10; &gt;http://IP-De-Votre-Serveur:2368&lt;/a&gt;. Cependant, si vous fermez votre console SSH, l’instance Ghost s’arrêtera.&#10;Pour lancer Ghost de façon définitive :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;npm install forever -g&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;## démarrer ghost&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;NODE_ENV=production forever start index.js&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;## arrêter ghost&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;forever stop index.js&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="3-configurer-nginx-en-tant-que-reverse-proxy"&gt;3) Configurer Nginx en tant que reverse-proxy&#13;&#10;&lt;/h3&gt;&lt;p&gt;Nous allons donc passer à la partie configuration de Nginx. Si vous utilisez EasyEngine, vous pouvez créer votre sous domaine en une seule commande :&lt;/p&gt;&#10;&lt;p&gt;&lt;code&gt;ee site create votredomaine.com --proxy=127.0.0.1:2368&lt;/code&gt;&lt;/p&gt;&#10;&lt;p&gt;Ensuite modifiez le fichier de configuration de votre domaine en suivant le modèle ci-dessous.&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-gdscript3" data-lang="gdscript3"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;upstream&lt;/span&gt; &lt;span class="n"&gt;ghost_upstream&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;server&lt;/span&gt; &lt;span class="mf"&gt;127.0&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="mf"&gt;0.1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;2368&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;keepalive&lt;/span&gt; &lt;span class="mi"&gt;64&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;proxy_cache_path&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="k"&gt;var&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;run&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;cache&lt;/span&gt; &lt;span class="n"&gt;levels&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="n"&gt;keys_zone&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;STATIC&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;75&lt;/span&gt;&lt;span class="n"&gt;m&lt;/span&gt; &lt;span class="n"&gt;inactive&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;24&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt; &lt;span class="n"&gt;max_size&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;512&lt;/span&gt;&lt;span class="n"&gt;m&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;server&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;server_name&lt;/span&gt; &lt;span class="n"&gt;votredomaine&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;com&lt;/span&gt; &lt;span class="n"&gt;wwww&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;votredomaine&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;com&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;add_header&lt;/span&gt; &lt;span class="n"&gt;X&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;Cache&lt;/span&gt; &lt;span class="o"&gt;$&lt;/span&gt;&lt;span class="n"&gt;upstream_cache_status&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;location&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;proxy_cache&lt;/span&gt; &lt;span class="n"&gt;STATIC&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;proxy_cache_valid&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt; &lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="n"&gt;m&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;proxy_cache_valid&lt;/span&gt; &lt;span class="mi"&gt;404&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="n"&gt;m&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;proxy_pass&lt;/span&gt; &lt;span class="n"&gt;http&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;//&lt;/span&gt;&lt;span class="n"&gt;ghost_upstream&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;proxy_ignore_headers&lt;/span&gt; &lt;span class="n"&gt;X&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;Accel&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;Expires&lt;/span&gt; &lt;span class="n"&gt;Expires&lt;/span&gt; &lt;span class="n"&gt;Cache&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="ne"&gt;Control&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;proxy_ignore_headers&lt;/span&gt; &lt;span class="n"&gt;Set&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;Cookie&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;proxy_hide_header&lt;/span&gt; &lt;span class="n"&gt;Set&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;Cookie&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;proxy_hide_header&lt;/span&gt; &lt;span class="n"&gt;X&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;powered&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;by&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;proxy_set_header&lt;/span&gt; &lt;span class="n"&gt;X&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;Real&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="ne"&gt;IP&lt;/span&gt; &lt;span class="o"&gt;$&lt;/span&gt;&lt;span class="n"&gt;remote_addr&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;proxy_set_header&lt;/span&gt; &lt;span class="n"&gt;X&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;Forwarded&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;For&lt;/span&gt; &lt;span class="o"&gt;$&lt;/span&gt;&lt;span class="n"&gt;proxy_add_x_forwarded_for&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;proxy_set_header&lt;/span&gt; &lt;span class="n"&gt;Host&lt;/span&gt; &lt;span class="o"&gt;$&lt;/span&gt;&lt;span class="n"&gt;http_host&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;expires&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="n"&gt;m&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;location&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;images&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;alias&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;to&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;ghost&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;images&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;access_log&lt;/span&gt; &lt;span class="n"&gt;off&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;expires&lt;/span&gt; &lt;span class="nb"&gt;max&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;location&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;assets&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;alias&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;to&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;ghost&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;themes&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;uno&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;master&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;assets&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;access_log&lt;/span&gt; &lt;span class="n"&gt;off&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;expires&lt;/span&gt; &lt;span class="nb"&gt;max&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;location&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;public&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;alias&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;to&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;ghost&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;core&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;built&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;public&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;access_log&lt;/span&gt; &lt;span class="n"&gt;off&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;expires&lt;/span&gt; &lt;span class="nb"&gt;max&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;location&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;ghost&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;scripts&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;alias&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;to&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;ghost&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;core&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;built&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;scripts&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;access_log&lt;/span&gt; &lt;span class="n"&gt;off&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;expires&lt;/span&gt; &lt;span class="nb"&gt;max&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;location&lt;/span&gt; &lt;span class="o"&gt;~&lt;/span&gt; &lt;span class="o"&gt;^/&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="err"&gt;?&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;ghost&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;signout&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;proxy_set_header&lt;/span&gt; &lt;span class="n"&gt;X&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;Real&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="ne"&gt;IP&lt;/span&gt; &lt;span class="o"&gt;$&lt;/span&gt;&lt;span class="n"&gt;remote_addr&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;proxy_set_header&lt;/span&gt; &lt;span class="n"&gt;Host&lt;/span&gt; &lt;span class="o"&gt;$&lt;/span&gt;&lt;span class="n"&gt;http_host&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;proxy_pass&lt;/span&gt; &lt;span class="n"&gt;http&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;//&lt;/span&gt;&lt;span class="n"&gt;ghost_upstream&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;add_header&lt;/span&gt; &lt;span class="n"&gt;Cache&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="ne"&gt;Control&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;no-cache, private, no-store, must-revalidate, max-stale=0, post-check=0, pre-check=0&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;location&lt;/span&gt; &lt;span class="o"&gt;/.&lt;/span&gt;&lt;span class="n"&gt;well&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;known&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;alias&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="k"&gt;var&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;www&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;html&lt;/span&gt;&lt;span class="o"&gt;/.&lt;/span&gt;&lt;span class="n"&gt;well&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;known&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Pour appliquer la configuration, on utilise la commande &lt;em&gt;service nginx reload&lt;/em&gt;.&#10;Cependant il faut également penser à éditer le fichier config.js, situé dans le dossier d’installation de Ghost, et y changer la variable url en la remplaçant par votre nom de domaine :&lt;/p&gt;&#10;&lt;p&gt;&lt;code&gt;url: 'http://votredomaine.com'&lt;/code&gt;&lt;/p&gt;&#10;&lt;h3 id="4-installer-lets-encrypt"&gt;4) Installer Let’s Encrypt&#13;&#10;&lt;/h3&gt;&lt;p&gt;On peut désormais passer à l’installation de Let’s Encrypt si ce n’est pas déjà fait.&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cd /opt&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git clone https://github.com/letsencrypt/letsencrypt&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cd letsencrypt&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Il ne nous reste plus qu’à générer le certificat via la commande :&lt;/p&gt;&#10;&lt;p&gt;&lt;code&gt;./letsencrypt-auto certonly --webroot -w /var/www/html -d votredomaine.com --email votreemail@votredomaine.com --text --agree-tos&lt;/code&gt;&lt;/p&gt;&#10;&lt;p&gt;Pour utiliser le certificat, ajouter les lignes suivantes après server_name dans votre configuration nginx :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; listen 443 ssl http2;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ssl on;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ssl_certificate /etc/letsencrypt/live/votredomaine.com/fullchain.pem;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ssl_certificate_key /etc/letsencrypt/live/votredomaine.com/privkey.pem;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ```&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Pour terminer, il ne vous reste plus qu’à modifier à nouveau l’url de votre blog dans le fichier config.js et à ajouter un block server pour faire la redirection http vers https :&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;server {&#10;listen 80;&#10;server_name votredomaine.com www.votredomaine.com;&#10;return 301 https://votredomaine.com$request_uri;&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;p&gt;}&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>Configurer Nginx en reverse-proxy avec Let's Encrypt pour Proxmox 4</title><link>https://jesuisadmin.fr/configurer-nginx-reverse-proxy-lets-encrypt-proxmox/</link><pubDate>Wed, 22 Mar 2017 18:33:31 +0000</pubDate><guid>https://jesuisadmin.fr/configurer-nginx-reverse-proxy-lets-encrypt-proxmox/</guid><description>&lt;img src="https://jesuisadmin.fr/images/2018/07/Proxmox-nginx-1.jpg" alt="Featured image of post Configurer Nginx en reverse-proxy avec Let's Encrypt pour Proxmox 4" /&gt;&lt;p&gt;Il y a plusieurs solutions pour sécuriser l’accès à l’interface Proxmox, mais si vous avez l’habitude tout comme moi de nginx, elle est la plus intéressante car elle permet non seulement d’utiliser le domaine de votre choix pour accéder à l’interface sur le port standard 443, mais également de ne pas vous retrouver bloqué par le firewall en cas de mauvaise configuration.&lt;/p&gt;&#10;&lt;p&gt;Dans ce tutorial, nous allons donc voir comment installer nginx et comment le configurer pour obtenir un certificat Let’sEncrypt et sécuriser ainsi l’interface de Proxmox.&lt;/p&gt;&#10;&lt;p&gt;==La méthode détaillée dans cet article n&amp;rsquo;est pas compatible avec Proxmox VE 5==&lt;/p&gt;&#10;&lt;p&gt;On commence par installer nginx :&lt;/p&gt;&#10;&lt;p&gt;&lt;code&gt;apt-get install nginx&lt;/code&gt;&lt;/p&gt;&#10;&lt;p&gt;Puis on créer un fichier /etc/nginx/conf.d/proxmox.conf :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-gdscript3" data-lang="gdscript3"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;upstream&lt;/span&gt; &lt;span class="n"&gt;proxmox&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;server&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;votre.serveur.hostname&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;server&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;server_name&lt;/span&gt; &lt;span class="n"&gt;proxmox&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;votredomaine&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;com&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;rewrite&lt;/span&gt; &lt;span class="o"&gt;^&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;.*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;https&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;//$&lt;/span&gt;&lt;span class="n"&gt;host&lt;/span&gt;&lt;span class="o"&gt;$&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="n"&gt;permanent&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;location&lt;/span&gt; &lt;span class="o"&gt;/.&lt;/span&gt;&lt;span class="n"&gt;well&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;known&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;alias&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="k"&gt;var&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;www&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;html&lt;/span&gt;&lt;span class="o"&gt;/.&lt;/span&gt;&lt;span class="n"&gt;well&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;known&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Pour appliquer la configuration, on utilise la commande &lt;em&gt;service nginx reload&lt;/em&gt;.&#10;On peut désormais passer à l’installation de Let’s Encrypt si ce n’est pas déjà fait.&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cd /opt&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git clone https://github.com/letsencrypt/letsencrypt&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cd letsencrypt&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Il ne nous reste plus qu’à générer le certificat via la commande :&lt;/p&gt;&#10;&lt;p&gt;&lt;code&gt;./letsencrypt-auto certonly --webroot -w /var/www/html -d proxmox.votredomaine.com --email votreemail@votredomaine.com --text --agree-tos&lt;/code&gt;&lt;/p&gt;&#10;&lt;p&gt;Let’s Encrypt va alors effectuer l’opération de vérification en créer un dossier .well-known dans /var/www/html puis générer votre certificat. Nous pouvons donc désormais ajouter les lignes suivantes à notre fichier /etc/nginx/conf.d/proxmox.conf afin d’utiliser le certificat :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;server {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; listen 443;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; server_name proxmox.votredomaine.com;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ssl on;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ssl_certificate /etc/letsencrypt/live/proxmox.votredomaine.com/fullchain.pem;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ssl_certificate_key /etc/letsencrypt/live/proxmox.votredomaine.com/privkey.pem;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; proxy_redirect off;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; location / {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; proxy_http_version 1.1;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; proxy_set_header Upgrade $http_upgrade;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; proxy_set_header Connection &amp;#34;upgrade&amp;#34;;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; proxy_pass https://localhost:8006;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; proxy_buffering off;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; client_max_body_size 0;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; proxy_connect_timeout 3600s;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; proxy_read_timeout 3600s;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; proxy_send_timeout 3600s;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; send_timeout 3600s;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; }&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;}&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;On utilise à nouveau la commande &lt;em&gt;service nginx reload&lt;/em&gt; pour appliquer la configuration et nous pouvons désormais accéder à l’interface proxmox via l’adresse : &lt;a class="link" href="https://proxmox.votredomaine.com" target="_blank" rel="noopener"&#13;&#10; &gt;https://proxmox.votredomaine.com&lt;/a&gt;.&#10;Vous pouvez ajouter un cron pour renouveler automatiquement votre certificat letsencrypt tous les 30 jours :&lt;/p&gt;&#10;&lt;p&gt;&lt;code&gt;0 0 1 * * /opt/letsencrypt-auto certonly --webroot -w /var/www/html -d proxmox.votredomaine.com --email votreemail@votredomaine.com --text --agree-tos&lt;/code&gt;&lt;/p&gt;&#10;</description></item><item><title>Installer un serveur samba sur debian 8 jessie</title><link>https://jesuisadmin.fr/installer-serveur-samba-debian-8-jessie/</link><pubDate>Sat, 04 Mar 2017 17:04:53 +0000</pubDate><guid>https://jesuisadmin.fr/installer-serveur-samba-debian-8-jessie/</guid><description>&lt;img src="https://jesuisadmin.fr/images/2017/08/Copy-of-Seedbox-Plex.png" alt="Featured image of post Installer un serveur samba sur debian 8 jessie" /&gt;&lt;p&gt;Vous souhaitez pouvoir accéder aux dossiers de votre serveur facilement depuis votre PC Windows ? Samba vous permet de partager les dossiers de votre choix et de les ajouter directement en tant que lecteur réseau depuis votre ordinateur. Vous n’aurez ainsi besoin d’aucun client pour accéder à vos fichiers.&lt;/p&gt;&#10;&lt;p&gt;Tout d’abord il faut installer les packages samba :&lt;/p&gt;&#10;&lt;p&gt;&lt;code&gt;apt-get install libcups2 samba samba-common cups&lt;/code&gt;&lt;/p&gt;&#10;&lt;p&gt;Ensuite on déplace la configuration samba par défaut afin de créer notre propre configuration.&lt;/p&gt;&#10;&lt;p&gt;&lt;code&gt;mv /etc/samba/smb.conf /etc/samba/smb.conf.bak&lt;/code&gt;&lt;/p&gt;&#10;&lt;p&gt;On peut désormais créer notre fichier configuration :&lt;/p&gt;&#10;&lt;p&gt;&lt;code&gt;nano /etc/samba/smb.conf&lt;/code&gt;&lt;/p&gt;&#10;&lt;p&gt;On commence par la partie principale (je nomme ici mon serveur debian) :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[global]&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;workgroup = WORKGROUP&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;server string = Samba Server %v&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;netbios name = debian&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;security = user&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;map to guest = bad user&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;dns proxy = no&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Puis on redémarre le serveur samba&lt;/p&gt;&#10;&lt;p&gt;&lt;code&gt;systemctl restart smbd.service&lt;/code&gt;&lt;/p&gt;&#10;&lt;p&gt;Pour partager un dossier communs à tous les utilisateurs, ajouter le code suivant à votre fichier smb.conf :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[allusers]&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; comment = All Users&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; path = /home/shares/allusers&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; valid users = @users&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; force group = users&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; create mask = 0660&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; directory mask = 0771&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; writable = yes&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Puis créez ce dossier en utilisant :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mkdir -p /home/shares/allusers&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;chown -R root:users /home/shares/allusers/&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;chmod -R ug+rwx,o+rx-w /home/shares/allusers/&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Pour partager le dossier home de chaque utilisateur, il vous suffit d’ajouter le code suivant à votre fichier smb.conf :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[homes]&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; comment = Home Directories&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; browseable = no&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; valid users = %S&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; writable = yes&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; create mask = 0700&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; directory mask = 0700&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Nous devons désormais ajouter un utilisateur, pour cela :&lt;/p&gt;&#10;&lt;p&gt;&lt;code&gt;useradd jesuisadmin -m -G users&lt;/code&gt;&lt;/p&gt;&#10;&lt;p&gt;On définit un mot de passe pour l’utilisateur&lt;/p&gt;&#10;&lt;p&gt;&lt;code&gt;passwd jesuisadmin&lt;/code&gt;&lt;/p&gt;&#10;&lt;p&gt;Puis on ajoute cet utilisateur à la base de donnée samba :&lt;/p&gt;&#10;&lt;p&gt;&lt;code&gt;smbpasswd -a jesuisadmin&lt;/code&gt;&lt;/p&gt;&#10;&lt;p&gt;Du côté de votre ordinateur windows, ajouter les lignes suivantes à votre fichier &lt;em&gt;C:\Windows\System32\drivers\etc\hosts&lt;/em&gt; :&lt;/p&gt;&#10;&lt;p&gt;&lt;code&gt;192.168.XX.XX&#9;debian.example.com&#9;debian&lt;/code&gt;&lt;/p&gt;&#10;&lt;p&gt;Vous pouvez désormais accéder à votre serveur directement depuis votre navigateur de fichier en utilisant l’adresse \debian ou \debian\jesuisadmin si vous souhaitez accéder directement au dossier de l’utilisateur :&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="partage samba windows 10" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://jesuisadmin.fr/images/2017/08/Screenshot_22-1.png"&gt;&lt;/p&gt;&#10;</description></item><item><title>Netdata - Une solution monitoring légère pour votre serveur Linux</title><link>https://jesuisadmin.fr/netdata-solution-monitoring-legere-serveur-linux/</link><pubDate>Thu, 23 Feb 2017 19:02:24 +0000</pubDate><guid>https://jesuisadmin.fr/netdata-solution-monitoring-legere-serveur-linux/</guid><description>&lt;img src="https://jesuisadmin.fr/images/2018/07/Screenshot_12.jpg" alt="Featured image of post Netdata - Une solution monitoring légère pour votre serveur Linux" /&gt;&lt;p&gt;Vous souhaitez pouvoir monitorer votre serveur, mais sans avoir à déployer une suite complète comme librenms ? Alors Netdata est fait pour vous !&lt;/p&gt;&#10;&lt;p&gt;C’est une solution de monitoring très légère qui affiche via un dashboard l’ensemble des informations sur l’usage des ressources de votre serveur. On y retrouve l’usage CPU, RAM, des disques avec chaque partitions mais également le détail des applications comme memcached, postfix ou redis.&#10;Cependant, à la différence des autres solutions, Netdata ne liste absolument aucune information pouvant présenter un risque sur le plan sécurité. L’avantage est qu’il n’est pas nécessaire de limiter l’accès à la dashboard et cette dernière dispose de son propre web server qui ne démarre que lorsque vous consulter la page.&lt;/p&gt;&#10;&lt;h3 id="comment-installer-netdata-"&gt;Comment installer netdata ?&#13;&#10;&lt;/h3&gt;&lt;p&gt;Vous pouvez utiliser le kickstart script pour installer netdata :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# Tous les systèmes linux&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;bash &amp;lt;(curl -Ss https://my-netdata.io/kickstart.sh) all&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Si vous choisissez l’installation manuelle, il faut d’abord installer les packages suivant :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# Debian / Ubuntu&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;apt-get install zlib1g-dev uuid-dev libmnl-dev gcc make git autoconf autogen automake pkg-config curl jq nodejs&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# Centos / Fedora / Redhat&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;yum install zlib-devel libuuid-devel libmnl-devel gcc make git autoconf autogen automake pkgconfig curl jq nodejs&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Puis il vous suffit alors de cloner le dépôt github, puis d’exécuter netdata-installer.sh :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-gdscript3" data-lang="gdscript3"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# download it - the directory &amp;#39;netdata&amp;#39; will be created&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;git&lt;/span&gt; &lt;span class="n"&gt;clone&lt;/span&gt; &lt;span class="n"&gt;https&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;//&lt;/span&gt;&lt;span class="n"&gt;github&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;com&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;firehol&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;netdata&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;git&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="n"&gt;depth&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;cd&lt;/span&gt; &lt;span class="n"&gt;netdata&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# build it, install it, start it&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;./&lt;/span&gt;&lt;span class="n"&gt;netdata&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;installer&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sh&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Vous pourrez alors accéder à netdata via l’adresse &lt;code&gt;http://IP-DE-VOTRE-SRV:19999&lt;/code&gt;&#10;Enfin pour ce qui est des mise à jour de netdata, vous pouvez ajouter un cron pour exécuter régulièrement le fichier netdata-updater.sh.&lt;/p&gt;&#10;&lt;h3 id="monitorer-nginx-"&gt;Monitorer nginx :&#13;&#10;&lt;/h3&gt;&lt;p&gt;Pour monitorer nginx, il suffit d’autoriser l’accès à la page des status pour que netdata puisse récupérer les statistiques d’utilisation. La façon la plus simple de procéder est d’ajouter cette autorisation dans le vhost defaut. On modifie donc le fichier :&lt;/p&gt;&#10;&lt;p&gt;&lt;code&gt;nano /etc/nginx/sites-available/default&lt;/code&gt;&lt;/p&gt;&#10;&lt;p&gt;Et on y ajoute l’emplacement :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# Status pages&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;location /stub_status {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9;stub_status on;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9;access_log off;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9;allow 127.0.0.1;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#9;deny all;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;}&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Pour que netdata prennent en compte le changement, on redémarre le service.&lt;/p&gt;&#10;&lt;p&gt;&lt;code&gt;service netdata restart&lt;/code&gt;&lt;/p&gt;&#10;&lt;p&gt;Et vous pourrez alors visualiser dans votre dashboard la section nginx local.&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="netdata nginx monitoring" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://jesuisadmin.fr/images/2017/08/Screenshot_131.png"&gt;&lt;/p&gt;&#10;&lt;h3 id="netdata-derrière-un-reverse-proxy"&gt;Netdata derrière un reverse-proxy&#13;&#10;&lt;/h3&gt;&lt;p&gt;Si vous souhaitez accéder au panel netdata directement via votre domaine et/ou y accéder via https, il vous faudra mettre en place un reverse-proxy.&lt;/p&gt;&#10;&lt;p&gt;Ayant une préférence pour nginx, voici le fichier de configuration à créer pour utiliser netdata pour un domaine :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;upstream backend {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; # the netdata server&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; server 127.0.0.1:19999;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; keepalive 64;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;}&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;server {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; # the virtual host name of this&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; server_name netdata.example.com;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; location / {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; proxy_set_header X-Forwarded-Host $host;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; proxy_set_header X-Forwarded-Server $host;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; proxy_pass http://backend;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; proxy_http_version 1.1;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; proxy_pass_request_headers on;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; proxy_set_header Connection &amp;#34;keep-alive&amp;#34;;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; proxy_store off;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; }&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;}&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Et la configuration si vous préférez accéder à netdata via un sous-dossier :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;upstream netdata {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; server 127.0.0.1:19999;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; keepalive 64;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;}&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;server {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; # the virtual host name of this subfolder should be exposed&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; #server_name netdata.example.com;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; location /netdata {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; return 301 /netdata/;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; }&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; location ~ /netdata/(?.*) {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; proxy_redirect off;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; proxy_set_header Host $host;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; proxy_set_header X-Forwarded-Host $host;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; proxy_set_header X-Forwarded-Server $host;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; proxy_http_version 1.1;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; proxy_pass_request_headers on;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; proxy_set_header Connection &amp;#34;keep-alive&amp;#34;;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; proxy_store off;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; proxy_pass http://netdata/$ndpath$is_args$args;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; gzip on;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; gzip_proxied any;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; gzip_types *;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; }&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;}&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="utiliser-les-badges"&gt;Utiliser les badges&#13;&#10;&lt;/h3&gt;&lt;p&gt;Une des raisons pour lesquelles vous allez probablement utiliser un reverse-proxy est la possibilité d’afficher en temps réel des badges avec les informations de votre serveur.&#10;Exemple de code pour afficher quelques badges de votre serveur :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;lt;img src=&amp;#34;https://netdata.votredomaine.tld/api/v1/badge.svg?chart=system.cpu&amp;amp;alarm=10min_cpu_usage&amp;amp;refresh=auto&amp;#34;/&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;gt;&amp;lt;img src=&amp;#34;https://netdata.votredomaine.tld/api/v1/badge.svg?chart=system.ram&amp;amp;alarm=ram_in_use&amp;amp;refresh=auto&amp;#34; /&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;gt;&amp;lt;img src=&amp;#34;https://netdata.votredomaine.tld/api/v1/badge.svg?chart=disk_util.sda&amp;amp;alarm=10min_disk_utilization&amp;amp;refresh=auto&amp;#34; /&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;gt;&amp;lt;img src=&amp;#34;https://netdata.votredomaine.tld/api/v1/badge.svg?chart=nginx_local.connections&amp;amp;refresh=auto&amp;#34; /&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Vous pouvez trouver plus d’informations à propos de netdata dans la &lt;a class="link" href="https://github.com/firehol/netdata/wiki" target="_blank" rel="noopener"&#13;&#10; &gt;documentation officielle&lt;/a&gt;.&lt;/p&gt;&#10;&lt;h3 id="edit-du-22072017-"&gt;Edit du 22/07/2017 :&#13;&#10;&lt;/h3&gt;&lt;p&gt;J’ai commencé la réalisation d’une dashboard custom basée sur un template bootstrap 4, que vous pouvez voir sur &lt;a class="link" href="https://virtubox.net/netdata/" target="_blank" rel="noopener"&#13;&#10; &gt;la page de demo&lt;/a&gt; et dont le code est disponible sur &lt;a class="link" href="https://github.com/VirtuBox/netdata-dashboard" target="_blank" rel="noopener"&#13;&#10; &gt;github&lt;/a&gt;.&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="netdata custom dashboard" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://jesuisadmin.fr/images/2017/08/netdata-dashboard.png"&gt;&lt;/p&gt;&#10;</description></item><item><title>Créez votre seedbox avec qBittorrent et Plex</title><link>https://jesuisadmin.fr/creer-seedbox-qbittorrent-plex/</link><pubDate>Wed, 22 Feb 2017 15:26:02 +0000</pubDate><guid>https://jesuisadmin.fr/creer-seedbox-qbittorrent-plex/</guid><description>&lt;img src="https://jesuisadmin.fr/images/2017/08/Seedbox-Plex-1.png" alt="Featured image of post Créez votre seedbox avec qBittorrent et Plex" /&gt;&lt;p&gt;L’application Plex va sans aucun doute marquer cette année 2017, puisque nous sommes de plus en plus nombreux à organiser nos bibliothèque grâce au Plex Media Server.&lt;/p&gt;&#10;&lt;p&gt;Et ayant craqué lors des dernières soldes Kimsufi pour un serveur KS-4G équipé d’un Atom N2800 et de 2To de disque (7,99€ HT /mois), je commençais tout de même à me demander pourquoi j’avais pris ce serveur …&lt;/p&gt;&#10;&lt;p&gt;J’ai donc souhaité en faire une Seedbox avec Plex &amp;amp; qBittorrent. Pour cela, j’ai d’abord installé le serveur avec Ubuntu Xenial 16.04 LTS, puis une fois connecté, j’ai commencé par télécharger Plex Media Server :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;wget -O plex.deb https://downloads.plex.tv/plex-media-server/1.4.1.3362-77c6a4f80/plexmediaserver_1.4.1.3362-77c6a4f80_amd64.deb&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;dpkg -i plex.deb&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;C’est là que commencent les hostilités, puisque la première connexion à Plex ne peut se faire que via le réseau local d’un serveur, et sans environnement graphique, impossible d’ouvrir Firefox pour faire la validation en localhost.&lt;/p&gt;&#10;&lt;p&gt;Pour pouvoir accéder au serveur sur le port 32400, il est nécessaire d’utiliser un tunnel SSH, de façon très simple avec linux en faisant :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ssh ip.address.of.server -L 8888:localhost:32400&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Et un peu plus difficilement avec Windows, puisqu’il faut utiliser Putty afin de créer le tunnel comme dans l’exemple ci-dessous avant de clicker sur “open” :&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="putty ssh tunnel" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://jesuisadmin.fr/images/2017/10/Screenshot_10.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;Vous pourrez ensuite via votre navigateur accéder à l’adresse : &lt;strong&gt;http://127.0.0.1:32400/web/index.html#&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;Notre serveur Plex est donc désormais opérationnel, mais le serveur est tout de même vide. Nous allons donc passer à l’installation de qBittorrent, et pour cela :&lt;/p&gt;&#10;&lt;p&gt;&lt;code&gt;apt-get update &amp;amp;&amp;amp; apt-get install qbittorrent-nox&lt;/code&gt;&lt;/p&gt;&#10;&lt;p&gt;On créer ensuite un nouvel utilisateur, qui sera notre utilisateur principal et on déclare qbittorrent en tant que service :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;adduser qbtuser&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;touch /etc/systemd/system/qbittorrent.service&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;nano /etc/systemd/system/qbittorrent.service&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;Unit&lt;span class="o"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;Description&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;qBittorrent Daemon Service&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;After&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;network.target&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;Service&lt;span class="o"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;Type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;forking&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;User&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;qbtuser&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;ExecStart&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/usr/bin/qbittorrent-nox -d&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;Install&lt;span class="o"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;WantedBy&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;multi-user.target&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Il ne nous reste alors plus qu’à recharger les services avant de s’identifier avec notre nouvel utilisateur pour faire le premier lancement de qbittorrent.&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;systemctl daemon-reload&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;su - qbtuser&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;qbittorrent-nox&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;On se retrouve alors dans la même situation qu’avec Plex, puisqu’il vous faudra utiliser un tunnel SSH pour accéder via votre navigateur à l’addresse : &lt;strong&gt;http://127.0.0.1:8080&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="qbittorrent web interface" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://jesuisadmin.fr/images/2017/10/Screenshot_11.png"&gt;&lt;/p&gt;&#10;&lt;p&gt;L’utilisateur par défaut est &lt;strong&gt;admin&lt;/strong&gt;, et le mot de passe &lt;strong&gt;adminadmin&lt;/strong&gt;. Pensez à les changer avant d’arrêter qbittorrent.&#10;On peut alors repasser en tant que root, pour démarrer le service qbittorrent et l’activer au démarrage :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;systemctl &lt;span class="nb"&gt;enable&lt;/span&gt; qbittorrent&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;systemctl start qbittorrent&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Il reste désormais un dernier détail à régler, les permissions. En effet, les fichiers téléchargés via qBittorrent seront la propriété de qbtuser, alors que Plex Media Server est identifié en tant que l’utilisateur plex.&lt;/p&gt;&#10;&lt;p&gt;Pour régler ce problème, je vais ajouter l’utilisateur plex au groupe qbtuser, puis donner les droits d’accès au groupe sur le dossier Downloads. Pour cela j’utilise :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;usermod -aG qbtuser plex&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;chmod -R g+rw /home/qbtuser/Downloads&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Pour ce qui est des performances sur les films, même avec un processeur atom les résultats sont très corrects. Il faudra tout de même préférer une version Core-i3 ou i5 si vous souhaitez être plusieurs connectés en même temps.&lt;/p&gt;&#10;</description></item><item><title>Cloudron - La solution Self-Hosting facile</title><link>https://jesuisadmin.fr/cloudron-solution-self-hosting-facile/</link><pubDate>Fri, 17 Feb 2017 20:40:39 +0000</pubDate><guid>https://jesuisadmin.fr/cloudron-solution-self-hosting-facile/</guid><description>&lt;img src="https://jesuisadmin.fr/images/2017/08/Screenshot_6.png" alt="Featured image of post Cloudron - La solution Self-Hosting facile" /&gt;&lt;p&gt;Le Self-Hosting c&amp;rsquo;est bien, mais cela représente souvent beaucoup de temps pour déployer les applications et les mettre à jour, sans pour autant toujours bénéficier des mêmes fonctionnalités et garanties que des services tiers ou des solutions SaaS.&lt;/p&gt;&#10;&lt;p&gt;Sur les aspects comme la sécurité, le self-hosting est d&amp;rsquo;une certaine façon &lt;strong&gt;La&lt;/strong&gt; solution ultime, cependant cela requiert quelques connaissances.&lt;/p&gt;&#10;&lt;p&gt;Mais si vous souhaitez vous lancer dans l’auto hébergement, il y a heureusement des plateformes comme Yunohost, DPlatform ou Cloudron qui vous permettent de déployer en quelques minutes vos applications préférées. Mais nous allons nous attarder sur Cloudron, car c’est pour moi la solution la plus aboutie à ce jour, et les fonctionnalités proposées sont nombreuses.&lt;/p&gt;&#10;&lt;h2 id="mais-cloudron-cest-quoi-"&gt;Mais Cloudron c’est quoi ?&#13;&#10;&lt;/h2&gt;&lt;p&gt;C’est une plateforme permettant de déployer en quelques minutes de nombreuses applications tel que NextCloud, RocketChat ou encore Gogs avec un service clé en main incluant l’hébergement et le backup. Mais pour l’équipe de Cloudron, si vous ne souhaitez pas vous abonner à leurs services, ils vous proposent de l’héberger vous même sur le serveur de votre choix.&lt;/p&gt;&#10;&lt;h2 id="les-fonctionnalités-principales"&gt;Les fonctionnalités principales&#13;&#10;&lt;/h2&gt;&lt;ul&gt;&#10;&lt;li&gt;40+ applications disponibles : FreshRSS, NextCloud, Rocket.chat, Gogs etc ..&lt;/li&gt;&#10;&lt;li&gt;serveur mail complet avec SPF, DKIM, et DMARC&lt;/li&gt;&#10;&lt;li&gt;backup en local, sur amazon S3 ou via Minio&lt;/li&gt;&#10;&lt;li&gt;Sécurité : iptables, SSH keys et let’s encrypt avec HSTS pour tous les sous domaines&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Cloudron est basé sur une architecture Docker, autrement dit chaque application est déployée dans un container, ce qui simplifie à la fois la sauvegarde, mais également l’installation ou la mise à jour. Les seuls pré-requis pour installer Cloudron sont :&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Un serveur Ubuntu 16.04 LTS avec 1Go+ RAM&lt;/li&gt;&#10;&lt;li&gt;Un nom de domaine complet (pas seulement un sous-domaine)&lt;/li&gt;&#10;&lt;li&gt;Une connexion SSH en utilisant un clé SSH.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;L&amp;rsquo;installation est relativement simple :&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;wget https://cloudron.io/cloudron-setup&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;chmod +x ./cloudron-setup&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;./cloudron-setup --provider &lt;span class="o"&gt;[&lt;/span&gt;ec2/digitalocean/scaleway/ovh/generic&lt;span class="o"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;L’installation nécessite quelques minutes, et vous pourrez accéder à votre Cloudron en vous rendant à l’adresse : https://IP-DE-VOTRE-SERVEUR&#10;Vous pourrez alors débuter la configuration de votre Cloudron, incluant le nom de domaine et la gestion des DNS, soit via Amazon Route 53, DigitalOcean, avec un Wildcard ou manuellement.&#10;Une fois l’installation terminée l’adresse principale de votre Cloudron sera &lt;a class="link" href="https://my.votredomaine.com" target="_blank" rel="noopener"&#13;&#10; &gt;https://my.votredomaine.com&lt;/a&gt;.&lt;/p&gt;&#10;&lt;p&gt;Vous pouvez trouvez la documentation complète de Cloudron sur &lt;a class="link" href="https://cloudron.io/documentation/" target="_blank" rel="noopener"&#13;&#10; &gt;leur site&lt;/a&gt;.&lt;/p&gt;&#10;</description></item></channel></rss>