Odoo is an open-source, all-in-one business management application that offers tools for CRM, ERP, e-commerce, accounting, and more. Its modular design and extensive customization make it an excellent choice for self-hosting, giving you full control over your data and setup. This guide will walk you through installing, configuring, securing, debugging, backing up, updating, and leveraging Odoo’s unique features in a practical, code-driven manner.
Installing Odoo
📦 Docker/Docker Compose Setup
Using Docker to deploy Odoo ensures portability and ease of management. Below is a docker-compose.yml
file that sets up Odoo with a Postgres database and persistent volumes:
version: '3.7'
services:
odoo:
image: odoo:16
container_name: odoo
depends_on:
- db
ports:
- "8069:8069"
environment:
- HOST=db
- USER=odoo
- PASSWORD=odoo
volumes:
- odoo-data:/var/lib/odoo
- ./config:/etc/odoo
restart: always
db:
image: postgres:13
container_name: odoo-db
environment:
POSTGRES_USER: odoo
POSTGRES_PASSWORD: odoo
POSTGRES_DB: odoo
volumes:
- db-data:/var/lib/postgresql/data
restart: always
volumes:
odoo-data:
db-data:
Run the following commands to deploy Odoo:
mkdir odoo && cd odoo
nano docker-compose.yml # Paste the above YAML configuration
docker-compose up -d # Start Odoo and Postgres
Access Odoo in your browser at http://<server-ip>:8069
.
🚀 Manual Installation
If you prefer manual installation on a Linux server, follow these steps:
- Install Dependencies:
sudo apt update
sudo apt install -y python3 python3-pip python3-dev build-essential \
libxml2-dev libxslt1-dev zlib1g-dev libsasl2-dev \
libldap2-dev libssl-dev libffi-dev libjpeg-dev \
libpq-dev wkhtmltopdf
- Create a System User for Odoo:
sudo adduser --system --home=/opt/odoo --group odoo
- Install PostgreSQL:
sudo apt install -y postgresql
sudo -u postgres createuser -s odoo
- Download and Install Odoo:
git clone https://github.com/odoo/odoo.git --depth=1 --branch=16.0 /opt/odoo
cd /opt/odoo
pip3 install -r requirements.txt
- Start the Odoo Server:
./odoo-bin --addons-path=addons -d odoo -r odoo --logfile=/var/log/odoo.log
Configuring Nginx as a Reverse Proxy
🌐 Nginx Configuration
To serve Odoo via Nginx, create an Nginx server block:
server {
server_name yourdomain.com;
proxy_read_timeout 720s;
proxy_connect_timeout 720s;
proxy_send_timeout 720s;
access_log /var/log/nginx/odoo-access.log;
error_log /var/log/nginx/odoo-error.log;
location / {
proxy_pass http://127.0.0.1:8069;
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 /longpolling/ {
proxy_pass http://127.0.0.1:8072;
}
}
Save this configuration in /etc/nginx/sites-available/odoo
and then enable it:
sudo ln -s /etc/nginx/sites-available/odoo /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx
🔒 SSL/TLS Setup
Secure your site with Let's Encrypt:
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d yourdomain.com
Automate certificate renewal:
sudo crontab -e
0 3 * * * certbot renew --quiet
🛠️ Testing and Reloading Nginx
Test the configuration and reload:
sudo nginx -t
sudo systemctl reload nginx
Logging and Debugging Odoo
🗃️ Enabling Debug Logs
To enable debug logs, modify the Odoo configuration file (odoo.conf
):
[options]
log_level = debug
logfile = /var/log/odoo/odoo.log
Restart the Odoo service:
sudo systemctl restart odoo
📄 Viewing Logs
If using Docker, view logs with:
docker logs odoo
For manual installations, check:
tail -f /var/log/odoo/odoo.log
🛠️ Troubleshooting Common Issues
For database connection errors:
psql -U odoo -h 127.0.0.1 -d odoo
For port conflicts:
sudo netstat -tuln | grep 8069
📤 Exporting Logs
Forward logs to an ELK stack by using Filebeat
or similar tools configured for /var/log/odoo/
.
Backup and Restore
🗂️ File-Based Backups
Backup Odoo files and configurations:
tar -czvf odoo-backup.tar.gz /opt/odoo /etc/odoo
🔄 Database Backups
Export the database:
pg_dump -U odoo -h localhost odoo > odoo-db-backup.sql
Restore the database:
psql -U odoo -h localhost -d odoo < odoo-db-backup.sql
📅 Automated Backup Scripts
Set up a cron job:
crontab -e
## Add the following line:
0 2 * * * tar -czvf /backups/odoo-backup-$(date +\%F).tar.gz /opt/odoo /etc/odoo && \
pg_dump -U odoo -h localhost odoo > /backups/odoo-db-backup-$(date +\%F).sql
Updating and Upgrading Odoo
⬆️ Updating Docker Images
Update Docker images:
docker-compose pull
docker-compose up -d
🛠️ Manual Updates
Pull the latest code and restart:
cd /opt/odoo
git pull origin 16.0
pip3 install -r requirements.txt
./odoo-bin --addons-path=addons -d odoo -r odoo --logfile=/var/log/odoo.log
🔍 Checking for Updates
Check the Odoo repository for new releases:
git fetch --tags
git describe --tags
Leveraging Odoo’s Unique Features
🔧 Enabling APIs
Enable Odoo’s API by modifying odoo.conf
:
[options]
xmlrpc = True
xmlrpc_port = 8069
jsonrpc = True
Access data via Python:
import xmlrpc.client
url = "http://yourdomain.com"
db = "odoo"
username = "admin"
password = "admin"
common = xmlrpc.client.ServerProxy(f"{url}/xmlrpc/2/common")
uid = common.authenticate(db, username, password, {})
models = xmlrpc.client.ServerProxy(f"{url}/xmlrpc/2/object")
records = models.execute_kw(db, uid, password, 'res.partner', 'search_read', [[]])
print(records)
🌟 Advanced Configurations
Add custom modules:
mkdir /opt/odoo/custom-modules
## Add 'addons_path' in odoo.conf:
[options]
addons_path = /opt/odoo/addons,/opt/odoo/custom-modules
Restart Odoo to load custom modules:
sudo systemctl restart odoo
Wrapping Up
This guide provided a complete walkthrough for deploying, configuring, securing, and managing Odoo. With these steps, you can harness the flexibility of Odoo while maintaining total control over the hosting environment. Begin customizing and optimizing Odoo to best suit your business needs, leveraging its robust features and open-source power!