Install Odoo 16 on Ubuntu 20.04 LTS with nginx and domain configration
Odoo deployment

This blog will represent the installation aspects of Odoo 16 in an Ubuntu server 20.04 LTS and will help to understand its process.

before starting make sure your server is enough secure 

follow this blog for making it secure https://www.alhaditech.com/blog/our-blog-1/odoo-installation-on-server-1

Step-1: Update your Server

login to your server and make sure the server is up-to-date.

sudo apt-get update
sudo apt-get upgrade

Step 2: Create a system user

Next, let's create a system user for security and to fulfill Odoo roles.This user will only have limited access to certain files and locations within Odoo.After that, we'll restrict this user's access to all files and directories linked to Odoo.

sudo adduser --system --home=/opt/odoo16 --group odoo16

Step 3: Installing Packages and libraries

Install the necessary Odoo Python packages:Install pip3:

sudo apt-get install -y python3-pip

Install Packages and libraries:

sudo apt-get install python-dev python3-dev 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

Install Web web dependencies:

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: Configure Postgresql

PostgreSQL serves as the database server for Odoo. To install and configure the database server for Odoo, follow these steps:

sudo apt-get install postgresql

Create a Postgres user to manage the database in the following step. Later, the conf file requires the user and the provided password.To carry out the tasks, Postgres utilizes a separate system user named "Postgres." So the following command will change the Postgres user:

sudo su - postgres

Do the following to create the user Odoo16.Additionally, you must change the password for the user Odoo16 at that time. You must enter the new password in the Odoo configuration file at the very end of the installation process.

createuser --createdb --username postgres --no-createrole --no-superuser --pwprompt odoo16

The user must then be designated as a superuser in order to receive further privileges.


Exit from psql and Postgres user:


Step 5: Get Odoo 16 community from git

We now need to upload the Odoo source file to our server, We can directly clone the Community Edition source code from the Odoo GitHub repository.  Once the installation is complete, you can add the Enterprise edition add-ons.First, install git to the server:

sudo apt-get install git

To make the Odoo system more secure, we must now change the system user to Odoo (which is created in Step 3), prior to cloning.

sudo su - odoo16 -s /bin/bash

The dot (.) operator is used at the end of the command to copy the files to the current user's home directory, which is /opt/odoo and is the same home directory that was specified when the user was created:

git clone https://www.github.com/odoo/odoo --depth 1 --branch 16.0 --single-branch .

After that, exit from the user and carry out the installation:


Step 6: Install Required Python Packages

Odoo utilizes a variety of Python packages and libraries for various tasks. We must use pip3 to install them in order to run Odoo. Additionally, the requirement.txt file included in the Odoo folder has a list of the necessary requirements. Consequently, we can pass this file as a parameter to the pip install command, which will cause each package listed in requirement.txt to be installed automatically.

sudo pip3 install -r /opt/odoo16/requirements.txt

All the packages must be correctly installed for Odoo to function properly, and you should make sure of that.Install WkhtmltopdfReports can be printed as PDF files using Odoo. Wkhtmltopdf makes it easier to create PDF reports from HTML data. The Qweb template reports are converted to HTML by the report engine, and the PDF report is produced by Wkhtmltopdf:

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

Step 7: Setup Conf file

To operate the system, Odoo needs to know some details like the database user, password, add-on locations, etc. These will also be available in the configuration file. Therefore, creating an Odoo configuration file should be our first priority. Additionally, a configuration sample file is accessible in the Odoo folder and may be copied to the desired location. /etc is where configuration files are often stored.To copy the configuration file to /etc:

sudo cp /opt/odoo16/debian/odoo.conf /etc/odoo16.conf

The following step is to add the required information to the file.

sudo nano /etc/odoo16.conf

Update conf file same as shown in the code below:

   ; This is the password that allows database operations:
   admin_passwd = admin
   db_host = False
   db_port = False
   db_user = odoo16
   db_password = False
   addons_path = /opt/odoo16/addons
   logfile = /var/log/odoo/odoo16.log

The following parameters should be configured before the operations are conducted:admin_passwd: This is the master password for Odoo, and it may be used to create, remove, duplicate, and many other types of database operations in database management.db_host: the database host.db_port:  the database port.db_user: the database user name.db_password: supply the password for the database user that was specified when it was created.addons_path: give the path to the directories that hold the directories for Odoo addons.Multiple directories may be mentioned, separated by commas:Eg: addons_path = /opt/odoo16/addons,  /opt/odoo16/enterprise, /opt/odoo16/customlogfile: the log file path.Next, you should set the access right of the conf file for the system user Odoo

sudo chown odoo16: /etc/odoo16.conf
sudo chmod 640 /etc/odoo16.conf

Also, create a log directory of Odoo, which will help you to find Odoo-related issues and set permission to the log directory.

sudo mkdir /var/log/odoo
sudo chown odoo16:root /var/log/odoo

Step 8: Odoo service file

After configuring the conf file, we have to create a service to run Odoo. Let’s create a service file ‘odoo16.service’ in /etc/systemd/system:

sudo nano /etc/systemd/system/odoo16.service

Add the following aspects to the newly created service file

   # Ubuntu/Debian convention:
   ExecStart=/opt/odoo16/odoo-bin -c /etc/odoo16.conf

Finally set the root user's permissions for this service file.

sudo chmod 755 /etc/systemd/system/odoo16.service
sudo chown root: /etc/systemd/system/odoo16.service

Step 9: Run Odoo 16

After the successful completion of all the above steps, Let's run the Odoo instance with the following command:

sudo systemctl start odoo16.service

Check the status of the Odoo service by using the following command

sudo systemctl status odoo16.service

You can access the Odoo through the following URL.


If everything is configured successfully, this will reroute you to the page where you can create a database.Check Odoo LogsIf you are having problems with the installation or for any other reason, you can use the following command to check the logs of the Odoo platform that you have set up. The following command will display the terminal's live logs:

sudo tail -f /var/log/odoo/odoo.log

Finally, use the following command to start the Odoo service automatically after restarting the server:

sudo systemctl enable odoo16.service

Use the following command to restart the Odoo service if you have made any modifications to the add-ons so that your instance will reflect the updates:

sudo systemctl restart odoo16.service

Step 10: nginx setup with odoo

Install Nginx: If Nginx is not already installed, you can install it using your package manager. For example, on Ubuntu, you can run:

bashCopy code

sudo apt update 

sudo apt install nginx

Create an Nginx Server Block (Virtual Host

sudo nano /etc/nginx/sites-available/odoo

server {
listen 80;
server_name your_domain.com;

location / {
proxy_http_version 1.1;
proxy_read_timeout 720s;
proxy_connect_timeout 720s;
proxy_send_timeout 720s;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE_ADDR $remote_addr;
proxy_cache_bypass $http_upgrade;
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;

location /longpolling {

sudo ln -s /etc/nginx/sites-available/odoo /etc/nginx/sites-enabled/

Test Nginx Configuration

sudo nginx -t

sudo systemctl reload nginx
sudo systemctl stop nginx
sudo systemctl start nginx

sudo systemctl restart nginx 

Secure your file on cloud
--> AlhadiTech