Mint System Odoo
A better Odoo image.
This container image is an improvement of the official Odoo image:
- ð Ships with Python 3.11.
- ðĶ Uses uv to manage Python and pnpm to manage Node.
- ð Odoo source is based on exact revision.
- ð Image build is reproducible.
- âïļ Setup
odoo.conf
with environment vars. - ðą Clone addons from git repos.
- ð ïļ Install Python packages without building the image.
- ð Detect addons in nested module folders.
- ðū Store session information in database.
- ðĨïļ Get environment name from server config.
- ð Initialize database with selected modules.
- ð Built-in Manifestoo and click-odoo-contrib.
- ð Multiplatform image supports
amd64
andarm64
. - ðŠī Runs without root privileges.
Source: https://github.com/Mint-System/Odoo-Build/tree/16.0/image/
Usage
The following is a docker-compose.yml
file with an Odoo and Postgres service:
services:
odoo:
container_name: odoo
image: mintsystem/odoo:16.0.20250207
depends_on:
- db
environment:
PGHOST: db
PGUSER: odoo
PGPASSWORD: odoo
PGPORT: 5432
MAIL_DEFAULT_FROM: test
MAIL_CATCHALL_DOMAIN: mint-system.ch
MAIL_CATCHALL_ALIAS: test@mint-system.ch
ODOO_MAIL_SMTP_HOST: mail.infomaniak.com
ODOO_MAIL_SMTP_PORT: 587
ODOO_MAIL_SMTP_ENCRYPTION: starttls
ODOO_MAIL_SMTP_FROM_FILTER: test@mint-system.ch
ODOO_MAIL_IMAP_HOST: mail.infomaniak.com
ODOO_MAIL_IMAP_PORT: 993
ODOO_MAIL_IMAP_SSL: "True"
ODOO_MAIL_USERNAME: test@mint-system.ch
ODOO_MAIL_PASSWORD: *****
GIT_SSH_PUBLIC_KEY: ssh-ed25519 BBBBC3NzaC1lZDI1NTE5BBBBIDR9Ibi0mATjCyx1EYg594oFkY0rghtgo+pnFHOvAcym Mint-System-Project-MCC@github.com
GIT_SSH_PRIVATE_KEY: LS0tLS1CRUdJTiBPUEVOU1NIIFBSSVZBVEUgS0VZLS0tLQpiM0JsYm5OemFDMXJaWGt0ZGpFQUFBQUFCRzV2Ym1VQUFBQUVibTl1WlFBQUFBQUFBQUFCQUFBQU13QUFBQXR6YzJndFpXClF5TlRVeE9RQUFBQ0EwZlNHNHRKZ0U0d3NzZFJHSU9mZUtCWkdOSzRJYllLUHFaeFJ6cndITXBnQUFBS2k1WkJhRnVXUVcKaFFBQUFBdHpjMmd0WldReU5UVXhPUUFBQUNBMGZTRzR0SmdFNHdzc2RSR0lPZmVLQlpTks0SWJZS1BxWnhSenJ3SE1wZwowQkFnTT0KLS0tLS1FTkQgT1BFTlNTSCBQUklWQVRFIEtFWS0tLS0tCg==
GITHUB_USERNAME: bot-mintsys
GITHUB_PERSONAL_ACCESS_TOKEN: *****
ADDONS_GIT_REPOS: "git@github.com:Mint-System/Odoo-Apps-Server-Tools.git#16.0,git@github.com:OCA/server-tools.git#16.0"
ODOO_ADDONS_PATH: /mnt/addons/,/mnt/oca/,/mnt/enterprise,/mnt/themes/
ODOO_DATABASE: "16.0"
ODOO_INIT_LANG: de_CH
ODOO_INIT_ADDONS: server_environment_ir_config_parameter
ENVIRONMENT: production
PYTHON_INSTALL: prometheus-client
SERVER_WIDE_MODULES: session_db,module_change_auto_install
SESSION_DB_URI: postgres://odoo:odoo@db/16.0
PROXY_MODE: "True"
LOG_LEVEL: debug
LIST_DB: False
ADMIN_PASSWD: *****
DBFILTER: ^%d$
WORKERS: 4
LIMIT_REQUEST: 16384
LIMIT_TIME_CPU: 300
LIMIT_TIME_REAL: 600
MODULE_AUTO_INSTALL_DISABLED: odoo_test_xmlrunner
CLICK_ODOO_UPDATE: "True"
ports:
- "127.0.0.1:8069:8069"
volumes:
- odoo-data:/var/lib/odoo
- ./addons:/mnt/addons
- ./oca:/mnt/oca
- ./enterprise:/mnt/enterprise
- ./themes:/mnt/themes
db:
container_name: db
image: postgres:14-alpine
environment:
POSTGRES_USER: odoo
POSTGRES_PASSWORD: odoo
PGDATA: /var/lib/postgresql/data/pgdata
volumes:
- db-data:/var/lib/postgresql/data/pgdata
volumes:
odoo-data:
db-data:
Details of the most important Odoo image paths:
/etc/odoo
Contains theodoo.conf
andodoo.conf.template
files./var/lib/odoo/filestore
For every database name Odoo create a filestore./var/lib/odoo/git
The cloned module repos are stored here./opt/odoo-venv
This is where Python packages are installed./mnt/extra-addons
Module folders are loaded from this path by default.
Initialize
Before starting the container you can initialisation scripts. These scripts have external dependencies or are executed once.
Run the git-clone-addons
script to clone module repos:
docker-compose run --rm odoo git-clone-addons
And run the init-db
script to initalize the Odoo database:
docker-compose run --rm odoo init-db
The scripts are configured with environment variables.
Start
Once you start the image the entrypoint.sh
script will:
- Run the
set-addons-path
script to assemble the addons path. - Apply default values to env vars.
- Run the
auto-envsubst
script to template theodoo.conf
file. - Run the
python-install
script to install the Python packages. - Wait for the database to be ready.
- Run the
setup-mail
script to update the mail configuration in the database. - Run the
odoo-update
script to update modules. - Run Odoo server.
Run
Once the container is running you can update modules with this command:
docker exec odoo bash -c "click-odoo-update \$(grep addons_path /etc/odoo/odoo.conf | sed 's/addons_path = /--addons-path=/') -d odoo
Analyze
With the Manifestoo cli you can query the module manifest files.
List all modules:
docker exec odoo manifestoo --select-found list
Environment
The container can be configured with environment variables. This section shows all the variables.
Database Connection
Odoo supports PostgreSQL database only.
PGHOST
Name of the database container.PGUSER
Database username.PGPASSWORD
Database user password.PGPORT
Postgres server port. Default is5432
.
System Parameters
Define Odoo system parameters. Requires server_environment_ir_config_parameter
in ODOO_INIT_ADDONS
.
MAIL_CATCHALL_ALIAS
: Name of the catchall mail adress. Default iscatchall
.MAIL_CATCHALL_DOMAIN
: Domain name of of the catchall mail addresMAIL_DEFAULT_FROM
: From name for outgoing mails. Default isnotification
.
Incoming and Outgoing Mail-Server
Define the mail configuration with these env vars:
ODOO_MAIL_SMTP_HOST
: If set Odoo sends mails to this host.ODOO_MAIL_SMTP_PORT
: SMTP port. Default is587
.ODOO_MAIL_SMTP_ENCRYPTION
: SMTP encryption type. Default isstarttls
.ODOO_MAIL_SMTP_FROM_FILTER
: Send mails from this address only. Default is""
.ODOO_MAIL_IMAP_HOST
: If set Odoo fetches mails from this host.ODOO_MAIL_IMAP_PORT
: IMAP port. Default is993
.ODOO_MAIL_IMAP_SSL
: Enable IMAP SSL. Default isTrue
.ODOO_MAIL_USERNAME
: Username of the Odoo mailbox.ODOO_MAIL_PASSWORD
: Password of the Odoo mailbox.
Module Repos
The image can clone git repositories.
GIT_SSH_PUBLIC_KEY
Public key for SSH connection.GIT_SSH_PRIVATE_KEY
Base64 encoded private key for SSH connection.GITHUB_USERNAME
Username for git clone command with https.GITHUB_PERSONAL_ACCESS_TOKEN
Token for git clone command with https.ADDONS_GIT_REPOS
Comma seperated list of git clone urls appended with#
and branch name.
Addons Path
The entrypoint script searches for module folders in the addons path and creates a new addons path.
ODOO_ADDONS_PATH
Comma seperated list of container paths pointing to addon folders.
Initialize
Set these environment variables for database init:
ODOO_DATABASE
Name of the Odoo database. No default is set.ODOO_INIT_LANG
Language used for database init. Default isen_US
.ODOO_INIT_ADDONS
Provide comma separated list of modules for database init. Default isweb
.
Server Environment
The Odoo server can be configured using these env vars.
ENVIRONMENT
Provide an environment name. Can be accessed withconfig.get("environment")
.PYTHON_INSTALL
Comma seperated list of python packages.SERVER_WIDE_MODULES
Comma separated list of modules to load with server. The variable will be prefixed withbase,web
.SESSION_DB_URI
Connection string for storing session data in database.PROXY_MODE
Enable server proxy mode. Default isFalse
.LOG_LEVEL
Set the logging level. Default isinfo
.
Database Manager
The Odoo database manager is disabled by default.
LIST_DB
Enable the database manager. Default isFalse
.ADMIN_PASSWD
Master password for database manager. Default isodoo
.DB_FILTER
Set filter for database name. Default is.*
.
Process Limits
Odoo is a multi-threaded Python process.
WORKERS
Define how many workers should be spawned. Default is0
.LIMIT_REQUEST
Maximum number of requests per worker. Default is65536
.LIMIT_TIME_CPU
Maximum cpu time per request. Default is60
.LIMIT_TIME_REAL
Maximum real time per request. Default is120
.
Disable Auto Install
With module_change_auto_install
module you can disable the auto installation of specific modules.
MODULE_AUTO_INSTALL_DISABLED
Comma separated list of modules that should be auto installed. Requiresmodule_change_auto_install
inSERVER_WIDE_MODULES
.
Module Update
The container uses click-odoo to update Odoo modules. The feature is disabled by default.
CLICK_ODOO_UPDATE
If enabled click-odoo is used to update modules that have changed. RequiresODOO_DATABASE
andODOO_ADDONS_PATH
. Default isFalse
.
Build
This image can be customized and extended as needed.
Install packages
Extend the image with Python packages.
FROM mintsystem/odoo:16.0.20250207
RUN uv pip install prometheus-client astor fastapi python-multipart ujson a2wsgi parse-accept-language pyjwt
Or with apt packages.
FROM mintsystem/odoo:16.0.20250207
USER root
RUN apt-get update && apt-get install -y libgl1-mesa-glx poppler-utils tesseract-ocr
USER odoo
Add custom Odoo conf
Copy a custom Odoo conf file to the image.
FROM mintsystem/odoo:16.0.20250207
COPY ./odoo.conf.template /etc/odoo/
Develop
See Odoo Build > Build and publish container image for details.