เส้นทางของการสร้างเว็บ ไปจนถึงการ Deploy — [8 Tech Stacks]

Photo by: http://sudeep.co/cloud-computing/How-to-Build-Your-Development-Stack-in-the-Cloud-from-Scratch/?fbclid=IwAR0fPqDPw09QUE57Q7h669kizr43VMNyD6ma9QtZmc8yUkLXhjryXnGMv_E

How to Build Your Development Stack in the Cloud from Scratch

บทความนี้ผมไปเจอบทความหนึ่งซึ่งเป็นการอธิบายถึงการสร้างเว็บไปจนถึงการ Deploy โดยเขาได้เล่าถึงเทคโนโลยีต่าง ๆ ที่เขาได้เลือกใช้ ซึ่งเจ้าของบทความนี้แกมีชื่อว่า Sudeep Agarwal

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

1. Infrastructure as a Service (IaaS)

โดย stack ตัวแรกจะเป็น Cloud ซึ่งเอาไว้ Host โปรเจคท์หรือเว็บเรานั้นเองครับ
ซึ่งคุณ Sudeep เขาเลือกใช้บริการของ DigitalOcean

DigitalOcean

เหตุผลที่เลือกใช้ DigitalOcean

  • Cheap(ประหยัด ราคาไม่แพง)
  • Quick(เร็ว)
  • User Friendly(เป็นมิตรกับผู้ใช้งาน)

2. Domain Name

เมื่อมีตัวคลาวด์ที่เอาไว้ใช้ Host เว็บแล้วเรียบร้อย จากนั้นก็ต้องมีการจดโดเมนเนม ถ้าหลายท่านที่ยัง ไม่เข้าใจว่าโดเมนเนมคืออะไร คำตอบง่าย ๆ ก็คือชื่อเว็บของเรานั่นแหละครับ โดยชื่อนี้ต้องไม่ซ้ำกันกับคนอื่น โดยในที่นี้ตัวโดเมนเนมของคุณ Sudeep ก็คือ sudeep.co ซึ่งเขาก็เรียกใช้บริการของ NameCheap ซึ่งในตลาดก็มีหลายเจ้าที่ให้บริการในการจดโดเมนเนมอย่างเช่น GoDaddy, HostGator, etc

NameCheap

เหตุผลที่เลือกใช้ NameCheap

  • การซัพพอร์ตที่ยอดเยี่ยม

3. Web Server

ตอนนี้ก็มีคลาวด์และจดโดเมนเนมเรียบร้อยแล้ว จากนั้นก็จะเป็นการเลือกใช้ Web Server เพื่อใช้ในการจัดการกับ Requests และก็ Workloads ต่าง ๆ ที่มีเข้ามาในเว็บของเรา ซึ่งเจ้าตลาดตอนนี้ก็มี 2 ตัวหลัก ๆ ก็คือ Apache และ Nginx ซึ่่งตัว Apache หลาย ๆ คนน่าจะได้ยินมานานแล้วล่ะ แต่ตอนนี้ Nginx น่าจะเป็นตัวที่ได้รับความนิยมสูงสุดในปัจจุบัน

Nginx

เหตุผลที่เลือกใช้ Nginx

  • มีการออกแบบมาได้ดีและได้แก้ไขปัญหาหลายส่วนที่เป็นจุดบกพร่องของ Apache
  • มี Documentation ที่ดีสำหรับ DigitalOcean ซึ่งเป็นคลาวด์ที่เขาเลือกใช้นั่นเอง

4. Static Site Generator

ก่อนอื่นต้องทำความกับ static site เป็นเว็บไซต์ที่ไม่มีการเปลี่ยนแปลงของข้อมูล ดังนั้นจึงไม่มีการเชื่อมต่อกับ Database ซึ่งก็เหมาะเอาไว้สำหรับแสดงผลหน้าเว็บที่ไม่ต้องการเปลี่ยนแปลงหรืออัพเดตข้อมูล ซึ่งตัวเว็บที่เป็น Static Site นี้ค่อนข้างที่จะโหลดเร็วมาก เพราะไม่มีการดึงข้อมูลจาก Database แถมยังมีความปลอดภัยสูง เพราะไม่มีการรับข้อมูลเข้ามาจากภายนอก ทำให้ปลอดภัยจากการแฮ็ก และข้อดีอื่น ๆ อีกมาก แต่ข้อเสียแน่นอนว่ามันไม่ Dynamic ดังนั้นถ้าต้องมีการอัพเดตข้อมูลบ่อย ๆ ก็ต้องกลับไปแก้โค้ด ซึ่งถ้าไม่ใช้โปรแกรมเมอร์ก็จะไม่สามารถทำได้หรือทำได้ยาก ดังนั้นเว็บไซต์ส่วนใหญ่ในโลกจะเป็นเว็บแบบ Dynamic ส่วน Static จะค่อนข้างมีน้อย
โดยตัว Static Site Generator ที่คุณ Sudeep เลือกใช้ก็คือ Jekyll

Jekyll

เหตุผลที่เลือกใช้ Jekyll

  • ใช้ง่ายและมีคอมมิวนิตี้ที่ดีเยี่ยม

เว็บของคุณ Sudeep ในตอนนี้จากการวิเคราะห์ดูไม่น่าจะเป็น Static Website เพราะว่าแกได้มีการโพสต์และ อัพเดตอยู่บ่อย ๆ ดังนั้นที่แกรวม Static เข้ามาในหัวข้อนี้จริงหมายถึงตอนแกสร้างเว็บแรก ๆ ที่เอาไว้ใช้เป็น Portfolio, etc

5. Web Framework

ตอนนี้มีเว็บเรียบร้อยแล้ว ที่นี้เว็บยังเป็น static อยู่ใช่ไหมครับ ซึ่งอย่างที่ทราบว่า static website เป็นเว็บที่ไม่มีการ เปลี่ยนแปลงหรืออัพเดตของข้อมูล คำถามคือถ้าต้องการเขียนโพสต์ สร้างบล็อก แล้วจะต้องทำยังไง ต้องไปทำการ
เปลี่ยนแปลงแก้ไขโค้ดทุกครั้ง แบบนี้มันจะไม่ใช่ static site แล้ว มันจะกลายเป็น Dynamic Web ซึ่งก็ต้องใช้ Web Framework เข้ามาช่วยตรงนี้ ซึ่งเว็บเฟรมเวิร์คก็มีอยู่มากมายหลากหลายเฟรมเวิร์คหลากหลายภาษาในปัจจุบันซึ่งคุณ Sudeep เขาบอกว่าเขานั้นมีความคุ้นนเคยกับไพธอนมากกว่าภาษาอื่น ดังนั้นแน่นอนว่าเขาจึงเลือก Web Framework ที่เป็นภาษาไพธอน ซึ่งแน่นอนครับว่า จริง ๆ มีอยู่มากมายหลายตัว แต่ตัวชูโรงก็มีอยู่ 2 ตัวนั่นก็คือ Django และ Flask
ซึ่งเขาก็เลือก Flask ซึ่งเขาคิดว่าน่าจะเหมาะสมและเพียงพอกับโปรเจคท์เล็ก ๆ นี้แล้ว

Flask

เหตุผลที่เลือกใช้ Flask

  • มีไลบรารี่ต่าง ๆ ด้าน Data Science และ Machine Learning ที่มีชื่อเสียงอยู่มากมายหลายตัว ดังนั้นถ้าต้องการนำมา
  • ใช้งานก็สามารถทำได้อย่างสบาย ๆ
    ง่ายในการเซ็ตอัพ คอนฟิกไม่ยุ่งยาก

6. WSGI Server

Web Server Gateway Interface (WSGI) ก็คือตัวที่จะเอาไว้ให้ตัว Web Server(Nginx) และก็ Web Application(Web framework) นั่นก็คือ Django
คุยกันได้นั่นเอง โดยคุณ Sudeep ได้เลือก Gunicorn ซึ่งแน่นอนว่าตัวนี้เป็นหนึ่งในตัว WSGI Server ที่ได้รับความนิยมมากที่สุดในปัจจุบัน

Gunicorn

เหตุผลที่เลือกใช้ Gunicorn

  • เซ็ตอัพง่ายไม่ยุ่งยากเท่ากับตัว uWSGI (ในความคิดคุณ Sudeep)

7. Remote Development

คุณ Sudeep แกบอกว่า แกได้เลือก Jupyter Notebook อันนี้ผมก็ไม่เคยใชั Jupyter Notebook สำหรับงาน Remote นะ

Jupyter

เหตุผลที่เลือกใช้ Jupyter Notebook

  • สามารถแก้ไขโค้ดของเราบนคลาวด์ได้เลย เหมือนที่กับเรากำลังแก้ไขโค้ดในเครื่องคอมของเราเอง
  • คุณอาจจะติดใจ และไม่อยากกลับมาใช้
    ตัว IDE อีกก็เป็นได้ (ขนาดนั้นเลยหรอครับ

;) ฮ่า ๆ ) ในส่วนตัวของผม ผมใช้ PyCharm

8. Code Repository

ซึ่งตัวที่จะเอาไว้ใช้เก็บโค้ดของเรา หรือทำ Version Control แบบออนไลน์ โดยแน่นอนครับว่าถ้านึกถึงตัว Version Control หลาย ๆ ท่านคงนึกถึง GitHub มาในหัวเป็นอันดับแรกแน่ แต่ในตลาดผู้ให้บริการ ก็ยังมีอีกหลาย เจ้าที่ดัง ๆ อย่างเช่น GitLab, BitBucket เป็นต้น ซึ่งอีตา Sudeep แกก็ได้เลือก GitLab เป็นคำตอบสุดท้ายสำหรับ Code Repository ของแก ซึ่งแต่ก่อนถ้าเราต้องทำงานเป็นทีมแบบเก็บซอร์สโค้ดของเราแบบ Private จะมีการจำกัดจำนวนสมาชิกในทีม แต่ GitLab นั้นฟรี แต่ ณ วันนี้(วันที่ 19 เมษายน 2563) ซึ่งก่อนหน้านี้ไม่กี่วันก็มีข่าวใหญ่ในวงการโปรแกรมมิ่งว่า GitHub เปิดให้ใช้แบบ Private ฟรีและไม่จำกัดกันเลยทีเดียว (ไม่แน่ใจว่านี่คืออีกหนึ่งกลยุทธ์ที่ใช้ในการดึงลูกค้าที่ไปเรียกใช้บริการเจ้าอื่นกลับมาใช้ GitHub หรือเปล่า ?) อันนี้แค่เดา ๆ นะครับ

GitLab

เหตุผลที่เลือกใช้ GitLab

  • ฟรี
  • ใช้ได้ร่วมกันหลายคนในทีม

ซึ่งทั้ง 8 เทคโนโลยีตั้งแต่การเลือกเว็บเฟรมเวิร์คไปจนถึงการ deploy เว็บของเรา หวังว่าคงเป็นประโยชน์กับหลาย ๆ ท่านนะครับ ว่าก่อนที่จะได้เว็บมา 1 เว็บ มันมีโปรเซสอะไรบ้าง

ถ้าชื่นชอบบทความนี้ก็อย่าลืมกด Clap หรือแชร์ไปให้เพื่อน ๆ ได้อ่านกันด้วยครับ หรือจะคอมเมนต์แลกเปลี่ยน แสดงความคิดเห็น
ก็ยินดีครับ

Sonny STACKPYTHON

ท่านสามารถติดตามพวกเราได้ที่ stackpython ตามช่องทางด้านล่างนี้ได้เลยครับ

Instagram: stackpython

Facebook: stackpython

Website: stackpython.co

YouTube: stackpython

บทความบนเฟสบุ๊ค

Reference

http://sudeep.co/cloud-computing/How-to-Build-Your-Development-Stack-in-the-Cloud-from-Scratch/?fbclid=IwAR0fPqDPw09QUE57Q7h669kizr43VMNyD6ma9QtZmc8yUkLXhjryXnGMv_E

Full Stack Python Developers