Gestion des environnements serveur avec Odoo

La gestion des environnements de serveur est un aspect crucial pour toute entreprise utilisant Odoo. Lors des OCA Days 2024, Raphaël Reverdy, a présenté une conférence intitulée "Server Environment Management with Odoo". Cette présentation a abordé les défis et les solutions pour gérer efficacement les environnements de serveur dans Odoo.

Définition

Environnements

  • Environnement de Production : Utilisé par les utilisateurs réels.

  • Environnement de Staging/CI : Utilisé avec des données réelles (neutralisées, anonymisées) pour l'assurance qualité. Peut également être utilisé pour montrer les futures fonctionnalités aux clients.

  • Environnement de Développement : Idéalement utilisé avec des données de démonstration localement (ou dans une boîte de développement à distance).

Credentials

Les credentials incluent l'URL, le login, le mot de passe, le token, le certificat, etc., lorsque Odoo crée une connexion à un serveur externe.

Utilisation

Les credentials sont utilisés pour diverses tâches telles que :

  • EDI (Electronic Data Interchange)

  • Banque

  • Paiements

  • E-mails

Transmission

Les credentials peuvent être transportés via :

  • Mail (SMTP, IMAP)

  • Fichiers (SFTP, S3 buckets)

  • API (REST, SOAP)


Utilisation des Credentials

Les credentials peuvent être stockés et consommés de différentes manières :

  • Stockés en tant qu'enregistrement dans la base de données

  • Accessibles depuis un fichier ou une variable d'environnement, mais non stockés dans la base de données

  • Ajoutés par un serveur proxy que vous contrôlez à chaque connexion

Approche Standard

L'approche standard pour gérer les credentials est souvent difficile à déployer et coûteuse à maintenir. Elle nécessite un accès au serveur et peut être utilisée par le système pour des modules tels que sentry, bus_alt_connection, mail, payment_providers, delivery_carrier_account, auth_api_key, etc.

Stockage des Credentials

Les credentials peuvent être stockés de différentes manières :

  • Enregistrement dans la base de données

  • Via l'interface utilisateur d'Odoo

  • Via un fichier XML <record> (par un module) - source code

  • Via un script Python ou SQL - source code

  • Variable d'environnement

  • Copiée-collée sur le serveur (par un administrateur)

  • Stockée dans la gestion de configuration (généralement versionnée dans Git - source code)

Risques

Les risques associés à la gestion des credentials incluent :

  • Les credentials dans la base de données sont sauvegardés dans les dumps de base de données

  • Les credentials dans le code source peuvent être chargés dans le mauvais environnement

  • Les credentials disponibles dans le mauvais environnement peuvent entraîner des fuites de données

Modules

Comment configurer cela ?

Différentes implémentations :

  • server_environment : Module de base + implémentation par défaut

  • server_environment_data_encryption (dans la base de données)

  • server_environment_ir_config_parameter



Exemples d'utilisation

  • Installation de connector_search_engine

    • Installer connector_search_engine

    • server_environment est une dépendance

Comment configurer server_environment

[options]

running_env=prod

[outgoing_mail]

smtp_host = smtp.myserver.com

smtp_encryption = ssl

  • Modifier le fichier de configuration d'Odoo (odoo.cfg)

Comment configurer server_environment_ir_config_param

[options]

running_env=prod

[ir.config_parameter]

ribbon.name = prod

  • Modifier le fichier de configuration d'Odoo (odoo.cfg)

Comment configurer server_environment_data_encryption

from cryptography.fernet import Fernet

print(Fernet.generate_key())

print(Fernet.generate_key())

print(Fernet.generate_key())

[options]

running_env=prod

encryption_key_dev=gpe-6yzzIF8iNVmbZtHCUumup3HmmnfFQhHMrYJT0CQ=

encryption_key_ci=FLUybCIZNnl_PJ5uYvu_bJE_tVcY_b5hnv6z

encryption_key_prod=vtry8joRNSTKi9v67ySndLEp4EzVSYeg2LPbijL_bHg=

  • Ajouter les clés au fichier de configuration d'Odoo (odoo.cfg)


Intégration de votre module avec server_environment

Utilisation pour les développeurs

  • Ajouter server_environment comme dépendance de votre module

server_environment

my_module

Exemple de code

class SeBackend(models.Model):    _name = "se.backend"    _description = "Se Backend"    _inherit = [        "server.env.techname.mixin",        "server.env.mixin",    ]    name = fields.Char(required=True)    index_prefix_name = fields.Char(        help="Prefix for technical indexes tech name. "    )    backend_type = fields.Selection(selection=[], string="Type")    index_ids = fields.One2many("se.index", "backend_id")
    @property    def _server_env_fields(self):        return {"index_prefix_name": {}, "backend_type": {}}
    backend_type_env_default

Autres Solutions

Neutralize.sql

Depuis Odoo v16, un script SQL nommé data/neutralize.sql peut être utilisé pour neutraliser les données.

-- cat odoo/addons/delivery/data/neutralize.sql

-- disable delivery carriers from external providers

UPDATE delivery_carrier

  SET active = false

  WHERE delivery_type NOT IN ('fixed', 'base_on_rule');

Custom Scripts

Des scripts personnalisés en Python ou SQL peuvent être utilisés pour neutraliser les données.

Conclusion

L'intégration de server_environment au début d'un projet permet de simplifier la gestion des environnements de serveur. Bien que cela puisse ajouter une certaine complexité initiale, cela permet de gagner du temps et d'améliorer la gestion des projets à long terme.


Lumière sur l'auteur

Odoo consultant
Raphaël Reverdy
Odoo consultant - France

Esse site usa cookies para melhorar a sua experiência de navegação