<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Java 8 on Zwindler's Reflection</title><link>https://blog.zwindler.fr/tags/java-8/</link><description>Recent content in Java 8 on Zwindler's Reflection</description><generator>Hugo -- gohugo.io</generator><language>fr-fr</language><copyright>Licensed under CC BY-SA 4.0</copyright><lastBuildDate>Wed, 30 Nov 2016 17:30:49 +0000</lastBuildDate><atom:link href="https://blog.zwindler.fr/tags/java-8/index.xml" rel="self" type="application/rss+xml"/><item><title>Mise à jour d’un XWiki en 8.4.1 avec Docker, Tomcat &amp; PostgreSQL</title><link>https://blog.zwindler.fr/2016/11/30/mise-a-jour-xwiki-8-4-1-docker-tomcat-postgresql/</link><pubDate>Wed, 30 Nov 2016 17:30:49 +0000</pubDate><guid>https://blog.zwindler.fr/2016/11/30/mise-a-jour-xwiki-8-4-1-docker-tomcat-postgresql/</guid><description>&lt;img src="https://blog.zwindler.fr/2016/09/article_docker_xwiki.webp" alt="Featured image of post Mise à jour d’un XWiki en 8.4.1 avec Docker, Tomcat &amp; PostgreSQL" /&gt;&lt;h2 id="xwiki--docker"&gt;XWiki + Docker
&lt;/h2&gt;&lt;p&gt;Ça fait plusieurs fois que &lt;a class="link" href="https://blog.zwindler.fr/recherche/?keyword=xwiki" &gt;j’écris sur XWiki&lt;/a&gt; car j’ai remplacé tous mes Médiawiki (perso et pro) par XWiki ces derniers temps. J’ai même créé ma première image Docker, basée sur une image tomcat 8 officielle pour faciliter son installation !&lt;/p&gt;
&lt;p&gt;Et j’ai même poussé le bouchon pour donner &lt;a class="link" href="https://blog.zwindler.fr/2016/09/15/installer-xwiki-8-2-1-avec-docker-compose-en-2-lignes-de-commandes/" &gt;un docker-compose permettant d’installer en 2 lignes de commandes une instance prête à l&amp;rsquo;emploi avec Tomcat et PostgreSQL&lt;/a&gt; !&lt;/p&gt;
&lt;p&gt;Mais ce qui devait arriver arriva. D’abord parti sur une 8.2.1, arrive le temps de mettre à jour le container !&lt;/p&gt;
&lt;p&gt;La sortie de la 8.3 et la 8.4 ont apportés plusieurs améliorations (surtout &lt;a class="link" href="https://www.xwiki.org/xwiki/bin/view/ReleaseNotes/Data/XWiki/8.3/" target="_blank" rel="noopener"
&gt;la 8.3&lt;/a&gt; avec l’export de pages multiples via un seul et même XAR, un problème récurrent que j’ai depuis plusieurs mois, les extensions recommandées, &amp;hellip;).&lt;/p&gt;
&lt;h2 id="sortie-de-la-841-avec-quelques-bugfixes"&gt;Sortie de la 8.4.1 avec quelques bugfixes
&lt;/h2&gt;&lt;p&gt;Avec &lt;a class="link" href="https://www.xwiki.org/xwiki/bin/view/ReleaseNotes/Data/XWiki/8.4.1" target="_blank" rel="noopener"
&gt;la sortie de la 8.4.1&lt;/a&gt;, j’ai donc décider de réaliser la première mise à jour de mon Dockerfile et de rebuilder une nouvelle version de mon container !&lt;/p&gt;
&lt;p&gt;Pour rappel, les sources sont &lt;a class="link" href="https://github.com/zwindler/docker-xwiki" target="_blank" rel="noopener"
&gt;disponibles sur Github&lt;/a&gt; et l’image est elle &lt;a class="link" href="https://hub.docker.com/r/zwindler/xwiki-tomcat8/" target="_blank" rel="noopener"
&gt;accessible sur Dockerhub&lt;/a&gt; ou encore via une simple commande du type :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;docker pull zwindler/xwiki-tomcat8 #ou docker run
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Si vous voulez un tutoriel plus complet, [je vous conseille cet article][2] ou tout simplement de suivre les instructions sur Dockerhub.&lt;/p&gt;
&lt;h2 id="et-maintenant-comment-je-met-à-jour-"&gt;Et maintenant, comment je met à jour ?
&lt;/h2&gt;&lt;h3 id="dabord-quelques-précautions-dusage-"&gt;D’abord, quelques précautions d’usage !
&lt;/h3&gt;&lt;p&gt;Par définition, un container LXC via Docker est non-persistant, sauf définition du contraire. Cela signifie qu’en cas de redémarrage d’extinction du container, tout est remis à zéro. C’est très pratique pour repartir à un état « stable » de l’application en cas de bug &lt;strong&gt;et&lt;/strong&gt; lorsqu’elle ne stocke pas d’informations.&lt;/p&gt;
&lt;p&gt;Cependant, dans ma version &lt;strong&gt;zwindler/xwiki-tomcat&lt;/strong&gt;, j’ai paramétré le wiki pour qu’il stocke les pièces jointes &lt;a class="link" href="https://blog.zwindler.fr/2016/04/30/resoudre-erreurs-de-fichiers-gros-lors-imports-xwiki/" &gt;sur un le filesystem du serveur d’application java&lt;/a&gt;. Le comportement par défaut est dans la base de données.&lt;/p&gt;
&lt;p&gt;C’est notamment utile lorsque vous souhaitez importer un XAR (export du wiki) assez important (dizaines de Mo) car la méthode classique (en base) consomme énormément de RAM. Cela provoquait chez moi des « Out of Memory » systématiques, même avec 2 Go de RAM (voire plus).&lt;/p&gt;
&lt;p&gt;J’ai donc configuré le &lt;strong&gt;xwiki.properties&lt;/strong&gt; et ajouté la directive suivante dans le &lt;strong&gt;Dockerfile&lt;/strong&gt; qui permet de construire le container :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;VOLUME /usr/local/tomcat/work/xwiki
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Au déploiement, le filesystem est donc déporté sur le nœud hôte qui exécute le container et devient persistant. Vos pièces jointes seront donc à l’abri sur l’hôte qui exécute le container et resteront disponibles même si le container est éteint ou détruit.&lt;/p&gt;
&lt;p&gt;Par acquis de conscience, je vous conseille tout de même de sauvegarder le répertoire &lt;strong&gt;tomcat&lt;/strong&gt; avant de faire quoique ce soit&amp;hellip;&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;mkdir svg_xwiki
docker cp xwki-tomcat:/usr/local/tomcat .
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="et-ensuite-"&gt;Et ensuite ?
&lt;/h3&gt;&lt;p&gt;La vraie procédure peut commencer. D’abord, il va falloir retrouver le VOLUME qui contient vos pièces jointes pour que nous puissions le réutiliser. On pourrait se contenter de simplement copier les données de l’ancien volume vers le nouveau, mais c’est quand même moins propre ! Pour cela, on récupère le nom du container avec &lt;strong&gt;docker ps&lt;/strong&gt; et le chemin vers le volume déporté avec &lt;strong&gt;docker inspect&lt;/strong&gt;.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d126a654135c zwindler/xwki-tomcat:8.2.1 &amp;#34;/xwki-tomcat-entryp&amp;#34; 21 hours ago Up 21 hours 0.0.0.0:8080-&amp;gt;8080/tcp xwiki-tomcat
710e60554c0e postgres:9.5 &amp;#34;/docker-entrypoint.s&amp;#34; 21 hours ago Up 21 hours 5432/tcp xwiki-postgres
docker inspect xwiki-tomcat
[
{
&amp;#34;Id&amp;#34;: &amp;#34;d126a654135cd06a531c0a59c13ec3708276185eeb4eed245e9b63a2be771d37&amp;#34;,
[...]
&amp;#34;Mounts&amp;#34;: [
{
&amp;#34;Name&amp;#34;: &amp;#34;3eb68c3b9692686beada8a0aedc5d1142874c8044b6d3d537d40cbab4dd75451&amp;#34;,
&amp;#34;Source&amp;#34;: &amp;#34;/var/lib/docker/volumes/3eb68c3b9692686beada8a0aedc5d1142874c8044b6d3d537d40cbab4dd75451/_data&amp;#34;,
&amp;#34;Destination&amp;#34;: &amp;#34;/usr/local/tomcat/work/xwik&amp;#34;,
&amp;#34;Driver&amp;#34;: &amp;#34;local&amp;#34;,
&amp;#34;Mode&amp;#34;: &amp;#34;&amp;#34;,
&amp;#34;RW&amp;#34;: true,
&amp;#34;Propagation&amp;#34;: &amp;#34;&amp;#34;
}
],
[...]
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;On retrouve donc le volume dans le dossier _/var/lib/docker/volumes/3eb68c3b9692686beada8a0aedc5d1142874c8044b6d3d537d40cbab4dd75451/&lt;em&gt;data&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;On peut donc couper le container de la version précédente (8.2.1), puis le renommer et télécharger le nouveau.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;docker stop xwiki-tomcat
docker rename xwiki-tomcat wiki.old.8.2.1
docker pull zwindler/xwiki-tomcat:latest
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="déploiement-de-la-nouvelle-version"&gt;Déploiement de la nouvelle version
&lt;/h3&gt;&lt;p&gt;A partir de là, on peut donc déployer le nouveau container en reprenant les valeurs user/mdp/instance de la base de données qui ont été fixés à l’installation initiale &lt;strong&gt;et&lt;/strong&gt; en y ajoutant le volume du container précédent.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;docker run --net=xwiki-nw -itd --name xwiki-tomcat -p 8080:8080 -e POSTGRES_INSTANCE=xwiki-postgres -e POSTGRES_USER=votreuserwiki -e POSTGRES_PASSWORD=votremdpwiki --volumes-from wiki.old.8.2.1 zwindler/xwiki-tomcat
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;En cas de doutes ou de problèmes, vous pourrez récupérer le fichier &lt;strong&gt;hibernate.cfg.xm&lt;/strong&gt;l de la précédente instance (enfin, si vous avez copié les données avec le « docker cp » plus haut !)&lt;/p&gt;
&lt;p&gt;Si tout s’est bien passé, votre wiki a été mis à jour sans efforts et le « Distribution Wizard » de déploiement du XWiki devrait se lancer !&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2016/11/xwiki_upgrade.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Et voilà comment nous avons simplifié les mises à jour de XWiki via l’utilisation de Docker !&lt;/p&gt;</description></item></channel></rss>