{"id":11360,"date":"2016-06-17T03:14:28","date_gmt":"2016-06-17T10:14:28","guid":{"rendered":"\/blog\/?p=11360"},"modified":"2023-06-05T16:10:06","modified_gmt":"2023-06-05T14:10:06","slug":"exo-platform-dans-un-container-docker","status":"publish","type":"post","link":"https:\/\/www.exoplatform.com\/blog\/fr\/exo-platform-dans-un-container-docker\/","title":{"rendered":"eXo Platform dans un Docker container !"},"content":{"rendered":"<p>Nous allons voir qu\u2019il est tr\u00e8s facile d&#8217;ex\u00e9cuter <strong>eXo Platform dans un container Docker<\/strong>, de rendre les donn\u00e9es persistantes entre 2 red\u00e9marrages d\u2019un container et de brancher son d\u00e9ploiement sur une <strong>base de donn\u00e9es MySQL<\/strong>.<\/p>\n<p><!--more--><\/p>\n<p>Pour pouvoir tester le contenu de cet article il vous faut :<\/p>\n<ul>\n<li><strong>Docker 1.11+<\/strong> (utilisez Docker4Mac ou Docker4Windows si vous \u00eates sur un de ces 2 environnements qui ne supportent pas nativement Docker)<\/li>\n<li><strong>Docker Compose 1.7+<\/strong><\/li>\n<li>un acc\u00e8s internet (pour t\u00e9l\u00e9charger les images Docker)<\/li>\n<li>du caf\u00e9 (car c\u2019est encore plus long de t\u00e9l\u00e9charger des images Docker que de faire un build avec Maven \ud83d\ude09 )<\/li>\n<\/ul>\n<p>Tout d\u2019abord, faisons au plus simple et d\u00e9marrons <strong>eXo Platform \u00e9dition Community<\/strong> dans un <strong>container Docker<\/strong>. Pour cela, nous allons utiliser l\u2019image Docker exoplatform\/exo-community avec ses r\u00e9glages par d\u00e9faut (\u00e7a peut \u00eatre un peu long la premi\u00e8re fois le temps que l\u2019<strong>image Docker<\/strong> soit t\u00e9l\u00e9charg\u00e9e) :<\/p>\n<pre class=\"theme:github toolbar:2 lang:sh decode:true\">docker run -ti --rm --name exo \\\n  -p 8080:8080 \\\n  exoplatform\/exo-community:4.3\n<\/pre>\n<p><span style=\"line-height: 1.5;\"> Au bout de quelques dizaines de secondes, vous voyez appara\u00eetre dans les logs<span class=\"theme:github lang:sh decode:true crayon-inline\">Server startup in 58220 ms<\/span>\u00a0<\/span><span style=\"line-height: 1.5;\">. A ce moment l\u00e0, eXo Platform est initialis\u00e9 et vous pouvez tester votre installation en vous rendant sur <strong><a href=\"http:\/\/localhost:8080\/\" class=\"broken_link\" target=\"_blank\" rel=\"noopener\">http:\/\/localhost:8080\/<\/a> <\/strong><\/span><\/p>\n<p><a href=\"https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2016\/06\/exo-started.png\"><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-11313\" src=\"https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2016\/06\/exo-started.png\" alt=\"exo-started\" width=\"2402\" height=\"1504\" srcset=\"https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2016\/06\/exo-started.png 2402w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2016\/06\/exo-started-300x188.png 300w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2016\/06\/exo-started-1024x641.png 1024w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2016\/06\/exo-started-768x481.png 768w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2016\/06\/exo-started-1536x962.png 1536w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2016\/06\/exo-started-2048x1282.png 2048w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2016\/06\/exo-started-1250x783.png 1250w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2016\/06\/exo-started-720x451.png 720w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2016\/06\/exo-started-500x313.png 500w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2016\/06\/exo-started-360x225.png 360w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2016\/06\/exo-started-200x125.png 200w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2016\/06\/exo-started-100x63.png 100w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2016\/06\/exo-started-48x30.png 48w\" sizes=\"(max-width: 2402px) 100vw, 2402px\" \/><\/a> Que va-t-il se passer maintenant si vous arr\u00eatez et recr\u00e9ez votre container ? et bien vos donn\u00e9es auront disparues car elles \u00e9taient stock\u00e9es directement dans ce container. Pour palier \u00e0 ce probl\u00e8me, nous allons utiliser des <strong>volumes Docker<\/strong> afin de stocker les donn\u00e9es persistantes en dehors du container. Commen\u00e7ons par cr\u00e9er 2 volumes :<\/p>\n<pre class=\"theme:github toolbar:2 lang:sh decode:true\">docker volume create --name=data\n\ndocker volume create --name=logs<\/pre>\n<p><span style=\"line-height: 1.5;\">et red\u00e9marrons eXo Platform dans notre container en utilisant ces volumes : \u00a0 \u00a0\u00a0<\/span><\/p>\n<pre class=\"theme:github toolbar:2 lang:sh decode:true\">docker run -ti --rm --name exo \\\n  -p 8080:8080 \\\n  -v data:\/srv\/exo \\\n  -v logs:\/var\/log\/exo \\\n  exoplatform\/exo-community:4.3\n<\/pre>\n<p>D\u00e9sormais les donn\u00e9es persistantes d\u2019eXo Platform (indexes JCR, Values Storage, \u2026) seront stock\u00e9es dans le volume data et les logs dans le volume logs. Vous pouvez donc arr\u00eater et supprimer votre container et en red\u00e9marrer un nouveau, toutes les donn\u00e9es que vous aurez d\u00e9j\u00e0 saisi resteront disponibles. Bon \u00e7a y est ? Je peux passer en production puisque mes donn\u00e9es survivent \u00e0 un red\u00e9marrage ? Eh bien non, surtout pas, car il vous manque une base de donn\u00e9es utilisable en production !!!<br \/>\nEn effet, sans param\u00e9trage particulier, notre image Docker d\u00e9marre une base de donn\u00e9es <strong><a href=\"http:\/\/hsqldb.org\/\" target=\"_blank\" rel=\"noopener\">HSQLDB<\/a><\/strong> qui fonctionne tr\u00e8s bien pour des tests, mais qui ne doit pas \u00eatre utilis\u00e9e en production. Nous allons donc utiliser MySQL 5.5 comme base de donn\u00e9es (eXo Platform supporte d\u2019autres types de SGBD). Commen\u00e7ons par d\u00e9marrer un serveur MySQL dans un <strong>Docker container<\/strong> :<\/p>\n<pre class=\"theme:github toolbar:2 lang:sh decode:true\"># MySQL data volume creation\ndocker volume create --name=mysql_data\n\n# MySQL server start with an exo schema\ndocker run -d --name mysql \\\n  -v mysql_data:\/var\/lib\/mysql \\\n  -e MYSQL_ROOT_PASSWORD=my-secret-pw \\\n  -e MYSQL_DATABASE=exo \\\n  -e MYSQL_USER=exo \\\n  -e MYSQL_PASSWORD=exo \\\n  mysql:5.5\n\n# Check MySQL logs\ndocker logs mysql<\/pre>\n<p>&nbsp;<\/p>\n<p>Maintenant que la base de donn\u00e9es est pr\u00eate, nous pouvons d\u00e9marrer eXo Platform en configurant l\u2019image pour qu\u2019elle utilise MySQL. Cette image, fournie par eXo, expose un ensemble de param\u00e8tres permettant d\u2019adapter le comportement de l\u2019image au moment de la cr\u00e9ation du container (pour une liste d\u00e9taill\u00e9e de ces param\u00e8tre vous pouvez vous r\u00e9f\u00e9rer \u00e0 sa <strong><a href=\"https:\/\/hub.docker.com\/r\/exoplatform\/exo-community\/\" target=\"_blank\" rel=\"noopener\">documentation en ligne<\/a><\/strong>) :<\/p>\n<pre class=\"theme:github toolbar:2 lang:sh decode:true\"># creating new clean volumes for eXo Platform persistent data\ndocker volume create --name=exo_data\ndocker volume create --name=exo_logs\n\n# starting eXo Platform configured with MySQL\ndocker run -ti --rm --name exo \\\n  -p 8080:8080 \\\n  -v exo_data:\/srv\/exo \\\n  -v exo_logs:\/var\/log\/exo \\\n  --link mysql:mysql \\\n  -e EXO_DB_TYPE=mysql \\\n  -e EXO_DB_NAME=exo \\\n  -e EXO_DB_USER=exo \\\n  -e EXO_DB_PASSWORD=exo \\\n  -e EXO_DB_HOST=mysql \\\n  -e EXO_ADDONS_LIST=exo-jdbc-driver-mysql \\\n  exoplatform\/exo-community:4.3<\/pre>\n<p>Et voil\u00e0 ! notre instance eXo Platform est maintenant connect\u00e9e \u00e0 une base de donn\u00e9es MySQL et toutes les donn\u00e9es utilisateurs r\u00e9sisteront \u00e0 une recr\u00e9ation de vos containers. Connectez-vous \u00e0 votre nouvel intranet social, invitez du monde et collaborez :<\/p>\n<p><a href=\"https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2016\/06\/exo-with-content.png\"><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-11312\" src=\"https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2016\/06\/exo-with-content.png\" alt=\"exo-with-content\" width=\"2878\" height=\"1798\" srcset=\"https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2016\/06\/exo-with-content.png 2878w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2016\/06\/exo-with-content-300x187.png 300w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2016\/06\/exo-with-content-1024x640.png 1024w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2016\/06\/exo-with-content-768x480.png 768w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2016\/06\/exo-with-content-1536x960.png 1536w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2016\/06\/exo-with-content-2048x1279.png 2048w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2016\/06\/exo-with-content-1250x781.png 1250w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2016\/06\/exo-with-content-720x450.png 720w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2016\/06\/exo-with-content-500x312.png 500w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2016\/06\/exo-with-content-360x225.png 360w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2016\/06\/exo-with-content-200x125.png 200w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2016\/06\/exo-with-content-100x62.png 100w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2016\/06\/exo-with-content-48x30.png 48w\" sizes=\"(max-width: 2878px) 100vw, 2878px\" \/><\/a><\/p>\n<p>Bon c\u2019est tr\u00e8s bien tout \u00e7a, vous pouvez d\u00e9sormais d\u00e9ployer en production, mais \u00e7a reste tout de m\u00eame compliqu\u00e9 \u00e0 d\u00e9marrer. Pour simplifier encore plus tout \u00e7a nous allons utiliser <strong>Docker Compose<\/strong> pour pouvoir contr\u00f4ler notre environnement complet en une ligne de commande beaucoup plus simple.<\/p>\n<p>Pour cela, arr\u00eatons et supprimons tout d\u2019abord les containers pr\u00e9c\u00e9demment d\u00e9marr\u00e9s :<\/p>\n<pre class=\"theme:github toolbar:2 lang:sh decode:true\"># stop eXo Platform running container\ndocker stop exo\n\n# stop MySQL running container\ndocker stop mysql\ndocker rm mysql<\/pre>\n<p>Ensuite cr\u00e9ons un fichier <strong>docker-compose.yml<\/strong> avec le contenu suivant :<\/p>\n<pre class=\"theme:github toolbar:2 lang:yaml decode:true \">version: '2'\nservices:\n  exo:\n    image: exoplatform\/exo-community:4.3\n    environment:\n      EXO_DB_TYPE: mysql\n      EXO_DB_NAME: exo\n      EXO_DB_USER: exo\n      EXO_DB_PASSWORD: exo\n      EXO_DB_HOST: mysql\n      EXO_ADDONS_LIST: exo-jdbc-driver-mysql\n    expose:\n      - \"8080\"\n    ports:\n      - \"8080:8080\"\n    volumes:\n      - exo_data:\/srv\/exo\n      - exo_logs:\/var\/log\/exo\n    links:\n      - mysql\n    depends_on:\n      - mysql\n  mysql:\n    image: mysql:5.5\n    environment:\n      MYSQL_ROOT_PASSWORD: my-secret-pw\n      MYSQL_DATABASE: exo\n      MYSQL_USER: exo\n      MYSQL_PASSWORD: exo\n    volumes:\n      - mysql_data:\/var\/lib\/mysql\nvolumes:\n  exo_data:\n    external:\n      name: exo_data\n  exo_logs:\n    external:\n      name: exo_logs\n  mysql_data:\n    external:\n      name: mysql_data<\/pre>\n<p>Il ne nous reste plus qu\u2019\u00e0 d\u00e9marrer l\u2019ensemble (base de donn\u00e9e MySQL et eXo Platform ) avec la simple commande suivante : <span class=\"lang:sh decode:true crayon-inline \">docker-compose -f .\/docker-compose.yml up<\/span>\u00a0.<\/p>\n<p><a href=\"https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2016\/06\/mysql.gif\"><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-11311\" src=\"https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2016\/06\/mysql.gif\" alt=\"mysql\" width=\"1025\" height=\"524\" \/><\/a><\/p>\n<p>Apr\u00e8s ce red\u00e9marrage avec Docker Compose, vous retrouverez les donn\u00e9es pr\u00e9c\u00e9demment cr\u00e9\u00e9es.<\/p>\n<p>Il y a encore beaucoup d\u2019autres choses \u00e0 faire autour de eXo Platform et Docker alors restez \u00e0 l\u2019\u00e9coute de notre blog &#8230;<\/p>\n<p>Pour aller plus loin :<\/p>\n<ul>\n<li>plus d\u2019options pour configurer votre container eXo Platform :<strong><a href=\"https:\/\/hub.docker.com\/r\/exoplatform\/exo-community\/\" target=\"_blank\" rel=\"noopener\"> https:\/\/hub.docker.com\/r\/exoplatform\/exo-community\/<\/a><\/strong><\/li>\n<li>plus d\u2019options pour configurer votre container MySQL : <strong><a href=\"https:\/\/hub.docker.com\/_\/mysql\/\" target=\"_blank\" rel=\"noopener\">https:\/\/hub.docker.com\/_\/mysql\/<\/a><\/strong><\/li>\n<\/ul>\n<div><a href=\"https:\/\/community.exoplatform.com\/portal\/dw\/\" target=\"_blank\" rel=\"noopener\"><br \/>\n<\/a><\/p>\n<div class=\"adv-events\" style=\"background: #476fad; padding: 30px 20px; color: white;\">\n<div class=\"media\">\n<div class=\"pull-right\"><img decoding=\"async\" class=\"size-full wp-image-6587 alignright\" style=\"border: none; border-radius: 0; box-shadow: none;\" src=\"https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2016\/02\/tribe.png\" alt=\"Rejoignez notre Tribe\" height=\"120px\" \/><\/div>\n<div class=\"media-body\">\n<h4 class=\"media-heading\">Rejoignez notre Tribe<\/h4>\n<p>Faites partie de notre communaut\u00e9 et recevez nos mises \u00e0 jour, tutoriels, nos add-ons et bien d&#8217;autres choses !<br \/>\n<strong>Je m&#8217;inscris !<\/strong><\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"Nous allons voir qu\u2019il est tr\u00e8s facile d&#8217;ex\u00e9cuter eXo Platform dans un container Docker, de rendre les donn\u00e9es persistantes entre 2 red\u00e9marrages d\u2019un container et de brancher son d\u00e9ploiement sur une base de donn\u00e9es MySQL.","protected":false},"author":81,"featured_media":13302,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"image","meta":[],"categories":[411],"tags":[980,913],"lang":"fr","translations":{"fr":11360},"pll_sync_post":[],"_links":{"self":[{"href":"https:\/\/www.exoplatform.com\/blog\/wp-json\/wp\/v2\/posts\/11360"}],"collection":[{"href":"https:\/\/www.exoplatform.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.exoplatform.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.exoplatform.com\/blog\/wp-json\/wp\/v2\/users\/81"}],"replies":[{"embeddable":true,"href":"https:\/\/www.exoplatform.com\/blog\/wp-json\/wp\/v2\/comments?post=11360"}],"version-history":[{"count":0,"href":"https:\/\/www.exoplatform.com\/blog\/wp-json\/wp\/v2\/posts\/11360\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.exoplatform.com\/blog\/wp-json\/wp\/v2\/media\/13302"}],"wp:attachment":[{"href":"https:\/\/www.exoplatform.com\/blog\/wp-json\/wp\/v2\/media?parent=11360"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.exoplatform.com\/blog\/wp-json\/wp\/v2\/categories?post=11360"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.exoplatform.com\/blog\/wp-json\/wp\/v2\/tags?post=11360"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}