วิธีการ 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 ก็ติดตั้งง่ายๆ ด้วยคำสั่ง:
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 buildsInstalling application dependenciesRunning Docker release generatorWrote 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
- Authors
-
Chai Phonbopit
เป็น Web Dev ในบริษัทแห่งหนึ่ง ทำงานมา 10 ปีกว่าๆ ด้วยภาษาและเทคโนโลยี เช่น JavaScript, Node.js, React, Vue และปัจจุบันกำลังสนใจในเรื่องของ Blockchain และ Crypto กำลังหัดเรียนภาษา Rust