Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Ruby

ปรับปรุงการ Deploy Ruby on Rails ด้วย Capistrano: คู่มือขั้นตอน

ในบทความนี้ เราจะกำหนดค่า Capistrano ใน Ruby on Rails Application เราจะ Deploy App ไปที่ Cloud Instance ที่รัน Ubuntu เป็น OS ไม่ขึ้นกับ Hosting Provider คุณสามารถใช้ Cloud Service ใดๆ หรือแม้แต่ On-premises Server เพื่อทดสอบหรือ Replicate ขั้นตอนที่เราจะทำ

หลังจาก Deploy App แล้ว เราจะดูสั้นๆ ว่าคุณสามารถ Monitor App Deployments ของคุณด้วย AppSignal ได้อย่างไร

แต่ก่อน คุณอาจถามว่า: ทำไมต้องใช้ Capistrano?

ทำไมต้องเลือก Capistrano สำหรับ Ruby on Rails App ของคุณ?

คุณอาจสงสัยว่ายังควรใช้ Capistrano สำหรับ Deployment อยู่หรือไม่ ตอนนี้เรามี Tools และ Services มากมายสำหรับ Deployments และ Continuous Integration

แต่เพื่อตอบคำถามนั้น เราต้องกลับไปดูที่ต้นกำเนิดของ Capistrano และวิวัฒนาการจนถึงปัจจุบัน Tag แรกที่สร้างใน Capistrano Repository คือในปี 2006 เป้าหมายคืออนุญาตให้ Execute Commands แบบ Remote ผ่าน SSH แบบ Parallel บนหลาย Machines ทั้งหมดใช้ DSL ตั้งแต่นั้นมา Capistrano วิวัฒนาการ โดยเพิ่ม Features หลายอย่างในแต่ละ Version

ปัจจุบันอยู่ที่ Version 3 หลังจาก 16 ปี Capistrano ยังคงพัฒนาอยู่ต่อเนื่อง และตอนนี้รู้จักกันเป็น Framework สำหรับสร้าง Automated Deployment Scripts

มันไม่ได้เป็นแค่ Tool สำหรับรัน Commands บน Remote Machines อีกต่อไป นอกจาก Features ของ Capistrano ยังมี Plugins และ Gems อื่นๆ มากมายที่รันกับ Capistrano โดยเฉพาะ

เพราะเหตุนี้ และข้อเท็จจริงที่ Community ใหญ่ยังคงใช้ Capistrano มันยังคงเป็น Tool ยอดเยี่ยมสำหรับ Automated Deployment

เพิ่ม Capistrano เข้า Ruby on Rails App ของคุณ

ก่อนอื่น คุณต้องกำหนดค่า Ruby on Rails Application ให้รวม Capistrano เข้าไป คุณสามารถปฏิบัติตาม Documentation ของ Capistrano อย่างไรก็ตาม มันมีข้อมูลมากกว่าที่คุณต้องการสำหรับ Scope ของโพสต์นี้ ดังนั้นเพื่อความเรียบง่าย บทความนี้รวมเฉพาะขั้นตอนและ Configuration ที่จำเป็นที่คุณจะต้องการ

เพื่อเริ่มต้น Configuration ให้เพิ่ม Capistrano Gem ในส่วน Development ของ Gemfile ของคุณ:


คุณต้องการ Capistrano-rails Gem เพื่อรัน Migration บน Database และจัดการ Assets ที่เราจะเห็นในส่วนถัดไป

ตอนนี้ รัน bundle install เพื่อเพิ่ม Capistrano เข้า Application ของคุณ:


จากนั้นคุณสามารถติดตั้ง Capistrano ได้:


คำสั่งนี้จะสร้างไฟล์ชื่อ Capfile ที่ Import และ Configure Libraries ที่จำเป็น อีกทั้ง ไฟล์ชื่อ deploy.rb (สร้างภายในโฟลเดอร์ config) จะมี Configurations ทั้งหมดที่ควรรวมใน Deployment ด้วย Capistrano

Note: Capistrano สร้างไฟล์สำหรับ Override deploy.rb Configuration สำหรับทั้ง Staging และ Production Environments แต่จะไม่ครอบคลุมในบทความนี้

ด้วยนั้น คุณพร้อมเริ่ม Configuration และ Communication ระหว่าง Ruby on Rails Application และ Server ของคุณ

Server Configuration ด้วย Capistrano สำหรับ Rails App ของคุณ

ในขั้นตอนนี้ เราจะเพิ่ม Instructions เข้า Capistrano Configuration File Instructions จะสื่อสารกับ Server ของคุณว่า App ของคุณจะ Deploy ที่ไหน นี่คือที่เราจะกำหนด Access Information และ Security Configuration

เพื่อให้แน่ใจว่า Production Environment รัน Ruby Version เดียวกับ Version ที่คุณใช้ใน Development ให้ใช้ Ruby Version Manager อย่าง RVM หรือ rbenv (Capistrano รองรับทั้งคู่)

ในบทความนี้ เราจะใช้ RVM ตรวจสอบให้แน่ใจว่าคุณติดตั้ง RVM บน Development Machine และ Production Server แล้ว ตรวจสอบว่ารุ่น Ruby ของคุณเหมือนกันใน Environments และ Project

เพิ่ม Gem capistrano-rvm

Capistrano Project มอบ Gem ชื่อ capistrano-gem ที่ให้คุณกำหนดค่า RVM ได้ง่าย เพื่อรวมมันใน Project ให้เพิ่มมันใน Gemfile ภายใน Development Group ของคุณ และรัน bundle install อีกครั้ง


อัปเดต Capfile ด้วย Capistrano-rvm Import:


ใน Deploy File ให้เพิ่ม Configuration เพื่อตั้ง Ruby Version และ Path ไป RVM (โดยเฉพาะหากคุณใช้ Path ต่างกันติดตั้ง RVM)

หากไม่ได้กำหนด Ruby Version Capistrano จะเลือก Latest Version ที่คุณติดตั้งบน Server ที่ App ของคุณจะ Deploy


Capistrano::RVM มี Settings อื่นๆ สำหรับ RVM แต่ตัวที่แสดงที่นี่คือสิ่งที่คุณต้องการเพื่อเริ่มต้น

ตั้งค่า Server Configuration ของคุณ

เป็น Best Practice ที่จะ Define User สำหรับ Deployment อย่าลืมปฏิบัติตามขั้นตอนเหล่านี้บน Server ของคุณ ก่อนเริ่ม Deployment:

  1. เพิ่ม Public Key ที่ Generate บน Local Machine ของคุณ เข้าไฟล์ ~/home/YOUR_USER/.ssh/authorized_keys
  2. สร้าง Key และรวม Public Key เข้า Code Repository นี่ให้คุณ Access เพื่อ Clone Project ภายใน Production Server หากคุณใช้ GitHub คุณสามารถปฏิบัติตาม Documentation นี้ได้
  3. ตั้งค่าสิทธิ์ให้ Write เข้า Directory /var/www/ ได้

คุณสามารถกำหนดค่า Capistrano สำหรับ Environment ใดก็ได้ที่คุณต้องการ คุณเพียงต้องสร้าง Configuration File ใหม่ภายใน config/deploy/<environment_name>.rb แล้วกำหนด IP หรือ DNS, และ Username เพื่อเชื่อมต่อกับ Server ของคุณ


เพื่อ Complete Deployment Setup ให้รวมข้อมูลเกี่ยวกับ Application ของคุณ เช่น Application Name และ Code Repository URL ข้อมูลใดๆ ที่เหมือนกันสำหรับทุก Environments ต้องเพิ่มเข้า config/deploy.rb เก็บ Environment-specific Configurations ไว้ใน config/deploy/<environment_name>.rb


ตั้งค่า Gem capistrano-secrets-yml สำหรับ Rails App ของคุณ

คุณควรตั้งค่า Gem Capistrano-secrets-yml ด้วย

เพิ่ม Gem เข้า Gemfile และรัน Bundle เพื่อติดตั้ง:


Import มันเข้า Capfile:


จากนั้นสร้าง config/secret.yml ใน Application ของคุณ และรวม Secret Key Base เป็น Environment Variable Variable นี้จะถูกสร้างบน Production Server จำไว้ว่า อย่า Commit ไฟล์นี้เข้า Repository


ภายในโฟลเดอร์ Application ใน Terminal รันคำสั่งนี้เพื่อ Generate Secret Key Base:


Copy Key ที่ Generate มา และใช้มันตั้ง SECRET_KEY_BASE บน Production Server เข้าถึง Production Server ของคุณ และ Export ตัวแปร SECRET_KEY_BASE ในไฟล์ ~/.bashrc สุดท้าย เพื่อให้มันพร้อมใช้งานตลอดเวลา:


รัน Source เพื่อให้มันพร้อมใช้งานทันทีใน Environment ของคุณ:


ตอนนี้ กลับมาที่ Machine ของคุณ เข้าถึงโฟลเดอร์ Application ใน Terminal และรันคำสั่ง Capistrano ด้านล่างเพื่อสร้าง config/secrets.yml บน Production Server:


เสร็จสิ้น! ตอนนี้ถึงเวลากำหนดค่า Capistrano ให้รัน Migration

กำหนดค่า Capistrano ให้ทำ Database Migration

ตอนนี้ถึงเวลากำหนดค่า Capistrano ให้รัน Database-related Commands

Gem capistrano-rails ที่รวมอยู่ใน Gemfile ของคุณแล้ว สามารถกำหนดค่าให้ทำ Migration ทุกครั้งที่ Deploy เราเพียงต้อง Import มันเข้า Capfile:


แต่หากคุณต้องการรัน Seeds ใน Deployment คุณต้องสร้าง Task ใหม่เพื่อรันหลัง Migration:


ด้วยนั้น App ของคุณพร้อม Deploy แล้ว!

เริ่ม Deployment ของ Ruby on Rails App ของคุณ

มา看看 วิธีทำ Deployment จาก Local Machine ของเราโดย Update Server โดยตรงไป Version ใหม่ของ Application

เมื่อคุณ Execute Deployment Command Capistrano จะเชื่อมต่อกับ Server ของคุณ จากนั้น Capistrano จะพยายาม Clone Code จาก Repository ที่กำหนดใน Config File (config/deploy.rb) จากนั้น Tasks อื่นๆ จะถูกดำเนินการ ตาม Deployment Flow

คำสั่ง deploy:check ของ Capistrano Validate ว่า Git Configuration OK และ Capistrano มี Access ถูกต้องไปยัง Directories ที่จะใช้ใน Deployment

เพื่อใช้ ให้ส่ง Environment ในกรณีนี้ เราใช้ Production:


หากทุกอย่าง OK กับ Configuration คุณสามารถเริ่ม Deployment ไป Production ได้:


เพิ่มเติม คุณสามารถเช็ค Available Tasks ทั้งหมดใน Capistrano ด้วยคำสั่ง:


ตอนนี้ ในขั้นตอนสุดท้าย มา Integrate Rails App ของเรากับ AppSignal และเริ่ม Monitor มัน

วิธี Integrate AppSignal กับ Capistrano และ Rails App ของคุณ

AppSignal เป็น Monitoring Tool ดังนั้นคุณอาจสงสัยว่าทำไมมันรวมอยู่ในบทความนี้ นั่นเป็นคำถามที่ถูกต้อง เพราะ Monitoring ไม่เกี่ยวข้องกับ Deployments โดยตรง

cela dit AppSignal เป็น Tool ที่มีค่าเมื่อพูดถึง Monitoring Ruby on Rails Application ของคุณ และติดตาม Deployments ในแต่ละ Environment มาดูว่าสามารถ Setup AppSignal สำหรับ App ของคุณได้อย่างไร

คุณจะต้องมี AppSignal Account ซึ่งคุณสามารถสร้างได้ที่หน้าลงทะเบียนของ AppSignal เลือก Ruby เป็นภาษา และปฏิบัติตามขั้นตอนติดตั้ง AppSignal ใน Application ของคุณ

ติดตั้งเสร็จ ไฟล์จะถูกสร้างเพื่อ Configure AppSignal สิ่งสำคัญที่นี่คือการ Define Revision — ข้อมูลที่จะถูกตรวจสอบหลัง Deployment เพื่อดูว่ามี Version ใหม่ของ Application ถูก Deploy หรือไม่ ในกรณีนี้ เราจะใช้ Git Log เป็น Revision Information เพื่อให้แน่ใจว่าการ Deploy Code ใหม่ทุกครั้งจะ Notify AppSignal


เป็น Best Practice อีกอย่างที่จะ Export AppSignal Environment Variables ไป Production Server ของคุณ (โดยเฉพาะ API Key เพื่อไม่ให้เก็บมันใน AppSignal Config File)


และตอนนี้เราสามารถ Re-run Deployment ได้ หากทุกอย่าง Setup ถูกต้อง คุณจะเห็นข้อความอย่างนี้ที่ท้าย Deployment:


ตอนนี้คุณจะเห็น Application ของคุณใน AppSignal! 🎉

ปรับปรุงการ Deploy Ruby on Rails ด้วย Capistrano: คู่มือขั้นตอน

และข้อมูลเกี่ยวกับ Deployments ใดๆ:

ปรับปรุงการ Deploy Ruby on Rails ด้วย Capistrano: คู่มือขั้นตอน

เยี่ยมชมหน้า Documentation การ Deploy ของ AppSignal เพื่อเรียนรู้เพิ่มเติมเกี่ยวกับ Deployment Integration และ Features อื่นๆ ที่พร้อมสำหรับ Ruby on Rails Applications

สรุปและขั้นตอนต่อไป

ในโพสต์นี้ เราสำรวจวิธีใช้ Capistrano Deploy Ruby on Rails App ของคุณ เราเพิ่ม Capistrano เข้า App ก่อน แล้ว Configure และ Deploy มัน ก่อนสุดท้าย Setup Monitoring ด้วย AppSignal

หากคุณต้องการสำรวจเพิ่มเติม คุณสามารถกำหนดค่า Capistrano ให้รันจาก Integration ที่เชื่อมต่อกับ Pipeline ของ Repository ของคุณ Tools อย่าง Bitbucket, GitHub และ GitLab ให้ Settings จัดการกระบวนการนี้ และสามารถใช้ร่วมกับ Capistrano ได้

Happy Coding!

P.S. หากคุณต้องการอ่าน Ruby Magic Posts ทันทีที่เผยแพร่ สมัครสมาชิก Ruby Magic Newsletter ของเรา และจะไม่พลาดโพสต์ไหนเลย!