MISE EN PLACE D’UN ENVIRONEMENT DEV ODOO

MISE EN PLACE D’UN ENVIRONEMENT DEV ODOO

Contexte et Objectifs


Pourquoi l’environnement de développement et Odoo ERP ?

 

Les enjeux des logiciels de nos jours sont nombreux et complexes. Les entreprises doivent s’assurer que leurs logiciels sont sécurisés, fiables, performants, évolutifs afin de répondre à la satisfaction du client. Cette évolutivité constante exige la mise en place des processus de livraisons logiciels rapides. Et ce processus commence avec la mise en place d’un environnement de développement efficient ; D’où l’importance d’appliquer la pratique du IaC (Infrastructure as Code) ; Aussi les entreprises sont de plus en plus intéressées par des solutions logicielles qui permettent d’automatiser les actions de plusieurs de leur département d’où le choix des ERP comme Odoo. 

 

Durée de mise en place : 20 min

 

Etapes

Alors pour mettre en place un environnement de développement pour Odoo nous allons :

  • Installer Git ;
  • Installer Docker ;
  • Configurer un Dockerfile et un docker-compose.yml ;
  • Utiliser les routines pour lancer, mettre à jour, arrêter et nettoyer notre environnement ;

Environnement 

Pour la mise en place de notre environnement nous allons travailler avec : 

  • CentOS 7.9
  • Odoo 15 (Community Edition)
  • PostgreSQL 13
  • Git 1.8.3.1
  • Docker 24.0.6
  • Docker Compose v2.21.0

 

Qu’est-ce que CentOS ?

CentOS est l’acronyme de Community ENTerprise Operating System, c’est un projet Open Source qui produit deux distributions Linux distinctes : CentOS Stream et CentOS Linux. Dans cet article nous utilisons CentOS Linux qui est une distribution en aval de Red Hat Enterprise Linux. Elle est le plus souvent utilisée pour le développement et le déploiement. 

Pour plus d’information consulter : CentOS, qu’est-ce que c’est ? (redhat.com)

Qu’est-ce que Git ?

Git est un système de contrôle de version distribué, libre et gratuit, conçu pour gérer rapidement et efficacement tous les projets, des plus petits aux plus grands. Git est facile à apprendre et facilite la collaboration entre plusieurs développeurs communicants à distance à l’aide du repository. Il surpasse les outils SCM grâce à des fonctionnalités telles que le branchement local peu coûteux, des zones de stockage pratiques et de multiples flux de travail.

Pour plus d’information consulter : Git (git-scm.com)

Qu’est-ce que Docker ?

Docker est une plateforme ouverte pour le développement, l’expédition et l’exécution d’applications. Docker vous permet de séparer vos applications de votre infrastructure afin de fournir rapidement des logiciels. Avec Docker, vous pouvez gérer votre infrastructure de la même manière que vos applications. En tirant parti des méthodologies de Docker pour la livraison, le test et le déploiement du code, vous pouvez réduire considérablement le délai entre l’écriture du code et son exécution en production.

Pour plus d’information consulter : Docker overview | Docker Docs

Qu’est-ce que Docker Compose ? Docker Compose est un outil permettant de définir et d’exécuter des applications Docker multi-conteneurs. Avec Docker Compose, vous utilisez un fichier YAML pour configurer les services de votre application. Il fonctionne dans tous les environnements : production, staging, développement, tests, ainsi que dans le flux de travail CI.  Pour plus d’information consulter : Docker Compose overview | Docker Docs

Rédaction 

  • Installation de Git
Le plus simple est d’installer Git sur CentOS en utilisant le gestionnaire de paquets yum. Comme suit : 
sudo yum install git

Vérifier si l’installation a réussi :

Pour plus d’information consulter : Git (git-scm.com)
  • Installation de Docker et Docker Compose
Pour installer Docker et Docker Compose sur CentOS 7 nous allons éxecuter plusieurs étapes. Pour une première installation sur notre machine nous allons configurer le référentiel Docker en tant que super utilisateur avant d’installer Docker et Docker Compose comme suit :
  • Installez le paquet yum-utils qui vous fournira l’utilitaire yum-config-manager et configurez le dépôt.
    sudo yum install -y yum-utils
    sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
    
    • Installez la version spécifique de Docker et Docker Compose comme suit :
    sudo yum install docker-ce-24.0.6 docker-ce-cli-24.0.6 containerd.io docker-buildx-plugin docker-compose-plugin
    
    • Activez Docker au démarrage du système, ensuite démarrer le service comme suit :
    sudo systemctl enable docker
    sudo systemctl start docker
    
    • Vérifier que l’installation a réussi comme suit : 
    sudo docker --version
    sudo docker compose version
    
    • Vérifier la version retournée par Docker est 24.0.6 et vérifier que Docker Compose est aussi installé

    Pour plus d’information consulter : Install Docker Engine on CentOS | Docker Docs
    • Configuration de Dockerfile 
    Sachant que nous sommes dans un cadre de développement, il est important de rappeler quelques notions avant de passer à l’implémentation : 
    • Pour que des fonctionnalités ajoutées à Odoo soient prises en compte par ce dernier, elles doivent être développées en modules (ou chaque module est un répertoire contenant au minimum les fichiers __manifest__.py et __init__ .py) contenus dans un répertoire costum_addons ;
    • Pour configurer Odoo nous utilisons un fichier odoo.conf ;
    Notre configuration est la suivante :  odoo.conf
    [options]
    # chemin dans notre image vers le répertoire contenant les modules personnalisés
    addons_path = /mnt/extra-addons/custom-addons
    

    Pour plus d’information sur les paramètres du fichier odoo.conf consulter : Source — Documentation Odoo 15.0

    Dockerfile

    # Nous construisons notre image a partir de l'image officielle Odoo Community version 15 accessible sur le Docker Hub
    FROM odoo:15
    
    
    # Nous nous mettons en utilisateur root  
    USER root
    
    
    # En tant que root nous ajoutons les permissions de lecture et d'exécution pour tous les utilisateurs (autres) sur tous les fichiers et dossiers dans le répertoire /mnt/extra-addons/custom-addons.
    RUN mkdir -p /mnt/extra-addons/custom-addons && chmod -R o+rX /mnt/extra-addons/custom-addons
    
    
    # Nous copions nos modules personnalisés implémentés dans le répertoire contenant les modules personnalisés dans notre image
    COPY costum_addons/ /mnt/extra-addons/custom-addons/
    
    
    # Nous copions nos configurations dans l'image afin qu'elles soient prises en compte au lancement d'Odoo
    COPY odoo.conf /etc/odoo
    
    
    # Nous nous mettons en utilisateur odoo
    USER odoo
    

    • Configuration de docker-compose.yml
    Odoo a une architecture multiniveau, ce qui signifie que la présentation (basée sur NodeJS, HTML, CSS), la logique métier (basée sur python) et le stockage des données (basé sur PostgreSQL) sont séparés. L’instance de l’image officiel d’Odoo sur laquelle nous avons construit notre image nous fournit seulement la couche métier et présentation d’Odoo ; Raison pour laquelle nous devons la connectée à un autre conteneur qui va servir de stockage de données à Odoo. Pour cela on l’on va utiliser l’orchestrateur des conteneurs Docker à savoir Docker Compose que l’on va configurer comme suit :    docker-compose.yml
    # Version de la syntaxe que l'on souhaite utilisée pour décrire nos services et réseaux
    version: '3'
    
    
    # Configuration de nos services odoo et postgres 
    services:
      odoo: # Configuration de notre service Odoo
        image: eazy-odoo:1.0.0 # Nom de notre image personnalisée
        build: # Nous construisons notre image à partir de notre Dockerfile 
          dockerfile: ./Dockerfile
          context: .
        env_file: .env # Nous utilisons le fichier .env pour définir nos variables d'environnements pour connecter Odoo a la base de données ; Nb nous pouvons le faire dans le fichier odoo.conf, mais nous choisissons de le faire ici car ces valeurs change en fonction de l’environnement (dev, staging ou prod)d’exécution de notre service 
        depends_on: 
          - postgres # L'exécution de notre service dépend de celui de postgres
        ports:
          - "8069:8069" # Le port 8069 est exposé pour accéder à l'application Odoo 
        networks:
          - eazycnet # Définition du réseau dans lequel notre service communiquera
        volumes:
          - data:/var/lib/odoo # Définition d'un volume pour persister nos logs lors de l'exécution de l'application Odoo 
      postgres: # Configuration de notre service PostgreSQL
        image: postgres:13 # Image postgres 13 récupérée dans le Docker hub
        env_file: .env # Nous utilisons le fichier .env pour définir nos variables d'environnements pour définir l’utilisateur de connexion à la base de données
        ports:
          - "5432:5432" # Le port 5432 est exposé pour accéder à notre base de données
        networks:
          - eazycnet # Définition du réseau dans lequel notre service communiquera
        volumes:
          - db:/var/lib/postgresql/data # Définition d'un volume pour persister nos données sauvegardées
    volumes: # Création de nos volumes
      data:
      db:
    networks: # Création du réseau
      eazycnet:
    
    

      Pour terminer cette configuration définissons nos variables d’environnements : 

      .env

      # postgresql variables d'environnement
      POSTGRES_DB=postgres
      POSTGRES_PASSWORD=QAtM4jiGkNKGYbCEMIuAQ25TcOSwcGFeF5B
      POSTGRES_USER=odoo
      PGDATA=/var/lib/postgresql/data/pgdata
      
      
      # odoo variables d'environnement
      HOST=postgres
      USER=odoo
      PASSWORD=QAtM4jiGkNKGYbCEMIuAQ25TcOSwcGFeF5B
      PORT=5432
      

      • Configuration des routines
      Lors du développement nous devons souvent mettre à jour notre code à partir de notre base de code avant de lancer notre environnement ou lancer tout simplement notre environnement ou visualiser les journaux notre application ou encore vouloir nettoyer notre environnement. Une bonne pratique pour effectuer ces actions qui représentent des routines pour un développeur est d’écrire un script dans lequel ces actions seront exécutées. C’est ainsi que nous avons définir le script suivant :  run.sh
      #!/bin/sh
      
      
      # Récupérons le chemin absolu vers notre fichier docker compose.yml
      export COMPOSE_FILE_PATH="${PWD}/docker compose.yml"
      
      # Permet de lancer notre application
      start() {
          sudo docker compose -f "$COMPOSE_FILE_PATH" up --build -d
      }
      
      # Permet d'arrêter notre application
      down() {
          sudo docker compose -f "$COMPOSE_FILE_PATH" down
      }
      
      # Permet de visualiser les logs de notre application en cours d'exécution
      tail() {
          sudo docker compose -f "$COMPOSE_FILE_PATH" logs -f
      }
      
      # Permet de supprimer nos volumes
      delete() {
          sudo docker volume rm -f data
          sudo docker volume rm -f db
      }
      
      # Permet de mettre à jour notre code à partir de notre repository
      pull() {
          sudo git pull origin develop
      }
      
      # Permet de choisir l'action à faire
      case "$1" in
        build_start)
         pull
          start
          tail
          ;;
        start)
          start
          tail
          ;;
        stop)
          down
          ;;
        purge)
          down
          purge
          ;;
        *)
          echo "Usage: $0 {buil_start|start|stop|purge}"
      esac
      

      La configuration étant terminée, effectuons les actions suivantes : 

      • Mise à jour du code et premier démarrage de notre environnement avec sh run.sh build_start
      • Arrêt de notre environnement avec sh run.sh stop

      Démarrage de notre environnement sans mettre à jour le code avec sh run.sh start

      Nettoyage de notre environnement avec sh run.sh purge

      Références

      Techniques 

       

      Personnelles

      Tags

      #dev#docker#odoo

      Signature

      Anselme Tchassem

      Ingénieur Logiciel

      Anselme Gildas TCHASSEM BOUTCHOUANG | LinkedIn