Deploy เว็บไซต์ ไปที่ Heroku เมื่อเราเขียนเว็บไซต์ แล้ว ก็คงอยากที่จะ deploy เว็บไซต์ ขึ้นไปยัง web hosting เพื่อให้คนอื่นสามารถเข้าถึงเว็บไซต์ได้
บทความนี้จะมาแนะนำวิธีการ Deploy เว็บไซต์หรือการอัพโหลดเว็บไซต์เราไปที่เครื่อง Hosting นั่นเอง โดยใช้ Heroku ซึ่งเป็นบริการคลาวด์แบบ Platform as a Service (Paas) ที่ให้บริการสำหรับนักพัฒนาซอฟต์แวร์ สามารถรองรับภาษาต่างๆ เช่น Java , Python , PHP ,Ruby, Go และ Node.js เป็นต้น โดยนักพัฒนาซอฟต์แวร์ใช้ Heroku ในการ Deploy และจัดการแอปพลิชัน เพราะ Heroku มี Add-ons สำหรับเพิ่มเติมบริการอื่นๆ เช่น PostgreSQL, MongoDB, Redis เป็นต้น โดยมีให้เลือกใช้งานฟรี และเสียเงิน
Heroku เหมาะสมกับ…
- สำหรับผู้ที่ต้องการทดลองเขียนเว็บแอปพลิเคชัน ทดสอบโค้ด และการทำงานของแอปพลิชันโดยไม่ต้องเช่า Server
- สำหรับผู้ที่ต้องการลดเวลาในการพัฒนาแอปพลิชัน เนื่องจากไม่มีความจำเป็นต้องตั้งค่าเครื่อง Server เอง
- สำหรับผู้ที่มีทรัพยากรไม่พอ ทั้งในเรื่องของเงิน เวลา ด้านบุคคล และอื่นๆ
- สำหรับผู้ที่ต้องการมุ่งเน้นในการพัฒนาแอปพลิชันเพียงอย่างเดียว
ข้อกำหนดเบื้องต้น
ข้อกำหนดสำหรับบทความนี้คือ คุณต้องติดตั้ง Go บนคอมพิวเตอร์ของคุณตามบทความ ติดตั้ง Go และ ทดสอบ Hello World และ คุณคุ้นเคยกับรูปแบบและโครงสร้างของมัน มาก่อน
สร้าง เว็บไซต์ ภาษา Go
go mod init hello-heroku : สร้าง โฟลเดอร์ ชื่อ hello-heroku สร้างไฟล์ Go Modules ด้วยคำสั่ง
go mod init hello-heroku
ความแตกต่างของโค้ด
การ Deploy เว็บไซต์ ไปที่ Heroku นั้น มีโค้ดทีต้องแก้ไข port จากที่เราเขียนโค้ดตามปรกติคือ 3000 , 4000 , 8000 หรือ 8080 เป็น port := os.Getenv(“PORT”) โดยโค้ดนี้ทำหน้าที่ดึงค่าตัวแปรสภาพแวดล้อมจาก Server ของ Heroku มาให้กับ ตัวแปร port และ http.ListenAndServe(“:”+port, nil) จะกําหนดพอร์ตตามค่า ตัวแปร port อีกที
สร้างไฟล์ main.go เขียนโค้ดดังนี้
package main
import (
"io"
"net/http"
"os"
)
func hello(w http.ResponseWriter, r *http.Request) {
io.WriteString(w, "Hello Heroku!")
}
func main() {
port := os.Getenv("PORT")
http.HandleFunc("/" , hello)
http.ListenAndServe(":"+port, nil)
}
สมัครสมาชิก Heroku
ไปที่ https://www.heroku.com/ -> Sing Up for Free
กรอกข้อมูล -> CREATE FREE ACCOUNT (ข้อมูลควรเป็นข้อมูลที่น่าเชื่อถือ เพราะมีผลต่อการอนุมัติ)
Heroku จะให้เรายืนยัน Email ที่เราสมัครไป แล้ว Heroku จะให้เราตั้งรหัสผ่านเพื่อใช้ Login ในระบบ Heroku
เข้าสู่หน้าจอ Dashboard ของ Heroku
ติดตั้ง Heroku Command Line
ทดสอบ Deploy ผ่าน Command Line ของ Heroku โดยไปที่ https://devcenter.heroku.com/articles/heroku-cli
แล้วเลือกติดตั้งตาม ระบบปฏิบัติการ ที่ใช้งาน ในตัวอย่างบทความเป็น Windows จึงเลือกใช้เป็น 64-bit installer
หลังจากติดตั้งเสร็จแล้ว เปิด “Command Prompt” ขึ้นมา โดยไปที่ ช่องค้นหา พิมพ์ cmd เลือก Command Prompt
แล้วใช้คำสั่ง heroku login เพื่อเข้าสู่ระบบ
heroku login
กด ตัวอักษรอื่นๆ ที่ไม่ใช่ q
จะเปิด Web Browser ขึ้นมาโดยอัตโนมัติ
ให้เรา Login ผ่าน Browser ด้วย Username Password ที่เราสมัครไป
เมื่อกด Login แล้วถ้ากลับไปดูที่ Command Prompt ของเรา จะแสดงการ Login สำเร็จแล้ว
Deploy เว็บไซต์ ไปที่ Heroku
cd เข้าไปในโฟลเดอร์เว็บไซต์ของเรา
go mod vendor : เราต้องการให้มีโฟลเดอร์ vendor ในโปรเจคของเรา โดยรันคำสั่ง go mod vendor เพื่อดาวโหลดทุก dependencies ที่เราเขียนไว้ใน go.mod มาเก็บไว้ในโฟลเดอร์ vendor ใน root โฟลเดอร์ของเรา
go mod vendor
Git คือ Version Control ที่ถูกพัฒนาขึ้นมาเพื่อใช้ในกระบวนการพัฒนาซอฟต์แวร์ แปลให้เข้าใจแบบง่าย ๆ คือ ระบบที่ถูกพัฒนาขึ้นมาเพื่อใช้สำหรับการติดตาม ตรวจสอบ การพัฒนา แก้ไข ซอร์ซโค้ด ซอร์ซไฟล์ ต่าง ๆ ในขั้นตอนการพัฒนา ที่สามารถตรวจสอบได้ทุกตัวอักษร ทุกบรรทัด ทุกไฟล์ ที่มีการแก้ไข ใครเป็นคนแก้ไข และแก้ไข ณ วันที่เท่าไหร่
git init คือ “intialize” คือเริ่มต้น ก่อนที่เราจะใช้งาน git ได้ต้อง git init เป็นการสร้าง git repository ใหม่บนเครื่องของเราเอง บางครั้งทั้ง project คุณอาจจะทำเพียงครั้งเดียวก็เป็นไปได้ ผลการสั่งเริ่มต้นสร้าง git จะพบ Initialized empty Git repository in ตามด้วยโฟลเดอร์ที่เราใช้คำสั่ง
git init
git add สำหรับทำการเพิ่มสิ่งที่เราเปลี่ยนแปลงและสร้างใหม่ไปยัง index (unstage -> stage) และยังกำหนดแฟ้มที่ต้องการ push หรือ upload ขึ้น server ถ้าใช้ git add . จะหมายถึงแฟ้มทั้งหมดจากทุก folder ก่อนที่จะทำการ commit ต่อไป
git add .
git commit ทำการยืนยันการเปลี่ยนแปลงจากการ add หรือทำการ update HEAD ที่ local repository แต่ไม่ได้เปลี่ยนแปลงที่ remote repository โดยจะทำการ commit จากสิ่งที่ถูกเพิ่มมาจากคำสั่ง git add เท่านั้น คอมมิท คือ การมอบหมาย ส่วน -m คือ การระบุรายละเอียดสำหรับการ commit ในแต่ละครั้ง เพื่อให้การควบคุมรุ่น รายละเอียดต่างๆ
git commit -m "deploy to heroku"
heroku create คำสั่งนี้เป็นการสร้าง App ของเราบน Heroku Server เพื่อเตรียมรับ Code และสร้าง Remote Repository ใน Git ของเราอีกด้วย
heroku create
git push heroku master เมื่อเขียน code หรือแก้ไขแล้ว และให้รายละเอียดในการ commit แล้ว จึงทำการ Deploy Code เราเข้า Server Heroku ด้วยแนวคิดพื้นฐานของ ‘push’ คือการผลักดันบางสิ่ง (ไฟล์, แอพ, .. ) ที่เรามีในเครื่อง (ในเครื่องที่ทำงานของเรา) ไปยังที่อื่นในกรณีนี้ไปยังที่เก็บระยะไกล (เครื่องระยะไกล) ใน Git ก่อนที่จะใช้ ‘push’ เราจะสร้าง remote (handle) ซึ่งทำหน้าที่อ้างอิงไปยังที่เก็บระยะไกล (Complete URL) ส่วน ‘master’ คือสาขาในพื้นที่ที่คุณต้องการ remote
git push heroku master
Heroku จะนำ Source เราไปบน Server และไปอ่านไฟล์ เลือก Go Version และติดตั้ง Package ต่างๆที่เรา Import เข้ามาใช้งานในเว็บไซต์
heroku open ทดสอบว่า เว็บไซต์ ที่เรา Deploy ไปทำงานได้หรือไม่
heroku open
เว็บเบราเซอร์จะขึ้นมาโดยอัตโนมัติจะไปที่ URL ที่ระบบสร้างขึ้น โดยในตัวอย่างนี้คือ https://mysterious-earth-63504.herokuapp.com/ และที่หน้าเว็บแสดงคำว่า Hello Heroku! แสดงว่าการ Deploy เว็บไซต์ ไปที่ Heroku ของเรานั้นสำเร็จแล้ว