OdooPLM 19.0: official Docker images and Compose stack
OdooPLM is now distributed as a Docker image. A single
docker compose up provides Odoo 19.0 with the complete community
PLM suite in the addons path, a PostgreSQL database and an operational PLM
server on first boot, without manual database creation or dependency
installation.
The stack is maintained at
OmniaGit/DockerOdooPLM,
with one branch per Odoo release. This article covers the 19.0
branch.
Getting started
git clone --branch 19.0 https://github.com/OmniaGit/DockerOdooPLM.git odooplm-19
cd odooplm-19
docker compose up
The service is available at http://localhost:8069.
On the first start the entrypoint creates the odooplm database and
installs the plm module, so the instance is immediately usable.
Initial provisioning takes a few minutes and can be followed with
docker compose logs -f odoo.
No configuration is required to evaluate the stack. Copy
.env.example to .env when you need to change ports,
credentials, the database name or the modules installed at startup.
Image contents
| Base | official odoo:19.0 image (Ubuntu 24.04, Python 3.12) |
|---|---|
| PLM modules | the 19.0 branch of OmniaGit/odooplm, in /mnt/odooplm-addons |
| Custom modules | ./addons-extra, mounted on /mnt/extra-addons |
| Database | PostgreSQL 17 container |
| Ports | 8069 web, 8072 websocket (chatter, 3D viewer) |
| Persistence | named volumes for the filestore and the database |
All community PLM modules are included and listed in Apps —
plm_web_3d, plm_engineering, plm_spare,
plm_pack_and_go, plm_web_revision,
plm_automated_convertion and plm_date_bom among others
— while only the requested modules are installed. The two Enterprise-only
modules are removed at build time; rebuild with
--build-arg KEEP_ENTERPRISE_MODULES=1 for Odoo Enterprise
deployments.
Image variants
The CAD conversion stack (cadquery/OCP/vtk, ezdxf,
matplotlib, numpy-stl, to-3mf) accounts
for most of the image size and is required by a single module. Two variants are
therefore published.
| Variant | Tag | On disk | Scope |
|---|---|---|---|
| full | 19.0, latest |
~4.4 GB | includes the CAD conversion stack required by plm_automated_convertion for batch STEP to 3MF, STL and PNG conversion |
| slim | 19.0-slim, latest-slim |
~2.5 GB | all PLM modules except plm_automated_convertion, the only module importing those packages |
# run the slim variant
ODOOPLM_IMAGE=ghcr.io/omniagit/odooplm:19.0-slim docker compose up -dNew: pre-populated demonstration images
A newly created PLM database is empty, which is appropriate for a production rollout but limiting during an evaluation: revision management, spare part manuals and 3D markups cannot be assessed on empty views.
Each variant is therefore also published with a -demo tag. The image
is identical and shares every layer with the corresponding plain tag; the only
difference is that plm_demo is installed on first boot.
ODOOPLM_IMAGE=ghcr.io/omniagit/odooplm:19.0-demo docker compose up -dThe demonstration database contains:
- LSU-100, a linear shaft support unit: 12 parts across three BOM levels, with materials and weights derived from the solids
- 29 engineering documents: a STEP and a 3MF for every part, plus five dimensioned 2D sheets, each carrying its printable PDF
- ballooned assembly drawings, where every balloon is the position of that component in the bill of material
- a spare part BOM for each assembly, numbered like the drawing, and the Spare Parts Manual that prints from it
- the document structure produced by a CAD upload: the STEP model at the top, with its 3MF viewer file, its 2D sheet and its components hanging from it
- two 3D markups on the top-level assembly, with the associated chatter messages
The geometry is generated with cadquery and ezdxf by OmniaSolutions and is
released under the same AGPL-3 licence as the module; no third-party CAD model is
redistributed. All records are created through the ORM with explicit external
ids, so uninstalling plm_demo removes the demonstration data.
The
-demotags are intended for evaluation, demonstrations and training. Production instances should be created from the plain tags, which installplmonly.
Distribution
Every tag is published on GitHub Container Registry and on Docker Hub:
ghcr.io/omniagit/odooplm:19.0 mboscolo/odooplm:19.0
ghcr.io/omniagit/odooplm:19.0-slim mboscolo/odooplm:19.0-slim
ghcr.io/omniagit/odooplm:19.0-demo mboscolo/odooplm:19.0-demo
ghcr.io/omniagit/odooplm:19.0-slim-demo mboscolo/odooplm:19.0-slim-demo
The latest, latest-slim, latest-demo and
latest-slim-demo tags track the most recent packaged Odoo release. A
-buildN tag is published for each run for deployments that need to
pin an exact build.
Configuration
All variables have working defaults.
| Variable | Default | Purpose |
|---|---|---|
ODOOPLM_IMAGE | ghcr.io/omniagit/odooplm:19.0 | image used by the stack |
ODOO_PORT / ODOO_WEBSOCKET_PORT | 8069 / 8072 | host ports |
ODOOPLM_DB | odooplm | database created on first boot |
ODOOPLM_INIT_MODULES | plm | modules installed in that database |
ODOOPLM_INIT_LANG | empty | additional language to load, for example it_IT |
ODOOPLM_AUTO_INIT | 1 | 0 disables automatic database creation |
To install a broader selection of modules at startup:
ODOOPLM_INIT_MODULES=plm,plm_web_3d,plm_engineering,plm_spare,plm_pack_and_go,plm_web_revision \
docker compose up -d
Odoo settings that are not exposed as environment variables — workers, limits,
master password, dbfilter — are defined in
config/odoo.conf. Edit the file and run
docker compose restart odoo.
Operational commands
A Makefile wraps the common operations; make help lists them all.
make build # build the image locally (VARIANT=slim for the small one)
make up / make down # start / stop the stack (data kept)
make logs # follow the Odoo logs
make shell # bash inside the Odoo container
make odoo-shell # Odoo python shell on the PLM database
make update MODULES=plm,plm_web_3d # upgrade modules and restart
make destroy # stop and DELETE the database and filestore
make smoke-test # boot, verify, tear down (same check as CI)Build process and maintenance
- Weekly rebuilds track both the
odooplmbranch and the official Odoo base image. - Automated verification before publication: the pipeline starts the stack, waits for Odoo to respond and confirms in the database that the modules were installed. The demonstration image is provisioned and verified as a separate database.
- Reproducible builds: each build resolves and pins the upstream commit, which is recorded inside the image.
docker run --rm --entrypoint cat ghcr.io/omniagit/odooplm:19.0 /etc/odooplm-build-infoProduction deployment
The default settings are intended for local evaluation. Before exposing an instance, change
admin_passwdinconfig/odoo.confandPOSTGRES_PASSWORD, setlist_db = False, and place a TLS-terminating reverse proxy in front, forwarding8069and the/websocketroute to8072.
Desktop CAD connector
The connector for SolidWorks, SolidEdge, Inventor, AutoCAD and FreeCAD is
distributed separately on
SourceForge. Configure
it against http://<host>:8069 using the odooplm
database.
References
- Docker stack: github.com/OmniaGit/DockerOdooPLM
- OdooPLM sources: github.com/OmniaGit/odooplm
- Product site: odooplm.omniasolutions.website
Issues and pull requests are welcome, in particular from teams running the stack in production or on Odoo releases that are not yet packaged.