系统配置

本文档描述了在生产环境或面向互联网的服务器上设置 Odoo 的基本步骤。它遵循 安装,对于未暴露在互联网上的开发系统通常不需要。

警告

如果你正在设置一个公共服务器,请务必查看我们的 安全 建议!

数据库筛选器

Odoo 是一个多租户系统:一个 Odoo 系统可以运行并为多个数据库实例提供服务。它也高度可定制,自定义内容(从加载的模块开始)取决于“当前数据库”。

在以已登录的公司用户身份使用后端(Web 客户端)时,这并不是一个问题:可以在登录时选择数据库,并在之后加载自定义设置。

然而,对于未登录的用户(如门户、网站用户)而言,这是一个问题,因为他们并未绑定到某个数据库:Odoo 需要知道应使用哪个数据库来加载网站页面或执行操作。如果没有使用多租户功能,这并不是一个问题,因为只有一个数据库可供使用。但如果存在多个可访问的数据库,Odoo 需要一个规则来确定应使用哪一个数据库。

That is one of the purposes of --db-filter: it specifies how the database should be selected based on the hostname (domain) that is being requested. The value is a regular expression, possibly including the dynamically injected hostname (%h) or the first subdomain (%d) through which the system is being accessed.

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

配置示例

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

配置文件 中设置:

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

配置文件 中设置:

[options]
dbfilter = ^%d$

注解

正确设置 --db-filter 是保护您的部署的重要部分。一旦它正确运行,并且每个主机名仅匹配一个数据库,强烈建议阻止对数据库管理界面的访问,并使用 --no-database-list 启动参数以防止列出您的数据库,并阻止对数据库管理界面的访问。另请参阅安全.

PostgreSQL

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

如果希望 Odoo 和 PostgreSQL 在同一台机器上运行,使用 UNIX 套接字是可行的,并且当未提供主机时这是默认选项。但如果希望 Odoo 和 PostgreSQL 在不同的机器上运行 1,则需要 监听网络接口 2,可以是以下方式之一:

  • Only accept loopback connections and use an SSH tunnel between the machine on which Odoo runs and the one on which PostgreSQL runs, then configure Odoo to connect to its end of the tunnel

  • 在安装 Odoo 的机器上接受连接,可能通过 SSL(有关详细信息,请参阅 PostgreSQL 连接设置),然后配置 Odoo 通过网络进行连接

配置示例

  • 允许本地主机上的 TCP 连接

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

/etc/postgresql/<YOUR POSTGRESQL VERSION>/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/<YOUR POSTGRESQL VERSION>/main/postgresql.conf 中设置:

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

配置 Odoo

默认情况下,Odoo 通过 UNIX 套接字在端口 5432 上连接到本地的 PostgreSQL。如果您的 PostgreSQL 部署不是本地的,或者不使用安装默认设置,可以使用 数据库选项 进行覆盖。

使用 打包安装程序 将会自动创建一个新用户(odoo),并将其设置为数据库用户。

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

  • 所有数据库操作都使用 数据库选项,包括数据库管理界面。要使数据库管理界面正常工作,需要确保 PostgreSQL 用户具有 createdb 权限。

  • 用户可以随时删除他们拥有的数据库。为了使数据库管理界面完全无法使用,需要使用 no-createdb 选项创建 PostgreSQL 用户,并且该数据库必须由其他 PostgreSQL 用户拥有。

    警告

    PostgreSQL 用户 不得 为超级用户

配置示例

  • 连接到 192.168.1.2 上的 PostgreSQL 服务器

  • 端口 5432

  • 使用 ‘odoo’ 用户账户,

  • 使用 ‘pwd’ 作为密码

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

配置文件 中设置:

[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 控制与 PostgreSQL 的连接安全性,其值可选择 ‘disable’、’allow’、’prefer’、’require’、’verify-ca’ 或 ‘verify-full’。

PostgreSQL 文档

内置服务器

Odoo 内置了 HTTP、cron 和实时聊天服务器,可使用多线程或多进程方式运行。

多线程 服务器是一种主要用于开发、演示以及与各种操作系统(包括 Windows)兼容的简单服务器。每当有新的 HTTP 请求时,都会生成一个新线程,即使对于长连接(如 WebSocket)也是如此。还会生成额外的守护进程计划任务线程。由于 Python 的限制(全局解释器锁,GIL),它无法充分利用硬件资源。

默认服务器是多线程服务器,也适用于 Docker 容器。通过省略 --workers 选项或将其设置为 0 来选择该服务器。

**多进程**服务器是一个功能完整的服务器,主要用于生产环境。它不受Python资源使用方面的相同限制(GIL),因此能够充分利用硬件性能。在服务器启动时会创建一个工作进程池。新的HTTP请求由操作系统排队,直到有可用的工作进程来处理它们。还会在另一个端口上启动一个额外的事件驱动HTTP工作进程,用于实时聊天。同时也会启动额外的cron工作进程。一个可配置的进程回收器会监控资源使用情况,并可以终止或重启失败的工作进程。

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

注解

由于该多进程服务器是为 Linux 服务器高度定制的,因此在 Windows 上不可用。

工人的数量计算

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

  • Cron 工作进程需要 CPU

  • 1 个工作者 ≈ 6 个并发用户

内存大小计算

  • 我们认为20%的请求是高负载请求,而80%是较为简单的请求。

  • 一个高效的工作者,在所有计算字段设计良好、SQL 查询设计合理的情况下,预计会消耗大约 1GB 的内存。

  • 在相同的情况下,更轻量级的工作者预计会消耗大约 150MB 的内存

所需内存 = #worker * ( (轻量级工作进程比例 * 轻量级工作进程内存估算) + (重量级工作进程比例 * 重量级工作进程内存估算) )

在线客服

在多进程模式下,会自动启动一个专用的客服聊天工作进程,并监听 --gevent-port 选项指定的端口。默认情况下,HTTP 请求会继续访问正常的 HTTP 工作进程,而不是客服聊天工作进程。您必须在 Odoo 前面部署一个代理,并将路径以 /websocket/ 开头的请求重定向到客服聊天工作进程。同时,您还必须使用 --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)) ≈ 3GB 内存用于 Odoo

配置文件 中:

[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 的 代理模式。此选项仅在 Odoo 位于反向代理后面时才应启用。

  • 设置 SSL 终端代理(Nginx 终止示例

  • 设置代理本身(Nginx 代理示例

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

配置示例

  • 将 HTTP 请求重定向到 HTTPS

  • 将请求代理到 Odoo

配置文件 中设置:

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;
}
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 定义额外的配置。可以添加 Secure 标志,以确保它永远不会通过 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。该脚本应进行自定义(可能在从安装目录复制之后),以直接在 odoo.tools.config 中正确设置配置,而不是通过命令行或配置文件。

然而,WSGI 服务器将仅对外暴露用于网页客户端、网站和WebService API 的主 HTTP 端点。由于 Odoo 不再控制工作进程的创建,因此无法设置计划任务或实时聊天工作进程。

计划任务工作者

在 WSGI 服务器旁边启动其中一个内置 Odoo 服务器,是处理计划任务所必需的。该服务器必须通过命令行选项 --no-http 或配置文件设置 http_enable = False 进行配置,以确保仅处理计划任务,而不处理 HTTP 请求。

在类 Linux 系统中,建议使用多进程服务器而非多线程服务器,以更好地利用硬件资源并提高稳定性,即使用 --workers=-1--max-cron-threads=n 命令行选项。

在线客服

使用兼容 gevent 的 WSGI 服务器是确保实时聊天功能正常运行的必要条件。该服务器应能够处理大量同时连接的长时连接,但不需要强大的处理能力。所有路径以 /websocket/ 开头的请求都应指向该服务器。其他所有请求应使用常规的(基于线程或进程的)WSGI 服务器处理。

Odoo 定时任务服务器也可以用于处理实时聊天请求。只需从定时任务服务器中移除 --no-http 命令行选项,并确保路径以 /websocket/ 开头的请求被指向此服务器,可以在 --http-port <odoo-bin --http-port>`(多线程服务器)或 :option:–gevent-port <odoo-bin –gevent-port>`(多进程服务器)上进行配置。

提供静态文件和附件

为了开发便利,Odoo 直接在其模块中提供所有静态文件和附件。这在性能方面可能并非最佳选择,通常应由静态 HTTP 服务器来提供静态文件。

提供静态文件

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

建议在由 Web 服务器提供的所有图片上设置 Content-Security-Policy: default-src 'none' 头。虽然严格来说并非必需,因为用户无法修改或注入模块中的 static/ 文件夹内的内容,且现有图片是最终的(它们不会自行获取新资源)。然而,这是一项良好的实践。

Using the above NGINX (https) configuration, the following map and location blocks should be added to serve static files via 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 设置为 '/usr/lib/python3/dist-packages/odoo/addons'

roottry_files 应该设置为:

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

提供附件

附件是存储在文件存储中的文件,其访问受 Odoo 的控制。它们不能通过静态 Web 服务器直接访问,因为访问这些文件需要多次查询数据库以确定文件的存储位置以及当前用户是否有权限访问它们。

尽管如此,一旦文件被找到并且Odoo验证了访问权限,使用静态Web服务器来提供文件而不是通过Odoo来提供是一个好主意。为了让Odoo将文件的提供工作委托给静态Web服务器,必须在静态Web服务器上启用并配置`X-Sendfile <https://tn123.org/mod_xsendfile/>`_(Apache)或`X-Accel <https://www.nginx.com/resources/wiki/start/topics/examples/x-accel/>`_(Nginx)扩展。一旦设置完成,使用 --x-sendfile 命令行标志启动Odoo(此唯一标志同时用于X-Sendfile和X-Accel)。

注解

  • Apache 的 X-Sendfile 扩展(以及兼容的 Web 服务器)不需要任何额外的配置。

  • NGINX 的 X-Accel 扩展 确实 需要以下附加配置:

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

    如果不知道文件存储的路径,请使用 --x-sendfile 选项启动 Odoo,并直接通过 Odoo 访问 /web/filestore URL(不要通过 NGINX 访问该 URL)。这会记录一条警告信息,其中包含你需要的配置信息。

安全

首先,请记住,保护信息系统是一个持续的过程,而不是一次性的操作。在任何时候,你的安全性只取决于你环境中最薄弱的环节。

因此,请不要将本节内容视为防止所有安全问题的最终措施列表。它仅旨在作为您应确保包含在安全行动计划中的首要重要事项的概要。其余内容将来自适用于您操作系统和发行版的最佳安全实践,以及用户、密码和访问控制管理方面的最佳实践等。

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

  • 始终设置一个强密码的超级管理员密码,并在系统搭建完成后立即限制对数据库管理页面的访问。参见 数据库管理器安全

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

  • 请勿在面向互联网的服务器上安装演示数据。包含演示数据的数据库中包含默认的登录名和密码,这些信息可能被用来访问您的系统并造成严重问题,即使是在预发布/开发系统上也是如此。

  • 根据主机名使用适当的数据库过滤器(--db-filter)来限制数据库的可见性。参见 数据库筛选器。您还可以使用 -d 来提供自己的(用逗号分隔的)可用数据库列表进行过滤,而不是让系统从数据库后端获取所有数据库。

  • 一旦你的 db_namedbfilter 配置完成,并且每个主机名只匹配一个数据库,你应该将 list_db 配置选项设置为 False,以完全禁止列出数据库,并阻止访问数据库管理界面(此选项也作为 --no-database-list 命令行选项提供)。

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

  • 通过定期安装最新版本的安装包来保持系统更新,可以通过 GitHub 安装,或者从 https://www.odoo.com/page/downloadhttp://nightly.odoo.com 下载最新版本。

  • 以多进程模式配置您的服务器,并设置与您典型使用情况(内存/CPU/超时)相匹配的限制。有关更多信息,请参阅 内置服务器

  • 在 Web 服务器后运行 Odoo,并使用有效的 SSL 证书提供 HTTPS 终止,以防止对明文通信的窃听。SSL 证书价格低廉,且有许多免费选项。配置 Web 代理以限制请求大小、设置适当的超时时间,然后启用 代理模式 选项。另请参阅 HTTPS

  • 如果您需要允许通过远程SSH访问您的服务器,请确保为**所有**账户设置强密码,而不仅仅是`root`账户。强烈建议完全禁用基于密码的认证,仅允许使用公钥认证。同时,可以考虑通过VPN限制访问,仅在防火墙中允许受信任的IP地址,并/或运行类似`fail2ban`的暴力破解检测系统。

  • 建议在您的代理服务器或防火墙上安装适当的速率限制功能,以防止暴力破解攻击和拒绝服务攻击。有关具体措施,请参见 阻止暴力破解攻击

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

  • 尽可能地,将面向公众的演示/测试/预发布实例部署在与生产环境不同的机器上。并应用与生产环境相同的安全部署措施。

  • 如果您的面向公众的 Odoo 服务器可以访问敏感的内部网络资源或服务(例如通过私有 VLAN),请实施适当的防火墙规则以保护这些内部资源。这将确保 Odoo 服务器不会被意外(或由于恶意用户操作)用来访问或干扰这些内部资源。通常可以通过在防火墙上应用默认的出站 DENY 规则,然后仅明确授权 Odoo 服务器需要访问的内部资源来实现。Systemd IP 流量访问控制 也可能有助于实现进程级别的网络访问控制。

  • 如果您对外的 Odoo 服务器位于 Web 应用防火墙、负载均衡器、透明的 DDoS 保护服务(如 CloudFlare)或类似的网络级设备之后,您可能希望避免直接访问 Odoo 系统。通常情况下,很难将 Odoo 服务器的端点 IP 地址保密。例如,当查询公共系统时,它们可能会出现在 Web 服务器日志中,或者在从 Odoo 发送的电子邮件头中出现。在这种情况下,您可能需要配置您的防火墙,使这些端点仅能从 WAF、负载均衡器或代理服务的特定 IP 地址进行公开访问。像 CloudFlare 这样的服务提供商通常会为此目的维护一个公开的 IP 地址范围列表。

  • 如果你正在为多个客户提供托管服务,请使用容器或适当的“沙箱”技术将每个客户的资料和文件相互隔离。

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

  • 在 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 地址。

当同一 IP 在 1 分钟内检测到 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

数据库管理器安全

配置 Odoo 在提及过程中提到了 admin_passwd

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

如果管理屏幕完全不允许访问,您应将 list_db 配置选项设置为 False,以阻止访问所有数据库选择和管理屏幕。

警告

强烈建议对任何面向互联网的系统禁用数据库管理器!它仅作为开发/演示工具,旨在方便快速创建和管理数据库。它不适合用于生产环境,甚至可能向攻击者暴露危险功能。此外,它也不适合处理大型数据库,可能会触发内存限制。

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

请确保设置适当的 db_name 参数(并可选地设置 dbfilter 参数),以便系统能够确定每个请求的目标数据库,否则用户将被阻止,因为他们无法自行选择数据库。

如果管理屏幕只能从选定的一组机器访问,请使用代理服务器的功能,阻止所有以 /web/database 开头的路由的访问权限,除非(可能) /web/database/selector,该路由用于显示数据库选择界面。

如果希望保持数据库管理界面的可访问性,则必须将 admin_passwd 设置从其默认值 admin 进行更改:此密码在允许进行数据库修改操作之前会被检查。

它应被安全存储,并应随机生成,例如

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

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

重置主密码

在某些情况下,主密码可能被遗忘或泄露,需要进行重置。以下流程是针对本地部署的 Odoo 数据库系统管理员,详细说明如何手动重置并重新加密主密码。

另请参见

如需了解有关更改 Odoo.com 账户密码的更多信息,请参阅此文档:Odoo.com 账户密码修改

在创建新的本地数据库时,会生成一个随机的主密码。Odoo 建议使用此密码来保护数据库。该密码默认已启用,因此任何 Odoo 本地部署都会有安全的主密码。

警告

在创建本地部署的 Odoo 数据库时,该安装在设置密码以保护数据库之前,对互联网上的任何人都可见。

主密码在 Odoo 配置文件(odoo.conf`odoorc`(隐藏文件))中指定。通过图形用户界面(GUI)修改、创建或删除数据库时需要使用 Odoo 主密码。

定位配置文件

首先,打开 Odoo 配置文件(odoo.conf`odoorc`(隐藏文件))。

配置文件位于:c:\ProgramFiles\Odoo{VERSION}\server\odoo.conf

修改旧密码

在打开适当的文件后,继续将配置文件中的旧密码修改为临时密码。

在找到配置文件后,使用 (GUI) 打开它。可以通过双击文件来实现。然后,设备应该会有一个默认的 GUI 来用以打开该文件。

接下来,将主密码行 admin_passwd = $pbkdf2-sha… 修改为 admin_passwd = newpassword1234,例如。此密码可以是任何内容,只要暂时保存即可。请确保修改等号 = 后的所有字符。

Example

该行显示如下:admin_passwd = $pbkdf2-sh39dji295.59mptrfW.9z6HkA$w9j9AMVmKAP17OosCqDxDv2hjsvzlLpF8Rra8I7p/b573hji540mk/.3ek0lg%kvkol6k983mkf/40fjki79m

修改后的行显示如下:admin_passwd = newpassword1234

重要

必须将密码更改为其他内容,而不是通过在行首添加分号 ; 来触发新的密码重置。这确保了在整个密码重置过程中数据库的安全性。

重启 Odoo 服务器

设置临时密码后,**需要**重启 Odoo 服务器。

要重新启动 Odoo 服务器,请先在 Windows 搜索 搜索栏中输入 services。然后,选择 服务 应用程序,并向下滚动找到 Odoo 服务。

接下来,右键点击 Odoo,然后选择 启动重启。此操作会手动重启 Odoo 服务器。

通过网页界面重新加密密码

首先,在浏览器中导航到 /web/database/managerhttp://server_ip:port/web/database/manager

注解

server_ip 替换为数据库的 IP 地址。将 port 替换为数据库可访问的端口号。

接下来,点击 设置主密码,并将之前选择的临时密码输入到 主密码 字段中。完成此步骤后,输入一个 新的主密码。当点击 继续 按钮后, 新的主密码 将被哈希(或加密)。

此时,密码已成功重置,新密码的哈希版本现在显示在配置文件中。

另请参见

如需了解有关 Odoo 数据库安全的更多信息,请参阅此文档:数据库管理器安全

支持的浏览器

Odoo 支持市场上所有主要的桌面和移动浏览器,只要这些浏览器得到其发布者的支持。

以下是支持的浏览器:

  • 谷歌浏览器

  • Mozilla Firefox

  • 微软 Edge

  • 苹果 Safari

警告

请在提交错误报告之前,确保您的浏览器已更新至最新版本,并且仍受其发布方支持。

注解

自 Odoo 13.0 起,支持 ES6。因此,不再支持 IE。

1

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

2

从技术上讲,可以使用类似 socat 的工具在不同网络之间代理 UNIX 套接字,但这种情况通常只适用于只能通过 UNIX 套接字使用的软件。

3

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