ASSISTANT

Here is a complete, production-ready guide to configure Odoo 13 with Python 3.6.8 as a systemd service on Ubuntu.


📋 Prerequisites

# Update system packages
sudo apt update && sudo apt upgrade -y

# Install Python 3.6 and dependencies
sudo apt install -y python3.6 python3.6-venv python3.6-dev
sudo apt install -y git wget build-essential libxml2-dev libxslt1-dev libjpeg-dev 
sudo apt install -y libpq-dev libldap2-dev libsasl2-dev libffi-dev libssl-dev
sudo apt install -y nodejs less ruby-sass zlib1g-dev

# Install PostgreSQL (if not already installed)
sudo apt install -y postgresql postgresql-client

📁 Step 1: Create Odoo User and Directories

# Create dedicated Odoo user
sudo useradd -m -d /opt/odoo13 -U -r -s /bin/bash odoo

# Create directory structure
sudo mkdir -p /opt/odoo13/odoo13-venv
sudo mkdir -p /opt/odoo13/odoo
sudo mkdir -p /opt/odoo13/odoo/addons_custom
sudo mkdir -p /var/log/odoo
sudo mkdir -p /etc/odoo

# Set ownership
sudo chown -R odoo:odoo /opt/odoo13
sudo chown -R odoo:odoo /var/log/odoo
sudo chown -R odoo:odoo /etc/odoo

🐍 Step 2: Create Virtual Environment with Python 3.6.8

# Verify Python 3.6.8 is available
python3.6 --version

# Create virtual environment AS THE ODOO USER
sudo -u odoo python3.6 -m venv /opt/odoo13/odoo13-venv

# Activate the virtual environment
sudo -u odoo /opt/odoo13/odoo13-venv/bin/pip install --upgrade pip

📦 Step 3: Install Odoo and Python Dependencies

# Clone Odoo 13 (or copy your existing code)
sudo -u odoo git clone https://github.com/odoo/odoo.git --depth 1 --branch 13.0 /opt/odoo13/odoo

# Install Python requirements AS THE ODOO USER
sudo -u odoo /opt/odoo13/odoo13-venv/bin/pip install --no-cache-dir \
    -r /opt/odoo13/odoo/requirements.txt

# Install additional dependencies that often cause issues
sudo -u odoo /opt/odoo13/odoo13-venv/bin/pip install --no-cache-dir \
    passlib werkzeug jinja2 lxml psycopg2-binary requests

⚙️ Step 4: Create Odoo Configuration File

sudo nano /etc/odoo/odoo13.conf

Paste this configuration:

[options]
admin_passwd = your_strong_admin_password
db_host = localhost
db_port = 5432
db_user = odoo13
db_password = your_db_password
db_name = False
data_dir = /opt/odoo13/.local/share/Odoo
addons_path = /opt/odoo13/odoo/addons,/opt/odoo13/odoo/addons_custom
logfile = /var/log/odoo/odoo13.log
log_level = info
xmlrpc_port = 8069
workers = 2
max_cron_threads = 1
limit_time_cpu = 60
limit_time_real = 120

Set permissions:

sudo chown odoo:odoo /etc/odoo/odoo13.conf
sudo chmod 640 /etc/odoo/odoo13.conf

🛠️ Step 5: Create Systemd Service File

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

Paste this service configuration:

[Unit]
Description=Odoo13
Documentation=https://www.odoo.com
After=network.target postgresql.service

[Service]
Type=simple
User=odoo
Group=odoo
UMask=007

# Virtual Environment Python
ExecStart=/opt/odoo13/odoo13-venv/bin/python3 /opt/odoo13/odoo/odoo-bin -c /etc/odoo/odoo13.conf

# Restart policy
Restart=on-failure
RestartSec=10

# Security hardening
NoNewPrivileges=true
PrivateTmp=true

# Logging
StandardOutput=journal
StandardError=journal
SyslogIdentifier=odoo13

[Install]
WantedBy=multi-user.target

🚀 Step 6: Enable and Start the Service

# Reload systemd to recognize the new service
sudo systemctl daemon-reload

# Enable Odoo to start on boot
sudo systemctl enable odoo13

# Start Odoo service
sudo systemctl start odoo13

# Check status
sudo systemctl status odoo13

# View logs
sudo journalctl -u odoo13 -f

🔐 Step 7: Setup PostgreSQL Database

# Create database user
sudo -u postgres createuser -s odoo13

# Set password (optional but recommended)
sudo -u postgres psql -c "ALTER USER odoo13 WITH PASSWORD 'your_db_password';"

✅ Step 8: Verification Checklist

# 1. Check service status
sudo systemctl is-active odoo13

# 2. Check Python version in venv
/opt/odoo13/odoo13-venv/bin/python3 --version
# Should show: Python 3.6.8

# 3. Verify passlib is installed
sudo -u odoo /opt/odoo13/odoo13-venv/bin/python3 -c "import passlib; print(passlib.__version__)"

# 4. Check if Odoo is listening on port 8069
sudo netstat -tlnp | grep 8069

# 5. Check logs for errors
sudo tail -f /var/log/odoo/odoo13.log

🔧 Common Management Commands

ActionCommand
Start Odoosudo systemctl start odoo13
Stop Odoosudo systemctl stop odoo13
Restart Odoosudo systemctl restart odoo13
Check Statussudo systemctl status odoo13
View Logssudo journalctl -u odoo13 -f
Enable on Bootsudo systemctl enable odoo13
Disable on Bootsudo systemctl disable odoo13
Reload Configsudo systemctl daemon-reload

⚠️ Troubleshooting Tips

1. Service Won’t Start

# Check detailed error
sudo journalctl -u odoo13 -n 50 --no-pager

# Test manually as odoo user
sudo -u odoo /opt/odoo13/odoo13-venv/bin/python3 /opt/odoo13/odoo/odoo-bin -c /etc/odoo/odoo13.conf

2. Module Not Found Errors

# Reinstall requirements as odoo user
sudo -u odoo /opt/odoo13/odoo13-venv/bin/pip install -r /opt/odoo13/odoo/requirements.txt

3. Permission Issues

# Fix ownership
sudo chown -R odoo:odoo /opt/odoo13
sudo chown -R odoo:odoo /var/log/odoo
sudo chown -R odoo:odoo /etc/odoo

4. Port Already in Use

# Find what's using port 8069
sudo lsof -i :8069

# Kill the process if needed
sudo kill -9 <PID>

📊 Service File Location Reference

FilePurpose
/etc/systemd/system/odoo13.serviceSystemd service definition
/etc/odoo/odoo13.confOdoo configuration
/var/log/odoo/odoo13.logOdoo log file
/opt/odoo13/odoo13-venv/Python virtual environment
/opt/odoo13/odoo/Odoo source code

✅ Final Verification

After setup, access Odoo in your browser:

http://your-server-ip:8069

You should see the Odoo database creation page.


This setup ensures Odoo runs as a proper system service with:

  • ✅ Dedicated user (security)
  • ✅ Virtual environment (dependency isolation)
  • ✅ Automatic restart on failure
  • ✅ Proper logging
  • ✅ Starts on boot