Line Bot Zomboid
การสร้าง Line Chatbot และเชื่อมต่อกับ Docker: บันทึกการเดินทางสาย DevOps
วันนี้อยากมาเล่าให้ฟังถึงโปรเจกต์ล่าสุดที่เพิ่งทำเสร็จไป ซึ่งก็คือการสร้าง Line Chatbot ที่สามารถสั่งรีสตาร์ทคอนเทนเนอร์ Docker ได้! ฟังดูซับซ้อนใช่ไหม? แต่จริงๆ แล้วมันไม่ยากขนาดนั้น (ถ้าหัวไม่ระเบิดไปก่อน 😅) ระหว่างทำมีเรื่องสนุก เรื่องงง และเรื่องท้าทายมากมาย เลยอยากแชร์เผื่อเป็นแรงบันดาลใจให้คนอื่นลองทำดูบ้าง
จุดเริ่มต้นของโปรเจกต์
เริ่มจากความคิดง่ายๆ ว่าอยากทำอะไรที่ “ดูเจ๋ง” และมีประโยชน์บ้าง หลังจากนั่งคิดสักพักก็ตัดสินใจว่าจะทำบอทใน Line ที่สามารถรับคำสั่งจากกลุ่มแชท และใช้มันควบคุม Docker ได้ เช่น สั่งรีสตาร์ทเซิร์ฟเวอร์เกมที่รันในคอนเทนเนอร์ จริงๆ เหตุผลหลักคืออยากลองเขียน FastAPI และเล่นกับ Docker SDK บน Python แค่นั้นเอง 😄
การเลือกเครื่องมือและการตั้งค่าเริ่มต้น
แน่นอนว่าโปรเจกต์นี้เริ่มต้นจากการตั้งคำถามว่า “จะใช้เครื่องมืออะไรดี?” สุดท้ายก็มาลงตัวที่:
- FastAPI: เพราะเป็น Python Framework ที่เขียนง่ายมาก และเหมาะกับงาน Web API
- Docker SDK for Python: เพื่อควบคุมคอนเทนเนอร์ Docker จากโค้ด
- LINE Messaging API: ใช้รับ-ส่งข้อความจาก Line
- Nginx: ทำ Reverse Proxy และจัดการ HTTPS ด้วย Let’s Encrypt
ตั้งค่าเสร็จก็ลุยเลย 🚀
ปัญหาและบทเรียนระหว่างทาง
1. การเชื่อม Docker กับ FastAPI
ตอนแรกก็งงๆ กับการใช้ Docker SDK อยู่บ้าง เพราะมันต้องเข้าถึง docker.sock
เพื่อควบคุมคอนเทนเนอร์ (ใครจะรู้ว่าการเข้าถึง Docker จะทำให้รู้สึกเหมือนเป็นแฮกเกอร์ขนาดนี้ 😎) ตอนแรกมีปัญหา Permission Denied
ด้วย แต่ก็แก้ได้โดยการ Mount docker.sock
เข้าไปในคอนเทนเนอร์
2. Nginx กับ HTTPS
พอถึงตอนที่ต้องตั้งค่า Nginx ก็เจอปัญหากับการตั้งค่า Reverse Proxy และ HTTPS แบบเต็มๆ แรกๆ Nginx ตะโกนใส่เราด้วย Error 502 Bad Gateway เพราะมันหาตัว FastAPI ไม่เจอ! สุดท้ายถึงบางอ้อว่า Nginx กับ FastAPI ต้องอยู่ใน Docker Network เดียวกัน
3. Line Webhook
การรับ Webhook จาก Line จริงๆ ไม่ยาก แต่สิ่งที่ชวนงงคือการตรวจสอบ Signature เพื่อยืนยันว่า Webhook มาจาก Line จริงหรือเปล่า โชคดีที่ line-bot-sdk
ช่วยจัดการเรื่องนี้ให้ ทำให้เราแค่ต้องใส่โทเค็นให้ถูกก็จบ
ความสำเร็จที่น่าภูมิใจ
หลังจากหลายวันของการ Debug และปวดหัวกับไฟล์ nginx.conf
ในที่สุด บอทก็ทำงานได้! มันสามารถ:
- ตอบข้อความทักทายเมื่อถูกเพิ่มเข้ากลุ่ม
- รีสตาร์ทคอนเทนเนอร์ Docker เมื่อมีคนส่งคำว่า “zomboid re”
- ใช้งาน HTTPS อย่างปลอดภัย
สิ่งที่ได้เรียนรู้
- การตั้งค่า Nginx อาจดูยาก แต่ถ้าลองผิดลองถูกสักพักก็จะเข้าใจมากขึ้น
- การใช้ Docker Network สำคัญมาก ถ้าคอนเทนเนอร์หากันไม่เจอ ทุกอย่างจะพัง
- FastAPI ใช้ง่ายและทรงพลังมาก เหมาะกับการสร้าง Web API จริงๆ
สรุป
โปรเจกต์นี้ทำให้เราได้ลองอะไรใหม่ๆ ทั้งการเขียนบอท การตั้งค่า Docker และการใช้ Nginx มันเป็นการผสมผสานที่สนุกและท้าทาย ถ้าใครอยากลองทำอะไรแนวนี้บ้าง ขอแนะนำว่าอย่ากลัวที่จะเริ่มต้น เพราะสุดท้ายแล้วการได้เรียนรู้จากการลงมือทำจริงนี่แหละคือสิ่งที่ดีที่สุด! 😉
ถ้าใครสนใจโค้ดเต็มๆ สามารถดูได้ที่ GitHub Repository (ปล. อย่าลืมอ่าน README ก่อนนะ!)
ขอบคุณที่อ่านมาจนจบ 🎉