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