系统配置

本文档介绍在正式运行数据库或面向互联网的服务器上安装 Odoo 的基本步骤。它遵循 安装,对于不面向互联网的开发系统一般不需要。

警告

如果您正在设置公共服务器,请务必查看我们的:ref:`安全 <security>`建议!

数据库过滤器

Odoo是一个多租户系统:单一Odoo系统可以运行并启用若干数据库实例。Odoo也是高度可定制的,定制(如模块加载)依赖“当前数据库”。

以登录公司用户身份使用后端(Web 客户端)时,这不是问题:登录时可以选择数据库,然后加载自定义项。

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

这是 :option:--db-filter 的目的之一 <odoo-bin –db-filter>:它指定应如何根据所请求的主机名(域)选择数据库。该值是一个“正则表达式”_,可能包括动态注入的主机名(“%h”)或访问系统的第一个子域(%d“”)。</odoo-bin>

对于在生产环境中托管多个数据库的服务器,尤其是在使用“网站”的情况下,必须设置 dbfilter**,否则许多功能将无法正常工作。

配置示例

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

在:ref:`配置文件<reference/cmdline/config_file>`中设置:

[options]
dbfilter = ^mycompany.*$
  • 仅显示与“www”之后的第一个子域匹配的数据库:例如,如果传入的请求发送到“www.mycompany.com”或“mycompany.co.uk”,则不会显示“www2.mycompany.com”或“helpdesk.mycompany.com”的数据库“ mycompany”。

在:ref:`配置文件<reference/cmdline/config_file>`中设置:

[options]
dbfilter = ^%d$

注解

设置适当的 --db-filter 是保护部署安全的重要部分。一旦它正常工作并且每个主机名只匹配一个数据库,强烈建议阻止对数据库管理器屏幕的访问,并使用“–no-database-list”启动参数来阻止列出数据库,并阻止对数据库管理屏幕的访问。另请参见‘安全’_。

PostgreSQL

默认情况下,PostgreSQL只允许通过UNIX套接字和环回连接进行连接(来自“localhost”,PostgreSQL服务器安装在同一台机器上)。

如果您希望Odoo和PostgreSQL在同一台机器上执行,UNIX套接字是可以的,并且在没有提供主机时是默认值,但是如果您希望Odoo和PostgreSQL在不同的机器[#different-machines]_上执行,它将需要“监听网络接口”_[#remote-socket]_,或者:

  • 只接受环回连接,并在运行Odoo的计算机和运行PostgreSQL的计算机之间“使用SSH隧道”_,然后将Odoo配置为连接到其隧道的末端

  • 接受与安装Odoo的计算机的连接,可能通过ssl(有关详细信息,请参阅“PostgreSQL连接设置”_),然后将Odoo配置为通过网络连接

配置示例

  • 允许在本地主机上进行 tcp 连接

  • 允许来自 192.168.1.x 网络的 tcp 连接

/etc/postgresql/<YOUR POSTGRESQL VERSION>/main/pg_hba.conf set中:

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

在``/etc/postgresql/<YOUR POSTGRESQL VERSION>/main/postgresql.conf`` set中:

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

配置 Odoo

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

doc:软件包安装程序<packages> 会自动创建一个新用户 (odoo),并将其设置为数据库用户。

  • 数据库管理屏幕受“admin_passwd”设置保护。此设置只能使用配置文件进行设置,并且在执行数据库更改之前只需进行检查即可。应将其设置为随机生成的值,以确保第三方无法使用此接口。

  • 所有数据库操作都使用 数据库选项,包括数据库管理屏幕。要使数据库管理屏幕正常工作,需要 PostgreSQL 用户具有“createdb”权限。

  • 用户始终可以删除他们拥有的数据库。为了使数据库管理屏幕完全不起作用,需要使用“no-createdb”创建PostgreSQL用户,并且数据库必须由其他PostgreSQL用户拥有。

    警告

    PostgreSQL用户*必须不*是超级用户,例如:root或Adiministrator

配置示例

  • 连接到 192.168.1.2 上的 PostgreSQL 服务器

  • 端口 5432

  • 使用“odoo”用户帐户,

  • 使用“pwd”作为密码

  • 仅筛选名称以“mycompany”开头的数据库名

在:ref:`配置文件<reference/cmdline/config_file>`中设置:

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

在 Odoo 和 PostgreSQL 之间使用 SSL

从Odoo 11.0开始,您可以在Odoo和PostgreSQL之间强制实施ssl连接。在Odoo中,db_sslmode通过从“禁用”,“允许”,“首选”,“要求”,“验证-ca”或“验证完全”中选择的值来控制连接的ssl安全性

PostgreSQL Doc

内置服务器

Odoo 包括内置 HTTP、cron 和实时聊天服务器,应用多线程或多进程模式任选其一。

**多线程**服务器是一种更简单的服务器,主要用于开发和演示,并兼容各种操作系统(包括 Windows)。每个新的 HTTP 请求都会产生一个新的线程,即使是 websocket 等长期连接也不例外。此外,还会生成额外的守护进程定时线程。由于Python的限制(全局解释器锁),它不能充分利用硬件资源。

多线程服务器是默认服务器,也适用于 docker 容器。不使用 --workers 选项或将其设置为 0,就可以选择多线程服务器。

**多处理**服务器是主要用于生产的完整服务器。它不受 Python 资源使用限制(GIL)约束,因此能充分利用硬件。服务器启动时会创建一个工作进程池。新的 HTTP 请求会被操作系统排队,直到有可用的工作进程来处理它们。为了处理实时聊天功能,还会在另一个端口上生成一个额外的基于事件驱动的 HTTP 工作进程。同时还会生成额外的定时任务工作进程。一个可配置的进程管理器会监控资源使用情况,并可以终止/重启失败的工作进程。

多进程服务器是可选的。可通过将 --workers 选项设置为非空整数来选择。

注解

由于多进程服务器为 Linux 服务器高度定制,因此 Windows 无法使用。

工人数计算

  • 经验法则 : (#CPU * 2) + 1

  • Cron workers 需要 CPU

  • 1 个工作线程 ~= 6 个并发用户

内存大小计算

  • 我们认为 20% of 请求是繁重的请求,而 80% a是更简单的请求

  • 一个繁重的工作,当所有计算字段都设计得很好,SQL请求设计得很好,…估计消耗约1GB的内存

  • 在相同的情况下,较轻的工作线程估计会消耗大约150MB的RAM。

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

在线聊天

在多进程模式下,会自动启动一个专用 LiveChat Worker,并通过 --gevent-port 监听。默认情况下,HTTP 请求将继续访问普通 HTTP 工作进程,而不是 LiveChat 工作进程。您必须在 Odoo 前部署一个代理,并将路径以 /websocket/ 开头的传入请求重定向到 LiveChat 工作进程。您还必须在 --proxy-mode 下启动 Odoo,这样它就会使用真正的客户端头信息(如主机名、协议和 IP 地址)而不是代理头信息。

配置示例

  • 具有 4 个 CPU、8 个线程的服务器

  • 60 个并发用户

  • 60 个用户 / 6 = 10 < - 理论上的线程数量

  • (4 * 2) + 1 = 9 <- 理论的最大线程数

  • 我们将应用 8 线程 + 1 计划任务。我们还将使用监视系统来测量CPU负载,并检查它是否在7和7.5之间。

  • RAM = 9 * ((0.8*150) + (0.2*1024)) ~= 3Go RAM 用于 Odoo

在:ref:配置文件 <reference/cmdline/config_file> 中:

[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

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

  • 启用 Odoo 的 :option:’代理模式(proxy mode) <odoo-bin –proxy-mode>’。仅当 Odoo 位于反向代理后面时,才应启用此功能

  • 设置 SSL termination proxy (Nginx termination example)

  • 设置代理本身 (Nginx proxying example)

  • 您的 SSL 终止代理还应自动将不安全的连接重定向到安全端口

配置示例

  • 将 http 请求重定向到 https

  • 对 odoo 的代理请求

在:ref:`配置文件<reference/cmdline/config_file>`中设置:

proxy_mode = True

/etc/nginx/sites-enabled/odoo.conf set中:

#odoo server
upstream odoo {
  server 127.0.0.1:8069;
}
upstream odoochat {
  server 127.0.0.1:8072;
}
map $http_upgrade $connection_upgrade {
  default upgrade;
  ''      close;
}

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

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

  # SSL parameters
  ssl_certificate /etc/ssl/nginx/server.crt;
  ssl_certificate_key /etc/ssl/nginx/server.key;
  ssl_session_timeout 30m;
  ssl_protocols TLSv1.2;
  ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
  ssl_prefer_server_ciphers off;

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

  # Redirect websocket requests to odoo gevent port
  location /websocket {
    proxy_pass http://odoochat;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection $connection_upgrade;
    proxy_set_header X-Forwarded-Host $http_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;

    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains";
    proxy_cookie_flags session_id samesite=lax secure;  # requires nginx 1.19.8
  }

  # Redirect requests to odoo backend server
  location / {
    # Add Headers for odoo proxy mode
    proxy_set_header X-Forwarded-Host $http_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;
    proxy_redirect off;
    proxy_pass http://odoo;

    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains";
    proxy_cookie_flags session_id samesite=lax secure;  # requires nginx 1.19.8
  }

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

HTTPS 加固

在所有请求中添加 “Strict-Transport-Security “标头,以防止浏览器向该域发送纯 HTTP 请求。您需要在该域上始终使用有效证书维护正常运行的 HTTPS 服务,否则您的用户将看到安全警报或完全无法访问该域。

在 NGINX 中使用以下命令行,在一年内强制每个访客使用 HTTPS 连接:

add_header Strict-Transport-Security "max-age=31536000; includeSubDomains";

可以为 session_id cookie 定义其他配置。可添加`安全`标志以确保不会通过 HTTP 传输,并添加`SameSite=Lax`以防止验证`CSRF`_。

# requires nginx 1.19.8
proxy_cookie_flags session_id samesite=lax secure;

Odoo 作为 WSGI 应用程序

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

但是,WSGI 服务器将仅公开 Web 客户端、网站和 Web 服务 API 的主 HTTP 终结点。因为Odoo不再控制工人的创建,所以它无法设置cron或livechat工人

Cron Workers

要处理 cron 作业,必须在 WSGI 服务器旁边启动一个内置 Odoo 服务器。必须使用 --no-http cli 选项或 “http_enable = False” 配置文件设置,将该服务器配置为只处理 cron 而不处理 HTTP 请求。

在类 Linux 系统上,建议使用多进程服务器而不是多线程服务器,这样可以更好地利用硬件并提高稳定性,即使用 --workers=-1--max-cron-threads=n cli 选项。

在线聊天

要正确运行即时聊天功能,必须使用与 gevent 兼容的 WSGI 服务器。该服务器应能同时处理多个长连接,但不需要很强的处理能力。所有路径以 /websocket/ 开头的请求都应指向该服务器。所有其他请求都应使用普通的(基于线程/进程的)WSGI 服务器。

Odoo cron 服务器也可用于处理即时聊天请求。只需从 cron 服务器中删除 --no-http cli 选项,并确保路径以 /websocket/ 开头的请求会被定向到该服务器,或者在 --http-port 上(多线程服务器),或者在 --gevent-port 上(多处理服务器)。

提供静态文件和附件

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

提供静态文件

Odoo 静态文件位于每个模块的 static/ 文件夹中,因此可通过拦截对 /MODULE/static/FILE 的所有请求,并在各种附加组件路径中查找正确的模块(和文件)来提供静态文件。

建议在网络服务器发送的所有图像上设置``Content-Security-Policy: default-src ‘none’``标头。严格来说,这并非必要,因为用户无法在模块的 static/ 文件夹中修改/注入内容,而且现有图像是最终的(它们不会自行获取新资源)。不过,这是一个很好的做法。

使用上述 NGINX (https) 配置,应添加以下 maplocation 块,以便通过 NGINX 提供静态文件。

map $sent_http_content_type $content_type_csp {
    default "";
    ~image/ "default-src 'none'";
}

server {
    # the rest of the configuration

    location @odoo {
        # copy-paste the content of the / location block
    }

    # Serve static files right away
    location ~ ^/[^/]+/static/.+$ {
        # root and try_files both depend on your addons paths
        root ...;
        try_files ... @odoo;
        expires 24h;
        add_header Content-Security-Policy $content_type_csp;
    }
}

实际的 roottry_files 指令取决于安装,特别是 --addons-path

Example

假设 Odoo 已通过**debian 软件包**安装为社区版和企业版,且 --addons-path <odoo-bin --addons-path>` 为``’/usr/lib/python3/dist-packages/odoo/addons’``

roottry_files 应该为:

root /usr/lib/python3/dist-packages/odoo/addons;
try_files $uri @odoo;

提供附件

附件是存储在文件库中的文件,其访问受 Odoo 监管。它们不能通过静态网络服务器直接访问,因为访问它们需要在数据库中进行多次查找,以确定文件存储在哪里,以及当前用户是否可以访问它们。

不过,一旦找到文件并由 Odoo 验证了访问权限,最好使用静态网络服务器而不是 Odoo 来提供文件。要让 Odoo 委托静态网络服务器发送文件,必须在静态网络服务器上启用并配置 X-Sendfile (apache) 或 X-Accel (nginx)扩展。设置完成后,使用 --x-sendfile CLI 标志启动 Odoo(X-Sendfile 和 X-Accel 均使用此唯一标志)。

注解

  • apache(以及兼容的网络服务器)的 X-Sendfile 扩展不需要任何辅助配置。

  • NGINX 的 X-Accel 扩展**的确**需要以下额外配置:

    location /web/filestore {
        internal;
        alias /path/to/odoo/data-dir/filestore;
    }
    

    如果您不知道文件库的路径,请使用 --x-sendfile 选项启动 Odoo,并通过 Odoo 直接导航到 /web/filestore URL(不要通过 NGINX 导航到 URL)。这将记录警告,信息中包含您需要的配置。

安全

首先,请记住,保护信息系统是一个连续的过程,而不是一次性操作。在任何时候,您都只能像环境中最薄弱的环节一样安全。

因此,请不要将此部分视为防止所有安全问题的最终措施列表。它仅作为安全行动计划中应确保包含的第一个重要事项的摘要。其余的将来自操作系统和发行版的最佳安全实践,用户,密码和访问控制管理等方面的最佳实践。

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

  • 始终设置强超级管理员密码,并在系统设置后立即限制对数据库管理页面的访问。请参阅:数据库管理器安全性

  • 为所有数据库上的所有管理员帐户选择唯一登录名和强密码。不要使用“admin”作为登录名。不要将这些登录名用于日常操作,仅用于控制/管理安装。*从不*使用任何默认密码,如管理员/管理员,即使对于测试/临时数据库也是如此。

  • 不要 ****面向互联网的服务器上安装演示数据。包含演示数据的数据库包含默认登录名和密码,可用于进入系统并造成重大麻烦,即使在暂存/开发系统上也是如此。

  • Use appropriate database filters ( --db-filter) to restrict the visibility of your databases according to the hostname. See 数据库过滤器. You may also use -d to provide your own (comma-separated) list of available databases to filter from, instead of letting the system fetch them all from the database backend.

  • Once your db_name and dbfilter are configured and only match a single database per hostname, you should set list_db configuration option to False, to prevent listing databases entirely, and to block access to the database management screens (this is also exposed as the --no-database-list command-line option)

  • 确保 PostgreSQL 用户 ( --db_user) 不是超级用户,并且您的数据库由其他用户拥有。例如,如果您使用的是专用的非特权“db_user”,则可以由“postgres”超级用户拥有。另请参阅 :odoo

  • 通过 GitHub 定期安装最新版本,或者从 https://www.odoo.com/page/downloadhttp://nightly.odoo.com 下载最新版本,从而保持安装更新

  • 在多进程模式下配置服务器,并具有与典型使用(内存/CPU/超时)匹配的适当限制。另请参阅:内建服务器

  • 在提供HTTPS终止的Web服务器后面运行Odoo,并提供有效的SSL证书,以防止窃听明文通信。SSL证书很便宜,并且存在许多免费选项。将 Web 代理配置为限制请求的大小,设置适当的超时,然后启用 proxy mode 选项。另请参阅:Https 代理

  • 如果需要允许对服务器进行远程 SSH 访问,请确保为 all 帐户设置强密码,而不仅仅是“root”。强烈建议完全禁用基于密码的身份验证,并且仅允许公钥身份验证。还要考虑限制通过VPN的访问,仅允许防火墙中的受信任IP,和/或运行暴力检测系统,如“fail2ban”或等效系统。

  • 请考虑在代理或防火墙上安装适当的速率限制,以防止暴力攻击和拒绝服务攻击。另请参阅:ref:`login_brute_force`了解具体措施。

    许多网络提供商为分布式拒绝服务攻击 (DDOS) 提供自动缓解措施,但这通常是一项可选服务,因此您应该咨询他们。

  • 只要有可能,就将面向公众的演示/测试/过渡实例托管在与生产计算机不同的计算机上。并应用与生产相同的安全预防措施。

  • 如果您面向公众的 Odoo 服务器可以访问敏感的内部网络资源或服务(例如,通过专用 VLAN),请实施适当的防火墙规则来保护这些内部资源。这将确保 Odoo 服务器不会被意外使用(或由于恶意用户操作)来访问或破坏这些内部资源。通常,这可以通过在防火墙上应用出站默认的DENY规则来完成,然后仅显式授权访问Odoo服务器需要访问的内部资源。“systemd IP 流量访问控制<http://0pointer.net/blog/ip-accounting-and-access-lists-with-systemd.html>”_ 对于实现每个进程的网络访问控制也可能很有用。

  • 如果您的面向公众的Odoo服务器位于Web应用程序防火墙,负载平衡器,透明DDoS保护服务(如CloudFlare)或类似的网络级设备后面,您可能希望避免直接访问Odoo系统。通常很难对Odoo服务器的端点IP地址保密。例如,当查询公共系统时,它们可以出现在Web服务器日志中,或者出现在从Odoo发布的电子邮件的标题中。在这种情况下,您可能需要配置防火墙,以便除了从 WAF、负载均衡器或代理服务的特定 IP 地址访问终结点外,无法公开访问终结点。为此,像CloudFlare这样的服务提供商通常会维护其IP地址范围的公共列表。

  • 如果您托管多个客户,请使用容器或适当的“jail”技术将客户数据和文件彼此隔离。

  • 设置数据库和文件存储数据的每日备份,并将它们复制到无法从服务器本身访问的远程存档服务器。

  • 强烈建议在 Linux 平台上部署 Odoo,而不是 Windows 平台。如果您还是选择在 Windows 平台上部署,则应对服务器进行彻底的安全加固审查,这不在本指南的讨论范围之内。

阻止暴力破解攻击

对于面向互联网的部署,对用户密码的暴力攻击非常普遍,对于Odoo服务器来说,这种威胁不容忽视。每当执行登录尝试时,Odoo都会发出日志条目,并报告结果:成功或失败,以及目标登录和源IP。

日志条目将具有以下形式。

登录失败::

2018-07-05 14:56:31,506 24849 INFO db_name odoo.addons.base.res.res_users: Login failed for db:db_name login:admin from 127.0.0.1

登录成功:

2018-07-05 14:56:31,506 24849 INFO db_name odoo.addons.base.res.res_users: Login successful for db:db_name login:admin from 127.0.0.1

这些日志可以通过入侵防御系统(如“fail2ban”)轻松分析。

例如,以下 fail2ban 筛选器定义应与失败的登录相匹配:

[Definition]
failregex = ^ \d+ INFO \S+ \S+ Login failed for db:\S+ login:\S+ from <HOST>
ignoreregex =

这可以与 jail 定义一起使用,以阻止 HTTP(S) 上的攻击 IP。

以下是在 1 分钟内从同一 IP 检测到 10 次登录尝试失败时,阻止 IP 15 分钟的情况:

[odoo-login]
enabled = true
port = http,https
bantime = 900  ; 15 min ban
maxretry = 10  ; if 10 attempts
findtime = 60  ; within 1 min  /!\ Should be adjusted with the TZ offset
logpath = /var/log/odoo.log  ;  set the actual odoo log path here

数据库管理器安全性

:ref:setup/deploy/odoo 顺便提到``admin_passwd``

此设置用于所有数据库管理屏幕(用于创建、删除、转储或还原数据库)。

如果管理屏幕根本无法访问,则应将“list_db”配置选项设置为“False”,以阻止访问所有数据库选择和管理屏幕。

警告

强烈建议对任何面向 Internet 的系统禁用数据库管理器!它旨在作为开发/演示工具,以便于快速创建和管理数据库。它不是为在生产中使用而设计的,甚至可能向攻击者暴露危险的功能。它也不是为处理大型数据库而设计的,并且可能会触发内存限制。

在生产系统上,数据库管理操作应始终由系统管理员执行,包括预配新数据库和自动备份。

Be sure to setup an appropriate db_name parameter (and optionally, dbfilter too) so that the system can determine the target database for each request, otherwise users will be blocked as they won’t be allowed to choose the database themselves.

如果只能从一组选定的计算机访问管理屏幕,请使用代理服务器的功能阻止访问以“/web/database”开头的所有路由,但(可能)“/web/database/selector”除外,它显示数据库选择屏幕。

如果数据库管理屏幕应保持可访问状态,则必须将“admin_passwd”设置从其默认值“admin”更改为“admin”:在允许数据库更改操作之前,将检查此密码。

它应该安全地存储,并且应该随机生成,例如

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

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

将图像的 WebP 版本用于受支持的浏览器,并且对于不支持 WebP 的浏览器,请优雅地回退 JPEG 和 PNG。

Odoo支持市场上所有主要的桌面和移动浏览器,只要它们得到出版商的支持。

以下是支持的浏览器:

  • 谷歌浏览器

  • 火狐浏览器

  • Microsoft Edge

  • 苹果浏览器

警告

在提交错误报告之前,请确保您的浏览器是最新的,并且仍然受其发布者的支持。

注解

从Odoo 13.0开始,支持ES6。 因此,将删除 IE 支持。

1

让多个Odoo安装使用相同的PostgreSQL数据库,或者为两个软件提供更多的计算资源。

2

从技术上讲,像socat_这样的工具可以用来跨网络代理UNIX套接字,但这主要用于只能通过UNIX套接字使用的软件。

3

或者只能通过内部分组交换网络访问,但这需要安全的交换机,防止“ARP欺骗”_并排除使用WiFi。即使在安全的分组交换网络上,也建议通过 HTTPS 进行部署,并且可能的成本也会降低,因为“自签名”证书在受控环境中比通过 Internet 更容易部署。