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

Phoenix Framework Oct 8, 2023

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

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

How to deploy Phoenix App with Fly.io
Learn how to deploy Phoenix App with Fly.io using flyctl — a command line tool.

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

Getting Started
Documentation and guides from the team at Fly.io.

ติดตั้ง flyctl

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

brew install flyctl

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

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

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

fly auth login

สร้าง Phoenix App

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

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

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

fly launch

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

  • เลือก development region
  • ถามว่าจะ setting Postgresql หรือ Redis หรือไม่?
  • จะ deploy เลยมั้ย? ตอนนี้ยังก่อน
  • กำหนด secret key ( SECRET_KEY_BASE )
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 มีให้

mix phx.gen.secret

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

fly secrets set SECRET_KEY_BASE=<YOUR_SECRET_KEY>

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

fly deploy

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

Happy Coding ❤️


References

Tags

Chai Phonbopit

เป็น Web Dev ทำงานมา 10 ปีหน่อยๆ ด้วยภาษา JavaScript, Node.js, React, Vue และปัจจุบันกำลังสนใจ Web3, Crypto และ Blockchain เขียนบล็อกที่ https://devahoy.com