Natcha Luang - Aroonchai

Trust me I'm Petdo

Bangkok, Thailand

[AppEngine] ทดลองสร้างเว็บไซต์ด้วยภาษา Go

สำหรับบทความนี้จะเป็นตัวอย่างการสร้างเว็บไซต์บน Google AppEngine ด้วยภาษา Go ซึ่งผมอัพเดทจากบทความเดิมที่เขียนใน WordPress ด้วยแพคเกจ net/http มาใช้ Martini แทน จะเป็นอย่างไรลองมาดูกันครับ

สารบัญ

สมัครสมาชิก

สำหรับการสมัครสมาชิกและสร้าง project บน Google AppEngine ให้ดูจาก บทความก่อนหน้า ได้เลยครับ หลังจากที่สมัครสมาชิกและสร้าง project เรียบร้อยแล้ว ก็ไปที่ขั้นตอนการติดตั้ง AppEngine SDK กันครับ

ติดตั้ง AppEngine SDK

เราจำเป็นต้องติดตั้ง AppEngine SDK เพื่อใช้งานคำสั่ง CLI สำหรับอัพโหลดและดาวน์โหลด project ซึ่งตัว SDK หลัก ๆ จะเป็น Python ดังนั้นเราจำเป็นต้องติดตั้ง Python ในเครื่องก่อนเพื่อการใช้งาน ดาวน์โหลดและติดตั้ง Python จาก ที่นี่ ให้เลือก Python เวอร์ชัน 2.7.x เท่านั้นครับ

หลังจากติดตั้ง Python เสร็จเรียบร้อยแล้วก็มาถึงการติดตั้ง AppEngine SDK ดาวน์โหลด Go AppEngine SDK ได้ ที่นี่ ดูวิธีการติดตั้งแต่ละ OS จากลิงค์ที่มาได้เลยครับ

ตัวอย่าง code

มาถึงตัวอย่าง code สำหรับสร้างเว็บไซต์ ก่อนอื่นเราจำเป็นต้องติดตั้งแพคเกจ Martini ด้วยคำสั่ง

$ go get -u github.com/go-martini/martini

จากนั้นผมจะสร้าง folder ชื่อว่า gae-example จากนั้นสร้างไฟล์ main.go และ app.yaml แบบนี้

gae-example/
├── app.yaml
└── main.go

ต่อจากนั้นผมจะสร้างเว็บไซต์เพื่อ print คำว่า "Hello, world!" แบบง่าย ๆ

จากนั้นเราสามารถใช้คำสั่ง goapp serve . เพื่อ run server แบบ localhost ได้​

$ cd /path/to/project
$ goapp serve .

โดยเว็บไซต์จะ run อยู่ที่ port 8080 เราจะเห็นคำว่า "Hello, world!" นอกจากนี้เราสามารถดู dashboard ของแอพได้ด้วยที่ port 8000 แบบนี้

AppEngine Admin server

อัพโหลดแอพพลิเคชัน

หลังจากที่เราสร้างเว็บไซต์เสร็จแล้ว สามารถอัพโหลดได้โดยใช้คำสั่ง

$ appcfg.py update .

โดยคำสั่งนี้จะอัพโหลดแอพพลิเคชันของเราขึ้นไปตาม project-id ที่เราตั้งค่าเอาไว้ในไฟล์ app.yaml แต่เราสามารถใส่พารามิเตอร์เพื่อระบุ project-id เองได้ด้วยเช่นกัน

$ appcfg.py update -A project-id .

เมื่ออัพโหลดเสร็จเรียบร้อยแล้วเราสามารถเข้าถึงเว็บไซต์บน Google AppEngine ได้ด้วยการเรียก sub domain name ตามชื่อ project-id.appspot.com

เพิ่ม custom domain name

ถ้าเกิดเราต้องการชี้ domain name แทนการใช้ project-id เป็น sub domain name ผมได้เขียนวิธีการ setup เอาไว้แล้วใน บทความนี้ ซึ่งหลักการก็จะคล้าย ๆ กันครับ สามารถดูวิธีการชี้ domain name เพิ่มเติมได้จาก ที่นี่

Comments