Log in via SSH and Update your Server

First, you will need to log in to your CentOS 8 VPS by using SSH as the root user:


Replace IP_ADRRESS and PORT_NUMBER with the correct server IP address and SSH port number. The default port number is 22, but your server may have a unique one set.

Next, run the following commands to upgrade all installed packages on your VPS:

dnf update -y

Once all of the packages are updated, restart your system to apply any changes that require a reboot. This ensures a clean slate on which we’ll be installing our Odoo 14 instance.

Install the Required Dependencies

Before you begin with the Odoo installation, you will need to install Python 3 and some other Odoo dependencies onto your system. You can install all of them using the following command:

dnf install python3 python3-devel git gcc redhat-rpm-config libxslt-devel bzip2-devel openldap-devel libjpeg-devel freetype-devel curl unzip -y

Once all the packages are installed, you will also need to install the wkhtmltopdf package in your system. Wkhtmltopdf is an open-source tool that can be used to convert the HTML format to a PDF, that way Odoo can export PDF reports.

You can install it by running the following command:

dnf install https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/0.12.5/wkhtmltox-0.12.5-1.centos8.x86_64.rpm

Verify that wkhtmltopdf is installed on your server:

# wkhtmltopdf --version
wkhtmltopdf 0.12.5 (with patched qt)

Once this is done, you can proceed to the next step.

Install and Configure PostgreSQL

Odoo uses PostgreSQL to store its data. You can install the PostgreSQL server with the following command:

dnf install postgresql postgresql-server postgresql-contrib -y

Once the installation is completed, initialize the database with the following command:

postgresql-setup initdb

To start the PostgreSQL service and enable it to automatically start after every server reboot, run the following commands:

systemctl start postgresql
systemctl enable postgresql

Next, log in to the PostgreSQL shell and create a new PostgreSQL user for your Odoo database, with the following command. The name we used is odoo14, but you can use any name you like. KEEP IN MIND that the username you set here has to be identical to the system user that you’re going to create in the next step:

su - postgres -c "createuser -s odoo14"

Install and Configure Odoo 14 on CentOS 8

In this section, we will download Odoo 14 from the official Git repository and install it in a Python virtual environment.

First, we need to create a new system user for our Odoo installation. Make sure the username is the same as the PostgreSQL user we created in the previous step:

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

Next, log in as the newly created odoo14 user and download Odoo 14 from the official Git repository:

su - odoo14
git clone https://www.github.com/odoo/odoo --depth 1 --branch 14.0 /opt/odoo/odoo14

Once the download is complete, create a new Python virtual environment for the Odoo 14 installation with the following command:

cd /opt/odoo14 && python3 -m venv odoo14-venv

Activate the virtual environment with the following command:

source odoo14-venv/bin/activate

You can now install the required python modules using the pip3 command, as shown below:

(odoo14-venv) $ pip3 install wheel
(odoo14-venv) $ pip3 install -r odoo14/requirements.txt

Once all the required modules are installed successfully, deactivate the virtual environment and switch back to the sudo or root user with the following command:

(odoo14-venv) $ deactivate && exit

Next, create a separate directory for Odoo’s custom addons/apps. The best practice is to install custom Odoo modules in a separate directory. This ensures that if some custom module doesn’t work, it can easily be removed without risking the removal of default modules that come included with the regular installation.

mkdir /opt/odoo/odoo14-custom-addons
chown odoo: /opt/odoo/odoo14-custom-addons

The following commands will create a log file for the new Odoo 14 installation:

mkdir /var/log/odoo14 && touch /var/log/odoo14/odoo14.log
chown -R odoo14: /var/log/odoo14/

You can now create a configuration file for your Odoo installation:

nano /etc/odoo14.conf

Open that file and enter the following information:

; This is the password that allows database operations:
admin_passwd = master_password
db_host = False
db_port = False
db_user = odoo14
db_password = False
xmlrpc_port = 8069
; longpolling_port = 8072
logfile = /var/log/odoo14/odoo14.log
logrotate = True
addons_path = /opt/odoo/odoo14/addons,/opt/odoo/odoo14-custom-addons

Make sure you set a strong and difficult to guess master_password.

After you are done, save and close the file.

Create a Systemd Unit File for Odoo 14

We will now create a systemd unit file so that we can run our Odoo 14 instance as a service.

You can create the service with the following command:

nano /etc/systemd/system/odoo14.service

Once you open the file, add the following lines:

After=network.target postgresql.service
ExecStart=/opt/odoo14/venv/bin/python3 /opt/odoo14/odoo/odoo-bin -c /etc/odoo14.conf

Save and close the file, then reload the systemd daemon list with the following command:

systemctl daemon-reload

You can now start the Odoo 14 service and enable it to start at boot with the following commands:

systemctl start odoo14
systemctl enable odoo14

You can now verify the status of your Odoo 14 service with:

systemctl status odoo14

Configure Nginx as a Reverse Proxy

Your Odoo 14 install is complete and is now accessible at your CentOS 8 server’s public IP with the post number 8069. However, if you want to access your Odoo application using a domain name instead of typing the IP address and the port number in the URL, you will have to configure a reverse proxy on your server.

We will show you how to implement the reverse proxy configuration using the Nginx web server. Nginx is a powerful and high-performance web server that focuses on customization and performance.

First, install Nginx with the following command:

dnf install nginx -y

Once installed, create a new Nginx virtual host configuration file. Replace yourdomain.com with your registered domain name:

nano /etc/nginx/conf.d/yourdomain.com.conf

Add the following lines:

upstream odoo {
upstream odoochat {
server {
listen 80;
server_name yourdomain.com;
proxy_read_timeout 720s;
proxy_connect_timeout 720s;
proxy_send_timeout 720s;
# Proxy headers
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;
# log files
access_log /var/log/nginx/yourdomain.com.log;
error_log /var/log/nginx/yourdomain.com.log;
# Handle longpoll requests
location /longpolling {
proxy_pass http://odoochat;
# Cache static files
location ~* /web/static/ {
proxy_cache_valid 200 90m;
proxy_buffering on;
expires 864000;
proxy_pass http://odoo;
gzip_types text/css text/less text/plain text/xml application/xml application/json application/javascript;
gzip on;

Make sure to replace yourdomain.com with your registered domain name.

You can now start the Nginx service and enable it to start at boot with the following commands:

systemctl start nginx
systemctl enable nginx

You will also need to configure your Odoo to use the proxy. You can do it by editing the Odoo configuration file:

nano /etc/odoo14.conf

And add the following line to the end of the file:

proxy_mode = True

Save and close the file, then restart the Odoo 14 service to implement the changes:

systemctl restart odoo14

Access the Odoo 14 Instance

You should now be able to access the Odoo 14 instance with your domain name at http://yourdomain.com.