系统配置

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

警告

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

数据库过滤器

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

当作为已登录的公司用户使用后端(Web客户端)时,这不是问题:可以在登录时选择数据库,然后加载自定义设置。

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

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

对于在生产环境中托管多个数据库的服务器,特别是如果使用了 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 启动参数防止列出您的数据库,并阻止访问数据库管理屏幕。另请参阅 security

PostgreSQL

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

UNIX socket 适用于希望 Odoo 和 PostgreSQL 在同一台机器上运行的情况,且在没有提供主机时是默认选项,但如果您希望 Odoo 和 PostgreSQL 在不同的机器上运行 1 ,则需要 监听网络接口 2 ,具体如下:

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

  • 接受连接到安装了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

in /etc/postgresql/<YOUR POSTGRESQL VERSION>/main/postgresql.conf 设置:

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

配置Odoo

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

The packaged installers will automatically create a new user (odoo) and set it as the database user.

  • 数据库管理界面受 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控制连接的SSL安全性,可选值为’disable’、’allow’、’prefer’、’require’、’verify-ca’或’verify-full’

PostgreSQL 文档

内置服务器

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

多线程 服务器是一个较为简单的服务器,主要用于开发、演示以及其与各种操作系统(包括 Windows)的兼容性。每个新的 HTTP 请求都会生成一个新线程,即使是像 websocket 这样的长连接也是如此。此外,还会生成额外的守护 cron 线程。由于 Python 的限制(GIL),它并不能充分利用硬件资源。

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

多进程 服务器是一个功能完备的服务器,主要用于生产环境。它不受 Python 资源使用限制(GIL)的影响,因此能够充分利用硬件资源。服务器启动时会创建一组工作进程。新的 HTTP 请求由操作系统排队,直到有工作进程准备好处理它们。一个额外的事件驱动 HTTP 工作进程会在另一个端口上启动,用于实时聊天。额外的定时任务工作进程也会被启动。一个可配置的进程监视器会监控资源使用情况,并可以终止/重启失败的工作进程。

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

注解

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

工作进程数量计算

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

  • Cron工作进程需要CPU

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

内存大小计算

  • 我们认为20%的请求是重型请求,而80%的请求是较简单的请求

  • 当所有计算字段和 SQL 请求都设计良好时,一个繁重的工作进程预计会消耗约 1GB 的 RAM。

  • 在相同的场景中,一个轻量级的工作进程预计会消耗大约150MB的内存。

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

在线聊天

在多进程模式下,会自动启动一个专用 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个cron。我们还将使用监控系统来测量CPU负载,并检查它是否在7到7.5之间。

  • RAM = 9 * ((0.8*150) + (0.2*1024)) ~= 3Go RAM for 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

无论是通过网站/网页客户端还是Web服务访问,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 定义其他配置。可添加`安全`标志以确保不会通过 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服务器仅会为Web客户端、网站和Web服务API公开主要的HTTP端点。因为Odoo不再控制工作进程的创建,所以它无法设置cron或livechat工作进程。

定时任务工作者

需要启动一个内置的 Odoo 服务器与 WSGI 服务器一起运行,以处理 cron 任务。该服务器必须配置为仅处理 cron 任务,而不处理 HTTP 请求。可以通过使用 --no-http 命令行选项或将配置文件中的 http_enable = False 设置为实现此目的。

在类 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'/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(和兼容的Web服务器)的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’ 作为登录名。不要将这些登录名用于日常操作,仅用于控制/管理安装。 永远不要 使用任何默认密码,如 admin/admin,即使是用于测试/暂存数据库。

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

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

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

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

  • 定期安装最新版本的构建,可以通过GitHub或从https://www.odoo.com/page/download或http://nightly.odoo.com下载最新版本来保持安装程序更新。

  • 将服务器配置为多进程模式,并设置适合您典型使用情况的限制(内存/CPU/超时)。另请参阅: 内置服务器

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

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

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

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

  • 如果可能的话,请将公共演示/测试/暂存实例托管在与生产实例不同的机器上。并采取与生产相同的安全预防措施。

  • 如果您的公共面向的Odoo服务器可以访问敏感的内部网络资源或服务(例如通过私有VLAN),请实施适当的防火墙规则来保护这些内部资源。这将确保Odoo服务器不能被意外使用(或由于恶意用户行为)来访问或干扰这些内部资源。通常可以通过在防火墙上应用出站默认拒绝规则,然后仅明确授权Odoo服务器需要访问的内部资源来实现。 Systemd IP流量访问控制<http://0pointer.net/blog/ip-accounting-and-access-lists-with-systemd.html> _也可能对实施基于进程的网络访问控制有用。

  • 如果您的公共Odoo服务器位于Web应用程序防火墙、负载均衡器、透明DDoS保护服务(如CloudFlare)或类似的网络级设备后面,您可能希望避免直接访问Odoo系统。通常很难保持Odoo服务器的终端IP地址的机密性。例如,当从Odoo查询公共系统或发布电子邮件时,它们可能出现在Web服务器日志中或邮件头中。在这种情况下,您可能希望配置防火墙,使终端点除了来自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 =

这可以与监狱定义一起使用,以在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

数据库管理器安全性

配置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.confodoorc (隐藏文件)).

配置文件位于: 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 进行部署,这样可以降低成本,因为在受控环境中部署“自签名”证书比在互联网上更容易。