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

เอาเถอะ ...

เท่าที่ลองวิเคราะห์ดู ตัวโปรดักท์ตัวนี้ตัวมันเองมีสองส่วน ส่วนหนึ่งคือชุดของ HTML Single Page Application เขียนด้วย Angular.JS กับเฟรมเวิร์คอีกหลายตัว ตรงนี้เซ็ตไม่ยากมีแค่ web server ตัวเดียวเอาไฟล์ไปวางไว้ก็ทำงานได้ละ

จุดที่ยากคือส่วนของ Middle Tier ที่เป็น Web Application แบ่งเป็นส่วนที่เก็บไอ้ส่วนแรกนั่นแหละ กับส่วนที่เป็นเรื่องของ service ต่าง ๆ ตรงนี้มันพึ่งพากับบริการสองส่วน ก็คือ JBoss EAP กับ MySQL (อันหลังเนี่ยอยากด่าสุด ๆ) ซึ่งบริการสองตัวนี้ก็ต้อง config ไม่งั้นมันก็ทำงานไม่ได้

มาถึงตรงนี้เรามีสี่ส่วนที่ต้องดูแล โชคดีว่าไอ้ Single Page นั่นเป็นแค่ static html ธรรมดาเลยไม่ต้องสนใจ ไอ้ที่เหลือเนี่ยสิงานช้าง ...

ตัวโปรดักท์เก่าเป็น J2EE Web App ธรรมดา ดังนั้นที่ต้องทำคือทำให้มันคอมไพล์ผ่าน ตัว application server ไม่จำเป็นต้องมีการคอนฟิกอะไรมากนัก ผมเคยเสนอ build automation ที่ชื่อว่า Gradle พร้อมเขียนสคริปท์ไปให้เรียบร้อย (ใช้วันหยุดไปตั้งหลายวัน เซ็งเป็ด) แต่ตัวใหม่เนี่ยแค่ Build Automation ไม่พอแล้ว เพราะว่าตัว application server ก็ต้องมีการ setup วุ่นวายมากมายตาแป๊ะไก่ นี่ยังไม่ได้พูดถึง MySQL เลยนะ

วันนี้เลยจะจดว่า แค่ Gradle มันไม่พอแล้ว เพราะว่าตัว JBoss eap ไม่มีวิธีที่จะ deploy module เข้าไปผ่านทางคำสั่ง ต้องเอาไฟล์ไปวางเอง ซึ่งตรงนี้เขียนเป็นสคริปท์ก็ลำบากเพราะว่าแต่ละเครื่องก็วางกันคนละที่ ส่วน MySQL นั้นยิ่งแล้วใหญ่ เพราะว่าถ้าใช้วิธีมี DB Server ในเครื่องแล้วโหลดเข้าโหลดออก (อย่าลืมว่าผมต้องทำงาน 3 release พร้อม ๆ กันนะครับ) แล้วมันอลวนสุด ๆ

ทางออกที่นึกออกตอนนี้คือ ใช้ Docker ซะเลย Docker เป็น Application Container มันจะมีซอฟต์แวร์ทุกอย่างที่จำเป็น เราสามารถสร้าง image ที่คอนฟิกทุกอย่างเอาไว้เรียบร้อยแล้ว แค่โหลดลงมาแล้วเรียกใช้ตรง ๆ ไม่ต้องคอนฟิกอะไรอีก ผมว่าวิธีนี้เวิร์คสุดในการคอนฟิกตัว service สองตัวที่จำเป็นต้องใช้

ส่วน Application Code นั้นเราก็สร้าง Gradle script ขึ้นมาใช้แบบเดิม น่าจะดีกว่า ...

ข้อเสียเหรอ ? มันต้องลงโปรแกรมเพิ่ม และ Docker ใช้งานได้เฉพาะบน Linux ถ้าเป็นแพลตฟอร์มอื่นต้องลง Virtual Machine ซึ่งก็มีเครื่องมือจัดการอยู่แล้วไม่น่ามีปัญหาอะไร

ปัญหาใหญ่ที่สุดคือทำอย่างไรให้คนอื่นฟังความเห็นเรานี่ล่ะ โปรดักท์เก่าเคยเสนอไปแล้วก็โดนตีกลับมาอย่างไม่มีความเห็น คราวนี้ manager product ตัวนี้มาไทยคงได้คุยกันบ้าง