1 Dev with Odoocker
Matt Marcha edited this page 2025-11-05 09:59:56 -10:00

Odoocker

Administration des instances Odoo local via Docker

Travailler avec Docker


Accéder à la cli dans un conteneur

(bash peut-être remplacé par shell ou autre)

docker-compose exec web bash

Ou pour l'user root :

docker-compose exec -u root web bash

entrer une commande odoo-bin (ajouter options si nécessaire)

 docker-compose exec web odoo {command} --db_host db -c /etc/odoo/odoo.conf -d {database} 

Attention : les modifications sur les images Docker ne sont pas persistées (passer plutôt par le Dockerfile), et les modifications via odoo shell notamment pour la prise en compte de certaines modifications dans le code des modules. Avant de piquer d'énormes crise de nerf, essayer de redémarrer totalement les services en passant la commande dans le champ command du docker-compose.

Initialiser les modules enterprise

odoo -d odoo -i web_enterprise

Afficher les logs debug

Restart your container with the following COMMAND

--log-level debug

Ajouter une dépendance

Si un module a besoin d'une dépendance, il faut passer par un Dockerfile à la racine du dossier pour modifier l'image, et mettre à jour le docker-compose en remplaçant l'entrée image par build.

Exemple:

FROM odoo:$ODOO_VERSION
USER root
RUN apt update && apt install -y python3-dependency
# étudier l'utilisation de python3-pip sans passer par user root
USER odoo
(...)
services:
  web:
    build:
        context: .
        args:
            ODOO_VERSION: $ODOO_VERSION
(...)

Ajouter les locales

Une dépendance fréquente dont l'absence peut être source d'erreurs en local

USER root
RUN apt update
RUN apt install -y locales
RUN sed -i -e 's/# en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/' /etc/locale.gen && \
    sed -i -e 's/# fr_FR.UTF-8 UTF-8/fr_FR.UTF-8 UTF-8/' /etc/locale.gen && \
    dpkg-reconfigure --frontend=noninteractive locales

Trouver le répertoire Odoo dans un volume Docker

Le chemin du répertoire Odoo dans un volume Docker, en assumant qu'il s'agit d'une image docker officielle Debian est:

/usr/lib/python3/dist-packages/odoo

Et le chemin pour trouver le volume Docker:

/var/lib/docker/volumes/{VOLUME}/_data

Importer base de prod en local


Récupérer et télécharger un dump via Odoo.sh, s'assurer qu'il est neutralisé (+ sans FS pour plus de légèreté).

Démarrer odoo en local. Le fichier odoo.conf doit avoir les options suivantes:

; db_name = ### désactivé
dbfilter = .*

Puis se rendre sur http://localhost:8069/web/database/manager et importer le dump téléchargé. Attendre que le manager ait fini de charger. Il affichera peut-être une erreur "La DB existe déjà". Redémarrer le serveur et la BDD:

docker-compose down && docker-compose up -d

On veut ensuite sans doute suivre les étapes pourchanger le mdp admin.

Restaurer une base de données en ligne de commande

Démarrer les conteneurs, et identifier celui d'Odoo avec docker ps -a. Copier l'identifiant.

Copier la base de données dnas le conteneur

docker cp /path/to/bdd.dump {IDCONTENEUR}:/tmp/bdd.dump

Lancer la commande pg_restore avec les paramètres adaptés

pg_restore -h {HOST_NAME=db} -U {USER_NAME=odoo} -C --no-owner -d {DATABASE_NAME} /tmp/bdd.dump

Changer mdp admin


memo : hash du mdp "admin" :

$pbkdf2-sha512$25000$ltIag3AOIWSsNaZ0rpUSog$9rPi2ZoQiulRtZK44PSTaK4YuDw.VDHvXpubCWLljK4Ibmt5vYhH5lDAFnKZKuW8HDttGyd.TxxFHLxIOUEpDA

Depuis un terminal

docker-compose exec db bash
psql -U {DB_USER} -d {DB_NAME}

Depuis un terminal lancé dans l'Onglet "Services"de PyCharm, avec la config "Odoocker"

psql -h db -U {DB_USER} -d {DB_NAME}

Vérifier qui est admin

SELECT id, login FROM res_users;
UPDATE res_users SET password='$pbkdf2-sha512$25000$ltIag3AOIWSsNaZ0rpUSog$9rPi2ZoQiulRtZK44PSTaK4YuDw.VDHvXpubCWLljK4Ibmt5vYhH5lDAFnKZKuW8HDttGyd.TxxFHLxIOUEpDA' WHERE login = 'admin';

Coincé ? \q pour quitter psql et exit pour quitter le bash :)

Depuis VSCodium

Avec un module type "Database client JDBC", configurer la connexion, se connecter à la DB et changer directement le mdp dans la table res_users (attention à bien insérer le hash et non le mdp en clair)

Tests


Tester en local

Pour lancer des tests unitaires en local, redémarrer le serveur sans service http :

docker-compose down web && COMMAND="--no-http" docker-compose up web

Pour lancer des tests unitaires en local, il faut bien penser à changer le port http pour éviter les conflits

Puis lancer un bash (docker-compose exec web bash)

Puis cibler le test avec --test-enable pour tout lancer (long) ou test-tags pour cibler. La syntaxe est /module :Classe .fonction. Ex :

odoo --db_host db --db_password odoo -p 9069 -d odoo --test-tags /base:TestReports.test_reports

Note : le module concerné doit être installé et à jour pour pouvoir lancer des tests dessus. Il est nécessaire de conjuguer --test-tags avec -i de tous les modules ciblés.

{...} -i base,native_module,custom_module_based_on_native --test-tags /native_module,/custom_module

Pour les tours (tests py +js), il est nécessaire d'installer google-chrome (paquet distant - voir méthodo en ligne) et python3-websocket sur l'environnement

Troubleshooting


Mes modules custom ne s'affichent pas

Vérifier que les modules sont bien dans le répertoire des modules custom et que celui-ci est ajouté au PATH dans odoo.conf, et au contenaire via docker-compose.yml

Vérifier les permissions de fichiers. Les répertoires doivent être en drwxr-xr-x et les fichiers en rwxr--r--. Pour réparer les permissions:

chmod -R 744 {module}/
chmod 755 {module}/
chmod -R 755 {module}/*/

Le port 8069 est déjà utilisé

Redémarrer le service sans http puis relancer la commande

docker-compose down web && COMMAND="--no-http" docker-compose up web



Installer un venv dans le conteneur (pas encore fonctionnel)

Je suis une patate c'est à caler dans le Dockerfile tout ça... à retravailler donc, gardé dans la doc pour référence.

Se connecter en root au conteneur et commencer par installer virtualenv et créet le venv

apt update && apt install virtualenv
virtualenv -p 3.12 /var/lib/odoo/venv

(adapter la version de python et l'emplacement)

Sur le poste local, récupérer l'id du conteneur `` et copier le fichier requirements.txt de la verison d'odoo correspondante dans le conteneur

docker ps -a
docker cp /path/to/rquirements.txt {IDCONTAINER}:/var/lib/odoo/requirements.txt

De retour dans le conteneur, activer le venv et installer les dépendances

source env_name/bin/activate
which python3 # vérifier qu'on est dans le bon environnement python
# Récupérer le chemin des exécutables postgres pour l'install de psydopg2 et ajouter au PTH
find / -name "pg_config" -print
export PATH="$PATH:/usr/lib/postgresql/17/bin"
# JE suis jamais arrivé à faire fonctionner cette merde. Un enfer de dépendance requises manquantes mon cul 
pip3 install -r /var/lib/odoo/requirements.txt