Deployment 🚀
หลังจากเราสร้าง API ของเราเสร็จเรียบร้อยแล้ว ตอนนี้ API ของเราถูกรันบนเครื่องคอมพิวเตอร์ของเราเองอยู่ใช่มั้ยล่ะ ถ้าสมมติว่าเราปิดคอมพิวเตอร์ API ของเราก็จะถูกปิดไปพร้อมกัน ดังนั้นนอกจากเราจะต้องรู้วิธีพัฒนา API แล้ว เรายังต้องรู้วิธี Deploy Application ของเราด้วย
โดยในหัวข้อนี้ จะให้ทดลอง Deploy API บน Linux Server ทั้งในรูปแบบ Bare Metal และ Container
Pre-requisite ⛷️
Linux Server ที่สามารถ SSH เข้าไปได้ และมีสิทธิ์ root
FastAPI Source Code
Project Dependencies ‼️
ก่อนเราจะ Deploy Project เราต้องเข้าใจก่อนว่า Project ของเราอาจมี Dependency ต่าง ๆ มากมาย เช่น Library ที่เราติดตั้ง เป็นต้น ดังนั้น การจะนำ Source Code ไปรันบนอุปกรณ์อื่น ๆ นั้น จำเป็นต้องระบุด้วยว่า ต้องติดตั้ง Dependency อะไรบ้าง
สำหรับ Python สามารถ Export Dependencies ที่ใช้ใน Project ได้ (อย่าลืมว่าเราต้องอยู่ใน Virtual Environment นะ) โดยใช้คำสั่ง
pip freeze >> requirements.txtเมื่อใช้คำสั่งด้านบน เราจะได้ไฟล์ requirements.txt ซึ่งภายในจะระบุ Dependencies และเวอร์ชันที่ต้องใช้ใน Project ด้านล่าง เป็นตัวอย่างไฟล์ requirements.txt
annotated-types==0.7.0
anyio==4.6.2.post1
certifi==2024.8.30
click==8.1.7
colorama==0.4.6
dnspython==2.7.0
email_validator==2.2.0
fastapi==0.115.5
fastapi-cli==0.0.5
h11==0.14.0
httpcore==1.0.7
httptools==0.6.4
httpx==0.28.0
idna==3.10
Jinja2==3.1.4
markdown-it-py==3.0.0
MarkupSafe==3.0.2
mdurl==0.1.2
pydantic==2.10.2
pydantic_core==2.27.1
Pygments==2.18.0
python-dotenv==1.0.1
python-multipart==0.0.18
PyYAML==6.0.2
rich==13.9.4
shellingham==1.5.4
sniffio==1.3.1
starlette==0.41.3
typer==0.14.0
typing_extensions==4.12.2
uvicorn==0.32.1
watchfiles==1.0.0
websockets==14.1โดยหากเรานำ Project นี้ ไปรันบนอุปกรณ์เครื่องอื่น ("Environment อื่น ๆ") เราจำเป็นต้องติดตั้ง Dependencies ก่อน โดยใช้คำสั่ง
นอกจาก Python แล้ว Framework อื่น ๆ ก็อาจมีอะไรคล้าย ๆ กัน เช่น package.json ใน node.js เป็นต้น
Bare Metal Deployment Ⓜ️
การ Deploy แบบ Bare Metal หมายถึงการติดตั้งและใช้งานซอฟต์แวร์หรือแอปพลิเคชันบนฮาร์ดแวร์จริงโดยตรง โดยไม่ผ่านชั้นของระบบเสมือนจริง (Virtualization) หรือระบบคลาวด์ เช่น VMware, Hyper-V, หรือแพลตฟอร์มคอนเทนเนอร์อย่าง Docker และ Kubernetes
อย่างไรก็ตาม ในหัวข้อนี้ เราจะมอง Linux Virtual Machine เป็น Physical Machine เพื่อให้เข้าใจหลักการของ Bare Metal Deployment
เปิด Terminal และใช้คำสั่ง SSH ในการ Remote เข้าไปที่ Linux Server
สร้าง Directory ใหม่ภายใน Linux Server
จากนั้น Navigate เข้าไปที่ Directory ที่เพิ่งสร้าง
สามารถใช้คำสั่ง pwd (Print Working Directory) เพื่อดูว่า ตอนนี้เราอยู่ที่ path ใดได้ ให้จำ Path นี้ไว้ดี ๆ เพราะเราจะต้อง Copy ไฟล์จากคอมพิวเตอร์ของเรา ขึ้นไปบน Linux Server กัน
/home/paratpanu.p/fastapi-deploy
กลับมาที่ Workspace บนคอมพิวเตอร์เรา ซึ่งตอนนี้น่าจะมีหน้าตาประมาณนี้
เราจะใช้คำสั่ง scp เพื่อ Copy ไฟล์ทั้งหมด (ยกเว้น .venv) ไปบน Linux Server ดังนั้นตอนนี้ไฟล์ที่เราต้อง Copy ไปก็มีเพียง 2 ไฟล์ คือ main.py และ requirements.txt
โดยแทนที่ Path ด้วย Working Directory บนเครื่อง Linux Server ที่สร้างไว้ เช่น
โดยหลังจากรันคำสั่ง อาจต้องมีการใส่ Password ของ User ตัวเองก่อน
ตรวจสอบ Workspace บน Linux Server ว่าเรา Copy ไฟล์มาสำเร็จหรือไม่
สังเกตว่า ไฟล์ทั้งสองที่เรา Copy จากคอมพิวเตอร์ของเรา อยู่บน Linux Server เรียบร้อยแล้ว
ติดตั้ง Dependencies จากไฟล์ requirements.txt
ก่อนที่เราจะรัน API ของเรา เราต้องสร้าง Terminal Session ใหม่ขึ้นมาก่อน เนื่องจากถ้าเรารัน API บน Terminal Session ปัจจุบันของเรา สมมติว่าเรากดปิด Terminal ไป (ซึ่งเดี๋ยวยังไงเราก็ต้องปิด) Process ของ API ก็จะถูก Terminate ทันที ดังนั้น เราจะเปิด Session ใหม่กัน
จะได้ Terminal Session ใหม่ขึ้นมา
รัน API ของเรากันเลย สำหรับการรันบน Production ซึ่งจะไม่ Reload เมื่อไฟล์มีการแก้ไข เราจะใช้คำสั่ง
สังเกตว่า API เรารันได้สำเร็จแล้ว !! จากนั้นเราจะออกจาก Terminal Session ปัจจุบันกัน (แต่เราไม่ได้ปิดมันทิ้งนะ) โดยกดปุ่ม Ctrl + A + D จะทำให้เรากลับมาที่ Terminal Session ก่อนหน้า
เราสามารถดูว่าตอนนี้เราเปิด Terminal Session อะไรอยู่ได้ โดยใช้คำสั่ง
ทดลองใช้งาน API ของเรากันเลยยยยย ลองส่ง Request ไปที่เครื่อง Linux Server ของเราซิว่าทำได้มั้ย (สามารถใช้คำสั่ง
ip aเพื่อดู IP Address ของ Linux Server เราก่อนได้)

ได้แล้วววว เยสสสส 🥳🥳
Container Deployment 🐋
เดี๋ยวมาเขียนต่อครับ
Last updated
Was this helpful?