เอา Nexus ไว้หลัง Proxy

ทรัพยากรมีจำกัดต้องใช้ให้คุ้ม

เมื่ออยู่เป็นแผนกวิจัยพัฒนาหลายคนคงคิดว่ามันคงจะมีทรัพยากรมากมายให้คุณใช้สอยเหมือนในหนัง จริงๆมันก็มีแหละในบริษัทใหญ่ๆที่มีเงินเหลือกินเหลือใช้มีฝ่ายวิจัยและพัฒนาแบบจริงจัง แต่ในบริษัทที่ไม่ใหญ่มากไม่ได้มีเงินทุนมหาศาล ทรัพยากรต้องใช้อย่างเต็มเม็ดเต็มหน่วยที่สุด อะไรประหยัดได้ต้องประหยัดเพื่อให้ได้เงินสูงสุดแล้วแปรเปลี่ยนมาเป็นโบนัสของเรา

เอา Nexus ไว้หลัง Proxy

หลังจากนอกเรื่องมานานมาเข้าเรื่องกันดีกว่า คือจริงๆผมต้องการสร้าง Nexus ไว้เป็น Lib กลางให้คนในบริษัทใช้ ถ้าได้ติดตาม Blog ผมจะมีการสอนการติดตั้งเบื้องต้นใน Environment Test ซึ่งจากการทดลองเป็นไปได้สวย ผมต้องการเอามันขึ้น Server จริงๆ พอเอาขึ้นก็เจอปัญหาเลยซึ่งปัญหาที่ว่าก็คือมันต้องวางไว้หลัง Proxy แต่ตอนที่ผมทดลองผมไม่ได้วางหลัง Proxy มันเลยมีปัญหา หลังจากปลุกปล้ำกับมันนานอยู่นานทำยังไงก็ไม่ได้ จนพี่ทำงานไปอ่าน Manual ของ Docker nexus ได้ซึ่งทำแค่บรรทัดเดียว

ซึ่งบรรทัดที่ว่าคือ

1
docker run -d -p 8081:8081 --name nexus --ulimit nofile=65536:65536 -e NEXUS_CONTEXT=nexus sonatype/nexus3

โดยตรง -e NEXUS_CONTEXT=nexus นั้นหมายถึงจะกำหนด Web context ให้กับตัว Docker Nexus ที่เรากำลังจะสร้างขึ้นมา ซึ่งจากตัวอย่างเรากำหนดเป็น nexus เวลาเข้า Nexus ก็จะเข้าเป็น 192.168.56.101:8081/nexus จากก่อนหน้านี้ต้องเข้าเป็น 192.168.56.101:8081/

_* 192.168.56.101 เป็น VM จำลองเครื่อง Server ในเครื่องผมเอง

ส่วน –ulimit nofile=65536:65536 เป็นความต้องการค่าที่ตัว nexus ต้องการโดยค่า nofile เป็นการกำหนดค่าว่า process สามารถเปิดไฟล์ได้สูงสุดได้เท่าไหร่ โดยตัว Nexus ต้องการอย่างน้อย 65536

จากนั้นก็ไปตั้งค่าให้กับ Proxy ดังนี้ (อันนี้ผมมีตัว Proxy เป็น apache)

1
2
3
4
<Location "/nexus" >
ProxyPass "http://192.168.56.101:8081/nexus"
ProxyPassReverse "http://192.168.56.101:8081/nexus"
</Location>

* ในส่วนของการตั้งค่านั้นผมลง Docker ให้อยู่ที่เครื่องเดียวกับ Server แล้วให้มันเปิด Port 8081 กับตัวเครื่อง เวลา Request เข้ามาก็ให้มัน Route เข้า Port ข้างในของตัวเครื่องเอง แต่ไม่ต้องตกใจเครื่องผมตั้ง firewall เปิดแค่ 80 กับ 443 ดังนั้นคนนอกเข้าตรงๆผ่าน port 8081 ไม่ได้

พอตั้งค่าเสร็จก็รันได้ขึ้นมาอย่างสวยงามโดยเข้าที่ url : http://192.168.56.101/nexus

จากรูปจะเข้าแบบ HTTP ได้ แต่ปัญหาก็มาอีกเพราะต้องการใช้ HTTPS พอเข้าผ่าน https://192.168.56.101/nexus แล้วได้หน้าแบบนี้

หลังจากนั่งงมหาอยู่นานมากๆก็เจอว่าแค่เพิ่มค่า config ใน apache อีก 1 บรรทัดเท่านั้น พอมานึกถึงตรงนี้แล้วนึกถึงคำอาจารย์ที่สอนวิชา Unix ว่าบางครั้งคุณจะเจออะไรแบบที่มัน magic มากๆ คือแบบเพิ่ม Config บรรทัดเดียว แก้ค่า config จากเลขนึงเป็นเลขนึง ระบบที่มีปัญหาจะกลับมาทำงานได้อย่างปกติยังกะร่ายเวทมนตร์

1
2
3
4
5
<Location "/nexus" >
ProxyPass "http://192.168.56.101:8081/nexus"
ProxyPassReverse "http://192.168.56.101:8081/nexus"
RequestHeader set X-Forwarded-Proto "https"
</Location>

หลังจากเสียเวลาไป 1 วันเต็มๆซึ่งเสียไปกับความอ่อนแอด้านการ Config ติดตั้งเครื่องและความเข้าใจเรื่องทฤษฏีต่างๆทำให้นึกถึงตอนเรียนที่ตัวเองไม่ค่อยชอบยุ่งเรื่องการ Config เพื่อนไปลงเรียนวิชาพวก Config ก็ไม่สนใจไปเรียน จริงๆกลัวเกรดตกเพราะวิชามันแข่งกับเวลาในการปฏิบัติ แต่มานึกอีกทีไป Sit in เรียนไม่เอาเกรดก็ได้นี่นา มานึกตอนนี้ก็เสียดายที่ตอนมีโอกาสใกล้ชิดกับผู้เชี่ยวชาญกลับไม่สนใจใฝ่รู้ พอถึงวันที่ทำงานจริงมันเหมือนเราอยู่กลางทะเลจะไปทางไหนก็ไม่รู้ จะเริ่มหาจากตรงไหนก็ไม่รู้เพราะไม่เข้าใจพื้นฐาน หากได้เรียนมาสักนิดอย่างน้อยก็จะพอเข้าใจและรู้ Key word ที่ใช้ในการค้นหา

ปล. ที่เห็น HTTPS เป็นสีแดงเพราะผมสร้าง cert ขึ้นมาเองตัว Browser มันเลยบอกไม่น่าเชื่อถือ

"สิ่งที่ผมเขียนขึ้นเป็นเพียงความรู้และความเข้าใจของบุคคลเพียงบุคคลเดียว ดังนั้นอย่าเพิ่งเชื่อในสิ่งที่ผมเขียนและอธิบาย ลองทำความเข้าใจว่ามันเป็นจริงอย่างนั้นไหมและลองหาแหล่งอ้างอิงอื่นๆว่าเขามีแนวคิดอย่างไร เรื่องการ Design และวิธีการใช้งานไม่มีถูกไม่มีผิดมีแต่เหมาะสมกับงานนั้นไหม"

ref :
https://serverfault.com/questions/577437/what-is-the-impact-of-increasing-nofile-limits-in-etc-security-limits-conf
https://help.sonatype.com/repomanager3/system-requirements