Odoo Deployment and Usage Guide
1. Prerequisites
System Requirements
- Python: 3.10 or higher (3.10-3.12 recommended for Odoo 17.0/18.0)
- PostgreSQL: 12.0 or higher
- Node.js: 16.x or higher (for asset compilation)
- Operating System: Linux (Ubuntu 22.04/24.04 recommended), Windows 10/11, or macOS
- RAM: Minimum 2GB RAM (4GB+ recommended for production)
Required System Packages
Ubuntu/Debian:
sudo apt update
sudo apt install git python3-pip python3-dev python3-venv libxml2-dev libxslt1-dev \
libevent-dev libsasl2-dev libldap2-dev libpq-dev libpng-dev libjpeg-dev node-less \
xfonts-75dpi xfonts-base wget gcc g++ make
macOS (with Homebrew):
brew install postgresql node git python3 freetype jpeg libpng libxml2 libxslt
Additional Dependencies
- wkhtmltopdf (required for PDF reports):
# Ubuntu 22.04/24.04
wget https://github.com/wkhtmltopdf/packaging/releases/download/0.12.6.1-3/wkhtmltopdf_0.12.6.1-3.jammy_amd64.deb
sudo dpkg -i wkhtmltopdf_0.12.6.1-3.jammy_amd64.deb
# macOS
brew install --cask wkhtmltopdf
2. Installation
Step 1: Clone the Repository
git clone https://github.com/odoo/odoo.git --depth 1 --branch 17.0
cd odoo
Step 2: Create Python Virtual Environment
python3 -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
Step 3: Install Python Dependencies
pip install --upgrade pip
pip install -r requirements.txt
Note: If you encounter psycopg2 build errors, install the binary version:
pip install psycopg2-binary
Step 4: Install Node.js Dependencies (for frontend assets)
npm install -g rtlcss
Step 5: Database Setup
Create a PostgreSQL user for Odoo:
sudo -u postgres createuser -s $USER
# Or create specific odoo user:
sudo -u postgres createuser --createdb --username postgres --no-createrole --no-superuser --pwprompt odoo
3. Configuration
Configuration File (odoo.conf)
Create a configuration file in the project root:
[options]
; Database settings
db_host = localhost
db_port = 5432
db_user = odoo
db_password = your_secure_password
db_name = False
; Paths
addons_path = /path/to/odoo/addons
data_dir = /var/lib/odoo
; Server settings
http_port = 8069
longpolling_port = 8072
proxy_mode = False
; Security
admin_passwd = admin_master_password_change_this
csv_internal_sep = ,
db_maxconn = 64
db_template = template0
dbfilter = .*
; Logging
logfile = /var/log/odoo/odoo.log
log_level = info
logrotate = True
; Performance
workers = 0 ; Set to 0 for development, (2 * CPU cores + 1) for production
max_cron_threads = 2
limit_memory_hard = 2684354560
limit_memory_soft = 2147483648
limit_request = 8192
limit_time_cpu = 60
limit_time_real = 120
Environment Variables
Alternatively, use environment variables:
export ODOO_RC=/path/to/odoo.conf
export PGHOST=localhost
export PGUSER=odoo
export PGPASSWORD=your_secure_password
4. Build & Run
Development Mode
Initialize a new database and start the server:
./odoo-bin -c odoo.conf -d odoo_dev_db --init base --dev=all --stop-after-init
Start the development server:
./odoo-bin -c odoo.conf -d odoo_dev_db --dev=all
Key development flags:
--dev=all: Enables auto-reload, XML RPC debugging, and asset debugging--save: Saves configuration to the config file--update=all: Updates all modules (use after pulling code changes)
Production Mode
./odoo-bin -c odoo.conf --workers=4 --no-database-list --log-level=warn
Production checklist:
- Set
workers > 0(typically 2-8 depending on CPU cores) - Set
proxy_mode = Truewhen behind Nginx/Apache - Change
admin_passwdfrom default 'admin' - Disable database listing:
--no-database-listorlist_db = Falsein config
Database Management
Create database via CLI:
./odoo-bin -d production_db --init base --stop-after-init
Update modules:
./odoo-bin -d production_db --update all --stop-after-init
5. Deployment
Docker Deployment (Recommended)
# docker-compose.yml
version: '3.1'
services:
web:
image: odoo:17.0
depends_on:
- db
ports:
- "8069:8069"
environment:
- HOST=db
- USER=odoo
- PASSWORD=myodoo
volumes:
- odoo-web-data:/var/lib/odoo
- ./config:/etc/odoo
- ./addons:/mnt/extra-addons
db:
image: postgres:15
environment:
- POSTGRES_DB=postgres
- POSTGRES_PASSWORD=myodoo
- POSTGRES_USER=odoo
- PGDATA=/var/lib/postgresql/data/pgdata
volumes:
- odoo-db-data:/var/lib/postgresql/data/pgdata
volumes:
odoo-web-data:
odoo-db-data:
Systemd Service (Linux)
Create /etc/systemd/system/odoo.service:
[Unit]
Description=Odoo
Documentation=http://www.odoo.com
After=network.target postgresql.service
[Service]
Type=simple
User=odoo
Group=odoo
ExecStart=/opt/odoo/odoo/odoo-bin -c /etc/odoo/odoo.conf
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
Enable and start:
sudo systemctl daemon-reload
sudo systemctl enable odoo
sudo systemctl start odoo
Reverse Proxy (Nginx)
upstream odoo {
server 127.0.0.1:8069;
}
upstream odoochat {
server 127.0.0.1:8072;
}
server {
listen 80;
server_name odoo.example.com;
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;
proxy_redirect off;
}
location /longpolling {
proxy_pass http://odoochat;
}
location ~* /web/static/ {
proxy_cache_valid 200 90m;
proxy_buffering on;
expires 864000;
proxy_pass http://odoo;
}
# Enable Gzip
gzip_types text/css text/less text/plain text/xml application/xml application/json application/javascript;
gzip on;
}
Cloud Platforms
- Odoo.sh: Official Odoo PaaS with GitHub integration
- AWS/Azure/GCP: Use with RDS PostgreSQL and EC2/VM instances (t3.medium minimum recommended)
- Kubernetes: Use official Helm charts available at
helm/odoo
6. Troubleshooting
Database Connection Errors
Issue: FATAL: role "odoo" does not exist
# Solution: Create PostgreSQL user
sudo -u postgres createuser -s odoo
# Or set correct permissions:
sudo -u postgres psql -c "ALTER USER odoo WITH PASSWORD 'newpassword';"
Port Already in Use
Issue: OSError: [Errno 98] Address already in use
# Find and kill process using port 8069
sudo lsof -i :8069
sudo kill -9 <PID>
# Or start Odoo on different port
./odoo-bin --http-port=8070
Permission Denied on Filestore
Issue: PermissionError: [Errno 13] Permission denied: '/var/lib/odoo'
sudo mkdir -p /var/lib/odoo
sudo chown -R $(whoami):$(whoami) /var/lib/odoo
Assets Not Loading (CSS/JS)
Solution: Restart with asset regeneration:
./odoo-bin -d your_database --dev=all --stop-after-init
# Or update base module
./odoo-bin -d your_database -u base --stop-after-init
Memory Issues (Worker Timeout)
Issue: Worker (pid:XXXX) exceeded memory limit
- Increase
limit_memory_hardandlimit_memory_softin config - Reduce
workerscount if RAM is insufficient - Add swap space:
sudo fallocate -l 4G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
PDF Generation Issues
Issue: Unable to find Wkhtmltopdf on this system
- Ensure wkhtmltopdf is installed (not just the wrapper)
- Check version matches system architecture (amd64 vs arm64)
- Verify
web.base.urlsystem parameter is set correctly in Odoo
Module Installation Errors
Issue: ImportError: No module named 'xyz'
# Install missing Python package
pip install <module_name>
# If package is in requirements.txt but failed, install manually:
pip install --ignore-installed -r requirements.txt