Table of Contents
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
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 de l'image Odoo officielle est:
/usr/lib/python3/dist-packages/odoo
Et le chemin pour trouver le volume Docker:
/var/lib/docker/volumes/{VOLUME}/_data
Configurer un db manager (type DBeaver)
Le service db doit bien évidemment être démarré. Configurer une nouvelle connexion avec les éléments suivants :
- Host: localhost
- Database: postgres
- Port: 5432
- Username: odoo
- Password: odoo
Customize the base image
Warning
The custom image overrides the
addons_pathparameter in the configuration file, in order to auto-detect paths for submodules in the/mnt/extra-addonsfolder
The base image can be enough for many projects. However, in some cases one might want to build a customized one, based on the Dockerfile. To do so, simply remove the image entry in docker-compose.yml file and build with docker-compose build.
(...)
services:
web:
image: "odoo:${ODOO_VERSION}" # Remove this line
(...)
Important
When using podman, use the following formatting option :
podman-compose --podman-build-args='--format docker' build
The following sections cover features that are not available in base image and are set up in the provided Dockerfile.
Add a dependency
If your module requires specific dependencies, add a requirements.txt file at the root of the module's folder, and list the dependencies in it, following pip Requirements File Formatting.
Tip
Don't forget to rebuild after editing a requirements.txt file, or adding a new one.
Add submodules
At the root of the modules folder, run
git submodule add -b <branch> --depth 1 <repository>
The addons-path will be automatically updated on startup.
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
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 dans 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, il faut bien penser à changer le port http pour éviter les conflits, ou bien redémarrer avec le paramètre --no-http
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
[info]
Le module concerné doit être installé et à jour pour pouvoir lancer des tests dessus. Il est nécessaire de conjuguer--test-tagsavec-ide 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 et python3-websocket sur l'environnement (voir Dockerfile)
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
Il est également possible d'indiquer un port différent dans sa commande avec l'option -p. Ex :
odoo -p 9069 -d odoo --test-tags /base:TestReports.test_reports