มาลองใช้ Odoo ผ่าน Docker กัน

Odoo เป็นซอฟต์แวร์ที่ชื่อเดิมคือ Open ERP ซึ่งตอนนี้ตัวมันเองมาถึง version 11 และมองตัวเองเป็นมากว่า ERP มาตั้งแต่เวอร์ชัน 8 แล้ว ในบทความนี้ผมได้ทำการทดลองติดตั้งและเปิดใช้บริการ Odoo ผ่านการใช้งาน Container ของ Docker เป้าหมายคือ มี Database PostgreSQL 9.4 ติดตั้งไว้ 1 Container ที่เหลืออีก 5 Container เป็น ตัว Odoo ที่สร้างขึ้นมาเพื่อแยกให้ใช้ของแต่ละหน่วยงานย่อย และเก็บอยู่คนละ database ใครที่มี usecase การใช้งานคล้ายๆกับของผม หวังว่าน่าจะได้ไอเดียเอาไปใช้ประโยชน์ในหน่วยงานได้ครับ

 

พื้นฐาน Odoo

Odoo จัดเป็น Sofware ระบบงานด้าน ERP ที่มีทั้งแบบ Enterprise Version (เสียตังค์) และ Community Edition (ใช้ฟรี) และถูกนำมาใช้เป็นระบบ ERP ในบริษัทขนาดเล็กถึงขนาดกลางจำนวนมาก ด้วยเหตุที่มันมีโมดูล (App)  ด้านบัญชีครบทั้งหมด รวมถึงระบบงานที่ใช้ในการบริหารองค์กรอย่างมีประสิทธิภาพ อีกทั้ง Code ที่ใช้ในการพัฒนาเป็น Python และ database ที่เป็น open source อย่าง PostgreSQL ทำให้ Odoo เป็นตัวเลือกที่จัดว่าน่าสนใจที่สุด ในการนำมาใช้เป็นระบบงานพื้นฐานในองค์กร โดยที่ยังสามารถพัฒนาต่อขยายได้อีกไกล

odoo_app

ในบทความนี้จะนำเสนอวิธีการติดตั้ง Odoo ฝ่าน Docker และเปิดใช้งาน 2 App ที่ผมคิดว่าทุกหน่วยงานน่าจะต้องการใช้งานคือ Project ที่ใช้ในการบริหารโครงการ และ Website Builder ที่ใช้ในการสร้างเว็ปของหน่วยงานแบบสวยๆได้ภายใน 2-3 นาที

วิดีโอแนะนำ Odoo 11 ตัวล่าสุด

 

ทำไมต้อง Docker Container

ก่อนจะพูดถึงเรื่อง Docker ต้องดูก่อนว่าเรามีตัวเลือกอะไรบ้างสำหรับการติดตั้งระบบงานสำหรับใช้ภายในหน่วยงาน

  1. การใช้เครื่อง Server จริงๆ โดย Spec ขั้นต่ำที่ต้องใช้คือ CPU 2 core, RAM 4 GB , HDD 256 GB ซึ่งต้นทุนน่าจะประมาณ 2-3 หมื่นบาท ในขณะที่ใช้ได้แค่หน่วยงานเดียว ข้อเสียคือต้องดูแลเครื่องให้ใช้งานได้ตลอดเวลา แสดงในรูป (a)
  2. ใช้การสร้าง VM โดยอาจใช้ Spec เดียวกับของข้อ 1 ข้อดีคือ ดูแลง่ายโดยการติดตั้งจะลงทั้ง database และ odoo server ไว้ใน VM เดียวเลย แสดงในรูป (b)
  3. ใช้ Docker Container บน VM ตัวเดียว ซึ่งติดตั้งง่ายกว่า แยกส่วนของ database server และ odoo server ทำให้ง่ายในการบริหารจัดการ โดยให้ odoo server container แต่ละตัวต่อ database คนละก้อนกัน ทำให้ถึงแม้ตัว Server พังไป ตอนเอากลับขึ้นมาใหม่ยังคงสามารถใช้ข้อมูลเดิมได้อยู่เพราะแยกกันเก็บตั้งแต่แรก แสดงในรูป (c)

compare_arch

ตอนี้เรากำลังจะทำตามโมเดลในรูป (c) คือใช้ Docker Container สำหรับให้บริการทั้ง 5 หน่วยงาน (Department) เนื่องจากจำนวนผู้ใช้ในแต่ละหน่วยงานถูกประมาณการไว้แล้วว่าไม่เกิน 5-30 คน ปริมาณการใช้งานและความถึ่ในการใช้ค่อนข้างต่ำ แต่ก็ยังอยากแยกไม่ให้ผู้ใช้เกี่ยวข้องกันข้ามหน่วย ทางเลือกที่เราเลือกจึงเป็นคำตอบที่ทัั้ง เบา เร็ว และแรง

เริ่มการติดตั้ง และปรับแต่ง Odoo

จากสภาพแวดล้อม VM ที่ผมขอใช้งานมาได้ spec อยู่ที่  CPU ขนาด 2 Core, RAM 4 GB , Hdd 150 GB ซึ่งสามารถขอขยายได้ภายหลังหากมีความต้องการใช้งานเพิ่มขึ้น ตัวระบบปฏิบัติการที่ใช้คือ CenOS 7 ขั้นตอนต่อไปคือ การติดตั้ง Docker และการเริ่มรัน Container ของ PostgreSQL 9.4 และ Odoo 11 สามารถดูรายลเเอียดได้ในลิงค์นี้ [ Link ]

ติดตั้ง Docker

# sudo yum install docker

ติดตั้ง PostgreSQL Container และ  run container โดยตั้งชื่อว่า db และตั้งชื่อผู้ใช้และรหัสผ่านชื่อ odoo

docker run -d -e POSTGRES_USER=odoo -e POSTGRES_PASSWORD=odoo --name db postgres:9.4

ติดตั้ง Odoo 11 Container และ run container โดยตั้งชื่อว่า odoo และเชื่อมต่อกับ database ชื่อ db โดย map port forward ที่ 8069 ซึ่งเป็น port มาตรฐานของ odoo

docker run -d  -p 8069:8069 --name odoo --link db:db -t odoo

จากตัวอย่างคือท่ามาตรฐาน แต่ความต้องการของเราต้องมี odoo ทั้งหมด 5 container เราจะใช้วิธี map port ให้กับแต่ละหน่วยงานไล่ตั้งแต่ dep1 – dep5 เป็น port 9001-9005 เพื่อใช้ port เป็นตัวแยกบริการ ดังนั้นเราสามารถ รันคำสั่ง ใหม่ได้ดังนี้

# docker run -d -p 9001:8069 –name odoo_dep1 –link db:db -t odoo
# docker run -d  -p 9002:8069 –name odoo_dep2 –link db:db -t odoo
# docker run -d  -p 9003:8069 –name odoo_dep3 –link db:db -t odoo
# docker run -d  -p 9004:8069 –name odoo_dep4 –link db:db -t odoo
# docker run -d  -p 9005:8069 –name odoo_dep5 –link db:db -t odoo

นั่นหมายความว่าหากต้องการเรียกใช้ odoo ของ dep1  ต้องเข้าผ่าน http://[server ip]:9001/  ของ dep2 ต้องเข้าผ่าน http://[server ip]:9002 นั่นเอง โดยคำสั่งอื่นๆ ที่จะได้ใช้บ่อยๆ คือ

คำสั่งดู container ทั้งหมดทั้งที่รันอยู่ และที่ถูกหยุดไว้

# docker ps -a

คำสั่งที่ใช้สำหรับหยุดการทำงาน container

# docker stop odoo_dep1

คำสั่งที่ใช้สำหรับการลบ container

# docker start odoo_dep1

คำสั่งที่ใช้สำหรับการลบ container (โดยต้องหยุดก่อน)

# docker rm odoo_dep1

คำสั่งที่ใช้ดูทรัพยากรของ container ที่ทำงานอยู่

# docker stats db odoo_dep1 odoo_dep2 odoo_dep3

 

ตัวอย่างหน้าจอในการใช้งานระบบ

ตัวอย่างที่เอามาให้ดูจะเฉพาะส่วนของ WebSite Builder และ Project Management Module จริงๆยังมี  ส่วนอื่นๆ ที่น่านำมาประยุกต์ใช้ในองค์กรอีกเยอะ ทำให้สามารถช่วยลดค่าใช้จ่ายและช่วยให้คนในองค์กรณ์ทำงานได้ง่ายขึ้นอีกด้วย

edit_page

ส่วนของ Website Builder มี interface แบบลากวาง ทำให้สามารถสร้างเว็ปขององค์กรเสร็จได้ในพริบตา จาก 2 หน้าตัวอย่างด้านล่างผมใช้เวลาทำประมาณ 15 นาที ทั้งหารูปและใส่ content

main_page

หน้าหลักของเว็ปไซต์แสดงระบบงานย่อยที่อยู่ในโครงการ Digital University ที่อยู่ระหว่างการดำเนินการ

project_page

หน้ารวมระบบบริหารโครงการ ซึ่งเชื่อมโยงกับเว็ปของ container ตัวอื่นๆ สามารถเลือกไอคอนที่ Odoo เตรียมไว้ให้

project

ตัวอย่างหน้าบริหารโครงการ สามารถเพิ่มขั้นตอนเองได้ (ในที่นี้ผมใช้รูปแบบเป็น Todo, Doing, Done) โดยใช้ Kanban View และ interface ที่สาารถลากแต่ละ Task ไปยังแต่ละขั้นตอนได้เพื่อให้สามารถติดตามงานว่าไปถึงขั้นตอนไหนแล้ว

project_stat

ตัวอย่างหน้าสรุปปริมาณงาน โดยสามารถแสดงเป็น Chart รูปแบบต่างๆ ผ่านตัวเลือกได้อย่างง่ายดาย ทำให้ผู้บริหารสามารถรับรู้สถานะของแต่ละโครงการได้แค่เพียงคลิ๊กเดียว

 

ปัญหาที่เจอและวิธีแก้ไข

เมื่อเริ่มเปิดเรียกใช้งานจริงก็เจอกับปัญหาหนึ่งคือ กรณีที่เราสร้างหน้าเว็ปให้กับผู้ใช้ทั่วไปเข้าถึง ในการเรียกครั้งแรกตัว odoo จะส่งไปหน้าเลือกฐานข้อมูลตลอด เนื่องจากตรวจพบว่ามีฐานข้อมูลหลายตัว สามารถแก้ปัญหาได้โดยการเพิ่ม parameter ในการ filter database ในตอนรันดังนี้

# docker run -d -p 9001:8069 –name odoo_dep1 –link db:db -t odoo — –db-filter=odoodb_dep1

หมายเหตุ: กำหนดให้ชื่อ database ใช้ในรูปแบบ odoodb_*   ดังนั้นถ้าเป็น dep5 จะใช้ database ชื่อ odoodb_dep5 นั่นเอง

อีกปัญหาที่จะเจอคือการปรับแต่งตัว firewall ของ OS ผ่านคำสั่ง firewall-cmd และ iptables ตรงนี้สามารถค้นหาใน google ได้ไม่ยาก

บทสรุปการใช้งาน

หลังจากทดลองใช้มาซักระยะ พบว่าการใช้งานในรูปแบบของ Container  สามารถช่วยลดความสิ้นเปลืองในการใช้ทรัพยากรได้เป็นอย่างดี โดยที่ยังคงรักษาระดับความพึงพอใจของผู้ใช้ได้ เหมาะสำหรับองค์กรที่มีความต้องการในการใช้งานระบบบริหารจัการของหน่วยงานย่อยที่มีปริมาณผู้ใช้และปริมาณความถึ่ในการใช้งานไม่มาก แต่หากมีความต้องการเพิ่มขึ้นเราก็สามารถเพิ่มทรัพยากรเพื่อการขยายระบบเข้าไปได้โดยง่าย หน่วยงานไหนสนใจนำระบบไปใช้งานสามารถติดต่อเข้ามาได้ครับ ยินดีให้คำปรึกษา

 

ติดตามข้อมูลผ่าน FanPage เข้าไปกด Like ที่: https://www.facebook.com/AjBeeMePage