Odoo, also known as OpenERP, is a free and open-source enterprise resource planning application based on Python. It is a full-featured application and includes open-source CRM, point of sales, human resources management, point of sales, invoicing and accounting, event management, email marketing, order tracking, etc. It is a open-source business application suite covering all your business needs.

This post will show you how to install Odoo14 with Nginx and Let’s Encrypt SSL on Debian.

Requirements

  • A server running Debian 11.
  • A valid domain name pointing to the IP of your server.
  • A root password configured on the server.

Install PostgreSQL Server

Before you begin, you must install the PostgreSQL server on your server. By default, the latest version of PostgreSQL is not included in the default Debian 11 repository. Therefore, you need to add the PostgreSQL repository to your server.

First, install the required dependencies using the following command:

apt-get install gnupg2 wget curl -y

Next, add the PostgreSQL GPG key and repository with the following command:

wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add -
echo "deb http://apt.postgresql.org/pub/repos/apt/ `lsb_release -cs`-pgdg main" | tee /etc/apt/sources.list.d/pgdg.list

Once the repository is added, update the repository and install PostgreSQL with the following command:

apt-get update -y
apt-get install postgresql-12 postgresql-client-12 -y

After you install PostgreSQL, check the status of PostgreSQL with the following command:

systemctl status postgresql

You should get the following output:

? postgresql.service - PostgreSQL RDBMS
     Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; vendor preset: enabled)
     Active: active (exited) since Mon 2021-09-20 11:19:33 UTC; 20s ago
   Main PID: 3746 (code=exited, status=0/SUCCESS)
      Tasks: 0 (limit: 4679)
     Memory: 0B
        CPU: 0
     CGroup: /system.slice/postgresql.service

Sep 20 11:19:33 debian11 systemd[1]: Starting PostgreSQL RDBMS...
Sep 20 11:19:33 debian11 systemd[1]: Finished PostgreSQL RDBMS.

Next, you need to install the wkhtmltopdf package on your server. You can install it with the following command:

wget https://github.com/wkhtmltopdf/packaging/releases/download/0.12.6-1/wkhtmltox_0.12.6-1.buster_amd64.deb
apt-get install ./wkhtmltox_0.12.6-1.buster_amd64.deb

Install Odoo14

By default, Odoo14 is not included in the Debian 11 default repository. Therefore, you need to add the Odoo14 repository to your server.

You can add the Odoo14 repository with the following command:

wget -O - https://nightly.odoo.com/odoo.key | apt-key add -
echo "deb http://nightly.odoo.com/14.0/nightly/deb/ ./" | tee /etc/apt/sources.list.d/odoo.list

Once the repository is added, update it and install Odoo14 with the following command:

apt-get update -y
apt-get install odoo -y

After installation, start the Odoo14 service and enable it to start when you reboot the system:

systemctl enable --now odoo

You can check the status of Odoo14 with the following command:

systemctl status odoo

Output:

? odoo.service - Odoo Open Source ERP and CRM
     Loaded: loaded (/lib/systemd/system/odoo.service; enabled; vendor preset: enabled)
     Active: active (running) since Mon 2021-09-20 11:22:35 UTC; 29s ago
   Main PID: 11356 (odoo)
      Tasks: 4 (limit: 4679)
     Memory: 65.3M
        CPU: 1.512s
     CGroup: /system.slice/odoo.service
             ??11356 /usr/bin/python3 /usr/bin/odoo --config /etc/odoo/odoo.conf --logfile /var/log/odoo/odoo-server.log

Sep 20 11:22:35 debian11 systemd[1]: Started Odoo Open Source ERP and CRM.
Sep 20 11:22:37 debian11 odoo[11356]: Warn: Can't find .pfb for face 'Times-Roman'

By default Odoo14 is listening on port 8069, you can check this with the following command:

ss -tunelp | grep 8069

Output:

tcp   LISTEN 0      128                            0.0.0.0:8069      0.0.0.0:*    users:(("odoo",pid=11356,fd=4)) uid:108 ino:30453 sk:7 cgroup:/system.slice/odoo.service                                                   

Configure Nginx as a reverse proxy.

Next, you need to configure Nginx as a reverse proxy for Odoo14. To do this, install the Nginx server with the following command:

apt-get install nginx -y

After installing Nginx, create a configuration file for the Nginx virtual host using the following command:

nano /etc/nginx/conf.d/odoo14.conf

Add the following lines:

upstream odoo14 {
 server 127.0.0.1:8069;
}

server {
    listen 80;
    server_name odoo14.example.com;
    access_log /var/log/nginx/odoo_access.log;
    error_log /var/log/nginx/odoo_error.log;


    # Proxy settings
    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;

    # Request for root domain
    location / {
       proxy_redirect off;
       proxy_pass http://odoo14;
    }

    # Cache static files
    location ~* /web/static/ {
        proxy_cache_valid 200 90m;
        proxy_buffering on;
        expires 864000;
        proxy_pass http://odoo14;
    }

    # Gzip
    gzip_types text/css text/less text/plain text/xml application/xml application/json application/javascript;
    gzip on;
}

Save and close the file and check Nginx with the following command:

nginx -t

Output:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Finally, restart the Nginx service to apply the configuration changes:

systemctl restart nginx

You can check the status of Nginx with the following command:

systemctl status nginx

Output:

? nginx.service - A high performance web server and a reverse proxy server
     Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
     Active: active (running) since Mon 2021-09-20 11:28:04 UTC; 6s ago
       Docs: man:nginx(8)
    Process: 11857 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
    Process: 11858 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
   Main PID: 11860 (nginx)
      Tasks: 3 (limit: 4679)
     Memory: 3.2M
        CPU: 45ms
     CGroup: /system.slice/nginx.service
             ??11860 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
             ??11861 nginx: worker process
             ??11862 nginx: worker process

Sep 20 11:28:04 debian11 systemd[1]: Starting A high performance web server and a reverse proxy server...
Sep 20 11:28:04 debian11 systemd[1]: Started A high performance web server and a reverse proxy server.

Next, you need to edit the Odoo14 configuration file and enable proxy mode.

nano /etc/odoo/odoo.conf

Add the following line:

proxy_mode = True

Save and close the file and restart the Odoo14 service to apply the changes:

systemctl restart odoo

Access the Odoo14 web interface

Now open your web browser and access the Odoo14 web interface using the URL http://odoo14.example.com. You will be redirected to the following page:

How to Install Odoo ERP on Debian Linux Debian linux

Enter your database, email address, and password, and click the Create Database button. On the following page, you should see the Odoo14 dashboard:

How to Install Odoo ERP on Debian Linux Debian linux

Enable Let’s Encrypt SSL on Odoo14.

It is recommended to secure your Odoo14 with Let’s Encrypt SSL. First install the Certbot client with the following command:

apt-get install python3-certbot-nginx -y

After installation, secure your website with Let’s Encrypt SSL by running the following command:

certbot --nginx -d odoo14.example.com

You will be asked to provide a valid email address and accept the terms of use (see below):

Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator nginx, Installer nginx
Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel): [email protected]

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server at
https://acme-v02.api.letsencrypt.org/directory
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(A)gree/(C)ancel: A

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot? We'd like to send you email about our work
encrypting the web, EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: Y
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for odoo14.example.com
Waiting for verification...
Cleaning up challenges
Deploying Certificate to VirtualHost /etc/nginx/conf.d/odoo14.conf

Next, select whether or not to redirect HTTP traffic to HTTPS (see below):

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2

Type 2 and press Enter to complete the installation. You should see the following output:

Redirecting all traffic on port 80 to ssl in /etc/nginx/conf.d/odoo14.conf

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Congratulations! You have successfully enabled https://odoo14.example.com

You should test your configuration at:
https://www.ssllabs.com/ssltest/analyze.html?d=odoo14.example.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/odoo14.example.com/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/odoo14.example.com/privkey.pem
   Your cert will expire on 2021-05-20. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot again
   with the "certonly" option. To non-interactively renew *all* of
   your certificates, run "certbot renew"
 - Your account credentials have been saved in your Certbot
   configuration directory at /etc/letsencrypt. You should make a
   secure backup of this folder now. This configuration directory will
   also contain certificates and private keys obtained by Certbot so
   making regular backups of this folder is ideal.
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

 - We were unable to subscribe you the EFF mailing list because your
   e-mail address appears to be invalid. You can try again later by
   visiting https://act.eff.org.

Conclusion

In this tutorial, you have learned how to install Odoo14 with Nginx as a reverse proxy on Debian 11. You also learned how to enable SSL support in Odoo14. If you have any questions, feel free to contact me.