Odoo ERP Installation on Linux

Odoo is a comprehensive, open-source enterprise resource planning (ERP) system providing integrated management of business operations and customer relations. With modules for sales, accounting, inventory, human resources, and more, Odoo enables businesses to streamline processes and improve efficiency. This guide covers Python setup, PostgreSQL configuration, Nginx installation, module management, and production deployment.

Table of Contents

Prerequisites

Ensure you have:

  • Ubuntu 20.04 LTS or later
  • Root or sudo access
  • A registered domain name
  • Minimum 4GB RAM (8GB+ recommended)
  • 50GB available disk space
  • Basic Linux administration knowledge

Update system packages:

sudo apt update && sudo apt upgrade -y

System Requirements

Verify system specifications:

Check OS version:

cat /etc/os-release
uname -m

Check available resources:

free -h
df -h

Install required packages:

sudo apt install -y build-essential libssl-dev libffi-dev python3-dev python3-pip python3-venv python3-wheel

Python Installation

Install Python 3.8 or later:

sudo apt install -y python3 python3-pip

Verify Python version:

python3 --version
pip3 --version

Install required Python packages:

sudo apt install -y python3-docutils python3-imaging python3-jinja2 python3-ldap python3-lxml python3-mako python3-markupsafe python3-dev python3-mock python3-openid python3-odf python3-passlib python3-pil python3-psycopg2 python3-pydot python3-pypdf2 python3-pyserial python3-reportlab python3-requests python3-tz python3-urllib3 python3-werkzeug python3-xlrd python3-xlwt

PostgreSQL Setup

Install PostgreSQL:

sudo apt install -y postgresql postgresql-contrib

Start and enable PostgreSQL:

sudo systemctl start postgresql
sudo systemctl enable postgresql

Create Odoo database user:

sudo -u postgres createuser odoo

Configure PostgreSQL authentication:

sudo nano /etc/postgresql/12/main/pg_hba.conf

Ensure local connections use md5 or scram-sha-256:

local   all             odoo                                    md5

Restart PostgreSQL:

sudo systemctl restart postgresql

Odoo Installation

Create Odoo user:

sudo useradd -r -s /bin/bash -m -d /opt/odoo odoo

Create installation directory:

sudo mkdir -p /opt/odoo
sudo chown -R odoo:odoo /opt/odoo

Download Odoo:

cd /tmp
wget https://github.com/odoo/odoo/archive/refs/tags/16.0.tar.gz
tar -xzf 16.0.tar.gz
sudo mv odoo-16.0 /opt/odoo/server
sudo chown -R odoo:odoo /opt/odoo/server

Create Python virtual environment:

cd /opt/odoo/server
sudo -u odoo python3 -m venv venv

Activate virtual environment:

sudo -u odoo bash -c "source venv/bin/activate && pip install --upgrade pip setuptools wheel"

Install Odoo requirements:

sudo -u odoo bash -c "source venv/bin/activate && pip install -r requirements.txt"

Create Odoo configuration directory:

sudo mkdir -p /etc/odoo
sudo chown -R odoo:odoo /etc/odoo

Create Odoo configuration file:

sudo nano /etc/odoo/odoo.conf

Add configuration:

[options]
admin_passwd = SecurePassword123!
db_host = localhost
db_port = 5432
db_user = odoo
db_password = False
addons_path = /opt/odoo/server/addons
data_dir = /var/lib/odoo
logfile = /var/log/odoo/odoo-server.log
log_level = info
workers = 4
limit_memory_soft = 2147483648
limit_memory_hard = 2684354560
limit_request = 8192
max_cron_threads = 2

Create log directory:

sudo mkdir -p /var/log/odoo
sudo chown -R odoo:odoo /var/log/odoo
sudo mkdir -p /var/lib/odoo
sudo chown -R odoo:odoo /var/lib/odoo

Nginx Configuration

Install Nginx:

sudo apt install -y nginx

Create Nginx configuration:

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

Add configuration:

upstream odoo {
    server localhost:8069;
}

upstream odoo_websocket {
    server localhost:8072;
}

server {
    listen 80;
    listen [::]:80;
    server_name odoo.example.com;
    return 301 https://$server_name$request_uri;
}

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name odoo.example.com;

    ssl_certificate /etc/letsencrypt/live/odoo.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/odoo.example.com/privkey.pem;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;

    client_max_body_size 100M;

    location / {
        proxy_pass http://odoo;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }

    location /websocket {
        proxy_pass http://odoo_websocket;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}

Enable site:

sudo ln -s /etc/nginx/sites-available/odoo /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl start nginx
sudo systemctl enable nginx

SSL Certificate Setup

Install Certbot:

sudo apt install -y certbot python3-certbot-nginx

Obtain SSL certificate:

sudo certbot certonly --standalone -d odoo.example.com

Verify certificate:

sudo openssl x509 -in /etc/letsencrypt/live/odoo.example.com/fullchain.pem -noout -dates

Production Configuration

Create systemd service:

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

Add:

[Unit]
Description=Odoo
After=postgresql.service

[Service]
Type=simple
User=odoo
Group=odoo
WorkingDirectory=/opt/odoo/server
ExecStart=/opt/odoo/server/venv/bin/python /opt/odoo/server/odoo-bin -c /etc/odoo/odoo.conf
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target

Enable and start Odoo:

sudo systemctl daemon-reload
sudo systemctl enable odoo
sudo systemctl start odoo

Verify service:

sudo systemctl status odoo
sudo journalctl -u odoo -f

Access Odoo web interface:

Navigate to https://odoo.example.com

Module Management

Install additional modules:

sudo -u odoo bash -c "cd /opt/odoo/server && source venv/bin/activate && pip install odoo-bin-addons-account"

Enable modules via web interface:

  1. Login to Odoo
  2. Go to Apps
  3. Search for module name
  4. Click "Install"

Create custom module:

cd /opt/odoo/server/addons
sudo -u odoo mkdir -p custom_module
sudo -u odoo nano custom_module/__manifest__.py

Add module manifest:

{
    'name': 'Custom Module',
    'version': '1.0',
    'depends': ['base'],
    'installable': True,
}

Database Management

Create new Odoo database:

createdb -U odoo -h localhost new_database

Backup Odoo database:

pg_dump -U odoo new_database | gzip > /backups/odoo_database_backup.sql.gz

Restore Odoo database:

gunzip < /backups/odoo_database_backup.sql.gz | psql -U odoo new_database

Backup Strategy

Create backup script:

sudo nano /usr/local/bin/odoo-backup.sh

Add:

#!/bin/bash

BACKUP_DIR="/backups/odoo"
ODOO_DIR="/opt/odoo"
DATE=$(date +%Y%m%d_%H%M%S)

mkdir -p $BACKUP_DIR

# Database backup
pg_dump -U odoo -h localhost odoo | gzip > "$BACKUP_DIR/odoo-db-$DATE.sql.gz"

# Configuration backup
tar -czf "$BACKUP_DIR/odoo-config-$DATE.tar.gz" /etc/odoo

# Files backup
tar -czf "$BACKUP_DIR/odoo-data-$DATE.tar.gz" /var/lib/odoo

# Keep only 30 days
find $BACKUP_DIR -type f -mtime +30 -delete

echo "Backup completed: $DATE"

Make executable:

sudo chmod +x /usr/local/bin/odoo-backup.sh

Schedule daily backups:

sudo crontab -e

Add:

0 2 * * * /usr/local/bin/odoo-backup.sh >> /var/log/odoo-backup.log 2>&1

Conclusion

Odoo ERP is now fully installed and configured as an enterprise resource planning system. With PostgreSQL database, Nginx reverse proxy, SSL encryption, and multi-worker configuration, you have a scalable business management platform. Install industry-specific modules, configure workflows, and integrate with your business processes. Regular backups ensure data protection and business continuity.