This is the Mint System Odoo development environment.
This projects provides a highly opinionated way to manage and develop Odoo. It features:
- 🔍 Odoo Source: Checkout the Odoo Community and Enterprise Edition and start editing the source code.
- 🐳 Container Compose: Spin up an Odoo, Postgres, and pgAdmin container and experiment locally.
- 💻 Native: Start an Odoo server directly from the source.
- 🔄 Multiple Versions: With Odoo Build, you can switch between Odoo versions starting from 13.0 up to 18.0.
- 🛠️ Develop Modules: Scaffold new modules, develop new Odoo features locally.
- 📥 Import and Export Database: Use Odoo scripts to copy and restore a customer database to the local environment. Investigate issues and deploy the database with ease.
- 🤝 Community Repos: The most common community repos are checked out when setting up the project.
- ✂️ Customizing Snippets: Create snippets and push them to an Odoo database.
- 🕰️ Odoo Revisions: Snapshot the Odoo source at a specific date. See revisions for details.
- 📦 Container Image: Build and publish a custom Odoo image. See README for details.
- 🔑 Credentials: Manage login credentials for Odoo and Nextcloud.
- ⬆️ Odoo Upgrade: Helper commands to ease the Odoo upgrade process.
- 🧠 LLM: Prompt LLMs with module code and apply changes.
- 🚀 And More: See task help.
The Odoo development environment has the following requirements:
Command Completion (Optional)
bash/zsh alias task='./task'
with completion.
Nix (Optional)
You can use Nix to setup the requirements.
LLM (Optional)
Install the llm cli to make use of the LLM features.
The usage section is a set of workflows. See task help
or task for details about the project commands.
Clone this repository.
git clone git@github.com:Mint-System/Odoo-Build.git
cd Odoo-Build
When working with Nix, run the nix-shell.
nix-shell
Checkout the Odoo version. Supported versions are: 13.0, 14.0, 15.0, 16.0, 17.0, 18.0
task checkout $VERSION
Install Odoo scripts.
task install-odoo-scripts
Decide wether you want to run Odoo in native mode (from source) or as a container.
Run Odoo from source. Currently supported OS: Ubuntu, Debian, Pop!_OS, Darwin, Windows with Ubuntu on WSL2.
Sync the submodule branch.
task sync-git-submodule
Install the Python and dependencies.
task install-native
Start database container only.
task start db
Initialize database.
task init-db
Start Odoo from source.
task start native
The browser will be opened automatically.
Create a new module.
task create-module addons/project/project_sprint
Add a new model.
task generate-module-model addons/project/project_sprint project.sprint
Add model security.
task generate-module-security addons/project/project_sprint project.sprint
Clone thirdparty repos into the thirdparty
folder.
To load modules from a thirdparty folder, set this env var in your .env
file:
ODOO_ADDONS_PATH=thirdparty/odoo-apps-partner-contact,../odoo-cd/untracked-odoo-apps
The paths will be appended to the Odoo config.
In your .env
file define this Odoo parameter env var:
ODOO_PARAM="--without-demo=all"
By default the database name is the current branch name.
To define the name, set this env var in your .env
file:
ODOO_DATABASE=odoo
To disable the browser open when starting the Odoo server edit the .env
file:
BROWSER_OPEN=false
Run Odoo as container.
If you are using podman, set this .env
var:
CONTAINER_ENGINE=podman
Set the Odoo addons path in your .env
file:
ODOO_ADDONS_PATH=/mnt/addons/,/mnt/oca/,/mnt/enterprise,/mnt/themes/
Run container compose.
task start
Initialize database with the Odoo script.
Use docker-odoo-init help
to show all options.
docker-odoo-init -d odoo -i web
Open browser to http://localhost:8069 and login with admin:admin
.
docker-odoo-install -m show_db_name
Instructions that are true for container and native usage.
To change the log level of Odoo set this env var in your .env
file:
LOG_LEVEL=debug
Open database manager http://localhost:8000/ and login with admin@example.com:admin
.
This removes containers and volumes.
task remove
task stop
task drop-db
Define the Postgres image in your .env
file:
POSTGRES_IMAGE=postgres:12-alpine
Make sure your container setup can build multi-platform images.
To build the container image setup these .env
vars:
ODOO_REVISION=16.0.20250207
CONTAINER_REGISTRY=mint-system/
Checkout the Odoo revision.
task checkout-revision
Build the Odoo image.
task build
Publish the Odoo image.
task publish
Start mail server.
task start mail
Setup mail server config for Odoo.
task setup-mail
Problem
The checkout command fails tue to unregistered submdoules.
Solution
Remove the submodule with git rm
, f.e. git rm oca/dms
.
Problem
While starting the native server this error is thrown:
OSError: [Errno 24] inotify instance limit reached
Or this error:
inotify.calls.InotifyError: Call failed (should not be -1): (-1) ERRNO=(0)
Solution
Increase inotify watch limit.
sudo vi /etc/sysctl.conf
fs.inotify.max_user_watches=524288
fs.inotify.max_user_instances=256
sudo sysctl -p
Problem
Instance with auth_ldap
does not start.
ImportError: libldap_r-2.4.so.2: cannot open shared object file: No such file or directory
Solution
Reinstall with pip flags.
pip install python-ldap --force-reinstall --no-binary python-ldap
Problem
init-db
fails with psycopg2 errors on macOS / Darwin.
Solution
source task source
pip install psycopg2-binary --force
Problem
After switching the Odoo version with task checkout
the task
command fail with this error:
pkg_resources.DistributionNotFound: The 'odoo==XX.0' distribution was not found and is required by the application
Solution
The local Odoo package needs to be updated:
source task source
pip install -e odoo
Problem
After install the Pyhton dependencies and running Odoo the following error is thrown:
ImportError: lxml.html.clean module is now a separate project lxml_html_clean.
Install lxml[html_clean] or lxml_html_clean directly.
Solution
Pin the version lxml.
pip install lxml==4.9.3
Problem
After install the Pyhton dependencies and running Odoo the following error is thrown:
Traceback (most recent call last):
File "/home/janikvonrotz/Odoo-Build/venv17.0/bin/odoo", line 7, in <module>
exec(compile(f.read(), __file__, 'exec'))
File "/home/janikvonrotz/Odoo-Build/odoo/setup/odoo", line 5, in <module>
import odoo
File "/home/janikvonrotz/Odoo-Build/odoo/odoo/__init__.py", line 119, in <module>
from . import service
File "/home/janikvonrotz/Odoo-Build/odoo/odoo/service/__init__.py", line 5, in <module>
from . import model
File "/home/janikvonrotz/Odoo-Build/odoo/odoo/service/model.py", line 13, in <module>
from odoo.http import request
File "/home/janikvonrotz/Odoo-Build/odoo/odoo/http.py", line 279, in <module>
if parse_version(werkzeug.__version__) >= parse_version('2.0.2'):
^^^^^^^^^^^^^^^^^^^^
AttributeError: module 'werkzeug' has no attribute '__version__'
Solution
pip install Werkzeug==2.2.2