Deploy ขึ้นอินเทอร์เน็ตจริง
เอาแอป FastAPI ของคุณขึ้นเว็บให้คนอื่นเข้าได้
ทำไมต้อง Deploy?
ตอนนี้แอป FastAPI ของคุณรันได้แค่ในเครื่อง (localhost:8000) — มีแค่คุณเข้าได้
"Deploy" คือเอาแอปไปไว้บนเซิร์ฟเวอร์สาธารณะ ให้ทุกคนเข้าได้
ภาพรวมของแอป Python Fullstack
| ส่วน | บริการแนะนำ (มีฟรี) |
|---|---|
| Backend (FastAPI) | Render, Railway, Fly.io |
| Database | Neon, Supabase (PostgreSQL ฟรี) |
| Frontend | รวมใน Backend (static) หรือแยก Vercel |
💡 ในโปรเจกต์สุดท้ายเรา mount static ไว้ใน FastAPI แล้ว → deploy Backend ที่เดียวพอ ง่ายสุด
ขั้นที่ 1: เตรียมโค้มให้พร้อม
- โค้ดอยู่บน GitHub แล้ว
- สร้างไฟล์
requirements.txt(รายการแพ็กเกจที่จะใช้บนเซิร์ฟเวอร์):
(หรือสร้างอัตโนมัติ:fastapi uvicorn[standard]pip freeze > requirements.txt) - สร้างไฟล์
Procfileหรือใช้ Start Command:web: uvicorn main:app --host 0.0.0.0 --port $PORT
⚠️ สำคัญ: deploy ต้องใช้
--host 0.0.0.0(ไม่ใช่127.0.0.1) และ--port $PORTเพราะแพลตฟอร์มจะกำหนด port ให้ผ่านตัวแปรPORT
ขั้นที่ 2: Deploy Backend บน Render
- สมัคร https://render.com (ด้วย GitHub)
- New + → Web Service → เลือก repo ของคุณ
- ตั้งค่า:
- Runtime: Python 3
- Build Command:
pip install -r requirements.txt - Start Command:
uvicorn main:app --host 0.0.0.0 --port $PORT
- เพิ่ม environment variables (ถ้ามี เช่น URL database)
- กด Create Web Service → รอ build
เสร็จแล้วจะได้ URL เช่น https://my-shop.onrender.com
ทดสอบว่าใช้ได้
- เปิด
https://<url>/api/products→ ควรเห็น JSON - เปิด
https://<url>/docs→ หน้า Swagger ของคุณออนไลน์!
Railway (https://railway.app) ทำคล้ายกัน และมัก deploy เร็วกว่า ลองเลือกที่ชอบ
ขั้นที่ 3: จัดการ Database
SQLite (ไฟล์) ใช้บนเซิร์ฟเวอร์ได้ไม่ดี — ข้อมูลหายตอน rebuild ตอน deploy จริงแนะนำย้ายไป PostgreSQL ฟรี:
- Neon (https://neon.tech)
- Supabase (https://supabase.com)
- สมัคร → สร้าง project → ได้ connection string
- เพิ่ม connection string ใน env ของ Render
- เปลี่ยนโค้ดจาก
sqlite3เป็นpsycopg2(PostgreSQL) — SQL คล้ายกัน
💡 โปรเจกต์ฝึกอย่างแรกใช้ SQLite ไปก่อนได้ ค่อยยกระดับทีหลัง
ขั้นที่ 4: ใช้ตัวแปร Environment
ค่าที่เปลี่ยนระหว่างเครื่องกับเซิร์ฟเวอร์ (เช่น URL database) ต้องใช้ env ไม่ใช่เขียนติดโค้ด:
import os
db_url = os.environ.get("DATABASE_URL", "shop.db")
# ในเครื่อง ใช้ shop.db / บนเซิร์ฟเวอร์ ใช้ค่าจาก env
แล้วตั้งค่า DATABASE_URL ในหน้า environment ของ Render
ขั้นที่ 5: ทดสอบจบงาน
- เปิด URL ของแอปคุณ
- ลองเพิ่ม/ลดข้อมูล
- รีเฟรช → ข้อมูลยังอยู่
- ส่ง URL ให้เพื่อนเข้าดู 🎉
โดเมนกับ HTTPS
URL ที่ได้ (เช่น my-shop.onrender.com) มี HTTPS ให้ฟรีอัตโนมัติ
ถ้าอยากโดเมนของตัวเอง (myshop.com):
- ซื้อโดเมน (Namecheap, Cloudflare)
- ใน Render → Settings → Custom Domain
- ตั้ง DNS ตามที่บอก → รอ → HTTPS มาเอง
ทิปส์สำคัญ
- ✅ ทดสอบในเครื่องก่อน ให้แน่ใจ แล้วค่อย deploy
- ✅ อ่าน log ตอน deploy ไม่สำเร็จ — มันบอกสาเหตุ
- ✅ แพ็กเกจต้องครบ ใน
requirements.txtไม่งั้นเซิร์ฟเวอร์หาไม่เจอ - ⚠️ ห้ามอัป secret ขึ้น GitHub — ใช้ env
สรุป
| ส่วน | Deploy ที่ไหน |
|---|---|
| Backend (FastAPI) | Render / Railway |
| Database | Neon / Supabase |
| Frontend | รวมใน Backend หรือแยก Vercel |
🎉 ยินดีด้วย! แอปของคุณ ออนไลน์จริง แล้ว — ใครก็เข้าได้จากทั่วโลก นี่คือจุดสูงสุดของการเป็น Fullstack Developer มือใหม่ และเป็นจุดเริ่มต้นของการเติบโตต่อไป! 🚀
อ่านจบแล้ว? ทำเครื่องหมายว่าเสร็จเพื่อบันทึกความคืบหน้า
แบบทดสอบ
ตอบให้ครบแล้วกด “ตรวจคำตอบ” เพื่อเช็คความเข้าใจ
1. Deploy คืออะไร?
2. FastAPI ใช้คำสั่งอะไรตอน deploy (ในไฟล์ config)?
3. บริการฟรีที่เหมาะ deploy FastAPI คือ?
กำลังโหลด…