Hello world, PHP on appspot!

สวัสดีครับ ช่วงนี้หายไปนานเลย ช่วงนี้มีกิจกรรมของภาควิชาเยอะมาก เลยไม่ได้มาอัพบทความสักเท่าไหร่เลย = =”

ตอนนี้ผม (ทำระบบหลังบ้าน, PHP, JS) กับวิน (@winwanwon) (ทำหน้าบ้าน, HTML, CSS, JS, AngularJS) ช่วยกันทำเว็บค่าย Comcamp#27 กันอยู่ครับ ที่มาของการใช้งาน appspot ก็มาจากในหน้าประกาศผลการเข้าค่าย มันจะมี reChaptcha ให้ตรวจสอบว่าเป็นบอทรึเปล่า แล้วมันจะต้องมีการส่งค่าไปที่ Google ตามคู่มือนี้เพื่อพิสูจน์ทราบว่าเป็นรหัสจริง ไม่ได้โมเมเอา แต่เนื่องจากว่า server ของค่ายมันจำกัดการเชื่อมต่อจาก server ไปโลกภายนอก พอน้องๆ ส่ง reChaptcha มาเยอะๆ firewall มันจะบล็อกการเชื่อมต่อตัวหลังๆ ทำให้บางคนไม่สามารถเช็คผลได้ ผมก็เลยต้องใช้วิธิ “ยืมมือส่งสาร” ตามผังด้านล่างนี้ :

ผังอธิบายการทำงานของระบบช่วยยืนยันรหัส reCaptcha

ผังอธิบายการทำงานของระบบช่วยยืนยันรหัส reCaptcha

จากภาพจะเห็นได้ว่าจะต้องมีการทำงานทั้งฝั่ง client คือยิง request ไปยัง server รองที่ทำหน้าที่ช่วยตรวจผลของ reChaptcha และฝั่ง server ย่อย นอกจากเช็คกับ Google แล้ว ถ้าถูกต้องก็ต้องส่ง Token ไปยัง server ของค่ายเพื่อแคชผลไว้ไม่ต้องเช็คซ้ำ นอกจากจะลดการทำงานของฝั่ง server ค่าที่ไม่ต้องไปบากหน้าติดต่อกับ Google ทุกครั้ง (ให้มีเฉพาะกรณี server ย่อยทำงานให้ไม่ทัน) แล้ว ยังช่วยคงค่า Quota การติดต่อของ server ไว้ได้อีกด้วย

เริ่มต้นก็เข้าไปที่หน้าแดชบอร์ดของ appspot เพื่อสร้าง Application ในงานนี้ครับ

การสร้าง application ใน Google appspot dashboard

การสร้าง application ใน Google appspot dashboard

เสร็จแล้วก็เข้าไปที่ App Config Tool แล้วเลือก PHP configuration เพื่อเข้าไปโหลด SDK มาใช้ครับ (แน่ล่ะ จะทำ PHP นี่เนอะ) อ้อ! อย่าลืมลง Python ก่อนนะครับ เพราะโปรแกรมรันด้วย Python

ติดตั้งเสร็จก็เรียก Google App Engine Launcher ขึ้นมา…

หน้าหลักของ GAEL

หน้าหลักของ GAEL

แล้วก็สร้าง Application บนเครื่องเราขึ้นมา กด File > Create New Application (Ctrl + N) แล้วสร้างขึ้นมาโดยใช้ชื่อ Application เดียวกับที่เราสร้างใน web เมื่อตะกี๊นี้ครับ

เมนูการสร้าง Application ในเครื่องเรา

เมนูการสร้าง Application ในเครื่องเรา สามารถสร้างได้ทั้ง Application เปล่า (Create New Application…) หรือจะลองรัน Application ตัวอย่างจาก Google ก็ได้ (Add Demo Application…)

ให้เราเลือกที่ตั้งของ Application บนเครื่องเรา แล้วอย่าลืมเลือก runtime เป็น PHP ด้วย ส่วนเลขพอร์ตทั้งสองอันจะใช้เลขที่สร้างมาให้หรือจะใส่เองก็ได้ แต่ต้องไม่ซ้ำกับโปรแกรมอื่นหรือโปรเจกอื่นๆนะครับ…

Popup การสร้าง Application

Popup การสร้าง Application

 

จะได้แอพฯ ขึ้นมาตัวหนึ่งพร้อม Code Hello world ของ PHP ใน main.php ใน folder ที่เราเลือกไว้ ให้เราเลือก application ของเราแล้วกด Edit ครับ เราจะเข้าไปแก้ไฟล์ app.yaml ซึ่งเป็นไฟล์ config ของโครงการครับ

ตัวอย่างไฟล์ app.yaml

ตัวอย่างไฟล์ app.yaml ในตัวอย่างนี้ใส่ module: default ไว้แล้วนะครับ ตอนแรกยังไม่มี

ให้เราใส่ property

module: default

เพิ่มจากเดิมด้วยนะครับ เพราะไม่งั้นมันจะมีปัญหา ‘module’ parameter not specified นะครับ

ส่วนใน handlers เราสามารถเปลี่ยนหน้าแรกของโปรเจกได้ด้วยนะครับ เช่นจะเปลี่ยนจาก main.php เป็น index.php หรืออื่นๆ ก็แล้วแต่ใจชอบ เสร็จแล้วกด save

เมื่อปรับแต่งจนพอใจแล้ว สั่งรัน Project (บนเครื่องเรา) โดยเลือกโปรเจกของเราแล้วกด Run จะใช้เวลาครู่หนึ่งครับเพื่อเปิดใช้งาน

ตัวอย่างหน้าจอ GAEL หลังสั่งรัน Application

ตัวอย่างหน้าจอ GAEL หลังสั่งรัน Application

เสร็จแล้ว เราสามารถเข้าไปลองเขียน Code ในโฟลเดอร์ที่เราสร้างไว้ในตอนต้น แล้วรันบนหน้าเว็บได้ผ่านทาง http://localhost:[port] โดย port นี้จะเป็นพอร์ตคนละตัวกับ admin port นะครับ หรือจะกดดูจาก Browse รูปลูกโลกก็ได้เช่นกัน

หลังจากที่เราเขียน Code จนพอใจแล้ว หากต้องการ deploy สู่เว็บจริง ทำได้โดยการเลือกโปรเจกของเราแล้วกด deploy จะขึ้น popup ให้กรอก username และ password ที่ใช้ เสร็จแล้วรอจนกว่าจะคัดลอกข้อมูลจนขึ้นคำว่า “You can close this window now.” ก็เป็นอันเรียบร้อย (ถ้าไม่ขึ้น error น่ะนะ)

หน้าจอขอ username กับ password ที่ใช้ใน appspot เพื่อ deploy

หน้าจอขอ username กับ password ที่ใช้ใน appspot เพื่อ deploy

Console log ของการสั่ง deploy โปรเจก

Console log ของการสั่ง deploy โปรเจก

หลังจากนี้ ก็สามารถเข้าไปใช้งานโปรเจกเราได้ที่ https://[project_name].appspot.com ได้เลยครับ 😉

ตัวอย่างหน้าจอของ https://itpcctest.appspot.com/ หลังสั่ง deploy

ตัวอย่างหน้าจอของ https://itpcctest.appspot.com/ หลังสั่ง deploy

จริงๆ นอกจาก PHP ยังรองรับการใช้กับ MySQL ด้วยนะครับ แต่คงต้องไว้คราวหน้า (ตอนไหนก็ไม่รู้ = =”) ส่วนใครมีคำถามอะไรก็ถามมาใน Comment ได้เลยนะครับ 😀