Sujets avancés¶
Cette section aborde les fonctionnalités avancées d’Odoo.sh relatives aux conteneurs, aux sous-modules Git et aux actions planifiées.
Conteneurs¶
Chaque build est isolé dans son propre conteneur (conteneur d’espace de noms Linux). La base est un système basé sur Ubuntu sur lequel toutes les dépendances requises d’Odoo, ainsi que des paquets courants et utiles, sont installés.
Si votre projet nécessite des dépendances Python supplémentaires ou des versions plus récentes, vous pouvez définir un fichier requirements.txt à la racine de vos branches qui les répertorie. La plateforme s’assurera que ces dépendances sont installées dans vos conteneurs.
Voir également
Pour un exemple concret, consultez le fichier requirements.txt d’Odoo Community.
Note
Les fichiers requirements.txt des sous-modules sont également pris en compte. La plateforme recherche ces fichiers dans le dossier parent de chaque dossier contenant un module Odoo.
Structure du répertoire¶
Comme les conteneurs sont basés sur Ubuntu, leur structure de répertoires suit le Filesystem Hierarchy Standard.
Voir également
Les répertoires pertinents pour Odoo.sh sont les suivants :
.
├── home
│ └── odoo
│ ├── backup.daily
│ ├── data
│ │ ├── filestore Database attachments, as well as the files of binary fields
│ │ └── sessions Visitors and users sessions
│ ├── logs
│ │ ├── install.log Database installation logs
│ │ ├── odoo.log Running server logs
│ │ ├── update.log Database updates logs
│ │ └── pip.log Python packages installation logs
│ └── src
│ ├── odoo Odoo Community source code
│ │ └── odoo-bin Odoo server executable
│ ├── enterprise Odoo Enterprise source code
│ ├── themes Odoo Themes source code
│ └── user Your repository branch source code
└── usr
├── lib
│ └── pythonX.XX
│ └── dist-packages Python X.XX standard libraries
├── local
│ └── lib
│ └── pythonX.XX
│ └── dist-packages Python X.XX third-party libraries
└── usr
└── bin
└── pythonX.X Python X.XX executable
Shell de base de données¶
Lors de l’accès à un conteneur avec le shell, vous pouvez accéder à la base de données à l’aide de la commande psql.
odoo@odoo-master-1.odoo.sh:~$ psql
psql (16.9)
Type "help" for help.
odoo-master-1=>
Avertissement
Utilisez toujours des transactions (par ex. BEGIN (…) COMMIT / ROLLBACK) lorsqu’une instruction SQL entraîne des modifications (par ex. UPDATE, DELETE, ALTER, etc.), en particulier pour votre base de données de production. Le mécanisme de transaction est votre filet de sécurité en cas d’erreur. Il vous suffit d’effectuer un rollback de vos modifications pour rétablir votre base de données dans son état antérieur.
N’oubliez pas de valider ou d’annuler les transactions. Les transactions ouvertes peuvent verrouiller des enregistrements dans vos tables, et une base de données en cours d’exécution peut attendre leur libération, provoquant ainsi le blocage indéfini du serveur.
De plus, utilisez d’abord vos bases de données de préproduction pour tester vos instructions. Cela vous offre un filet de sécurité supplémentaire.
Example
Vous avez oublié de définir votre condition WHERE. Dans ce cas, vous pouvez effectuer un rollback pour annuler la modification indésirable :
odoo-master-1=> BEGIN;
BEGIN
odoo-master-1=> UPDATE res_users SET password = '***';
UPDATE 457
odoo-master-1=> ROLLBACK;
ROLLBACK
Réécrivez ensuite l’instruction et validez la modification :
odoo-master-1=> BEGIN;
BEGIN
odoo-master-1=> UPDATE res_users SET password = '***' WHERE id = 1;
UPDATE 1
odoo-master-1=> COMMIT;
COMMIT
Faire fonctionner un serveur Odoo¶
Vous pouvez démarrer une instance de serveur Odoo depuis le shell d’un conteneur. Vous ne pourrez pas y accéder depuis l’extérieur avec un navigateur web, mais vous pouvez, par exemple :
Utiliser le shell Odoo :
odoo-bin shell >>> partner = env['res.partner'].search([('email', '=', 'asusteK@yourcompany.example.com')], limit=1) >>> partner.name 'ASUSTeK' >>> partner.name = 'Odoo' >>> env['res.partner'].search([('email', '=', 'asusteK@yourcompany.example.com')], limit=1).name 'Odoo'
Installer un module :
odoo-bin -i sale --without-demo=all --stop-after-initAstuce
L’argument
--without-demo=allempêche le chargement des données de démonstration pour tous les modules.L’argument
--stop-after-initarrête immédiatement l’instance du serveur une fois l’opération terminée.
Mettre à jour un module :
odoo-bin -u sale --stop-after-init
Exécuter les tests d’un module :
odoo-bin -i sale --test-enable --log-level=test --stop-after-init
Voir également
Pour trouver le chemin des addons utilisé par Odoo.sh pour exécuter votre serveur, recherchez « odoo: addons paths » dans les journaux (~/logs/odoo.log).
2025-02-19 10:51:39,267 4 INFO ? odoo: Odoo version 18.0
2025-02-19 10:51:39,268 4 INFO ? odoo: Using configuration file at /home/odoo/.config/odoo/odoo.conf
2025-02-19 10:51:39,268 4 INFO ? odoo: addons paths: ['/home/odoo/data/addons/18.0', '/home/odoo/src/user', '/home/odoo/src/enterprise', '/home/odoo/src/themes', '/home/odoo/src/odoo/addons', '/home/odoo/src/odoo/odoo/addons']
Avertissement
Les opérations effectuées sur une instance de serveur Odoo ne sont pas isolées ; les modifications seront répercutées dans la base de données. N’oubliez pas de toujours effectuer les tests dans vos bases de données de transition.
Débogage dans Odoo.sh¶
Note
Déboguer une build Odoo.sh n’est pas vraiment différent du débogage d’une autre application Python. Ainsi, l’objectif de cette section est de couvrir les spécificités et les limites de la plateforme Odoo.sh, en supposant que vous savez déjà utiliser un débogueur.
Vous pouvez utiliser pdb, pudb ou ipdb pour déboguer le code sur Odoo.sh. Comme le serveur s’exécute en dehors d’un shell, vous ne pouvez pas lancer le débogueur directement depuis votre backend Odoo, car cela nécessite un shell pour fonctionner.
pdb est installé par défaut dans chaque conteneur.
Astuce
Pour utiliser pudb ou ipdb, il est nécessaire de les installer soit :
de façon permanente en ajoutant
pudbouipdbau fichierrequirements.txtde votre projet, oude façon temporaire (uniquement dans la build actuelle) en exécutant la commande appropriée :
pip install pudb --user
pip install ipdb --user
Pour déclencher le débogueur, ajoutez ceci au code que vous souhaitez déboguer :
import sys if sys.__stdin__.isatty(): import pdb; pdb.set_trace()
Note
La condition
sys.__stdin__.isatty()est une solution de contournement permettant de détecter si vous exécutez Odoo à partir d’un shell.Ensuite, enregistrez le fichier et exécutez le shell Odoo :
odoo-bin shell
Utilisez le shell Odoo pour déclencher le code que vous souhaitez déboguer.
Sous-modules¶
Les sous-modules Git vous permettent de lier des dépôts externes directement à votre projet sans copier-coller de code, ce qui simplifie le déploiement en clonant les dépendances aux côtés de votre code source principal. Vous conservez un contrôle précis des versions en choisissant des branches exactes et en épinglant des révisions de commit spécifiques à mettre à jour quand vous le souhaitez.
Sur Odoo.sh, la plateforme détecte automatiquement les sous-modules et les ajoute à votre addons path pour l’installation de la base de données, à condition de configurer une clé de déploiement dans les paramètres de votre projet et de votre dépôt lors de l’intégration de dépôts privés.
Ajouter un sous-module¶
Note
Actuellement, il n’est pas possible d’ajouter des dépôts privés avec Odoo.sh. Vous pouvez néanmoins le faire avec Git.
Depuis la vue Branches de votre projet Odoo.sh, choisir la branche dans laquelle vous souhaitez ajouter un sous-module.
Dans le coin supérieur droit, cliquer sur Submodule, puis sur Run on Odoo.sh.
Dans la boîte de dialogue, renseigner les champs suivants :
Repository URL : l’URL SSH du dépôt
Astuce
Sur GitHub, cliquer sur Clone, sélectionner SSH et copier l’URL.
Branch : la branche spécifique à utiliser
Path : le dossier dans lequel le sous-module doit être ajouté dans votre branche
Dans un terminal, dans le dossier où votre dépôt Git est cloné, procédez au checkout de la branche dans laquelle vous voulez ajouter un sous-module :
git checkout <branch>
Ajouter le sous-module :
git submodule add -b <branch> <git@yourprovider.com>:<username/repository.git> <path>
<git@yourprovider.com>:<username/repository.git> : l’URL SSH du dépôt que vous souhaitez ajouter comme sous-module
<branch> : la branche que vous souhaitez utiliser dans le dépôt ci-dessus
<path> : le dossier dans lequel vous souhaitez ajouter ce sous-module
Valider et pousser les modifications :
git commit -a && git push -u <remote> <branch><remote> : le dépôt sur lequel vous souhaitez pousser vos modifications. Sur une configuration Git standard, il s’agit d”origin.
<branch> : la branche sur laquelle vous souhaitez pousser vos modifications. Très probablement la branche que vous avez extraite lors de la première étape.
Astuce
Lors de l’ajout d’un dépôt contenant de nombreux modules, vous souhaiterez peut-être en ignorer certains si certains sont installés automatiquement. Pour ce faire, préfixer le dossier de votre sous-module d’un . (par ex. .folder). La plateforme ignorera ce dossier et vous pourrez sélectionner manuellement les modules en créant des liens symboliques vers ceux-ci depuis un autre dossier.
Actions planifiées¶
Sur la plateforme Odoo.sh, les actions planifiées sont implémentées de manière légèrement différente de celle d’un serveur Odoo classique et sont exécutées au mieux. En effet, plusieurs clients peuvent se trouver sur le même serveur et chacun a la garantie d’une part équitable des ressources du serveur. Par conséquent, une heure d’exécution exacte des actions planifiées ne peut être garantie.
Important
Ne pas s’attendre à ce qu’une action planifiée soit exécutée plus souvent que toutes les cinq minutes.
Le temps d’exécution des actions planifiées étant limité, il est conseillé de s’assurer que vos actions planifiées :
Traitent de petits lots d’enregistrements.
Valident leur travail après le traitement de chaque lot de manière à ne pas devoir recommencer si elles sont interrompues par la limite de temps.
Soient idempotentes, c’est-à-dire qu’elles ne doivent pas provoquer d’effets secondaires si elles sont exécutées plus souvent que prévu.
Changement d’adresse IP¶
Odoo.sh notifie les administrateurs du projet des changements d’adresse IP. De plus, lorsque l’adresse IP d’une instance de production change, une requête HTTP GET est effectuée vers le chemin /_odoo.sh/ip-change avec la nouvelle adresse IP incluse comme paramètre de chaîne de requête (new), ainsi que l’adresse IP précédente comme paramètre supplémentaire (old).
Ce mécanisme permet de déclencher des actions personnalisées en réponse au changement d’adresse IP (par ex. envoyer un e-mail, contacter une API de pare-feu, configurer des objets de base de données, etc.)
Pour des raisons de sécurité, la route /_odoo.sh/ip-change est accessible uniquement en interne par la plateforme elle-même et renvoie une réponse 403 si elle est accédée par tout autre moyen.
Voici un exemple de pseudo-implémentation :
class IPChangeController(http.Controller):
@http.route('/_odoo.sh/ip-change', auth='public')
def ip_change(self, old=None, new=None):
_logger.info("IP address changed from %s to %s", old, new)
# Then perform whatever action is required for your use case, e.g., update an
# ir.config_parameter, send an email, contact an external firewall service's API, ...
return 'ok'