How to Install Odoo 17 on Ubuntu 22.04

how to install odoo 17 on ubuntu 22.04

In this blog post we’ll explain how to install Odoo 17 on Ubuntu 22.04, step-by-step.

Odoo is an open-source and self-hosted application written in Python and Javascript. The latest stable version of Odoo is Odoo 17 and it offers a variety of features, such as managing customers, products, sales, inventories, accounts, project management, and orders, covering the most important parts of your business. Odoo 17 stores its data in the PostgreSQL database, which will be installed during our installation of Odoo.

Installing Odoo 17 on Ubuntu 22.04 is straigforward process that may take up to 15 minutes. Let’s get things done!

Prerequisites

  • A Linux server with Ubuntu 22.04 and at least 2GB of RAM
  • User privileges: root or non-root user with sudo privileges

How to Install Odoo 17: Step 1. Update the System

Every fresh installation of Ubuntu 22.04 needs the packages to be updated to the latest versions available. To do that, execute the following command:

sudo apt-get update -y && sudo apt-get upgrade -y

Step 2. Install Python and Required Libraries

Before we start with the installation, we need to install some dependencies for PostgreSQL and Odoo itself.

sudo apt-get install -y python3-pip python3-dev python3-venv libxml2-dev libxslt1-dev zlib1g-dev libsasl2-dev libldap2-dev build-essential libssl-dev libffi-dev libmysqlclient-dev libjpeg-dev libpq-dev libjpeg8-dev liblcms2-dev libblas-dev libatlas-base-dev -y

Step 3. Install NPM and CSS plugins

Once the dependencies are installed, we will install package management for the JavaScript programming language:

sudo apt-get install -y npm
sudo ln -s /usr/bin/nodejs /usr/bin/node
sudo npm install -g less less-plugin-clean-css
sudo apt-get install -y node-less

Step 4. Install Wkhtmltopdf

In this step we will install the Wkhtmltopdf command line tool, used for converting HTML pages to PDF files. Run these three commands one by one:

sudo wget https://github.com/wkhtmltopdf/packaging/releases/download/0.12.6-1/wkhtmltox_0.12.6-1.bionic_amd64.deb
sudo dpkg -i wkhtmltox_0.12.6-1.bionic_amd64.deb
sudo apt install -f

Step 5. Install PostgreSQL

Step by step, we are getting closer to the Odoo installation. Before we install Odoo, we will need to install the PostgreSQL service which is responsible for storing Odoo’s data.

sudo apt-get install postgresql -y

Once installed, start and enable the PostgreSQL service.

sudo systemctl start postgresql && sudo systemctl enable postgresql

To check the status execute the following command:

sudo systemctl status postgresql

You should receive the following output:

root@host:/# sudo systemctl status postgresql
● postgresql.service - PostgreSQL RDBMS
     Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; vendor preset: enabled)
     Active: active (exited) since Thu 2023-11-23 03:42:11 CST; 18s ago
   Main PID: 20712 (code=exited, status=0/SUCCESS)
        CPU: 3ms

Nov 23 03:42:11 host.test.vps systemd[1]: Starting PostgreSQL RDBMS...
Nov 23 03:42:11 host.test.vps systemd[1]: Finished PostgreSQL RDBMS.

Step 6. Create Odoo and PostgreSQL users

Next we will create Odoo and PostgreSQL users. To create the Odoo user, execute the following command:

useradd -m -U -r -d /opt/odoo17 -s /bin/bash odoo17

Set the user password for odoo17:

passwd odoo17
New password: YourStrongPasswordHere
Retype new password: YourStrongPasswordHere
passwd: password updated successfully

Make sure to replace YourStrongPasswordHere with a strong password. To create a PostgreSQL user, execute the following command:

sudo su - postgres -c "createuser -s odoo17"

Step 7. Install and Configure Odoo 17

First log in as the Odoo user and clone the latest version of Odoo in the /opt/ directory:

su - odoo17

git clone https://www.github.com/odoo/odoo --depth 1 --branch 17.0 /opt/odoo17/odoo17

Next, activate the Python virtual environment and begin installing the Odoo requirements.

cd /opt/odoo17

python3 -m venv odoo17-venv

source odoo17-venv/bin/activate

pip install --upgrade pip

pip3 install wheel

pip3 install -r odoo17/requirements.txt

Once done, deactivate the environment and create the Odoo add-on directories and Odoo log file.

deactivate

mkdir /opt/odoo17/odoo17-custom-addons

chown -R odoo17:odoo17 /opt/odoo17/odoo17-custom-addons

sudo mkdir -p /var/log/odoo17

sudo touch /var/log/odoo17.log

sudo chown -R odoo17:odoo17 /var/log/odoo17

Step 8. Create Odoo 17 configuration file

Next we need to create the configuration file for Odoo’s configuration.

sudo touch /etc/odoo17.conf

Open the configuration file with your favorite editor and paste the following lines of code, remembering to change YourStrongPasswordHere to a strong password:

[options]
admin_passwd = YourStrongPasswordHere
db_host = False
db_port = False
db_user = odoo17
db_password = False
xmlrpc_port = 8069
logfile = /var/log/odoo17/odoo17.log
addons_path = /opt/odoo17/odoo17/addons,/opt/odoo17/odoo17-custom-addons 

Save the file and close it.

Step 9. Create an Odoo systemd unit file

We now need a Systemd service unit file in order to control our Odoo instance more easily. This lets us easily start, stop and set Odoo to run on system boot. To create the Odoo systemd unit file, execute the following command:

sudo touch /etc/systemd/system/odoo17.service

Open the systemd unit file with your preferred text editor and paste the following lines of code:

[Unit]
Description=odoo17
After=network.target postgresql@14-main.service

[Service]
Type=simple
SyslogIdentifier=odoo17
PermissionsStartOnly=true
User=odoo17
Group=odoo17
ExecStart=/opt/odoo17/odoo17-venv/bin/python3 /opt/odoo17/odoo17/odoo-bin -c /etc/odoo17.conf
StandardOutput=journal+console

[Install]
WantedBy=multi-user.target

Reload the daemon, then start and enable the Odoo service:

sudo systemctl daemon-reload

sudo systemctl start odoo17 && sudo systemctl enable odoo17

To check the status of the service, execute the command below:

sudo systemctl status odoo17

You should get the following output:

root@host:~# sudo systemctl status odoo17
● odoo17.service - odoo17
     Loaded: loaded (/etc/systemd/system/odoo17.service; enabled; vendor preset: enabled)
     Active: active (running) since Thu 2023-11-23 06:34:36 CST; 6s ago
   Main PID: 44663 (python3)
      Tasks: 4 (limit: 4558)
     Memory: 72.0M
        CPU: 2.406s
     CGroup: /system.slice/odoo17.service
             └─44663 /opt/odoo17/odoo17-venv/bin/python3 /opt/odoo17/odoo17/odoo-bin -c /etc/odoo17.conf

Nov 23 06:34:36 host.test.vps systemd[1]: Started odoo17.

As you can see, the service is up and running. To access your Odoo website, you need to access your server’s IP address in your web browser on port 8069.

http://YourServerIPAddress:8069

Congratulations! You successfully installed Odoo 17 on Ubuntu 22.04. Now you can install modules, add your personal details and get your business up and running through Odoo.

Alternatively, you wouldn’t have to spend your time installing Odoo 17 on Ubuntu 22.04 if you had a managed Odoo VPS hosting plan hosted with us. If you did, you’d simply ask our support team to install Odoo 17 on Ubuntu 22.04 for you, and they’d take care of the rest. They are available 24/7 and will be able to help you with the installation of Ubuntu 22.04 as well as any additional requirements that you may have. Try us out – we’re positive you won’t regret it.

Thanks for reading this tutorial – please share it with your peers if you found this guide helpful. You can also leave a comment if you liked the post or if you have any suggestions or concerns.

21 thoughts on “How to Install Odoo 17 on Ubuntu 22.04”

  1. Not right like this:

    Step 4. Install Wkhtmltopdf
    sudo wget https://github.com/wkhtmltopdf/packaging/releases/download/0.12.6-1/wkhtmltox_0.12.6-1.bionic_amd64.deb
    sudo dpkg -i wkhtmltox_0.12.6-1.bionic_amd64.deb
    sudo apt install -f

    Right like this:
    cd /tmp
    wget https://github.com/wkhtmltopdf/packaging/releases/download/0.12.6.1-3wkhtmltox_0.12.6.1-3.jammy_amd64.deb
    sudo gdebi -n wkhtmltox_0.12.6.1-3.jammy_amd64.deb
    rm wkhtmltox_0.12.6.1-3.jammy_amd64.deb
    sudo ln -s /usr/local/bin/wkhtmltopdf /usr/bin/
    sudo ln -s /usr/local/bin/wkhtmltoimage /usr/bin/

    Reply
    • Feel free to use those commands as well for the installation of the “wkhtmltopdf”

      Or you can use this:

      sudo apt install wkhtmltopdf

      The wkhtmltopdf is included in the Ubuntu 24.04 repository

      If wkhtmltopdf is not readable

      sudo ln -s /usr/local/bin/wkhtmltopdf /usr/bin

      sudo ln -s /usr/local/bin/wkhtmltoimage /usr/bin

      Reply
  2. Apr 06 08:43:14 vps-56aca941 odoo17[8318]: File “/opt/odoo17/odoo17/odoo/modules/graph.py”, line >
    Apr 06 08:43:14 vps-56aca941 odoo17[8318]: import odoo.tools as tools
    Apr 06 08:43:14 vps-56aca941 odoo17[8318]: File “/opt/odoo17/odoo17/odoo/tools/__init__.py”, line>
    Apr 06 08:43:14 vps-56aca941 odoo17[8318]: from . import _monkeypatches
    Apr 06 08:43:14 vps-56aca941 odoo17[8318]: File “/opt/odoo17/odoo17/odoo/tools/_monkeypatches.py”>
    Apr 06 08:43:14 vps-56aca941 odoo17[8318]: from werkzeug.datastructures import FileStorage
    Apr 06 08:43:14 vps-56aca941 odoo17[8318]: ModuleNotFoundError: No module named ‘werkzeug’
    Apr 06 08:43:14 vps-56aca941 systemd[1]: odoo17.service: Main process exited, code=exited, status=1>
    Apr 06 08:43:14 vps-56aca941 systemd[1]: odoo17.service: Failed with result ‘exit-code’.
    Apr 06 08:43:14 vps-56aca941 systemd[1]: odoo17.service: Consumed 1.479s CPU time.

    keep stopping after somtime

    knowing that werkzeug installed correctly from requirements

    Reply
  3. have you tried following this tutorial? some command require elevated privileges and odoo17 user is not in the sudoers group: useradd -m -U -r -d /opt/odoo17 -s /bin/bash odoo17

    Reply
    • If you need to add the odoo17 user to the sudo group, you can do it with the following command:
      usermod -aG sudo odoo17

      You can check our full tutorial on how to create a sudo user at:
      https://www.rosehosting.com/blog/how-to-create-a-sudo-user-on-ubuntu-22-04/

      Reply
  4. In step 7, After pip3 install -r odoo17/requirements.txt I get the following error:

    src/lxml/etree.c: In function ‘__Pyx_PyInt_As_long’:
    src/lxml/etree.c:269960:53: error: ‘PyLongObject’ {aka ‘struct _longobject’} has no member named ‘ob_digit’
    269960 | const digit* digits = ((PyLongObject*)x)->ob_digit;
    | ^~
    src/lxml/etree.c:270015:53: error: ‘PyLongObject’ {aka ‘struct _longobject’} has no member named ‘ob_digit’
    270015 | const digit* digits = ((PyLongObject*)x)->ob_digit;
    | ^~
    src/lxml/etree.c: In function ‘__Pyx_PyIndex_AsSsize_t’:
    src/lxml/etree.c:270403:45: error: ‘PyLongObject’ {aka ‘struct _longobject’} has no member named ‘ob_digit’
    270403 | const digit* digits = ((PyLongObject*)b)->ob_digit;
    | ^~
    Compile failed: command ‘/usr/bin/x86_64-linux-gnu-gcc’ failed with exit code 1
    creating tmp
    cc -I/usr/include/libxml2 -I/usr/include/libxml2 -c /tmp/xmlXPathInit4_94cqzo.c -o tmp/xmlXPathInit4_94cqzo.o
    cc tmp/xmlXPathInit4_94cqzo.o -lxml2 -o a.out
    error: command ‘/usr/bin/x86_64-linux-gnu-gcc’ failed with exit code 1
    [end of output]

    note: This error originates from a subprocess, and is likely not a problem with pip.
    ERROR: Failed building wheel for lxml
    Running setup.py clean for lxml
    Failed to build greenlet lxml
    ERROR: Could not build wheels for greenlet, lxml, which is required to install pyproject.toml-based projects

    Reply
    • You can try installing lxml manually with the command: pip3 install lxml and please make sure you are running the commands in a Python virtual environment.

      Reply
  5. I don’t have the same end result (Active: failed )

    root@raymond-Standard-PC-i440FX-PIIX-1996:/opt/odoo17# sudo systemctl status odoo17
    × odoo17.service – odoo17
    Loaded: loaded (/etc/systemd/system/odoo17.service; enabled; preset: enabled)
    Active: failed (Result: exit-code) since Thu 2024-06-20 10:13:30 WAT; 26min ago
    Duration: 2.708s
    Process: 14269 ExecStart=/opt/odoo17/odoo17-venv/bin/python3 /opt/odoo17/odoo17/odoo-bin -c /etc/odoo17.conf (code=>
    Main PID: 14269 (code=exited, status=1/FAILURE)
    CPU: 1.531s

    juin 20 10:13:30 raymond-Standard-PC-i440FX-PIIX-1996 odoo17[14269]: File “/usr/lib/python3.12/configparser.py”, line>
    juin 20 10:13:30 raymond-Standard-PC-i440FX-PIIX-1996 odoo17[14269]: self._read(fp, filename)
    juin 20 10:13:30 raymond-Standard-PC-i440FX-PIIX-1996 odoo17[14269]: File “/usr/lib/python3.12/configparser.py”, line>
    juin 20 10:13:30 raymond-Standard-PC-i440FX-PIIX-1996 odoo17[14269]: raise MissingSectionHeaderError(fpname, lineno>
    juin 20 10:13:30 raymond-Standard-PC-i440FX-PIIX-1996 odoo17[14269]: configparser.MissingSectionHeaderError: File conta>
    juin 20 10:13:30 raymond-Standard-PC-i440FX-PIIX-1996 odoo17[14269]: file: ‘/etc/odoo17.conf’, line: 1
    juin 20 10:13:30 raymond-Standard-PC-i440FX-PIIX-1996 odoo17[14269]: ‘admin_passwd = odoo17 \n’
    juin 20 10:13:30 raymond-Standard-PC-i440FX-PIIX-1996 systemd[1]: odoo17.service: Main process exited, code=exited, sta>
    juin 20 10:13:30 raymond-Standard-PC-i440FX-PIIX-1996 systemd[1]: odoo17.service: Failed with result ‘exit-code’.
    juin 20 10:13:30 raymond-Standard-PC-i440FX-PIIX-1996 systemd[1]: odoo17.service: Consumed 1.531s CPU time, 3.8M memory>
    lines 1-18/18 (END)

    Reply
    • Check your /etc/odoo17.conf and ensure it’s configured as shown in the tutorial. Your “admin_password” parameter on /etc/odoo17.conf seems to have an error.

      Reply
  6. I have installed using your process. However, it is not allowing me to open the odoo project in vscode or any other IDE. I want to install it for development such that I can make new modules when I want to.

    Reply
  7. Hello, I want to install for development. When I try to open it on VSCode, it says you do not have permission to open it. How do I solve it? Also, is this a right way for development?

    Reply
    • Yes, it can be used for development as well. Please make sure that you have full access to your application VSCode on your local computer. The installation has nothing with the IDE applications. You will have to investigate this issue on your local computer or on your server.

      Reply
  8. Hi – I followed your process and Odoo17 is up and running perfectly – thank you for your guide. I do have one question: I would now like to write some sql queries against the postgresql database. To connect to the database I am using the command:
    psql -h localhost -U odoo17 -d my_database_name
    What password should I be using? I’ve tried the password created in step 6, but I’m getting a “password authentication faile for user odoo17” error.

    Reply
    • Please note, that password is for the system user “odoo17”, and not for the PostgreSQL user.

      To log in the database via the command line you can use the following command:

      sudo -u postgres psql

      Then to list the database:

      \l

      To select your database:

      \c “name of your database”

      Reply
  9. I tried it and it is working fine, can you please explain why you used xmlrpc_port = 8069 not http_port = 8069
    I notice in Yenthe script he is using http_port for version > 11
    We need to install NGINX for a domain.

    Reply
  10. I followed the tutorial till the end and I’m having this error:

    odoo17.service – odoo17
    Loaded: loaded (/etc/systemd/system/odoo17.service; enabled; vendor preset: enabled)
    Active: failed (Result: exit-code) since Fri 2024-11-22 22:03:38 EAT; 2min 45s ago
    Process: 396064 ExecStart=/opt/odoo17/odoo17-venv/bin/python3 /opt/odoo17/odoo17/odoo-bin -c /etc/odoo17.conf (code>
    Main PID: 396064 (code=exited, status=1/FAILURE)

    Nov 22 22:03:38 DIDDLY-SQUAT odoo17[396064]: import odoo
    Nov 22 22:03:38 DIDDLY-SQUAT odoo17[396064]: File “/opt/odoo17/odoo17/odoo/__init__.py”, line 115, in
    Nov 22 22:03:38 DIDDLY-SQUAT odoo17[396064]: from . import modules
    Nov 22 22:03:38 DIDDLY-SQUAT odoo17[396064]: File “/opt/odoo17/odoo17/odoo/modules/__init__.py”, line 8, in
    Nov 22 22:03:38 DIDDLY-SQUAT odoo17[396064]: from . import db, graph, loading, migration, module, registry, neutral>
    Nov 22 22:03:38 DIDDLY-SQUAT odoo17[396064]: File “/opt/odoo17/odoo17/odoo/modules/db.py”, line 4, in
    Nov 22 22:03:38 DIDDLY-SQUAT odoo17[396064]: from psycopg2.extras import Json
    Nov 22 22:03:38 DIDDLY-SQUAT odoo17[396064]: ModuleNotFoundError: No module named ‘psycopg2’
    Nov 22 22:03:38 DIDDLY-SQUAT systemd[1]: odoo17.service: Main process exited, code=exited, status=1/FAILURE
    Nov 22 22:03:38 DIDDLY-SQUAT systemd[1]: odoo17.service: Failed with result ‘exit-code’.

    Reply

Leave a Comment