Deploy Odoo:
From starting
To running
Keep it
stupid simple
Keep it
safe & secure
$ ./odoo-bin
1970-01-01 12:03:09,720 5367 INFO ? odoo: Odoo version 14.0
1970-01-01 12:03:09,720 5367 INFO ? odoo: addons paths: ['/opt/odoo/odoo/addons',
'/home/nse/.local/share/Odoo/addons/14.0', '/opt/odoo/addons']
addons
$ ./odoo-bin --addons-path=./odoo/addons,addons,../enterprise
1970-01-01 12:03:09,720 5367 INFO ? odoo: Odoo version 14.0
1970-01-01 12:03:09,720 5367 INFO ? odoo: addons paths: ['/opt/odoo/odoo/addons',
'/home/nse/.local/share/Odoo/addons/14.0', '/opt/odoo/addons', ‘/opt/enterprise]
$ ./odoo-bin --workers 4 --max-cron-threads 2
1970-01-01 12:03:09,720 5367 INFO ? odoo: Odoo version 14.0
1970-01-01 12:03:09,720 5367 INFO ? odoo: addons paths: ['/opt/odoo/odoo/addons',
'/home/nse/.local/share/Odoo/addons/14.0', '/opt/odoo/addons']
1970-01-01 12:03:47,795 19938 INFO ? odoo.service.server: HTTP service (werkzeug) running
on 0.0.0.0:8069
1970-01-01 12:03:47,797 19943 INFO ? odoo.service.server: Worker WorkerHTTP (19943) alive
1970-01-01 12:03:47,797 19944 INFO ? odoo.service.server: Worker WorkerHTTP (19944) alive
1970-01-01 12:03:47,798 19945 INFO ? odoo.service.server: Worker WorkerHTTP (19945) alive
1970-01-01 12:03:47,799 19947 INFO ? odoo.service.server: Worker WorkerHTTP (19947) alive
1970-01-01 12:03:47,803 19957 INFO ? odoo.service.server: Worker WorkerCron (19957) alive
1970-01-01 12:03:47,804 19959 INFO ? odoo.service.server: Worker WorkerCron (19959) alive
1970-01-01 12:03:47,842 23469 INFO ? odoo.service.server: Evented Service (longpolling)
running on 0.0.0.0:8072
Workers
bus.bus exception
● Web server in reverse proxy mode
to split requests between 8069 &
8072
● Will also handle https
● proxy_mode in odoo
● Odoo only listens 127.0.0.1
odoo-bin --http-interface=127.0.0.1
--http-port=8069
--longpolling-port=8072
--proxy-mode
Nginx config samples on odoo.com/documentation
odoo.http: Exception during JSON request handling.
[...]
raise exception.with_traceback(None) from new_cause
Exception: bus.Bus unavailable
1970-01-01 13:08:00,791 12131 ERROR 14-demo
odoo.service.server: Worker (12131) Exception occured,
exiting...
[...]
Exception: CPU time limit exceeded.
Recycling workers
--limit-memory-soft
--limit-memory-hard
--limit-time-cpu
--limit-time-real
--limit-time-real-cron
--limit-request
1970-01-01 13:13:41,133 16135 INFO 14-demo
odoo.service.server: Worker (16135) max request (8192)
reached.
1970-01-01 13:13:45,135 16135 INFO 14-demo
odoo.service.server: Worker (16135) exiting. request_count:
8192, registry count: 1.
1970-01-01 13:13:45,252 16185 INFO 14-demo
odoo.service.server: Worker WorkerHTTP (16185) alive
PostgreSQL
● Stock PostgreSQL
● apt.postgresql.org
● pgtune.leopard.in.ua/
● pg_hba.conf
Connect PG using lan
# CREATE USER odoo WITH LOGIN CREATEDB;
--db_user
--db_password
--db_host
--db_port
--db_sslmode
--db_maxconn
● Use unix socket out of the box
● Secure connections
● PostgreSQL user ! superuser
● db_maxconn is a “per worker”
limit
Which database
--database
--db-filter
--no-database-list
--unaccent
● Required by website
● Some security reasons
● Require some PostgreSQL
extension
Sending mails
--email-from
--smtp
--smtp-port
--smtp-ssl
--smtp-user
--smtp-password
Only default
values
Logging
--log-level
--log_handler
--logfile
--syslog
--log-db
--log-db-level
Avoid debug
in prod
Share filestore
using NFS
./odoo-bin --data_dir=/datas/
Share code
between servers
or face issues
Load balance
requests to Odoo
Other useful options
--save
--config
--without-demo=ALL
--transient-age-limit
--osv-memory-count-limit
● Use a config file
● Don’t use demo in
production
● Cleanup wizard records
Thank You

Deploying & Scaling your Odoo Server

  • 2.
  • 3.
  • 4.
  • 5.
    $ ./odoo-bin 1970-01-01 12:03:09,7205367 INFO ? odoo: Odoo version 14.0 1970-01-01 12:03:09,720 5367 INFO ? odoo: addons paths: ['/opt/odoo/odoo/addons', '/home/nse/.local/share/Odoo/addons/14.0', '/opt/odoo/addons'] addons $ ./odoo-bin --addons-path=./odoo/addons,addons,../enterprise 1970-01-01 12:03:09,720 5367 INFO ? odoo: Odoo version 14.0 1970-01-01 12:03:09,720 5367 INFO ? odoo: addons paths: ['/opt/odoo/odoo/addons', '/home/nse/.local/share/Odoo/addons/14.0', '/opt/odoo/addons', ‘/opt/enterprise]
  • 6.
    $ ./odoo-bin --workers4 --max-cron-threads 2 1970-01-01 12:03:09,720 5367 INFO ? odoo: Odoo version 14.0 1970-01-01 12:03:09,720 5367 INFO ? odoo: addons paths: ['/opt/odoo/odoo/addons', '/home/nse/.local/share/Odoo/addons/14.0', '/opt/odoo/addons'] 1970-01-01 12:03:47,795 19938 INFO ? odoo.service.server: HTTP service (werkzeug) running on 0.0.0.0:8069 1970-01-01 12:03:47,797 19943 INFO ? odoo.service.server: Worker WorkerHTTP (19943) alive 1970-01-01 12:03:47,797 19944 INFO ? odoo.service.server: Worker WorkerHTTP (19944) alive 1970-01-01 12:03:47,798 19945 INFO ? odoo.service.server: Worker WorkerHTTP (19945) alive 1970-01-01 12:03:47,799 19947 INFO ? odoo.service.server: Worker WorkerHTTP (19947) alive 1970-01-01 12:03:47,803 19957 INFO ? odoo.service.server: Worker WorkerCron (19957) alive 1970-01-01 12:03:47,804 19959 INFO ? odoo.service.server: Worker WorkerCron (19959) alive 1970-01-01 12:03:47,842 23469 INFO ? odoo.service.server: Evented Service (longpolling) running on 0.0.0.0:8072 Workers
  • 7.
    bus.bus exception ● Webserver in reverse proxy mode to split requests between 8069 & 8072 ● Will also handle https ● proxy_mode in odoo ● Odoo only listens 127.0.0.1 odoo-bin --http-interface=127.0.0.1 --http-port=8069 --longpolling-port=8072 --proxy-mode Nginx config samples on odoo.com/documentation odoo.http: Exception during JSON request handling. [...] raise exception.with_traceback(None) from new_cause Exception: bus.Bus unavailable
  • 8.
    1970-01-01 13:08:00,791 12131ERROR 14-demo odoo.service.server: Worker (12131) Exception occured, exiting... [...] Exception: CPU time limit exceeded. Recycling workers --limit-memory-soft --limit-memory-hard --limit-time-cpu --limit-time-real --limit-time-real-cron --limit-request 1970-01-01 13:13:41,133 16135 INFO 14-demo odoo.service.server: Worker (16135) max request (8192) reached. 1970-01-01 13:13:45,135 16135 INFO 14-demo odoo.service.server: Worker (16135) exiting. request_count: 8192, registry count: 1. 1970-01-01 13:13:45,252 16185 INFO 14-demo odoo.service.server: Worker WorkerHTTP (16185) alive
  • 9.
    PostgreSQL ● Stock PostgreSQL ●apt.postgresql.org ● pgtune.leopard.in.ua/ ● pg_hba.conf
  • 11.
    Connect PG usinglan # CREATE USER odoo WITH LOGIN CREATEDB; --db_user --db_password --db_host --db_port --db_sslmode --db_maxconn ● Use unix socket out of the box ● Secure connections ● PostgreSQL user ! superuser ● db_maxconn is a “per worker” limit
  • 12.
    Which database --database --db-filter --no-database-list --unaccent ● Requiredby website ● Some security reasons ● Require some PostgreSQL extension
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
    Other useful options --save --config --without-demo=ALL --transient-age-limit --osv-memory-count-limit ●Use a config file ● Don’t use demo in production ● Cleanup wizard records
  • 19.

Editor's Notes

  • #2 Odoo logo centered w/ tagline
  • #6 Basic start of odoo with command line
  • #7 Odoo without workers can only use 1 CPU at a time. Not efficient Workers are process (instead of threads in the other mode) and thus can use as many CPU as you want
  • #8 A web server deserves more than what odoo basically needs
  • #9 Using workers means configuring
  • #13 Odoo multi tenant End user choose db when landing on website???
  • #15 critical, error, warn, debug, debug_sql, debug_rpc, debug_rpc_answer as log_level log_handler = openerp.sql_db:DEBUG,werkzeug:DEBUG,openerp.fields:WARNING,openerp.http.rpc.request:DEBUG,:WARNING