Install Odoo using Docker

Odoo is an open source ERP and CRM software written in python. To install Odoo using docker, first install docker using

wget -qO- https://get.docker.com/ | sh

Odoo use PostgreSQL server to store database. Lets create a postgres docker container.

docker run -d -e POSTGRES_USER=odoo -e POSTGRES_PASSWORD=your-password-here -e POSTGRES_DB=postgres --name odoo-db postgres:10

In above command, replace your-password-here with a secure password.

Create a Odoo container with

docker run -d -p 127.0.0.1:8069:8069 -p 127.0.0.1:8072:8072 --name odoo --link odoo-db:db -t odoo

If container did not start on boot, enable start on boot with

docker update --restart=unless-stopped CONTAINER_ID

You can find CONTAINER_ID with docker ps or docker ps -a command.

Next we need to configure a domain to be used with Odoo. For this, we use nginx web server as reverse proxy. Lets install nginx web server with command

apt install nginx

Install LetsEncrypt with

wget https://raw.githubusercontent.com/serverok/server-setup/master/install/letsencrypt.sh
bash ./letsencrypt.sh

Before getting SSL, we need to configure Nginx web server with a simple config file for our domain.

vi /etc/nginx/sites-enabled/odoo.conf

Add

server {
    listen 80;
    server_name YOUR-DOMAIN_HERE;
    root /var/www/html;
}

Restart nginx

systemctl restart nginx

At this point, nginx will serve the web site from /var/www/html folder. Lets get an SSL certficate using certbot

certbot --authenticator webroot --webroot-path /var/www/html --installer nginx -d YOUR-DOMAIN_HERE

Once you have SSL, we need to replace the nginx config with proper nginx config

vi /etc/nginx/sites-enabled/odoo.conf

Replace everything in the file with following content.

upstream odoo {
    server 127.0.0.1:8069;
}

upstream odoo-chat {
    server 127.0.0.1:8072;
}

server {
    listen 80;
    server_name YOUR-DOMAIN-HERE;

    location ^~ /.well-known/acme-challenge/ {
        root /var/www/html;
    }

    location / {
        return 301 https://YOUR-DOMAIN-HERE$request_uri;
    }
}

server {
    listen 443 ssl http2;
    server_name YOUR-DOMAIN-HERE;
    ssl_certificate /etc/letsencrypt/live/YOUR-DOMAIN-HERE/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/YOUR-DOMAIN-HERE/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
    resolver 8.8.8.8 8.8.4.4;
    access_log /var/log/nginx/odoo-access.log;
    error_log /var/log/nginx/odoo-error.log;

    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 / {
        proxy_redirect off;
        proxy_pass http://odoo;
    }

    location /longpolling {
        proxy_pass http://odoo-chat;
    }

    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;
}

Restart nginx

systemctl restart nginx

At this point, if you go to your web site, you will see Odoo install screen. All you need to do here is enter a database name and fill some information. You can select any database name, installer will create the database.

Comments

One response to “Install Odoo using Docker”

  1. firman abraham Avatar
    firman abraham

    awesome…the guide is clean and clear..it works flawlessly

Leave a Reply

Your email address will not be published. Required fields are marked *