1.Dbfilter配置
Odoo是一個多租戶系統:一個Odoo系統可以運作并服務于多個資料庫執行個體。它也是高度可定制的,定制(從加載的子產品開始)取決于“目前資料庫”。 作為登入公司使用者使用後端(web用戶端)時,這不是問題:登入時可以選擇資料庫,然後加載自定義設定。 但是,對于沒有綁定到資料庫的未登入使用者(門戶、網站)來說,這是一個問題:Odoo需要知道應該使用哪個資料庫來加載網站頁面或執行操作。如果沒有使用多租戶,這不是問題,隻有一個資料庫可以使用,但是如果有多個資料庫可以通路,Odoo需要一個規則來知道它應該使用哪一個。 這是--db filter的目的之一:它指定如何根據所請求的主機名(域)選擇資料庫。該值是一個正規表達式,可能包括動态注入的主機名(%h)或通路系統所通過的第一個子域(%d)。 對于生産中托管多個資料庫的伺服器,特别是在使用網站時,必須設定dbfilter,否則許多功能将無法正常工作。
下面例子以僅顯示名稱以“mycompany”開頭的資料庫
- [options]
- dbfilter = ^mycompany.*$
僅顯示與www之後的第一個子域比對的資料庫:例如,如果傳入的請求被發送到www.mycompany.com或mycompany.co.uk,則将顯示資料庫“mycompany”,而不是www2.mycompany.com或helpdesk.mycompany.com。
- [options]
- dbfilter = ^%d$
如果直接使用域名作為庫名,用 ^%h$
設定正确的--db過濾器是確定部署安全的重要部分。一旦它正常工作并且每個主機名隻比對一個資料庫,強烈建議阻止對資料庫管理器螢幕的通路,并使用--no-database-list 啟動參數阻止列出資料庫,并阻止對資料庫管理界面的通路。
2.PostgreSQL資料庫通路配置
預設情況下,PostgreSQL隻允許通過UNIX套接字和環回連接配接進行連接配接(從“localhost”,即安裝PostgreSQL伺服器的同一台計算機)。** **如果希望Odoo和PostgreSQL在同一台計算機上執行,UNIX套接字是可以的,并且在沒有提供主機時是預設的,但是如果希望Odoo和PostgreSQL在不同的計算機上執行,則需要偵聽網絡接口,或者:
/var/lib/pgsql/10/data/pg_hba.conf
- # IPv4 local connections:
- host all all 127.0.0.1/32 md5
- host all all 192.168.1.0/24 md5
/var/lib/pgsql/10/data/postgresql.conf
- port = 5432
- max_connections = 80
3.配置**Odoo**中的基本參數
Odoo通過端口5432通過UNIX套接字連接配接到本地postgres。當Postgres部署不是本地部署和/或不使用安裝預設值時,可以使用資料庫選項覆寫此設定。 打包的安裝程式将自動建立一個新使用者(odoo),并将其設定為資料庫使用者。
資料庫管理界面受管理密碼設定保護。此設定隻能使用配置檔案進行設定,并在執行資料庫更改之前進行簡單檢查。應将其設定為随機生成的值,以確定第三方不能使用此接口。 所有資料庫操作都使用資料庫選項,包括資料庫管理界面。要使資料庫管理界面正常工作,PostgreSQL使用者必須具有createdb權限。 使用者總是可以删除他們擁有的資料庫。要使資料庫管理界面完全不起作用,需要在不使用createdb的情況下建立PostgreSQL使用者,并且資料庫必須由其他PostgreSQL使用者擁有。
- [options]
- admin_passwd = mysupersecretpassword
- db_host = 192.168.1.2 #db_host = False
- db_port = 5432 #db_port = False
- db_user = odoo #db_password = False
- db_password = pwd
- dbfilter = ^mycompany.*$
4.works内置伺服器配置
Odoo包括内置的HTTP伺服器,使用多線程或多處理。 對于生産使用,建議使用多處理伺服器,因為它增加了穩定性,更好地利用了計算資源,并且可以更好地監視和限制資源。
多處理是通過配置非零數量的工作程序來實作的,工作程序的數量應該基于機器中的核心數量(可能有一些空間供cron工作程序使用,這取決于預測的cron工作量) 可以根據硬體配置配置工作程序限制,以避免資源耗盡。
工作程序數量計算
數量規則:(#CPU * 2) + 1
Cron工作者需要CPU 1個工作程序~=6個并發使用者
記憶體大小計算
我們認為20%的請求是繁重請求,而80%是簡單請求 一個繁重的工作,當所有的計算字段都設計好了,SQL請求設計好了,…估計要消耗大約1G的RAM 在相同的情況下,一個較輕的工作估計要消耗大約150MB的RAM
Needed RAM = #worker * ( (light_worker_ratio * light_worker_ram_estimation) + (heavy_worker_ratio * heavy_worker_ram_estimation) )
LiveChat
在多進行中,會自動啟動一個專用的LiveChat工作程序并監聽longpolling端口,但用戶端不會連接配接到它。 相反,必須有一個代理将其URL以/longpolling/開頭的請求重定向到longpolling端口。其他請求應被代理到正常的HTTP端口 要實作這一點,您需要在Odoo前面部署一個反向代理,比如nginx或apache。這樣做時,您需要将更多的http頭轉發給Odoo,并在Odoo配置中激活代理模式,讓Odoo讀取這些頭。
配置執行個體
4 CPU 8線程伺服器 60個并發使用者 60個使用者/6=10<-理論上需要的worker數量 (4×2)+1=9<理論最大worker數 我們将使用8個workers+1作為cron。我們還将使用監控系統來測量cpu負載,并檢查它是否在7到7.5之間。 RAM=9((0.8150)+(0.2*1024))~=3Go RAM用于Odoo
/etc/odoo.conf
- [options]
- limit_memory_hard = 1677721600
- limit_memory_soft = 629145600
- limit_request = 8192
- limit_time_cpu = 600
- limit_time_real = 1200
- max_cron_threads = 1
- workers = 8
5.資料庫日志記錄配置
- ;是否允許顯示資料庫清單
- list_db = True
- ;是否将log寫入db的ir_logging表
- log_db = False
- ;設定子產品的日志級别,可以是一組module:log_level對, 預設值是“:INFO”(表示所有子產品的預設日志級别為INFO)
- log_handler = :INFO
- ;日志的級别, 可選值:debug_rpc_answer, debug_rpc, debug, debug_sql, info, warn, error, critical
- log_level = warning
- ;指定用來存儲日志的檔案
- logfile = /var/log/odoo/odoo-server.log
- ;是否按天存放日志
- logrotate = True
6.配置執行個體
這是一個簡單的配置應用執行個體
- [options]
- dbfilter = test
- db_host = False
- db_port = False
- db_user = odoo
- db_password = False
- db_name = testodoodb
- addons_path = /opt/odoo/odoo/addons,/opt/odoo/addons_enterprise
- db_maxconn = 200
- http_port = 8069
- login_message = False
- logfile = /var/log/odoo/odoo-server.log
- logrotate = True
- proxy_mode = True
- workers = 9
- max_cron_threads = 1
- longpolling_port = 8072