⏱️ ~12 นาที

Deploy ขึ้นอินเทอร์เน็ตจริง

เอาแอป FastAPI ของคุณขึ้นเว็บให้คนอื่นเข้าได้

ทำไมต้อง Deploy?

ตอนนี้แอป FastAPI ของคุณรันได้แค่ในเครื่อง (localhost:8000) — มีแค่คุณเข้าได้ "Deploy" คือเอาแอปไปไว้บนเซิร์ฟเวอร์สาธารณะ ให้ทุกคนเข้าได้

กำลังวาดไดอะแกรม…

ภาพรวมของแอป Python Fullstack

กำลังวาดไดอะแกรม…
ส่วนบริการแนะนำ (มีฟรี)
Backend (FastAPI)Render, Railway, Fly.io
DatabaseNeon, Supabase (PostgreSQL ฟรี)
Frontendรวมใน Backend (static) หรือแยก Vercel

💡 ในโปรเจกต์สุดท้ายเรา mount static ไว้ใน FastAPI แล้ว → deploy Backend ที่เดียวพอ ง่ายสุด

ขั้นที่ 1: เตรียมโค้มให้พร้อม

  1. โค้ดอยู่บน GitHub แล้ว
  2. สร้างไฟล์ requirements.txt (รายการแพ็กเกจที่จะใช้บนเซิร์ฟเวอร์):
    fastapi
    uvicorn[standard]
    
    (หรือสร้างอัตโนมัติ: pip freeze > requirements.txt)
  3. สร้างไฟล์ 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

  1. สมัคร https://render.com (ด้วย GitHub)
  2. New + → Web Service → เลือก repo ของคุณ
  3. ตั้งค่า:
    • Runtime: Python 3
    • Build Command: pip install -r requirements.txt
    • Start Command: uvicorn main:app --host 0.0.0.0 --port $PORT
  4. เพิ่ม environment variables (ถ้ามี เช่น URL database)
  5. กด 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 ฟรี:

  1. สมัคร → สร้าง project → ได้ connection string
  2. เพิ่ม connection string ใน env ของ Render
  3. เปลี่ยนโค้ดจาก 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: ทดสอบจบงาน

  1. เปิด URL ของแอปคุณ
  2. ลองเพิ่ม/ลดข้อมูล
  3. รีเฟรช → ข้อมูลยังอยู่
  4. ส่ง URL ให้เพื่อนเข้าดู 🎉

โดเมนกับ HTTPS

URL ที่ได้ (เช่น my-shop.onrender.com) มี HTTPS ให้ฟรีอัตโนมัติ

ถ้าอยากโดเมนของตัวเอง (myshop.com):

  1. ซื้อโดเมน (Namecheap, Cloudflare)
  2. ใน Render → Settings → Custom Domain
  3. ตั้ง DNS ตามที่บอก → รอ → HTTPS มาเอง

ทิปส์สำคัญ

  • ทดสอบในเครื่องก่อน ให้แน่ใจ แล้วค่อย deploy
  • อ่าน log ตอน deploy ไม่สำเร็จ — มันบอกสาเหตุ
  • แพ็กเกจต้องครบ ใน requirements.txt ไม่งั้นเซิร์ฟเวอร์หาไม่เจอ
  • ⚠️ ห้ามอัป secret ขึ้น GitHub — ใช้ env

สรุป

ส่วนDeploy ที่ไหน
Backend (FastAPI)Render / Railway
DatabaseNeon / Supabase
Frontendรวมใน Backend หรือแยก Vercel

🎉 ยินดีด้วย! แอปของคุณ ออนไลน์จริง แล้ว — ใครก็เข้าได้จากทั่วโลก นี่คือจุดสูงสุดของการเป็น Fullstack Developer มือใหม่ และเป็นจุดเริ่มต้นของการเติบโตต่อไป! 🚀

อ่านจบแล้ว? ทำเครื่องหมายว่าเสร็จเพื่อบันทึกความคืบหน้า

🧠

แบบทดสอบ

ตอบให้ครบแล้วกด “ตรวจคำตอบ” เพื่อเช็คความเข้าใจ

  1. 1. Deploy คืออะไร?

  2. 2. FastAPI ใช้คำสั่งอะไรตอน deploy (ในไฟล์ config)?

  3. 3. บริการฟรีที่เหมาะ deploy FastAPI คือ?

กำลังโหลด…