Devahoy Logo
PublishedAt

Phoenix

วิธีการ deploy Phoenix App ด้วย Fly.io

วิธีการ deploy Phoenix App ด้วย Fly.io

เนื่องจากช่วงนี้ไปลอง Tutorial เกี่ยวกับ Elixir + Phoenix เพราะเห็นตัว LiveView แล้วน่าสนใจ ทีนี้ก็ติดปัญหา ว่าจะหา Hosting ที่เอาไว้ deploy แบบง่ายๆ ที่ไหนดีนะ? ไม่อยากใช้ VPS หรือต้อง setting อะไรยุ่งยาก ถ้าเป็นไปได้ Deploy docker file หรือรองรับ CI/CD ผ่าน git ก็เลยไปเจอตัว Fly.io ครับ วันนี้ก็เลยเขียนสรุปบันทึกเอาไว้ซักหน่อย

บทความผมฝึกเขียนเป็นภาษาอังกฤษไว้หลายเดือนแล้ว ภาษาไทย draft ไว้ไม่ได้โพสซักที 😅

ส่วน Reference ก็อ้างอิงจากบทความของ fly.io เลย

ติดตั้ง flyctl

ถ้าใช้ Mac OS และมี Homebrew ก็ติดตั้งง่ายๆ ด้วยคำสั่ง:

Terminal window
brew install flyctl

หรือจะรันด้วย script ผ่าน terminal:

Terminal window
curl -L https://fly.io/install.sh | sh

การ login ก็ทำผ่าน cli ได้เลย

Terminal window
fly auth login

สร้าง Phoenix App

ตัวอย่าง สร้าง Phoenix App ขึ้นมาแบบง่ายๆ ไม่เอา email, dashboard, translation และก็ ecto (database)

Terminal window
mix phx.new ahoy --no-mailer --no-dashboard --no-gettext --no-ecto

เรา deploy ไป fly.io ด้วยคำสั่ง

Terminal window
fly launch

โดยตัว fly ก็จะถามคำถามนิดๆหน่อยๆ

  • เลือก development region
  • ถามว่าจะ setting Postgresql หรือ Redis หรือไม่?
  • จะ deploy เลยมั้ย? ตอนนี้ยังก่อน
  • กำหนด secret key ( SECRET_KEY_BASE )
Terminal window
Detected a Phoenix app
? Choose an app name (leave blank to generate one):
? Choose a region for deployment:
? Would you like to set up a Postgresql database now?
? Would you like to set up an Upstash Redis database now?
Preparing system for Elixir builds
Installing application dependencies
Running Docker release generator
Wrote config file fly.toml
? Would you like to deploy now?
Configuration is valid
Your Phoenix app should be ready for deployment!.
If you need something else, post on our community forum at https://community.fly.io.
When you're ready to deploy, use 'fly deploy'.

เมื่อเราตั้งค่า config เสร็จ เราจะได้ไฟล์ fly.toml เป็นเหมือน metadata / configuration ไฟล์สำหรับ fly.io ที่ให้รู้ว่า project อะไร กำหนดอะไรอย่างไรบ้าง

Deploy App

ก่อนที่เราจะ deploy เราต้องทำการ generate secret key โดยวิธีนี้ใช้การ gen จาก method ที่ Phoenix มีให้

Terminal window
mix phx.gen.secret

กำหนด secret variable ให้กับ fly.io

Terminal window
fly secrets set SECRET_KEY_BASE=<YOUR_SECRET_KEY>

สุดท้าย deploy ด้วยคำสั่ง:

Terminal window
fly deploy

เพียงเท่านี้ ก็มีแอพ Phoenix ง่ายๆ ไว้ลองเล่นแล้ว

Happy Coding ❤️

References

Authors
avatar

Chai Phonbopit

เป็น Web Dev ในบริษัทแห่งหนึ่ง ทำงานมา 10 ปีกว่าๆ ด้วยภาษาและเทคโนโลยี เช่น JavaScript, Node.js, React, Vue และปัจจุบันกำลังสนใจในเรื่องของ Blockchain และ Crypto กำลังหัดเรียนภาษา Rust