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
- System Requirements
- Python Installation
- PostgreSQL Setup
- Odoo Installation
- Nginx Configuration
- SSL Certificate Setup
- Production Configuration
- Module Management
- Database Management
- Backup Strategy
- Conclusion
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:
- Login to Odoo
- Go to Apps
- Search for module name
- 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.


