Odoo is one of the most popular ERP systems for small and medium businesses: CRM, accounting, inventory, website, and dozens of other modules in one system. Deploying Odoo 19 on your own VPS is quite feasible if you have basic Linux skills. In this guide, we will cover the installation using the official method — from the .deb package that Odoo releases specifically for Ubuntu.
An important nuance specifically for the nineteenth version: the official .deb package of Odoo 19 supports only Ubuntu 24.04 LTS (Noble). If your server is on Ubuntu 22.04 or older — you will either have to upgrade the system or install Odoo from the source code (this is already a different, significantly longer instruction).
Server requirements
| Parameter | Minimum | Recommended |
|---|---|---|
| OS | Ubuntu 24.04 LTS (64-bit) | Ubuntu 24.04 LTS |
| CPU | 2 cores | 4 cores |
| RAM | 2 GB | 4–8 GB |
| Disk | 20 GB SSD | 40+ GB NVMe |
| Python | 3.10+ | — |
| PostgreSQL | 13.0+ | — |
| Open ports from outside | 80/443 | 80/443 |
Good news about Ubuntu 24.04: the system comes by default with Python 3.12 and PostgreSQL 16 — both already exceed the minimum requirements for Odoo 19 with a margin, nothing needs to be updated separately.
Why .deb specifically, and not installation from source code. If you install Odoo from the git repository on Ubuntu 24.04, you will definitely need to create a Python virtual environment — the system blocks global package installation via pip (PEP 668 restriction, "externally managed environment"). This is an extra step and an additional source of errors for those who do not work with Python daily. The .deb package does not have this problem: it pulls all dependencies through apt, not through pip, so it installs with one command and immediately creates a systemd service.
Step 1. Preparing the server
Connect to the server via SSH and update the system:
sudo apt update && sudo apt upgrade -y
Step 2. Installing PostgreSQL
The .deb package expects that the PostgreSQL server is already on the same machine. Install the database server:
sudo apt install postgresql -y
Check that the service is running:
sudo systemctl status postgresql
Note: this step only installs PostgreSQL itself. There is no need to create a special database user for Odoo separately — the .deb package will do this automatically in the next step.
Step 3. Downloading and installing Odoo 19
Download the .deb package of the Community edition (free) from the official Odoo downloads page — choose the format for Debian/Ubuntu. The Enterprise edition is also distributed as .deb, but an active paid Odoo account or partner status is required to download it.
After downloading, install the package:
sudo apt update sudo apt install ./odoo_19.0.latest_all.deb
The modern version of apt will handle dependencies itself. If for some reason the command throws a dependency error, the classic scheme will apply:
sudo dpkg -i odoo_19.0.latest_all.deb sudo apt-get install -f -y sudo dpkg -i odoo_19.0.latest_all.deb
Installation automatically: creates the system user odoo, creates a PostgreSQL user for Odoo, generates the config /etc/odoo/odoo.conf, registers the systemd service, and runs Odoo on port 8069.
Step 4. Check the service
sudo systemctl status odoo
If the service is active (active (running)) — the installation was successful.
Step 5. Basic configuration setup
Open the config:
sudo nano /etc/odoo/odoo.conf
For production use, it is advisable to set immediately:
[options] admin_passwd = YOUR_SECURE_PASSWORD proxy_mode = True workers = 4
The number of workers depends not only on the number of CPU cores but also on the amount of RAM, the number of concurrent users, and the type of load (reports, importing large files, etc.) — therefore, there is no universal formula that can be applied blindly. A common guideline for calculation is (CPU cores × 2) + 1, but for starting on a small VPS, it is safer to begin with a small value (2) and increase it while monitoring the load and memory consumption, rather than immediately setting the calculated number.
Restart the service after changing the configuration:
sudo systemctl restart odoo
Step 6. Firewall
Since Nginx will run on the same server as Odoo, port 8069 (and port 8072 for WebSocket) should never be opened to the outside — they remain accessible only through 127.0.0.1. Externally, it is sufficient to open only the ports for regular web traffic:
sudo ufw allow 80/tcp sudo ufw allow 443/tcp sudo ufw enable
The first login (step 9) will be done through the domain, after configuring Nginx in the next step.
Step 7. Reverse proxy and SSL
The most common option is Nginx with Let's Encrypt. Install Nginx and Certbot:
sudo apt install nginx certbot python3-certbot-nginx -y
Create the site config /etc/nginx/sites-available/odoo:
upstream odoo {
server 127.0.0.1:8069;
}
upstream odoochat {
server 127.0.0.1:8072;
}
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
server {
listen 80;
server_name YOUR_DOMAIN;
proxy_read_timeout 720s;
proxy_connect_timeout 720s;
proxy_send_timeout 720s;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
location /websocket {
proxy_pass http://odoochat;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
}
location / {
proxy_redirect off;
proxy_pass http://odoo;
}
}
Activate the config and obtain an SSL certificate:
sudo ln -s /etc/nginx/sites-available/odoo /etc/nginx/sites-enabled/ sudo nginx -t && sudo systemctl restart nginx sudo certbot --nginx -d YOUR_DOMAIN
Don't forget that proxy_mode = True in the Odoo configuration (step 5) is mandatory when the server is behind a reverse proxy — otherwise, Odoo will incorrectly determine the protocol and client IP addresses. The /websocket block is responsible for chat, live updates, and other real-time features — without it, they simply won't work, although the main Odoo interface will be available.
Step 8. Specifics of Ubuntu 24.04: PDF generation
A specific point for Ubuntu 24.04 — the wkhtmltopdf package in the system's default repositories is built without the necessary Qt patch. The consequence is that PDF reports (invoices, commercial proposals) are generated without headers and footers. The solution is to install the official build from the wkhtmltopdf project:
wget https://github.com/wkhtmltopdf/packaging/releases/download/0.12.6.1-2/wkhtmltox_0.12.6.1-2.jammy_amd64.deb sudo apt install ./wkhtmltox_0.12.6.1-2.jammy_amd64.deb -y
The package is built for Ubuntu 22.04 (jammy), and on a clean Ubuntu 24.04, the installation may fail with a missing dependency error for libssl1.1 — this library is no longer available in the Noble repositories. If you see such an error, install the library separately, and then repeat the installation of wkhtmltopdf:
wget http://security.ubuntu.com/ubuntu/pool/main/o/openssl/libssl1.1_1.1.1f-1ubuntu2.24_amd64.deb sudo apt install ./libssl1.1_1.1.1f-1ubuntu2.24_amd64.deb sudo apt install ./wkhtmltox_0.12.6.1-2.jammy_amd64.deb -y
Step 9. First login
Open your domain address in a browser and fill out the database creation form:
- Master Password — the password from admin_passwd (step 5)
- Database Name — your company name
- Email and password — login credentials
- Demo Data — do not check if you need a clean database without demo data
Common issues
- PostgreSQL authentication error — the database user for Odoo is automatically created by the .deb package during installation (step 3), not by the command apt install postgresql. Make sure that PostgreSQL was installed before installing the Odoo .deb package and that the postgresql service is active.
- Port 8069 is occupied — check if another Odoo service is already running (sudo lsof -i :8069).
- PDF without headers or dependency error when installing wkhtmltopdf — see step 8.
- Chat / live updates are not working, although the interface opens — check that there is a location /websocket block in the Nginx configuration, and that proxy_mode = True is set in /etc/odoo/odoo.conf.
When to trust deployment to specialists
The instructions above are intended for those who are ready to work with the command line independently and are not afraid to configure the server manually. If you lack time or experience — the REDS CLOUD team will deploy and configure Odoo on your VPS or dedicated server for free. We will also transfer your existing Odoo project to our servers for free if you decide to change hosting providers.