Essayez Demo fr
  • en
  • fr
  • de
  • Solutions
    • Cas d’usage
      • Intranet moderneRenforcez la culture et le sentiment d’appartenance
      • Plateforme collaborativeCollaboration efficace et gestion de projets
      • Réseau socialEngagement et reconnaissance des collaborateurs
      • Hub de connaissancesOrganisez & partagez vos connaissances
      • Portail d’applicationsAccès unifié aux applications et à l’information
    • Passer à eXo
      • Alternative à
        Microsoft 365Une alternative open-source et souveraine à M365
      • Migrer vers eXo PlatformUn parcours de migration maîtrisé de vos outils existants
  • Produit
    • Aperçu
      • La PlateformeExplorer les capacités clés
      • Pourquoi eXoPrincipaux différenciateurs
      • InternationalisationEnvironnements multilingues
      • MobileApplications mobile personnalisées
    • Plateforme
      • No codePersonnalisez la plateforme sans code
      • IntégrationsConnecteurs & capacités d’extension
      • IA maitriséeIA gouvernée et extensible
    • Technologie
      • ArchitectureArchitecture & technologie
      • SécuritéMesures de sécurité
      • Open sourceLicences & composants
  • Offres
    • Offre EntrepriseDéploiements en cloud privé ou on-premise
    • eXo HubsÉdition SaaS prête à l’emploi
    • Comparer les éditionsComparez les éditions et choisissez la plus adaptée
    • Offre OEMIntégrez eXo Platform dans votre propre solution
    • ServicesNotre offre de services
  • Ressources
    • Centre de ressources
      • Etudes de cas
      • Livres blancs
      • Fiches produit
      • Vidéos
    • FAQsQuestions sur les offres, logiciel et la communauté
      • Plateforme & Cas d’Usage
      • IA & IA Responsable
      • Déploiement, Sécurité & Conformité
      • Open-source, Tarification & Services
    • Blog
      • Lancement de la version eXo Platform 7.1
      • Souveraineté numérique : quand les acteurs publics passent des paroles aux actes
      • eXo Platform et Schiever lauréats des cas d’or de la collaboration agile 2022
  • Communauté
    • CommunautéRejoignez notre communauté en ligne
    • TéléchargementLancer la plateforme eXo dans votre infrastructure
    • Code sourceCode source sur Github
    • API REST & DocumentationToutes les API REST disponibles dans eXo Platform
  • Entreprise
    • A propos d’eXo
    • Clients
    • Partenaires
    • Contactez-nous
    • Actualités
  • Menu mobile
    • Offre Enterprise
    • Offre Professionnelle
    • A propos d’eXo
    • Centre de ressources
    • Contactez-nous
    • Essayez eXo
Cas d'usage
  • Intranet moderne Renforcez la culture et le sentiment d’appartenance
  • Plateforme collaborative Collaboration efficace et gestion de projets
  • Réseau social Engagement et reconnaissance des collaborateurs
  • Hub de connaissances Organisez & partagez vos connaissances
  • Portail d’applications Accès unifié aux applications et à l’information
Passer à eXo
  • Alternative à
    Microsoft 365
    Une alternative open-source et souveraine à M365
  • Migrer vers eXo Platform Un parcours de migration maîtrisé de vos outils existants
Aperçu
  • La Plateforme Explorer les capacités clés
  • Pourquoi eXo Principaux différenciateurs
  • Internationalisation Environnements multilingues
  • Mobile Applications mobile personnalisées
Plateforme
  • No code Personnalisez la plateforme sans code
  • Intégrations Connecteurs & capacités d’extension
  • IA maitrisée IA gouvernée et extensible
Technologie
  • Architecture Architecture & technologie
  • Sécurité Mesures de sécurité
  • Open source Licences & composants
Offre Entreprise Déploiements en cloud privé ou on-premise
eXo Hubs Édition SaaS prête à l’emploi
Comparer les éditions Comparez les éditions et choisissez la plus adaptée
Offre OEM Intégrez eXo Platform dans votre propre solution
Services Notre offre de services
Centre de ressources
  • Etudes de cas
  • Livres blancs
  • Fiches produit
  • Vidéos
FAQs Questions sur les offres, logiciel et la communauté
  • Plateforme & Cas d'Usage
  • IA & IA Responsable
  • Déploiement, Sécurité & Conformité
  • Open-source, Tarification & Services
Blog
  • Lancement de la version eXo Platform 7.1
  • Souveraineté numérique : quand les acteurs publics passent des paroles aux actes
  • eXo Platform et Schiever lauréats des cas d’or de la collaboration agile 2022
Communauté Rejoignez notre communauté en ligne
Téléchargement Lancer la plateforme eXo dans votre infrastructure
Code source Code source sur Github
API REST & Documentation Toutes les API REST disponibles dans eXo Platform
A propos d'eXo
Clients
Partenaires
Contactez-nous
Actualités
Offre Enterprise
Offre Professionnelle
A propos d'eXo
Centre de ressources
Contactez-nous
Essayez eXo
  1. Accueil
  2. Etudes de cas
  3. eXo Platform dans un Docker container !

eXo Platform dans un Docker container !

Nous allons voir qu’il est très facile d’exécuter eXo Platform dans un container Docker, de rendre les données persistantes entre 2 redémarrages d’un container et de brancher son déploiement sur une base de données MySQL.

Pour pouvoir tester le contenu de cet article il vous faut :

  • Docker 1.11+ (utilisez Docker4Mac ou Docker4Windows si vous êtes sur un de ces 2 environnements qui ne supportent pas nativement Docker)
  • Docker Compose 1.7+
  • un accès internet (pour télécharger les images Docker)
  • du café (car c’est encore plus long de télécharger des images Docker que de faire un build avec Maven 😉 )

Tout d’abord, faisons au plus simple et démarrons eXo Platform édition Community dans un container Docker. Pour cela, nous allons utiliser l’image Docker exoplatform/exo-community avec ses réglages par défaut (ça peut être un peu long la première fois le temps que l’image Docker soit téléchargée) :

docker run -ti --rm --name exo \
  -p 8080:8080 \
  exoplatform/exo-community:4.3

Au bout de quelques dizaines de secondes, vous voyez apparaître dans les logsServer startup in 58220 ms . A ce moment là, eXo Platform est initialisé et vous pouvez tester votre installation en vous rendant sur http://localhost:8080/

exo-started Que va-t-il se passer maintenant si vous arrêtez et recréez votre container ? et bien vos données auront disparues car elles étaient stockées directement dans ce container. Pour palier à ce problème, nous allons utiliser des volumes Docker afin de stocker les données persistantes en dehors du container. Commençons par créer 2 volumes :

docker volume create --name=data

docker volume create --name=logs

et redémarrons eXo Platform dans notre container en utilisant ces volumes :     

docker run -ti --rm --name exo \
  -p 8080:8080 \
  -v data:/srv/exo \
  -v logs:/var/log/exo \
  exoplatform/exo-community:4.3

Désormais les données persistantes d’eXo Platform (indexes JCR, Values Storage, …) seront stockées dans le volume data et les logs dans le volume logs. Vous pouvez donc arrêter et supprimer votre container et en redémarrer un nouveau, toutes les données que vous aurez déjà saisi resteront disponibles. Bon ça y est ? Je peux passer en production puisque mes données survivent à un redémarrage ? Eh bien non, surtout pas, car il vous manque une base de données utilisable en production !!!
En effet, sans paramétrage particulier, notre image Docker démarre une base de données HSQLDB qui fonctionne très bien pour des tests, mais qui ne doit pas être utilisée en production. Nous allons donc utiliser MySQL 5.5 comme base de données (eXo Platform supporte d’autres types de SGBD). Commençons par démarrer un serveur MySQL dans un Docker container :

# MySQL data volume creation
docker volume create --name=mysql_data

# MySQL server start with an exo schema
docker run -d --name mysql \
  -v mysql_data:/var/lib/mysql \
  -e MYSQL_ROOT_PASSWORD=my-secret-pw \
  -e MYSQL_DATABASE=exo \
  -e MYSQL_USER=exo \
  -e MYSQL_PASSWORD=exo \
  mysql:5.5

# Check MySQL logs
docker logs mysql

 

Maintenant que la base de données est prête, nous pouvons démarrer eXo Platform en configurant l’image pour qu’elle utilise MySQL. Cette image, fournie par eXo, expose un ensemble de paramètres permettant d’adapter le comportement de l’image au moment de la création du container (pour une liste détaillée de ces paramètre vous pouvez vous référer à sa documentation en ligne) :

# creating new clean volumes for eXo Platform persistent data
docker volume create --name=exo_data
docker volume create --name=exo_logs

# starting eXo Platform configured with MySQL
docker run -ti --rm --name exo \
  -p 8080:8080 \
  -v exo_data:/srv/exo \
  -v exo_logs:/var/log/exo \
  --link mysql:mysql \
  -e EXO_DB_TYPE=mysql \
  -e EXO_DB_NAME=exo \
  -e EXO_DB_USER=exo \
  -e EXO_DB_PASSWORD=exo \
  -e EXO_DB_HOST=mysql \
  -e EXO_ADDONS_LIST=exo-jdbc-driver-mysql \
  exoplatform/exo-community:4.3

Et voilà ! notre instance eXo Platform est maintenant connectée à une base de données MySQL et toutes les données utilisateurs résisteront à une recréation de vos containers. Connectez-vous à votre nouvel intranet social, invitez du monde et collaborez :

exo-with-content

Bon c’est très bien tout ça, vous pouvez désormais déployer en production, mais ça reste tout de même compliqué à démarrer. Pour simplifier encore plus tout ça nous allons utiliser Docker Compose pour pouvoir contrôler notre environnement complet en une ligne de commande beaucoup plus simple.

Pour cela, arrêtons et supprimons tout d’abord les containers précédemment démarrés :

# stop eXo Platform running container
docker stop exo

# stop MySQL running container
docker stop mysql
docker rm mysql

Ensuite créons un fichier docker-compose.yml avec le contenu suivant :

version: '2'
services:
  exo:
    image: exoplatform/exo-community:4.3
    environment:
      EXO_DB_TYPE: mysql
      EXO_DB_NAME: exo
      EXO_DB_USER: exo
      EXO_DB_PASSWORD: exo
      EXO_DB_HOST: mysql
      EXO_ADDONS_LIST: exo-jdbc-driver-mysql
    expose:
      - "8080"
    ports:
      - "8080:8080"
    volumes:
      - exo_data:/srv/exo
      - exo_logs:/var/log/exo
    links:
      - mysql
    depends_on:
      - mysql
  mysql:
    image: mysql:5.5
    environment:
      MYSQL_ROOT_PASSWORD: my-secret-pw
      MYSQL_DATABASE: exo
      MYSQL_USER: exo
      MYSQL_PASSWORD: exo
    volumes:
      - mysql_data:/var/lib/mysql
volumes:
  exo_data:
    external:
      name: exo_data
  exo_logs:
    external:
      name: exo_logs
  mysql_data:
    external:
      name: mysql_data

Il ne nous reste plus qu’à démarrer l’ensemble (base de donnée MySQL et eXo Platform ) avec la simple commande suivante : docker-compose -f ./docker-compose.yml up .

mysql

Après ce redémarrage avec Docker Compose, vous retrouverez les données précédemment créées.

Il y a encore beaucoup d’autres choses à faire autour de eXo Platform et Docker alors restez à l’écoute de notre blog …

Pour aller plus loin :

  • plus d’options pour configurer votre container eXo Platform : https://hub.docker.com/r/exoplatform/exo-community/
  • plus d’options pour configurer votre container MySQL : https://hub.docker.com/_/mysql/

Rejoignez notre Tribe

Rejoignez notre Tribe

Faites partie de notre communauté et recevez nos mises à jour, tutoriels, nos add-ons et bien d’autres choses !
Je m’inscris !

Frederic Drouet

Une digital workplace tout-en-un centrée sur l'utilisateur pour des collaborateurs connectés et engagés

  • Fonctions
    • Communication Interne
    • Ressources humaines
    • Direction informatique
  • Produit
    • La Plateforme
    • Communiquer
    • Collaborer
    • Connaissances
    • Productivité
    • Open source
    • Integrations
    • Sécurité
  • Usages
    • Digital workplace
    • Logiciel collaboratif
    • Logiciel intranet
    • Gestion des connaissances
    • Plateforme d’engagement collaborateur
    • Réseau social d’entreprise
  • Guides
    • Qu’est ce q’un intranet ?
    • Plateforme collaborative
    • Guide Digital Workplace
    • La collaboration
    • Le travail collaboratif
    • Engagement collaborateur
    • Espace numérique de travail
  • Ressources
    • FAQs
    • Offres produit
    • Offres services
    • Centre de ressources
    • Clients
    • Partenaires
    • A propos de nous
  • Conditions Générales
  • Confidentialité
  • Mentions légales
  • Accessibilité
  • Plan du site
  • Contact
  • Facebook
  • Twitter
  • LinkedIn
wpDiscuz