Odoo is the most popular open-source ERP platform, with over 12 million users worldwide. Its modular architecture lets organizations start with basic CRM and accounting, then expand to manufacturing, inventory, HR, e-commerce, and more. This guide covers the technical aspects of implementing Odoo for manufacturing and retail businesses.
Why Odoo for SMBs?
Traditional ERPs like SAP and Oracle EBS require massive upfront investment and multi-year implementation timelines. Odoo offers enterprise-grade functionality at a fraction of the cost:
- Open-source core: Community edition is free. Enterprise edition starts at $7.25/user/month.
- Modular design: Install only the modules you need. No bloat.
- Python-based: Easy to customize with standard Python development skills.
- 30,000+ apps: Community-built modules for virtually every business need.
Architecture Overview
Odoo uses a three-tier architecture:
┌─────────────────────────────────────────┐
│ Web Browser / Mobile App │ ← Presentation Layer
├─────────────────────────────────────────┤
│ Odoo Server (Python / Werkzeug) │ ← Application Layer
│ - ORM (Object-Relational Mapping) │
│ - Workflow Engine │
│ - Report Engine (QWeb) │
│ - API (XML-RPC / JSON-RPC) │
├─────────────────────────────────────────┤
│ PostgreSQL Database │ ← Data Layer
└─────────────────────────────────────────┘
Module Selection for Manufacturing
| Module | Purpose | Key Features |
|---|---|---|
| Manufacturing (mrp) | Production management | Bill of Materials, work orders, routing, quality checks |
| Inventory (stock) | Warehouse management | Multi-warehouse, barcode scanning, lot tracking, serial numbers |
| Purchase (purchase) | Procurement | RFQs, vendor management, purchase agreements, reordering rules |
| Quality (quality_control) | QC workflows | Quality checks, control points, alerts, statistical process control |
| Maintenance (maintenance) | Equipment management | Preventive maintenance schedules, equipment tracking, MTBF/MTTR |
| PLM (mrp_plm) | Product lifecycle | Engineering change orders, version control, BOM revisions |
Module Selection for Retail
| Module | Purpose | Key Features |
|---|---|---|
| Point of Sale (point_of_sale) | In-store sales | Offline mode, barcode/QR, multiple payment methods, loyalty programs |
| eCommerce (website_sale) | Online store | Product catalog, cart, checkout, payment gateways, SEO |
| Inventory (stock) | Stock management | Real-time stock across locations, automatic reordering |
| Accounting (account) | Financial management | GST compliance, multi-currency, bank reconciliation |
| CRM (crm) | Customer management | Lead scoring, pipeline management, email marketing integration |
Installation and Setup
Docker-Based Deployment (Recommended)
# docker-compose.yml
version: '3.8'
services:
odoo:
image: odoo:17.0
ports:
- "8069:8069"
volumes:
- odoo-data:/var/lib/odoo
- ./custom-addons:/mnt/extra-addons
environment:
- HOST=db
- USER=odoo
- PASSWORD=secure_password_here
depends_on:
- db
db:
image: postgres:16
volumes:
- postgres-data:/var/lib/postgresql/data
environment:
- POSTGRES_DB=postgres
- POSTGRES_USER=odoo
- POSTGRES_PASSWORD=secure_password_here
- PGDATA=/var/lib/postgresql/data/pgdata
volumes:
odoo-data:
postgres-data:
Performance Configuration
# odoo.conf
[options]
db_host = db
db_port = 5432
db_user = odoo
db_password = secure_password_here
addons_path = /mnt/extra-addons,/usr/lib/python3/dist-packages/odoo/addons
# Performance tuning
workers = 4 # CPU cores - 1
max_cron_threads = 2
limit_memory_hard = 2684354560 # 2.5GB per worker
limit_memory_soft = 2147483648 # 2GB soft limit
limit_time_cpu = 600
limit_time_real = 1200
# Proxy mode (behind Nginx)
proxy_mode = True
Nginx Reverse Proxy
# /etc/nginx/sites-available/odoo
upstream odoo {
server 127.0.0.1:8069;
}
upstream odoo-chat {
server 127.0.0.1:8072;
}
server {
listen 443 ssl http2;
server_name erp.example.com;
ssl_certificate /etc/letsencrypt/live/erp.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/erp.example.com/privkey.pem;
proxy_buffers 16 64k;
proxy_buffer_size 128k;
location / {
proxy_pass http://odoo;
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 /longpolling {
proxy_pass http://odoo-chat;
}
client_max_body_size 200m;
}
Custom Module Development
# custom-addons/custom_manufacturing/models/production_order.py
from odoo import models, fields, api
class ProductionOrderExtension(models.Model):
_inherit = 'mrp.production'
priority_level = fields.Selection([
('normal', 'Normal'),
('urgent', 'Urgent'),
('critical', 'Critical')
], default='normal', string='Priority Level')
estimated_completion = fields.Datetime(
compute='_compute_estimated_completion',
string='Estimated Completion'
)
@api.depends('date_start', 'product_qty')
def _compute_estimated_completion(self):
for record in self:
if record.date_start:
hours = record.product_qty * 0.5 # 30 min per unit
record.estimated_completion = record.date_start + timedelta(hours=hours)
Integration with External Systems
Odoo provides XML-RPC and JSON-RPC APIs for integration:
# Python client example
import xmlrpc.client
url = 'https://erp.example.com'
db = 'production'
uid = xmlrpc.client.ServerProxy(f'{url}/xmlrpc/2/common').authenticate(
db, 'admin@example.com', 'password', {}
)
models = xmlrpc.client.ServerProxy(f'{url}/xmlrpc/2/object')
# Create a sales order
order_id = models.execute_kw(db, uid, 'password', 'sale.order', 'create', [{
'partner_id': 42,
'order_line': [(0, 0, {
'product_id': 101,
'product_uom_qty': 5,
'price_unit': 1500.00,
})]
}])
Deploy Odoo With Expert Support
At PCCVDI Solutions, we specialize in Odoo ERP deployment, customization, and ongoing support for manufacturing and retail businesses across India. From initial module selection to custom development and integration with existing systems, our team ensures your ERP implementation delivers measurable ROI. Contact us for a free Odoo consultation.
