Deploy ขึ้นอินเทอร์เน็ตจริง
เอาแอปที่ทำได้ขึ้นเว็บให้คนอื่นเข้าได้ ไม่ใช่แค่ในเครื่องเรา
ทำไมต้อง Deploy?
ตอนนี้แอปของคุณรันได้แค่ในเครื่อง (localhost:3000) — มีแค่คุณที่เข้าได้
"Deploy" คือเอาแอปไปไว้บน เซิร์ฟเวอร์สาธารณะ เพื่อให้ใครก็เข้าได้จากที่ไหนก็ได้
🎯 Deploy ปิดลูป "เป็น Fullstack" — คนอื่นเห็นสิ่งที่คุณสร้างได้จริง!
ภาพรวม: แอปคุณมี 3 ส่วน ต้อง deploy คนละที่
| ส่วน | บริการแนะนำ (มีฟรี) |
|---|---|
| Frontend (React) | Vercel, Netlify, Cloudflare Pages |
| Backend (Express) | Railway, Render, Fly.io |
| Database | Supabase, Neon (PostgreSQL ฟรี) |
💡 สำหรับโปรเจกต์ฝึก ใช้แผนฟรีของแต่ละที่พอ ไม่ต้องจ่าย
ขั้นที่ 1: เตรียมโค้ดให้พร้อม
ก่อน deploy ให้ลืมตา:
- โค้ดอยู่บน GitHub แล้ว (ถ้ายัง กลับไปดูบท Git)
- Frontend ชี้ API ไปที่ URL ของ Backend จริง (ไม่ใช่
localhost) - Backend เปิด CORS ให้โดเมน Frontend เรียกได้
// ใน Backend (Express) ตอน deploy ให้รองรับทุ่งโดเมน
const cors = require("cors");
app.use(cors({ origin: true })); // หรือระบุโดเมน Frontend เพื่อปลอดภัยขึ้น
⚠️ ใช้ ตัวแปร environment (env) เก็บค่าที่เปลี่ยนระหว่างเครื่องกับเซิร์ฟเวอร์ เช่น URL ฐานข้อมูล — ห้ามเขียนติดไว้ในโค้ดตรง ๆ
ขั้นที่ 2: Deploy Backend ก่อน
เริ่มจาก Backend เพราะ Frontend ต้องการ URL ของมัน
ตัวอย่าง: ใช้ Render (ฟรี, ใช้ง่าย)
- สมัคร https://render.com (ด้วย GitHub)
- New + → Web Service → เลือก repo ของคุณ
- ตั้งค่า:
- Build Command:
npm install - Start Command:
node index.js
- Build Command:
- เพิ่ม environment variables (ถ้ามี เช่น URL database)
- กด Create Web Service → รอ build
- ได้ URL เช่น
https://shop-api-xxx.onrender.com
Railway (https://railway.app) ทำคล้ายกัน ลองเลือกที่ถูกใจ
ทดสอบว่าใช้ได้
เปิด https://<url-backend>/products ในเบราว์เซอร์ → ควรเห็น JSON
ขั้นที่ 3: ตั้งค่า Database (ถ้าใช้)
SQLite เก็บเป็นไฟล์ ใช้บนเซิร์ฟเวอร์ได้ไม่ดีนัก (ข้อมูลหายตอน rebuild) ตอน deploy จริงแนะนำย้ายไป PostgreSQL ฟรี เช่น:
- Neon (https://neon.tech) — PostgreSQL serverless ฟรี
- Supabase (https://supabase.com) — PostgreSQL + ฟีเจอร์เสริม
- สมัคร → สร้าง project → ได้ connection string
- ใส่ connection string ใน env ของ Backend
- ปรับโค้ดจาก
sqlite3เป็นpg(PostgreSQL) — ใช้ SQL คล้ายกัน
💡 สำหรับโปรเจกต์ฝึกอย่างแรก อาจข้ามขั้นนี้ไปก่อน ใช้ SQLite ไปเลยก็ได้ ค่อยยกระดับทีหลัง
ขั้นที่ 4: Deploy Frontend
ตัวอย่าง: ใช้ Vercel (ง่ายสุดสำหรับ React)
- สมัคร https://vercel.com (ด้วย GitHub)
- Add New → Project → เลือก repo
- Vercel detect React/Vite ให้อัตโนมัติ
- ตั้งค่าสำคัญ: เปลี่ยน URL API ในโค้ด Frontend จาก
localhost:3000เป็น URL Backend จริง - กด Deploy → ได้ URL เช่น
https://my-shop.vercel.app
ใช้ตัวแปร environment แทน URL
ดีกว่าเขียนติดโค้ด:
// ใช้ env ถ้ามี, ไม่งั้นใช้ localhost (ตอน dev)
const API = process.env.REACT_APP_API_URL || "http://localhost:3000";
แล้วตั้ง REACT_APP_API_URL ในหน้าตั้งค่าของ Vercel
ขั้นที่ 5: ทดสอบจบงาน
- เปิด URL Frontend ของคุณ
- ลองเพิ่ม/ลบข้อมูล
- รีเฟรช → ข้อมูลยังอยู่ (เพราะเก็บใน database จริง)
- ส่ง URL ให้เพื่อนเข้าดู 🎉
โดเมนกับ HTTPS
URL ที่ได้ (เช่น my-shop.vercel.app) มี HTTPS ให้ฟรีอัตโนมัติ ปลอดภัยแล้ว
ถ้าอยากใช้ชื่อโดเมนของตัวเอง (เช่น myshop.com):
- ซื้อโดเมน (Namecheap, Cloudflare, ฯลฯ)
- ในหน้าตั้งค่า Vercel/Netlify → เพิ่ม custom domain
- ตั้ง DNS ตามที่บอก → รอ แล้ว HTTPS มาเอง
ทิปส์สำคัญ
- ✅ ไม่ต้อง deploy บ่อย — deploy ตอนฟีเจอร์พร้อมใช้จริง
- ✅ อ่าน log ตอน deploy ไม่สำเร็จ — มันบอกสาเหตุ
- ✅ ทดสอบในเครื่องก่อน ให้แน่ใจว่าทำงาน แล้วค่อย deploy
- ⚠️ ห้ามอัป secret (รหัสผ่าน, key) ขึ้น GitHub — ใช้ env
สรุป
| ส่วน | Deploy ที่ไหน |
|---|---|
| Frontend (React) | Vercel / Netlify |
| Backend (Express) | Railway / Render |
| Database | Neon / Supabase (PostgreSQL ฟรี) |
🎉 ยินดีด้วย! ตอนนี้แอปของคุณ ออนไลน์จริง ใครก็เข้าได้ นี่คือจุดสูงสุดของการเป็น Fullstack Developer มือใหม่ — และเป็นจุดเริ่มต้นของการเติบโตต่อไป! 🚀
อ่านจบแล้ว? ทำเครื่องหมายว่าเสร็จเพื่อบันทึกความคืบหน้า
แบบทดสอบ
ตอบให้ครบแล้วกด “ตรวจคำตอบ” เพื่อเช็คความเข้าใจ
1. ความต่างระหว่างรันในเครื่อง (localhost) กับบนอินเทอร์เน็ตคือ?
2. บริการฟรีที่เหมาะ deploy หน้าเว็บ (Frontend) คือ?
3. Backend (Express) ควร deploy ที่ไหน?
กำลังโหลด…