如何在 Windows 下使用 Nginx 运行多个 Odoo 实例以提升性能

使用 Nginx 运行多个 Odoo 实例以提升性能

如何在 Windows 下使用 Nginx 运行多个 Odoo 实例以提升性能


Odoo 是一款功能强大的企业资源规划(ERP)软件,但随着用户数量的增加,单一实例的处理能力可能会成为瓶颈。由于 Windows 环境下 Odoo 的 worker 模式不受支持,因此我们选择使用多进程来替代,通过运行多个 Odoo 实例并使用 Nginx 作为反向代理服务器,可以显著提升系统的并发处理能力和整体性能。本文将介绍如何在 Windows 下配置多个 Odoo 实例并使用 Nginx 来平衡负载。​


一、准备工作

在开始之前,确保您已经安装了以下软件:

  1. Odoo:您需要在 C:\Program Files\Odoo 下安装 Odoo。有关如何下载 Odoo 的详细信息,请参考 ​ 这篇文章
  2. Nginx:从 Nginx 官方网站下载并安装。
1. 下载并安装 Nginx
  1. 从 Nginx 官方网站下载并安装 Nginx:
    • 访问 下载页面
    • 选择适合您操作系统的版本,通常是 Windows 版本,下载完成后,解压到本地目录。
  2. 解压并移动 Nginx 文件夹:
    • 下载完成后,将文件解压,并将 Nginx 文件夹移动到所需位置(例如 C:\nginx)。

二、配置 Nginx 作为反向代理

Nginx 是一个轻量级的高性能 HTTP 服务器和反向代理服务器,非常适合用来为多个 Odoo 实例做负载均衡。

1. 配置 Nginx

创建或修改 nginx.conf 文件,添加以下配置:

user  nobody;

worker_processes  4;  # 根据CPU核心数进行调整,具体见下文说明


events {

    worker_connections  1024;

}


http {

    include       mime.types;

    default_type  application/octet-stream;


    sendfile        on;

    keepalive_timeout  65;


    # 添加此映射指令来处理 WebSocket 连接

    map $http_upgrade $connection_upgrade {

        default upgrade;

        ''      close;

    }


    upstream odoo {

        server 127.0.0.1:8069;  # Odoo HTTP接口地址

        server 127.0.0.1:8079;  # Odoo HTTP接口地址

        server 127.0.0.1:8089;  # Odoo HTTP接口地址

        server 127.0.0.1:8099;  # Odoo HTTP接口地址

    }


    upstream odoochat {

        server 127.0.0.1:8072;  # Odoo 长轮询接口地址

    }


    server {

        listen       80;

        server_name  localhost;  # 将 server_name 设置为 localhost


        access_log  logs/odoo.access.log;

        error_log  logs/odoo.error.log;


        proxy_read_timeout 720s;

        proxy_connect_timeout 720s;

        proxy_send_timeout 720s;

        proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;


        client_max_body_size 200m;

        client_body_buffer_size 128k;


        location / {

            proxy_pass  http://odoo;

            proxy_redirect off;


            proxy_set_header Host $host;

            proxy_set_header X-Real-IP $remote_addr;

            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

            proxy_set_header X-Forwarded-Proto $scheme;

            proxy_set_header Upgrade $http_upgrade;

            proxy_set_header Connection $connection_upgrade;

        }


        location /longpolling {

            proxy_pass http://odoochat;

            proxy_set_header Upgrade $http_upgrade;

            proxy_set_header Connection $connection_upgrade;

        }


        location ~* /web/static/ {

            expires 864000;

            proxy_pass http://odoo;

        }


        gzip on;

        gzip_min_length 1000;

        gzip_types text/css text/scss text/plain text/xml application/xml application/json application/javascript;

        gzip_buffers 16 8k;

        gzip_comp_level 6;

    }

}


2. 调整 worker_processes

Nginx 的 worker_processes 参数决定了 Nginx 将使用多少个工作进程。通常建议将此参数设置为服务器 CPU 核心数的值,以充分利用多核 CPU 的处理能力。

调整方法:

  • 如果服务器有 4 个 CPU 核心,将 worker_processes 设置为 4:

         worker_processes  4;

  • 在多核环境下,适当增加 worker_processes 可以提高并发处理能力,但同时也会增加系统资源的消耗,建议根据实际负载情况进行调整。
3. 启动 Nginx

使用命令提示符(以管理员身份)启动 Nginx:

cd C:\nginx
start nginx

三、配置多个 Odoo 实例

要在同一台服务器上运行多个 Odoo 实例,我们需要为每个实例创建单独的配置文件,并使用不同的端口号。

1. 创建批处理脚本

以下是批处理脚本的内容,该脚本将帮助您自动化多个 Odoo 实例的配置:

@echo off

rem 设置环境变量(请根据实际安装路径更改以下地址)
set "BASE_DIR=C:\Program Files\Odoo 17.0.20240810\"

rem 设置端口号
set PORT1=8079
set PORT2=8089
set PORT3=8099

rem 检查和显示路径信息
echo Base Directory: %BASE_DIR%

if not exist "%BASE_DIR%nssm\win64\nssm.exe" echo NSSM path not found! & pause & exit
if not exist "%BASE_DIR%python\python.exe" echo Python path not found! & pause & exit
if not exist "%BASE_DIR%server\odoo-bin" echo Odoo-bin path not found! & pause & exit
if not exist "%BASE_DIR%server\odoo.conf" echo Odoo.conf path not found! & pause & exit

rem 安装并配置 odoo-server-1 服务
"%BASE_DIR%nssm\win64\nssm.exe" install odoo-server-1 "%BASE_DIR%python\python.exe"
"%BASE_DIR%nssm\win64\nssm.exe" set odoo-server-1 AppDirectory "%BASE_DIR%python"
"%BASE_DIR%nssm\win64\nssm.exe" set odoo-server-1 AppParameters "\"%BASE_DIR%server\odoo-bin\" -c \"%BASE_DIR%server\odoo-server-1.conf\""

rem 复制配置文件并修改端口号
copy "%BASE_DIR%server\odoo.conf" "%BASE_DIR%server\odoo-server-1.conf"
powershell -Command "(Get-Content '%BASE_DIR%server\odoo-server-1.conf') -replace 'http_port = 8069', 'http_port = %PORT1%' | Set-Content -Path '%BASE_DIR%server\odoo-server-1.conf'"

rem 启动服务
"%BASE_DIR%nssm\win64\nssm.exe" start odoo-server-1   

rem 安装并配置 odoo-server-2 服务
"%BASE_DIR%nssm\win64\nssm.exe" install odoo-server-2 "%BASE_DIR%python\python.exe"
"%BASE_DIR%nssm\win64\nssm.exe" set odoo-server-2 AppDirectory "%BASE_DIR%python"
"%BASE_DIR%nssm\win64\nssm.exe" set odoo-server-2 AppParameters "\"%BASE_DIR%server\odoo-bin\" -c \"%BASE_DIR%server\odoo-server-2.conf\""

rem 复制配置文件并修改端口号
copy "%BASE_DIR%server\odoo.conf" "%BASE_DIR%server\odoo-server-2.conf"
powershell -Command "(Get-Content '%BASE_DIR%server\odoo-server-2.conf') -replace 'http_port = 8069', 'http_port = %PORT2%' | Set-Content -Path '%BASE_DIR%server\odoo-server-2.conf'"

rem 启动服务
"%BASE_DIR%nssm\win64\nssm.exe" start odoo-server-2   

rem 安装并配置 odoo-server-3 服务
"%BASE_DIR%nssm\win64\nssm.exe" install odoo-server-3 "%BASE_DIR%python\python.exe"
"%BASE_DIR%nssm\win64\nssm.exe" set odoo-server-3 AppDirectory "%BASE_DIR%python"
"%BASE_DIR%nssm\win64\nssm.exe" set odoo-server-3 AppParameters "\"%BASE_DIR%server\odoo-bin\" -c \"%BASE_DIR%server\odoo-server-3.conf\""

rem 复制配置文件并修改端口号
copy "%BASE_DIR%server\odoo.conf" "%BASE_DIR%server\odoo-server-3.conf"
powershell -Command "(Get-Content '%BASE_DIR%server\odoo-server-3.conf') -replace 'http_port = 8069', 'http_port = %PORT3%' | Set-Content -Path '%BASE_DIR%server\odoo-server-3.conf'"

rem 启动服务
"%BASE_DIR%nssm\win64\nssm.exe" start odoo-server-3   

pause

 

2. 运行批处理脚本

将以上内容保存为 .cmd 格式文件并以管理员身份运行。该脚本将自动创建三个 Odoo 实例,分别监听不同的端口号(8079, 8089, 8099)。注意:这个文件必须要放在 Odoo 的安装文件夹运行,比如 C:\Program Files\Odoo 17.0.20240810 目录下。

四、测试与优化

完成上述配置后,您可以通过 http://localhost 访问 Odoo,并观察是否通过 Nginx 反向代理正常分发请求到多个实例。

优化建议:
  • 调整 worker_processes:根据服务器的 CPU 核心数调整 Nginx 的 worker_processes 参数。
  • 监控性能:使用工具如 htop 或 Windows 任务管理器来监控各个实例的性能表现,确保系统稳定运行。

结论​

通过配置多个 Odoo 实例和使用 Nginx 进行反向代理,您可以显著提升 Odoo 在 Windows 环境下的并发处理能力和整体性能。这种方法非常适合需要扩展 Odoo 处理能力的中大型企业。希望本文能帮助您成功配置并优化您的 Odoo 系统。

如果您对本文还有其他问题或建议,请随时​联系我们 


登录 留下评论

如何通过四种方式下载 Odoo
如何下载 Odoo