หมายเหตุ เนื่องจากความแตกต่างในรายละเอียดปลีกย่อยของการใช้คำสั่งบางคำสั่งระหว่างระบบปฏิบัติการ หากต้องให้รายละเอียดทุกระบบปฏิบัติการจะทำให้เนื้อหาเยิ่นเย้อเกินไป จึงขอใช้สภาพแวดล้อมของผู้เขียนคือ Linux
จากสองตอนที่ผ่านมาสิ่งที่เราได้ทำไปแล้วคือ
- การได้ความรู้จัก Heroku และการเตรียมสภาพแวดล้อมการทำงาน และ
- การสร้าง Python Web Application ด้วย Flask และ Gunicorn เพื่อทำหน้าที่เป็น Chatbot ของเรา
มาในตอนนี้จะว่าด้วยเรืื่องการนำเอาสิ่งที่เราสร้างไว้ไปวางไว้บน Heroku เพื่อให้ใช้งานได้จริง ดังนี้
1. กำหนดสิ่งที่ไม่ต้องใช้
cd fb-chatbot
ใช้ VirtualEnv ตามขั้นตอนที่เรากล่าวไว้ในตอนที่ 2 แล้วสร้างไฟล์ชื่อ .gitignore (ต้องมี dot หรือ . ข้างหน้าชื่อ) ขึ้นมา
sudo nano .gitirnore
แล้วพิมพ์รายชื่อโฟลเดอร์ที่อยู่ใน fb-chatbot ลงไป ภายในไฟล์ควรจะมีเนื้อหาตามนี้
bin
include
lib
local
รายชื่อที่อยู่ใน .gitignore คือสิ่งที่เราบอกให้ git ละทิ้ง เป็นรายการที่ Heroku ไม่จำเป็นต้องรับทราบ จะได้ไม่ต้องเปลืองเนื้อที่ (เราใช้ Free Account นะ ต้องประหยัด)
2. สร้างสิ่งที่ต้องใช้
ในการนำงานที่พัฒนาด้วย Python ไปวางบน Heroku เราต้องสร้างไฟล์ข้อความขึ้นมา 2 ไฟล์ คือ- requirements.txt เพื่อใช้บอก Heroku ให้ช่วยติดตั้ง Library ที่เราต้องใช้งานให้หน่อย
- Procfile (ห้ามใส่นามสกุลใดๆ) ใช้บอก Heroku ให้ start application ด้วยเงื่อนไขอะไรบ้าง
pip freeze
เป็นการสั่งให้ pip แสดง libraries ที่เราใช้งานใน virtualenv ทั้งหมดออกมา (หากเราไม่ได้ทำงานผ่าน virtualenv เราก็จะได้ข้อมูลอันมหาศาลที่มีอยู่ในเครื่องทั้งหมดออกมาให้ดูแทน) คราวนี้เราต้องการให้ข้อมูลเหล่านี้เข้าไปอยู่ใน requirements.txt ก็ใช้คำสั่ง
pip freeze > requirements.txt
เปิดดูเนื้อหาของ requirements.txt อีกสักครั้งเพื่อตรวจสอบ
มาดู Procfile กันบ้าง ก่อนจะทำอะไรต่อไป เราต้องอ้างอิงถึง Python ที่ทำไว้ในตอนที่ 2 ซึ่งจะต้องอยู่ใน virtualenv ของเราในขณะนี้ สมมุติว่าให้ชื่อว่า chatbot.py พิมพ์ข้อความนี้ไปไว้ใน Procfile
web : gunicorn chatbot:app
มาถึงตรงนี้เรามีสิ่งที่จะต้องนำขึ้นไปไว้บน Heroku คือไฟล์ 3 ไฟล์คือ chatbot.py , requirements.txt และ Procfile นะครับ
3. Deploy งานไปที่ Heroku
ในขั้นตอนนี้จะต้องนำเอา git และ heroku cli ที่เราได้ติดตั้งไว้ในตอนที่ 1 มาใช้งานกัน และต้องทำการเชื่อมต่อ internet3.1) สร้างพื้นที่บน Heroku ด้วยคำสั่ง
heroku create my-fbot
heroku create คือคำสั่งบอกให้ Heroku สร้างพื้นที่สำหรับ application ของเรา ครับ
my-fbot คือชื่อที่เรากำหนดไว้ใช้อ้างอิงของ application ของเรา หากเราไม่กำหนดชื่อไว้ ทาง Heroku จะสร้างให้เราเอง โดยใช้การสุ่มขึ้นมา ซึ่งบางครั้งอาจจะได้ชื่อที่จำได้ยาก ดังนั้นผมแนะนำให้กำหนดเองไว้จะง่ายต่อการทำงาน ครับ
หลังจากการทำงานจบสิ้นลงเราจะได้ Web URL ไว้ใช้สำหรับเรียก application ของเราผ่านเว็บ และ git URL สำหรับทำงานผ่าน git ในกรณีตัวอย่างคือ https://my-fbot.herokuapp.com/ และ https://git.heroku.com/my-fbot.git ตามลำดับ
หากเรา login เข้าไปใน Heroku แล้วดูที่ Dashboard ก็จะพบว่ามี my-fbot อยู่ในรายชื่อ Personal apps
3.2) สร้างพื้นที่สำหรับ git
git init
git add .
3.3) login เข้าสู่ Heroku
heroku login
3.4) ผูก git เข้ากับพื้นที่ของ application บน Heroku
heroku git:remote -a my-fbot
หมายเหตุ ท่านต้องเปลี่ยนชื่อ my-fbot ให้ตรงกับชื่อ application ของท่านเอง
3.5) Commit
git commit -am "commit to my-fbot"
ท่านสามารถเปลี่ยนข้อความ "commit to my-fbot" ไปเป็นข้อความอื่นได้ เพื่อให้ไม่ซ้ำกัน
3.6) Deploy application ของเรา
git push heroku master
คำสั่งนี้จะใช้เวลาพอสมควร รอจนกระทั่งเราได้เห็นข้อความดังภาพแสดงบนหน้าจอ
มาถึงขั้นตอนนี้ สิ่งที่ได้ทำลงไปคือการนำเอา application ของเราไปวางไว้บน Heroku เรียบร้อยแล้ว หากท่านทำตามขั้นตอนทั้งหมดแล้วพบกับข้อผิดพลาดอะไรก็ตาม ขอให้ย้อนดูขั้นตอนที่ผ่านมาโดยละเอียดแล้วทำการแก้ไข
3.7) Start web worker
heroku ps:scale web=1
ทดสอบการทำงาน
เพื่อให้สามารถทดสอบได้ ผมจะทำการเพิ่มชุดคำสั่งเข้าไปใน chatbot.py ดังนี้
@app.route("/test",methods=['GET'])
def do_test():
return "Hello"
ด้วยชุดคำสั่งนี้จะทำให้เมื่อใช้ https://my-fbot.herokuapp.com/test กับ Web Browser แล้วเห็นข้อความ "Hello" ก็แสดงว่าทั้งหมดที่ทำมาสามารถใช้งานได้ โดยเราต้องย้อนกลับไปทำงานในขั้นตอน 3.5 - 3.6 อีกครั้งเพื่อให้มีผลในการทำงาน
ทำมาได้ขนาดนี้แล้ว สิ่งที่เราได้มาแล้ว Chatbot อย่างง่ายที่ทำงานโดยการส่งข้อความกลับไปหาผู้ส่ง และ Web URL ของ Chatbot ของเราเพื่อนำไปใช้อ้างอิง Webhook Endpoint แล้วก็เหลืออีกขั้นตอนเดียวคือ การสมัครเข้าให้ Facebook Messenger Chatbot กัน ครับ
[ตอนที่ 1] [ตอนที่ 2] [ตอนที่ 4]
Sign up here with your email
ConversionConversion EmoticonEmoticon