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
| Action | Command |
|---|---|
| Start Odoo | sudo systemctl start odoo13 |
| Stop Odoo | sudo systemctl stop odoo13 |
| Restart Odoo | sudo systemctl restart odoo13 |
| Check Status | sudo systemctl status odoo13 |
| View Logs | sudo journalctl -u odoo13 -f |
| Enable on Boot | sudo systemctl enable odoo13 |
| Disable on Boot | sudo systemctl disable odoo13 |
| Reload Config | sudo 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
| File | Purpose |
|---|---|
/etc/systemd/system/odoo13.service | Systemd service definition |
/etc/odoo/odoo13.conf | Odoo configuration |
/var/log/odoo/odoo13.log | Odoo 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