วิธีการใช้ Nginx เพื่อรันหลาย ๆ อินสแตนซ์ของ Odoo บน Windows เพื่อเพิ่มประสิทธิภาพ
Odoo เป็นซอฟต์แวร์วางแผนทรัพยากรองค์กร (ERP) ที่มีประสิทธิภาพสูง แต่เมื่อจำนวนผู้ใช้งานเพิ่มขึ้น ประสิทธิภาพของอินสแตนซ์เดียวอาจไม่เพียงพอ เนื่องจากในสภาพแวดล้อมของ Windows โหมด worker ของ Odoo ไม่รองรับ เราจึงเลือกใช้หลายกระบวนการ (multi-process) แทน โดยการรันหลาย ๆ อินสแตนซ์ของ Odoo พร้อมกับใช้ Nginx เป็นพร็อกซีเซิร์ฟเวอร์ สามารถเพิ่มความสามารถในการจัดการคำขอพร้อมกันและประสิทธิภาพโดยรวมได้อย่างมาก บทความนี้จะแนะนำวิธีการตั้งค่าหลาย ๆ อินสแตนซ์ของ Odoo และใช้ Nginx ในการกระจายโหลดใน Windows
หนึ่ง. การเตรียมงาน
ก่อนเริ่มต้น ให้ตรวจสอบว่าคุณได้ติดตั้งซอฟต์แวร์ดังต่อไปนี้แล้ว:
- Odoo: คุณต้องติดตั้ง Odoo ใน C:\Program Files\Odoo สำหรับวิธีการดาวน์โหลด Odoo อย่างละเอียด โปรดดูที่ บทความนี้
- Nginx: ดาวน์โหลดและติดตั้งจากเว็บไซต์ทางการของ Nginx。
1. ดาวน์โหลดและติดตั้ง Nginx
- ดาวน์โหลดและติดตั้ง Nginx จากเว็บไซต์ทางการ:
- เยี่ยมชม หน้าดาวน์ โหลด Nginx
- เลือกรุ่นที่เหมาะสมกับระบบปฏิบัติการของคุณ โดยทั่วไปจะเป็นรุ่นสำหรับ Windows หลังจากดาวน์โหลดเสร็จ ให้ทำการแตกไฟล์ไปยังไดเรกทอรีในเครื่องของคุณ
- แตกไฟล์และย้ายไดเรกทอรี 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 ของคุณได้อย่างสำเร็จ
หากคุณมีคำถามเพิ่มเติมหรือคำแนะนำเกี่ยวกับบทความนี้ อย่าลังเลที่จะติดต่อเรา
How to use Nginx to run multiple Odoo instances on Windows to increase performance