OdooPLM on Docker
Finally you can test on a docker container

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

Baseofficial odoo:19.0 image (Ubuntu 24.04, Python 3.12)
PLM modulesthe 19.0 branch of OmniaGit/odooplm, in /mnt/odooplm-addons
Custom modules./addons-extra, mounted on /mnt/extra-addons
DatabasePostgreSQL 17 container
Ports8069 web, 8072 websocket (chatter, 3D viewer)
Persistencenamed volumes for the filestore and the database

All community PLM modules are included and listed in Apps — plm_web_3dplm_engineeringplm_spareplm_pack_and_goplm_web_revisionplm_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, ezdxfmatplotlibnumpy-stlto-3mf) accounts for most of the image size and is required by a single module. Two variants are therefore published.

VariantTagOn diskScope
full19.0latest~4.4 GBincludes the CAD conversion stack required by plm_automated_convertion for batch STEP to 3MF, STL and PNG conversion
slim19.0-slimlatest-slim~2.5 GBall 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 -d
          

New: 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 -d
          

The demonstration database contains:

  • LSU-100, a linear shaft support unit: 12 parts across three BOM levels, with materials and weights derived from the solids
  • spare part BOM covering the wear items of the bearing unit
  • 30 documents: a 3MF and a STEP file for every part, plus DXF and PDF drawing sheets for the machined ones, all with previews
  • the document structure produced by a CAD upload: assembly to component, drawing to model, and model to its exported STEP file
  • 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 -demo tags are intended for evaluation, demonstrations and training. Production instances should be created from the plain tags, which install plm only.

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 latestlatest-slimlatest-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.

VariableDefaultPurpose
ODOOPLM_IMAGEghcr.io/omniagit/odooplm:19.0image used by the stack
ODOO_PORT / ODOO_WEBSOCKET_PORT8069 / 8072host ports
ODOOPLM_DBodooplmdatabase created on first boot
ODOOPLM_INIT_MODULESplmmodules installed in that database
ODOOPLM_INIT_LANGemptyadditional language to load, for example it_IT
ODOOPLM_AUTO_INIT10 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

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 odooplm branch 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-info
          

Production deployment

The default settings are intended for local evaluation. Before exposing an instance, change admin_passwd in config/odoo.conf and POSTGRES_PASSWORD, set list_db = False, and place a TLS-terminating reverse proxy in front, forwarding 8069 and the /websocket route to 8072.

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

Issues and pull requests are welcome, in particular from teams running the stack in production or on Odoo releases that are not yet packaged

From STEP File to Full BOM in Odoo
No CAD License Required