How-toOdoo (Community)Installation / Development setup

How to Install Odoo and Set Up a Development Environment

Question
how to install odoo

Also searched as

  • how to develop odoo
  • install odoo on ubuntu from source
  • odoo development environment setup
  • run odoo with docker

Short answer

For development, install Odoo from source: install PostgreSQL and system libraries, clone the Odoo repository at your target version, create a Python virtual environment, install requirements, then start odoo-bin with a config file and a new database. Use Docker for a quick trial. Run with developer options and create your own addons folder for custom modules.

Applies to: Odoo Community 16 to 18 on Ubuntu or Debian; Windows and macOS follow the same pattern. Check the official requirements for the Python version your Odoo version supports.

Install Odoo from source on Ubuntu

  1. 1Install PostgreSQL and create a database role for your user: sudo apt install postgresql, then sudo -u postgres createuser -s your_user.
  2. 2Install system packages for building Python dependencies, such as git, python3-dev, python3-venv, libxml2-dev, libxslt1-dev, libldap2-dev, libsasl2-dev, libpq-dev and libjpeg-dev.
  3. 3Clone the Odoo repository for your version, using a shallow clone of the matching branch such as 17.0.
  4. 4Create a virtual environment, activate it, and install requirements.txt from the cloned repository.
  5. 5Install wkhtmltopdf if you need PDF reports with correct headers and footers.
  6. 6Create an odoo.conf with addons_path, db_user and an admin password, then start the server with odoo-bin -c odoo.conf.
  7. 7Open http://localhost:8069, create a database, and install a base app such as Manufacturing or Sales to confirm it works.

Choosing an install method

Source install gives you full control, the ability to debug and the ability to switch branches, which is why developers prefer it. Packaged installs from the official Debian or RPM packages are quicker for servers. Docker is the fastest way to try a version without touching your machine. Windows has an installer that is convenient for evaluation, but development work is smoother on Linux or WSL.

Whichever you choose, match the Odoo version to the Python and PostgreSQL versions it supports. Mismatches cause strange dependency errors that waste hours.

Source install commands

The commands below show a typical Ubuntu setup. Adjust the branch to your target version and keep custom modules in a separate folder outside the Odoo repository so upgrades stay clean.

The configuration file lists the folders where Odoo looks for modules. Put the standard addons first and your custom addons after them.

sudo apt update
sudo apt install -y git python3-venv python3-dev build-essential libpq-dev libxml2-dev libxslt1-dev libldap2-dev libsasl2-dev libjpeg-dev postgresql
sudo -u postgres createuser -s $USER
git clone --depth 1 --branch 17.0 https://github.com/odoo/odoo.git
python3 -m venv odoo-venv
source odoo-venv/bin/activate
pip install wheel
pip install -r odoo/requirements.txt
[options]
admin_passwd = change_this_master_password
db_host = False
db_port = False
db_user = your_user
db_password = False
addons_path = /home/you/odoo/addons,/home/you/custom_addons

Development workflow

Start the server in the foreground with the developer options so templates and Python reload on change. Use a dedicated development database and keep demo data on, so you can test quickly.

Odoo includes a scaffold command that creates the skeleton of a module. A module needs a manifest, a models folder and views; after creating it, update the apps list and install it, then restart with the update flag when you change models.

./odoo/odoo-bin -c odoo.conf -d dev_db -i base --dev=all
./odoo/odoo-bin scaffold my_module /home/you/custom_addons
./odoo/odoo-bin -c odoo.conf -d dev_db -u my_module

Docker for a quick trial

The official Docker images for Odoo and PostgreSQL can be run together with a compose file. Mount a folder for your custom addons and a volume for data so that nothing is lost when the container is recreated.

Docker is an excellent way to test a version, but for step-through debugging, a source install in a virtual environment is simpler.

Try it here, free

Odoo Manufacturing Setup Checklist

Open full tool

A practical checklist for configuring Odoo Manufacturing from inventory foundations through BOMs, work centers, planning and go-live.

Common pitfalls

  • !Using a Python version the Odoo version does not support.
  • !Putting custom code inside the Odoo repository, which complicates upgrades.
  • !Leaving the master password at its default or exposing port 8069 publicly.
  • !Running as the postgres superuser or root instead of a normal role.
  • !Forgetting wkhtmltopdf, then wondering why PDF reports look wrong.

How an ERP-grounded AI assistant handles this

Once Odoo runs, developers still spend time finding the right model and field names. An assistant grounded in your Odoo schema can answer questions such as which fields hold a manufacturing order's component lines, and propose queries or ORM calls for a developer to review. Netray runs this on your own infrastructure, so an internal Odoo database is not sent to a public model.

Frequently asked questions

What do I need to install Odoo?

A supported Python version, PostgreSQL, system libraries for building dependencies, and the Odoo source or package for your target version. Wkhtmltopdf is needed for good PDF output. The official documentation lists exact versions per Odoo release.

Which Odoo version should I install?

For a new project, use a currently supported stable release, because older versions stop receiving fixes. If you depend on specific third-party modules, check that they support the version before you commit.

How do I start developing a custom Odoo module?

Use the scaffold command to generate a module, add it to your addons path, update the apps list, and install it. Then define models in Python and views in XML, and update the module whenever you change them.

Is Docker good enough for Odoo development?

Yes for trials and for running a consistent environment, if you mount your addons and data volumes. For debugging with breakpoints, a source install is often easier, though remote debugging into a container also works.

Related

How-to

Odoo External API: Authenticate and search_read with XML-RPC and JSON-RPC

Call the Odoo external API by authenticating against /xmlrpc/2/common to get a user id, then calling execute_kw on /xmlrpc/2/object with the database, uid, password or API key, model name, method and arguments. If authenticate returns False, the database name, login, or API key is wrong, or two-factor is enforced for that user.

Error fix

Odoo Scheduled Actions (Cron) Not Running: How to Fix

Odoo scheduled actions usually stop firing because no cron worker is available (workers or max-cron-threads misconfigured), the action is set inactive, or an earlier job crashed and left an ir.cron row stuck in the running state, which blocks the queue. Check Settings > Technical > Automation > Scheduled Actions first, then the server config and the ir.cron table.

How-to

Odoo Studio Custom Fields: Export, x_studio Names and Upgrade Risk

Odoo Studio saves your changes as data in the database: custom fields named x_studio_*, edited views stored as inherited ir.ui.view records, and automation rules. You can export them as a module via Studio's Export button, but upgrades can break Studio views when the base view changes, and Studio is not a substitute for version-controlled code on complex logic.

How-to

Odoo Manufacturing Tutorial: From BOM to Finished Product

The Odoo Manufacturing app (MRP) turns a Bill of Materials into manufacturing orders that consume components and produce finished goods. The core flow is: create products, build a BOM, optionally add work centers and operations, create and confirm a manufacturing order, then produce and mark it done. This walkthrough covers the process end to end and what to verify on Odoo 19.

How-to

How to Create a Generic Inquiry in Acumatica

Generic Inquiries (GI) are Acumatica's no-code query builder for joining tables, adding filters, and exposing the result as an inquiry screen, dashboard data source, or API endpoint. Open System > Customization > Generic Inquiry, add your base table, define joins and conditions, then run and save. No SQL or customization project is required.

Error fix

Fix Odoo AccessError: You Are Not Allowed to Access Records

Odoo raises AccessError when a user's security groups do not grant a CRUD right on a model through ir.model.access.csv, or when an ir.rule record rule filters the specific record out for that user or company. Fix it by adding the user to the group named in the error, editing the model's access rights, or reviewing the record rule's domain under Settings > Technical > Security.

AI for ERP

AI for Odoo Manufacturing That Reads Your Own Database, Not a Vendor's Cloud

Add grounded, natural-language AI to Odoo Manufacturing without sending MRP, BoM, or work order data to a public model. On-prem or private cloud, ORM-native.

Stuck on Odoo (Community)?

Talk to engineers who work inside Odoo (Community) every week, and who build private AI that answers these questions from your own ERP data.

Keep exploring

Free tools

ERP fixes and how-tos

AI on your ERP

Integrations

Troubleshooting

Software