One script. Multiple Odoo versions. Zero configuration headaches.
A no-nonsense Ubuntu installer that gets Odoo 14 through 19 running side-by-side in isolated Python environments β system deps, pyenv, PostgreSQL, Node/less, and Odoo source, all configured in a single run.
- Why
- Features
- Supported Matrix
- Quick Start
- What It Does
- Folder Structure
- Non-Interactive Mode
- Running Odoo
- Troubleshooting
- Contributing
- License
Setting up Odoo on a fresh Ubuntu box is a 30-step process. Running multiple versions side-by-side multiplies that by N. This script collapses it into one prompt:
Select option(s) (e.g. 1 or 1,3,5 or 7):
Pick versions, accept defaults, walk away.
- π― Multi-version: install Odoo 14, 15, 16, 17, 18, 19 β or all at once
- π Isolated Python per version via pyenv
- ποΈ PostgreSQL configured with passwordless superuser tied to your OS user
- π¦ All system deps: build tools, libxml, libsasl, libldap, libjpeg, libopenblas, Node/npm/less, and more
- π Idempotent: re-runs skip already-installed components
- π¦ Soft-fail: one broken package doesn't kill the whole run
- π€ Non-interactive mode via env vars for CI / Docker / Vagrant
- π Clean folder layout:
workspace/odoo-19/with.python-versionset, no nested venv chaos
| Odoo Version | Default Python | Status | Branch |
|---|---|---|---|
| 14 | 3.8.18 | β Supported | 14.0 |
| 15 | 3.8.18 | β Supported | 15.0 |
| 16 | 3.10.13 | β Supported | 16.0 |
| 17 | 3.10.13 | β Supported | 17.0 |
| 18 | 3.11.9 | β Supported | 18.0 |
| 19 | 3.12.3 | β Supported | 19.0 |
Python defaults are overridable at the prompt or via env vars.
| Ubuntu | Status |
|---|---|
| 20.04 LTS | β Tested |
| 22.04 LTS | β Tested |
| 24.04 LTS | β Tested |
git clone https://github.com/<your-username>/odoo-quickstart.git
cd odoo-quickstart
chmod +x odoo_setup.sh
./odoo_setup.shwget https://raw.githubusercontent.com/<your-username>/odoo-quickstart/main/odoo_setup.sh
chmod +x odoo_setup.sh
ODOO_VERSIONS="18,19" ./odoo_setup.sh./odoo_setup.sh --helpThe script walks through these stages in order:
- Prompts for Odoo version(s) and Python version per Odoo version
- Updates the system (
apt-get update && upgrade) - Installs system dependencies:
- Python build deps (
python3-dev,libxml2-dev,libxslt1-dev,libssl-dev,libffi-dev, β¦) - Numeric stack (
libblas-dev,libopenblas-dev,gfortran) - LDAP/SASL/JPEG/PostgreSQL client libs
- Node.js, npm,
less,less-plugin-clean-css - pyenv build deps (
libbz2-dev,libreadline-dev,libsqlite3-dev, β¦)
- Python build deps (
- Installs PostgreSQL and creates a passwordless superuser matching
whoami - Installs pyenv and wires it into
~/.bashrc - For each selected Odoo version:
- Installs the chosen Python version via
pyenv install - Creates
workspace/odoo-<v>/ - Clones
odoo/odooat branch<v>.0(shallow) into that folder - Sets
pyenv local <python-version>for the folder - Installs
requirements.txtagainst that Python
- Installs the chosen Python version via
After running with versions 18 and 19 selected:
~/workspace/
βββ odoo-18/
β βββ .python-version β 3.11.9 (pyenv local)
β βββ odoo-bin
β βββ requirements.txt
β βββ addons/
β βββ odoo/
β βββ ...
βββ odoo-19/
βββ .python-version β 3.12.3 (pyenv local)
βββ odoo-bin
βββ requirements.txt
βββ addons/
βββ odoo/
βββ ...
No virtualenvs. Each Odoo folder is pinned to a specific Python interpreter via pyenv. Packages install into
~/.pyenv/versions/<X.Y.Z>/lib/python*/site-packages/.
Skip all prompts using environment variables β useful for Dockerfiles, CI pipelines, or scripted provisioning.
# Install Odoo 18 and 19 with default Python versions
ODOO_VERSIONS="18,19" ./odoo_setup.sh
# Install all versions
ODOO_VERSIONS="all" ./odoo_setup.sh
# Custom Python per version
ODOO_VERSIONS="17,18" PY_17=3.11.9 PY_18=3.12.3 ./odoo_setup.sh
# Custom workspace location
ODOO_WORKSPACE="/srv/odoo" ODOO_VERSIONS="19" ./odoo_setup.sh| Variable | Purpose | Example |
|---|---|---|
ODOO_VERSIONS |
Comma list or "all" |
"16,18,19" |
ODOO_WORKSPACE |
Where to clone Odoo (default: ~/workspace) |
/srv/odoo |
PY_<N> |
Override Python for Odoo N |
PY_18=3.11.9 |
After install completes, reload your shell:
source ~/.bashrcThen start any installed version:
cd ~/workspace/odoo-19
python odoo-bin -d mydbOdoo serves on http://localhost:8069. Master password is set on first DB creation.
Just cd into a different folder. pyenv auto-switches Python based on .python-version:
cd ~/workspace/odoo-18 && python --version # Python 3.11.9
cd ~/workspace/odoo-19 && python --version # Python 3.12.3Some pip packages fail to compile
Usually means a missing system library. Check the error for the missing *.h header, then sudo apt-get install <lib>-dev. Re-run:
cd ~/workspace/odoo-<v> && pip install -r requirements.txtpyenv: command not found after install
Your shell hasn't picked up the new ~/.bashrc entries. Either:
source ~/.bashrcβ¦or open a new terminal.
PostgreSQL connection refused
sudo systemctl status postgresql
sudo systemctl start postgresql
sudo systemctl enable postgresqlIf the role doesn't exist:
sudo -u postgres createuser -s "$(whoami)"Python version install fails with build errors
A pyenv build dep is missing. Re-run the script β step 3 covers them β or manually:
sudo apt-get install -y make libbz2-dev libreadline-dev libsqlite3-dev \
libncursesw5-dev xz-utils tk-dev libxmlsec1-dev liblzma-devOdoo 14/15 wkhtmltopdf issues
Older Odoo versions need wkhtmltopdf 0.12.5 (not the version in Ubuntu repos):
wget https://github.com/wkhtmltopdf/packaging/releases/download/0.12.6.1-3/wkhtmltox_0.12.6.1-3.jammy_amd64.deb
sudo dpkg -i wkhtmltox_0.12.6.1-3.jammy_amd64.deb
sudo apt-get install -fPort 8069 already in use
Another Odoo instance is running. Either kill it or specify a different port:
python odoo-bin -d mydb --http-port=8070PRs welcome. See CONTRIBUTING.md for details.
Quick guide:
- Fork
- Branch:
git checkout -b feat/your-feature - Test on a clean Ubuntu VM (Multipass, Vagrant, Docker)
- Commit:
git commit -m 'feat: add support for X' - PR
MIT Β© 2026
If this saved you an afternoon, give it a β