Installer Odoo 19 Community, configurer l'IDE, lancer la première instance.
Odoo est un monolithe Python avec une base PostgreSQL et un front en framework maison OWL (Odoo Web Library). Tout module repose sur trois piliers :
Ezway utilise Odoo Community (open-source, gratuite). Tous les concepts de cette formation s'appliquent à l'Enterprise — seuls quelques modules métier (Studio, Documents avancés, Sign…) sont absents en Community.
Le plus simple pour démarrer : utiliser l'image officielle Odoo + PostgreSQL avec docker-compose.
version: '3.8'
services:
db:
image: postgres:15
environment:
POSTGRES_DB: postgres
POSTGRES_USER: odoo
POSTGRES_PASSWORD: odoo
volumes:
- db-data:/var/lib/postgresql/data
ports:
- "5432:5432"
odoo:
image: odoo:19
depends_on:
- db
ports:
- "8069:8069"
- "8072:8072" # longpolling (chat, bus)
environment:
HOST: db
USER: odoo
PASSWORD: odoo
volumes:
- odoo-data:/var/lib/odoo
- ./addons-custom:/mnt/extra-addons # vos modules custom
- ./odoo.conf:/etc/odoo/odoo.conf
volumes:
db-data:
odoo-data:
Fichier de config minimal à créer à côté :
[options]
addons_path = /mnt/extra-addons,/usr/lib/python3/dist-packages/odoo/addons
admin_passwd = admin
db_host = db
db_user = odoo
db_password = odoo
xmlrpc_port = 8069
longpolling_port = 8072
log_level = info
dev_mode = reload,qweb,xml # reload auto en dev
Lancer :
docker compose up -d
docker compose logs -f odoo
Ouvrir http://localhost:8069 dans un navigateur. À la première connexion, Odoo demande de créer une base de données. Mot de passe master = admin (modifiable dans odoo.conf).
Sans ce port, le chat, les notifications et les boutons "rafraîchir auto" ne fonctionneront pas. C'est une erreur fréquente en dev local.
L'image Docker masque le code source d'Odoo. Pour pouvoir lire et déboguer, cloner aussi le repo officiel :
git clone --depth 1 --branch 19.0 https://github.com/odoo/odoo.git ~/odoo-src
Vous pouvez alors :
~/odoo-src/addons/sale/models/sale_order.pygrep -r "create_uid" ~/odoo-src/addons/sale/Extensions à installer :
| Extension | Pourquoi |
|---|---|
| Python (Microsoft) | IntelliSense, debug, linting Python |
| Pylance | Type checking, navigation rapide |
| XML (Red Hat) | Coloration et validation des vues XML |
| Odoo (Odoo S.A.) | Autocomplétion des modèles ORM |
| Ruff | Linter Python ultra-rapide |
Settings recommandés (.vscode/settings.json à la racine du projet) :
{
"python.analysis.extraPaths": [
"~/odoo-src",
"~/odoo-src/addons",
"./addons-custom"
],
"files.associations": {
"*.xml": "xml"
},
"[python]": {
"editor.formatOnSave": true,
"editor.defaultFormatter": "charliermarsh.ruff"
}
}
admintest19adminadminAvec la demo data, vous avez 20 clients, 50 produits, 100 commandes prêts à l'usage. Sans elle, votre instance est vide et beaucoup de modules ne fonctionnent pas correctement.
docker compose logs -f odoo
Une fois loggué, ajouter ?debug=1 à n'importe quelle URL Odoo. Vous obtenez :
docker compose exec odoo odoo shell -d test19 --no-http
Une fois dans le shell, vous avez accès à env :
>>> partners = env['res.partner'].search([])
>>> len(partners)
42
>>> partners[0].name
'YourCompany'
>>> env.cr.commit() # nécessaire pour sauvegarder en base
env.cr.commit()Dans le shell, aucun commit auto. Si vous modifiez des records sans commit, rien n'est sauvegardé.
Créer dans addons-custom/ un dossier my_first/ avec ces fichiers :
{
'name': 'My First Module',
'version': '19.0.1.0.0',
'category': 'Tools',
'summary': 'Mon tout premier module Odoo',
'author': 'Moi',
'depends': ['base'],
'data': [],
'installable': True,
'application': False,
}
# vide pour l'instant
Redémarrer Odoo, activer le mode dev, aller dans Apps → cliquer Update Apps List → chercher "My First". Si le module apparaît, c'est gagné.
🏋️ Exercice de validation
~/odoo-srctest19 avec demo data en françaismy_first et le voir apparaître dans la liste des Appsres.partner de la baseCritère de succès : capacité à recommencer toute la procédure de mémoire en moins de 30 minutes.