deploy เว็บไซต์ที่เขียนด้วย Nodejs ง่ายๆ โดยใช้ PM2

เพิ่งกลับมาทดสอบเริ่มเขียน Node.js อีกครั้ง ที่ปกติแล้วที่บริษัทจะมีทีม DevOps ซึ่งเขาใช้ Jenkins เพื่อ build docker และ deploy image ที่ผ่านการทดสอบแล้วขึ้น production โดยอัตโนมัติเพียงแค่ push code ขึ้น git เท่านั้น

แต่เนื่องด้วยว่าถ้าเขียน project เอง และค่อนข้างโง่เรื่อง Jenkins (ทำไม่เป็นอะ 😂😂😂😂) เลยได้มาใช้ PM2

เกริ่นก่อนว่าเคยได้รู้จัก PM2 คร่าวๆมาแล้วเมื่อ 2 ปีก่อน โดยไม่ได้ทำอะไรกับมันจริงจัง เพียงแค่รู้ว่ามันช่วย restart process ให้อัตโนมัตหาก script ที่เขียนมัน throw error และ process ตาย จนกระทั่งไปอ่านเว็บไซต์ของ PM2 และได้เจอหัวข้อ Deployment

สิ่งแรกง่ายๆเลยที่ต้องมีคือ

  1. ลง PM2 บนเครื่องของตัวเอง
  2. ลง PM2 บนเครื่องของ Server
  3. มี Git ที่ไหนสักที่ 😂 ส่วนตัวใช้ Private Git ของ Microsoft คือ Visualstudio.com
  4. สามารถ ssh remote โดยใช้ SSH Key-based authentication จากเครื่องของตัวเองไปยัง Server ได้ (วิธีตั้งค่าอ่านเจอที่นี่)
  5. เช่นกัน Server สามารถ clone git จาก Git Server โดยใช้ SSH Key-based authentication ได้
  6. แน่นอนทั้งบนเครื่องตัวเองและ Server อย่าลืมสร้าง SSH config เพื่อให้ชีวิตง่ายขึ้นใน ~/.ssh/config

    ส่วนนี้สำหรับบน macOS

    Host *
        UseKeychain yes
        AddKeysToAgent yes
        IdentityFile ~/.ssh/id_rsa
    

    ส่วนนี้สำหรับบน Linux

    Host *
        IdentityFile ~/.ssh/id_rsa
    

    หากใครอยากตั้งค่า advance กว่านั้นก็สามารถทำได้ครับ อันนี้แบบ simple

  7. จากนั้นก็ทำตามเอกสารของ PM2 ได้เลย~

พอติดตั้งทุกอย่างเสร็จสิ้น หลังจากที่แก้ไข code และ push ขึ้น git แล้วก็แค่พิมพ์

pm2 deploy production update

หากต้อง revert ก็พิมพ์

# Revert to -1 deployment
$ pm2 deploy production revert 1