How to use Nginx to run multiple Odoo instances on Windows to increase performance

Odoo instance on Windows for better performance

วิธีการใช้ Nginx เพื่อรันหลาย ๆ อินสแตนซ์ของ Odoo บน Windows เพื่อเพิ่มประสิทธิภาพ


Odoo เป็นซอฟต์แวร์วางแผนทรัพยากรองค์กร (ERP) ที่มีประสิทธิภาพสูง แต่เมื่อจำนวนผู้ใช้งานเพิ่มขึ้น ประสิทธิภาพของอินสแตนซ์เดียวอาจไม่เพียงพอ เนื่องจากในสภาพแวดล้อมของ Windows โหมด worker ของ Odoo ไม่รองรับ เราจึงเลือกใช้หลายกระบวนการ (multi-process) แทน โดยการรันหลาย ๆ อินสแตนซ์ของ Odoo พร้อมกับใช้ Nginx เป็นพร็อกซีเซิร์ฟเวอร์ สามารถเพิ่มความสามารถในการจัดการคำขอพร้อมกันและประสิทธิภาพโดยรวมได้อย่างมาก บทความนี้จะแนะนำวิธีการตั้งค่าหลาย ๆ อินสแตนซ์ของ Odoo และใช้ Nginx ในการกระจายโหลดใน Windows


หนึ่ง. การเตรียมงาน

ก่อนเริ่มต้น ให้ตรวจสอบว่าคุณได้ติดตั้งซอฟต์แวร์ดังต่อไปนี้แล้ว:

  1. Odoo: คุณต้องติดตั้ง Odoo ใน C:\Program Files\Odoo สำหรับวิธีการดาวน์โหลด Odoo อย่างละเอียด โปรดดูที่ บทความนี้
  2. Nginx: ดาวน์โหลดและติดตั้งจากเว็บไซต์ทางการของ Nginx。
1. ดาวน์โหลดและติดตั้ง Nginx
  1. ดาวน์โหลดและติดตั้ง Nginx จากเว็บไซต์ทางการ
    • เยี่ยมชม หน้าดาวน์ โหลด Nginx
    • เลือกรุ่นที่เหมาะสมกับระบบปฏิบัติการของคุณ โดยทั่วไปจะเป็นรุ่นสำหรับ Windows หลังจากดาวน์โหลดเสร็จ ให้ทำการแตกไฟล์ไปยังไดเรกทอรีในเครื่องของคุณ
  2. แตกไฟล์และย้ายไดเรกทอรี Nginx
    • หลังจากดาวน์โหลดเสร็จแล้ว ให้แตกไฟล์ และย้ายไดเรกทอรี Nginx ไปยังตำแหน่งที่ต้องการ (เช่น C:\nginx)

สอง. การตั้งค่า Nginx เป็นพร็อกซีเซิร์ฟเวอร์

Nginx เป็นเซิร์ฟเวอร์ HTTP ที่มีประสิทธิภาพสูงและมีน้ำหนักเบา เหมาะอย่างยิ่งสำหรับการกระจายโหลด (load balancing) สำหรับหลาย ๆ อินสแตนซ์ของ 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;


    # เพิ่ม directive นี้เพื่อจัดการกับการเชื่อมต่อ WebSocket

    map $http_upgrade $connection_upgrade {

        default upgrade;

        ''      close;

    }


    upstream odoo {

        server 127.0.0.1:8069;  # ที่อยู่ HTTP ของ Odoo

        server 127.0.0.1:8079;  # ที่อยู่ HTTP ของ Odoo

        server 127.0.0.1:8089;  # ที่อยู่ HTTP ของ Odoo

        server 127.0.0.1:8099;  # ที่อยู่ HTTP ของ Odoo

    }


    upstream odoochat {

        server 127.0.0.1:8072;  # ที่อยู่ longpolling ของ 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

พารามิเตอร์ worker_processes ของ Nginx กำหนดจำนวนกระบวนการทำงานที่ Nginx จะใช้ ปกติจะแนะนำให้ตั้งค่าตามจำนวนคอร์ของ CPU เพื่อใช้ประโยชน์สูงสุดจาก CPU ที่มีหลายคอร์

วิธีการปรับค่า

  • ถ้าเซิร์ฟเวอร์ของคุณมี 4 คอร์ ให้ตั้งค่า worker_processes เป็น 4:

         worker_processes  4;

  • ในสภาพแวดล้อมที่มีหลายคอร์ การเพิ่มค่า worker_processes สามารถเพิ่มความสามารถในการจัดการคำขอพร้อมกันได้ แต่จะเพิ่มการใช้ทรัพยากรของระบบเช่นกัน แนะนำให้ปรับตามสถานการณ์การใช้งานจริง
3. การเริ่มต้น Nginx

ใช้พรอมต์คำสั่ง (Command Prompt) โดยเปิดในโหมดผู้ดูแลระบบ (Administrator) เพื่อเริ่มต้น 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

สี่. การทดสอบและปรับแต่ง

หลังจากการตั้งค่าทั้งหมดเสร็จสิ้น คุณสามารถเข้าถึง Odoo ผ่าน http://localhost และตรวจสอบว่า Nginx สามารถกระจายคำขอไปยังหลาย ๆ อินสแตนซ์ได้ตามปกติหรือไม่

ข้อแนะนำในการปรับแต่ง:
  • ปรับค่า worker_processes:ตามจำนวนคอร์ของ CPU บนเซิร์ฟเวอร์เพื่อปรับค่า worker_processes ของ Nginx
  • ตรวจสอบประสิทธิภาพ:ใช้เครื่องมือตรวจสอบ เช่น htop หรือ Task Manager ของ Windows เพื่อดูแลประสิทธิภาพการทำงานของอินสแตนซ์แต่ละอันให้มั่นใจว่า ระบบทำงานได้อย่างเสถียร

สรุป

โดยการตั้งค่าหลาย ๆ อินสแตนซ์ของ Odoo และใช้ Nginx เป็นพร็อกซีเซิร์ฟเวอร์ คุณสามารถเพิ่มประสิทธิภาพการจัดการคำขอพร้อมกันและประสิทธิภาพโดยรวมของ Odoo บน Windows ได้อย่างมาก วิธีนี้เหมาะสำหรับธุรกิจขนาดกลางและใหญ่ที่ต้องการเพิ่มความสามารถในการจัดการของ Odoo หวังว่าบทความนี้จะช่วยให้คุณตั้งค่าและปรับแต่งระบบ Odoo ของคุณได้อย่างสำเร็จ

หากคุณมีคำถามเพิ่มเติมหรือคำแนะนำเกี่ยวกับบทความนี้ อย่าลังเลที่จะติดต่อเรา 


Sign in to leave a comment

How to download Odoo in four ways
How to download Odoo