Odoo Hosting Reference Guide

As part of your hosting environment with Hosted Power, your Odoo application is managed via a systemd service under your Linux user account. This gives us robust process management, automatic restarts, and easy logging—without requiring containerization or root-level access.

This guide will walk you through the key components of the Odoo service setup, application file structure, and performance tuning.


Systemd Service Overview

We use a systemd user-level service to manage and monitor your Odoo application. The service configuration is stored at:

~/.config/systemd/user/application.service

Example systemd service file:

[Unit]
Description=Odoo application (main) for %u
Wants=network-online.target
After=network-online.target
Requires=dbus.socket
StartLimitIntervalSec=0

[Service]
LimitNOFILE=819200
LimitNPROC=819200
LimitMEMLOCK=infinity

TimeoutStartSec=900
Type=simple
WorkingDirectory=%h/application/odoo
EnvironmentFile=%h/conf/.env

ExecStart=%h/.pyenv/shims/python %h/application/odoo/odoo-bin -c %h/conf/odoo.conf
ExecStop=/bin/kill -s TERM $MAINPID
Restart=on-failure
RestartSec=10s
KillSignal=SIGQUIT
StandardOutput=append:%h/logs/odoo.log

[Install]
WantedBy=default.target

File structure

The service assumes the following directory layout under your home directory:

Path Purpose
~/application/odoo Odoo source code and your working directory
~/conf/odoo.conf Main Odoo configuration file
~/conf/.env Environment variables loaded into systemd
~/logs/odoo.log Application logs (append-only)

Custom modules

To add custom modules, place them in:

~/application/odoo/addons

You can also create symbolic links inside the addons directory to keep your structure modular.

Odoo.conf tuning

You can find your configuration at:

~/conf/odoo.conf

Configuration key reference:

Key Description
workers Set to 2×CPU by default. On high-demand systems, 3–4×CPU may be used.
limit_memory_hard Upper memory cap per worker. Set around ½ total RAM.
limit_memory_soft Warning memory cap per worker. Set around ¼ total RAM.
limit_request Number of requests a worker handles before restarting. Default 8192 is fine for most.
limit_time_cpu Max CPU time per request. 3600 (1 hour) ensures long operations are still capped.
limit_time_real Wall-clock time per request. 7200 (2 hours) is generous and rarely hit.
limit_time_real_cron Time limit for cron jobs. 0 means unlimited. Can be set to 86400 (24h).
max_cron_threads Limit to about ⅓ of CPU cores, up to ½ in large setups.
proxy_mode Always set True if behind a reverse proxy (e.g. nginx, traefik).
db_maxconn Leave at default (64). Our PostgreSQL is tuned for high concurrency.

Here are some general tuning recommendations for various server sizes:

8 GB RAM / 4 CPU Cores:

workers = 8
limit_memory_hard = 4294967296        ; 4 GB
limit_memory_soft = 2147483648        ; 2 GB
limit_request = 8192
limit_time_cpu = 3600
limit_time_real = 7200
limit_time_real_cron = 0
max_cron_threads = 2
proxy_mode = True

48 GB RAM / 12 CPU Cores

workers = 36
limit_memory_hard = 6442450944        ; 6 GB
limit_memory_soft = 4294967296        ; 4 GB
limit_request = 8192
limit_time_cpu = 3600
limit_time_real = 7200
limit_time_real_cron = 0
max_cron_threads = 4
proxy_mode = True

Logs

Odoo logs are continuously appended to:

~/logs

Monitor this file to troubleshoot startup or runtime issues.

Best practices

  • Keep your application/odoo directory clean and structured.
  • Use symbolic links for large or custom addon libraries.
  • Don’t over-allocate memory or workers unless necessary—we monitor and optimize for you.
  • Always keep your .env and odoo.conf safe and backed up.

Need help?

Contact our support if you're unsure about config tuning, migration, or if you experience performance bottlenecks. We’re here to assist with your Odoo stack.