CRM — Odoo Business 0.1 documentation

部署odoo

本文档介绍了在生产中或面向互联网的服务器上设置Odoo的基本步骤.

dbfilter

Odoo是一个用户系统:单个Odoo系统可以运行并服务于多个数据库实例。它也是高度可定制的.

使用web端登录时可以选择数据库.

但是,对于未绑定到数据库的非登录用户(门户网站,网站)来说,这是一个问题,Odoo需要知道应该使用哪个数据库来加载网站页面或执行该操作。如果没有使用多租户不是问题,只有一个数据库可以使用,但如果有多个数据库可以访问Odoo需要一个规则来知道应该使用哪个数据库。

这是以下目的之一--db-filter:它指定了如何根据正在请求的主机名(域)选择数据库。该值是正则表达式,可能包括动态注入的主机名(%h)或%d系统正在被访问的第一个子域()。

对于在生产中托管多个数据库的服务器,特别是如果 webside被使用了, dbfilter 必须则必须被设置,否则许多功能将无法正常工作。

配置样本

  • 仅显示名称以'mycompany'开头的数据库

/etc/odoo.conf 添加:

[options]
dbfilter = ^mycompany.*$
  • 只显示匹配所述第一子域之后的数据库 www:例如数据库“myCompany的”将被显示,如果传入的请求被发送到www.mycompany.com 或者 mycompany.co.uk, 而不是 for www2.mycompany.comhelpdesk.mycompany.com.

/etc/odoo.conf 设置:

[options]
dbfilter = ^%d$

PostgreSQL

默认情况下,PostgreSQL仅允许通过UNIX套接字和环回连接进行连接(来自“localhost”,安装PostgreSQL服务器的相同机器).

UNIX套接字是好的,如果你想Odoo和PostgreSQL在同一台机器上执行,并且是默认不提供主机时,但如果你想Odoo和PostgreSQL在不同的机器上执行1 它将需要 l倾听网络接口 2, 或者

  • 只接受环回连接,并在运行Odoo的机器和运行PostgreSQL的机器之间使用SSH通道,然后配置Odoo连接到其隧道的末端
  • 接受与安装Odoo的机器的连接,可能通过ssl(有关详细信息,请参阅PostgreSQL连接设置),然后配置Odoo通过网络连接

配置样品

  • 允许本地主机上的tcp连接
  • 允许从192.168.1.x网络连接tcp

/etc/postgresql/9.5/main/pg_hba.conf 设置:

# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
host    all             all             192.168.1.0/24          md5

/etc/postgresql/9.5/main/postgresql.conf 设置:

listen_addresses = 'localhost,192.168.1.2'
port = 5432
max_connections = 80

配置 Odoo

开箱即用,Odoo通过端口5432连接到UNIX套接字上的本地postgres。当您的Postgres部署不是本地的和/或不使用安装默认值时,可以使用数据库选项覆盖这一点.

该包装的安装程序会自动创建一个新用户(odoo),并设置为数据库用户.

  • 数据库管理受到 admin_passwd 设置的保护。此设置只能使用配置文件进行设置,并在执行数据库更改之前进行检查。应将其设置为随机生成的值,以确保第三方不能使用此接口.
  • 所有数据库操作都使用数据库选项,包括数据库管理屏幕。为了使数据库管理屏幕工作,需要PostgreSQL用户有 createdb 权限.
  • 用户可以随时删除自己拥有的数据库。为了使数据库管理完全无效,PostgreSQL用户需要创建, no-createdb 数据库必须由不同的PostgreSQL用户拥有.

配置实例

  • 在192.168.1.2上连接到PostgreSQL服务器
  • 端口5432
  • 使用'odoo'用户帐户,
  • 以“pwd”作为密码
  • 仅以“mycompany”开头的名称过滤数据库

/etc/odoo.conf set:

[options]
admin_passwd = mysupersecretpassword
db_host = 192.168.1.2
db_port = 5432
db_user = odoo
db_password = pwd
dbfilter = ^mycompany.*$

内置服务器

Odoo包括使用多线程或多处理的内置HTTP服务器.

对于生产使用,建议使用多处理服务器,因为它可以提高稳定性,更好地利用计算资源,可以更好地监控和资源限制.

  • 通过配置实现多重处理 a non-zero number of worker processes, 工作人员的数量应基于机器中的核心数量(可能有一些空间用于cron工作人员,具体取决于预计的cron工作量)
  • 可以根据硬件配置配置工作人员限制,以避免资源耗尽

工人编号计算

  • 经验法则:(#CPU * 2)+ 1
  • Cron工作人员需要CPU
  • 1个worker〜= 6个并发用户

内存大小计算

  • 我们认为20%的请求是重要请求,而80%的请求是较为简单的请求
  • 一个沉重的工作人员,当所有的计算字段都被设计好时,SQL请求被精心设计,估计消耗大约1Go的RAM
  • 在同一情况下,较轻的员工估计会消耗大约150MB的RAM

需要RAM = #worker *((light_worker_ratio * light_worker_ram_estimation)+(heavy_worker_ratio * heavy_worker_ram_estimation))

在线聊天

在多处理中,专门的LiveChat工作人员将自动启动并监听, the longpolling port 但客户端将无法连接.

相反,您必须具有一个代理重定向其URL /longpolling/ 以longpolling端口开头的请求 。其他请求应该被代理 normal HTTP port

配置实例

  • 服务器与4 CPU,8线程
  • 60个并发用户
  • 60个用户/ 6 = 10 小于所需工作的理论数量
  • 我们将使用8名工人+ 1名。我们还将使用监控系统来测量CPU负载,并检查是否在7到7.5之间.
  • RAM = 9 * ((0.8*150) + (0.2*1024)) ~= 3Go Odoo需要的RAM

/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

HTTPS

无论是通过网站/ Web客户端还是Web服务访问,Odoo以明文形式发送身份验证信息。这意味着Odoo的安全部署必须使用HTTPS 3。SSL终止可以通过任何SSL终止代理实现,但需要以下设置:

  • 启用Odoo的 proxy mode .这应该只有当Odoo在反向代理之后才能启用
  • 设置SSL终止代理
  • 设置代理本身(Nginx代理示例)
  • 您的SSL终止代理还应自动将非安全连接重定向到安全端口

配置实例

  • 将http请求重定向到https
  • 代理请求odoo

/etc/odoo.conf 设置:

proxy_mode = True

/etc/nginx/sites-enabled/odoo.conf 设置:

#odoo server
upstream odoo {
 server 127.0.0.1:8069;
}
upstream odoochat {
 server 127.0.0.1:8072;
}

# http -> https
server {
   listen 80;
   server_name odoo.mycompany.com;
   rewrite ^(.*) https://$host$1 permanent;
}

server {
 listen 443;
 server_name odoo.mycompany.com;
 proxy_read_timeout 720s;
 proxy_connect_timeout 720s;
 proxy_send_timeout 720s;

 # Add Headers for odoo proxy mode
 proxy_set_header X-Forwarded-Host $host;
 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
 proxy_set_header X-Forwarded-Proto $scheme;
 proxy_set_header X-Real-IP $remote_addr;

 # SSL parameters
 ssl on;
 ssl_certificate /etc/ssl/nginx/server.crt;
 ssl_certificate_key /etc/ssl/nginx/server.key;
 ssl_session_timeout 30m;
 ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
 ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
 ssl_prefer_server_ciphers on;

 # log
 access_log /var/log/nginx/odoo.access.log;
 error_log /var/log/nginx/odoo.error.log;

 # Redirect requests to odoo backend server
 location / {
   proxy_redirect off;
   proxy_pass http://odoo;
 }
 location /longpolling {
     proxy_pass http://odoochat;
 }

 # common gzip
 gzip_types text/css text/less text/plain text/xml application/xml application/json application/javascript;
 gzip on;
}

Odoo作为WSGI应用程序

也可以将Odoo作为标准WSGI应用程序安装。Odoo为WSGI启动器脚本提供了基础odoo-wsgi.example.py。该脚本应该被自定义(可能在从安装目录复制之后)直接正确地设置配置,odoo.tools.config而不是通过命令行或配置文件。

然而,WSGI服务器只会显示Web客户端,网站和webservice API的主要HTTP端点。因为Odoo不能控制工人的创造,不能设置cron或livechat工作人员

Cron Workers

为Odoo部署运行cron作业作为WSGI应用程序需要

  • Odoo (经过 odoo-bin)
  • 连接到必须运行cron作业的数据库(通过 odoo-bin -d)
  • 不应该暴露在网络中。为了确保cron运行程序不能网络访问,可以完全禁用内置的HTTP服务器 odoo-bin --no-xmlrpc 或设置 xmlrpc = False 在配置文件中

在线聊天

WSGI部署的第二个问题子系统是LiveChat:大多数HTTP连接相对较短,并迅速释放其下一个请求的工作进程,LiveChat需要为每个客户端提供长时间的连接,以便实现近实时通知。

这与基于过程的工作者模型相冲突,因为它将绑定工作进程并阻止新用户访问系统。然而,这些长寿的连接做的很少,主要是停留等待通知。

在WSGI应用程序中支持livechat /动机的解决方案是:

  • 部署一个线程版本的Odoo(基于进程的preforking一个),并且只将请求重定向 /longpolling/ 到那个Odoo 开始的URL ,这是最简单的,并且longpolling的URL可以作为cron实例加倍。
  • 通过部署一个事件触发Odoo odoo-gevent 和代理请求开始 /longpolling/the longpolling port.

提供静态文件

为了方便开发,Odoo直接为其模块中的所有静态文件提供服务。这在性能上可能不是很理想,而静态文件通常由静态HTTP服务器提供。

Odoo静态文件存在于每个模块的 static/ 文件夹中,因此静态文件可以通过拦截所有请求,并在各种addons路径中查找正确的模块(和文件)。 /MODULE/static/FILE

安全

对于初学者,请记住,保护信息系统是一个持续的过程,而不是单次操作。在任何时刻,您只会像您环境中最薄弱的环节一样安全。

部署面向互联网的服务器时,请务必考虑以下与安全相关的主题:

部署面向互联网的服务器时,请务必考虑以下与安全相关的主题:

  • 始终设置强大的超级管理员管理员密码,并在系统设置后立即限制对数据库管理页面的访问。请参阅数据库管理器安全性.
  • 为所有数据库上的所有管理员帐户选择唯一的登录名和强密码。不要使用“admin”作为登录。不要使用这些登录进行日常操作,仅用于控制/管理安装。 不要使用任何默认密码,如管理员/管理员,甚至是测试/分期数据库。
  • 使用适当的数据库筛选器 ( --db-filter) 来根据主机名限制数据库的可见性。请参见 dbfilter.
  • 一旦db_filter 配置完成并且仅匹配每个主机名的单个数据库,您应该将list_db 配置选项设置为 False, 以防止完全列出数据库(这也显示为 --no-database-list命令行选项)
  • 确保PostgreSQL userr (--db_user) is 不是 超级用户,并且您的数据库由不同的用户拥有。例如postgres 如果您使用专用的非特权,它们可以由超级用户拥有 db_user. 另请参阅 配置Odoo.
  • 通过定期安装最新版本,通过GitHub或从 https://cdn.openerp.hk/download 或者 http://nightly.odoo.com
  • 以多进程模式配置您的服务器,其适当的限制符合您的典型用途(内存/ CPU /超时)。另请参见 内置服务器.
  • 在提供HTTPS终止并提供有效SSL证书的Web服务器之后运行Odoo,以防止对明文通信进行窃听。SSL证书是便宜的,并且存在许多自由选项。配置Web代理以限制请求的大小,设置适当的超时,然后启用该 proxy mode 选项。另请参见 HTTPS.
  • 在可能的情况下,在不同的机器上托管面向公众的演示/测试/分段实例,而不是生产的。并采用与生产相同的安全防范措施.
  • 如果您托管多个客户,请使用容器或适当的“监狱”技术将客户数据和文件彼此隔离
  • 设置数据库和文件存储数据的每日备份,并将其复制到无法从服务器本身访问的远程归档服务器.

数据库管理器安全

配置Odooadmin_passwd

此设置用于所有数据库管理屏幕(用于创建,删除,转储或恢复数据库)。 如果管理屏幕无法访问,或者只能从所选的一组计算机访问,则可以使用代理服务器的功能来阻止访问所有路径

如果数据库管理可以访问,则 admin_passwd必须从 admin 默认值更改设置:在允许进行数据库更改操作之前检查此密码。

为了安全存储,应该随机生成

$ python -c 'import base64, os; print(base64.b64encode(os.urandom(24)))'

这将生成一个32个字符的伪随机可打印字符串。

支持的浏览器

Odoo由其每个版本的多个浏览器支持。根据浏览器版本进行区分,以便更新。目前的浏览器版本支持Odoo。Odoo版本支持的浏览器列表如下:

  • Odoo 8: IE9, Mozilla Firefox, Google Chrome, Safari, Microsoft Edge
  • Odoo 9: IE11, Mozilla Firefox, Google Chrome, Safari, Microsoft Edge
  • Odoo 10: Mozilla Firefox, Google Chrome, Safari, Microsoft Edge