8.8 KiB
8.8 KiB
Bigbike Platform Deployment Guide & System Architecture
Target Domain: bigbike.ddcsprocket.com
Target Server: sql@192.168.1.26
1. บทบาทของเซิร์ฟเวอร์ (System Architecture & Role)
- Server IP:
192.168.1.26(Hostname:sql, User:sql) - บทบาท (Role): Application Runner เท่านั้น (Node.js / Bun / PM2)
- ขอบเขตการทำงาน:
- รัน API Service (Elysia / Bun) และ Website SSR (Next.js Standalone / Node.js) ภายใต้การควบคุมของ PM2
- ไม่ต้องตั้งค่า Nginx บนเครื่องนี้ เนื่องจากระบบมี Gateway / Reverse Proxy ภายนอกทำการ Port-Forward หรือ Proxy ส่ง Traffic เข้ามายังพอร์ตของแต่ละ Service โดยตรง
[ User Request ]
│
▼
[ External Gateway / Firewall / Nginx Proxy ]
│
├── Forward Traffic (Domain: bigbike.ddcsprocket.com) ──► 192.168.1.26:3002 (Next.js SSR)
└── Forward Traffic (Domain: api.bigbike.ddcsprocket.com) ─► 192.168.1.26:3005 (Elysia API)
2. โครงสร้าง Git Repository & การเชื่อมต่อ (Git Info)
ฝั่ง Server (192.168.1.26)
| รายการ | ตำแหน่ง Path บน Server | รายละเอียด |
|---|---|---|
| Bare Repository | /home/sql/git/bigbike.git |
จุดรับ Git Push จากเครื่อง Local |
| Symlink Alias | /home/sql/git/bigbike.ddcsprocket.com.git |
ชี้ไปยัง bigbike.git |
| Working Directory | /home/sql/code/bigbike |
โฟลเดอร์แตกไฟล์ Source Code และรันโปรเจกต์ |
| Hook Script | /home/sql/git/bigbike.git/hooks/post-receive |
สคริปต์สั่ง Build และ Restart PM2 อัตโนมัติ (chmod +x) |
ฝั่ง Local (d:\cms)
- Git Remote Name:
bigbike - Remote URL:
sql@192.168.1.26:/home/sql/git/bigbike.git - คำสั่ง Deploy:
git push bigbike master
3. Runtimes & สภาพแวดล้อมที่ใช้ในการประมวลผล
| เครื่องมือ | Version | Path บนเครื่อง 192.168.1.26 | หน้าที่ในไปป์ไลน์ |
|---|---|---|---|
| Bun | 1.3.8 |
/home/sql/.bun/bin/bun |
รัน bun install, bun run build, รัน Elysia Backend |
| Node.js | v25.2.0 |
/usr/bin/node |
รัน Next.js Standalone SSR Server |
| PM2 | 6.0.14 |
/usr/bin/pm2 |
Process Manager ควบคุม Service ให้รันตลอดเวลา |
| PostgreSQL | 14.24 |
localhost:5432 |
ฐานข้อมูล Local |
⚠️ ข้อควรระวังเรื่อง PATH ใน Post-Receive Hook:
SSH non-interactive session จะไม่โหลด~/.bashrcอัตโนมัติ ในหัวสคริปต์post-receiveต้อง export PATH เสมอ:export PATH="/home/sql/.bun/bin:/usr/local/bin:/usr/bin:/bin:$PATH"
4. แผนผังพอร์ต & การจัดการ PM2 (Process Management)
พอร์ตและ Process ของ Bigbike (เปิดใหม่)
| Service | PM2 Process Name | Port | Runtime / Command | CWD |
|---|---|---|---|---|
| Backend API | bigbike-backend |
3005 |
bun run src/index.ts |
/home/sql/code/bigbike/apps/backend |
| Website (SSR) | bigbike-website |
3002 |
node server.js (.next/standalone) |
/home/sql/code/bigbike/apps/website |
ตารางตรวจสอบพอร์ตเดิมบน Server (เพื่อป้องกันพอร์ตชน)
| Port | Service เดิมที่ใช้งานอยู่ | สถานะ |
|---|---|---|
| 3001 | shop-ddcth (Next.js) |
ใช้งานอยู่ |
| 3002 | ว่าง ➔ กำหนดให้ bigbike-website |
✅ ใช้งานได้ |
| 3005 | ว่าง ➔ กำหนดให้ bigbike-backend |
✅ ใช้งานได้ |
| 3306 | MariaDB Server | ใช้งานอยู่ |
| 4000 | aroka-backend |
ใช้งานอยู่ |
| 4545 | rebrand-dev (Vite) |
ใช้งานอยู่ |
| 5000 | ddc hr backend (Bun) |
ใช้งานอยู่ |
| 5432 | PostgreSQL 14 Local | ใช้งานอยู่ |
| 6333 / 6334 | Qdrant Vector DB | ใช้งานอยู่ |
| 8000 | check-order-production (Python FastAPI) |
ใช้งานอยู่ |
5. การตั้งค่าฐานข้อมูล & ไฟล์ .env (Database & Environment Config)
1) สถานะฐานข้อมูล PostgreSQL
- สถานะปัจจุบัน: ✅ สร้าง Database
bigbike_dbบน192.168.1.26เรียบร้อยแล้ว - Host:
localhost:5432 - User:
postgres - Password:
password - Connection String:
DATABASE_URL="postgresql://postgres:password@localhost:5432/bigbike_db?schema=public"
2) ตำแหน่งไฟล์ .env ที่ติดตั้งไว้บน Server (192.168.1.26)
- Backend API:
/home/sql/code/bigbike/apps/backend/.envPORT=3005 DATABASE_URL="postgresql://postgres:password@localhost:5432/bigbike_db?schema=public" NODE_ENV=production APP_URL="https://api.bigbike.ddcsprocket.com" BACKEND_PUBLIC_URL="https://api.bigbike.ddcsprocket.com" CORS_ORIGIN="https://admin.bigbike.ddcsprocket.com,https://spa.bigbike.ddcsprocket.com,https://bigbike.ddcsprocket.com,http://localhost:3000,http://localhost:3002" JWT_SECRET="bigbike-secret-key-prod-2026-ddc" OMISE_SECRET_KEY="" - Website (Next.js SSR):
/home/sql/code/bigbike/apps/website/.envPORT=3002 NODE_ENV=production NEXT_PUBLIC_API_URL="https://api.bigbike.ddcsprocket.com/api"
(ไฟล์ template ถูกสำรองไว้ใน backend.env และ website.env)
6. วงจรการทำงานของ Post-Receive Hook (Deployment Pipeline)
เมื่อมีการ git push bigbike master สคริปต์ /home/sql/git/bigbike.git/hooks/post-receive จะทำงานตามลำดับดังนี้:
- Checkout Source Code: แตกไฟล์ล่าสุดจาก Git ลงที่
/home/sql/code/bigbike - Install Dependencies: สั่งรัน
$BUN installใน root monorepo - Backend Service & Auto Database Migration:
- รัน
$BUN x prisma generate(อัปเดต Prisma Client Types) - รัน
$BUN x prisma migrate deploy(นำ migration files ใหม่ไป Apply ลง DB อัตโนมัติ) - รัน
$BUN x prisma db push --accept-data-loss(ซิงก์ schema เข้า DB ทันที ป้องกันกรณีแก้ schema.prisma โดยไม่ได้รัน migrate dev) - สั่ง
pm2 restart bigbike-backend --update-env(หากยังไม่เคยรัน จะสั่งpm2 startบนพอร์ต3005)
- รัน
- Website Service (Next.js SSR):
- บิลด์ Next.js ด้วย
NODE_ENV=production $BUN run build - สั่ง
pm2 restart bigbike-website --update-env(หากยังไม่เคยรัน จะสั่งรัน standaloneserver.jsบนพอร์ต3002)
- บิลด์ Next.js ด้วย
- Persist State: สั่ง
pm2 saveเพื่อบันทึกรายชื่อโปรเซส ให้ฟื้นตัวอัตโนมัติเมื่อเซิร์ฟเวอร์รีบูต
7. คำสั่งที่ใช้ในการตรวจสอบและแก้ไขปัญหา (Runbook & Troubleshooting)
ตรวจสอบสถานะและ Logs บน Server:
# ดูสถานะ PM2 ทั้งหมด
ssh sql@192.168.1.26 "pm2 status"
# ดู Logs สดของ Backend
ssh sql@192.168.1.26 "pm2 logs bigbike-backend --lines 100"
# ดู Logs สดของ Website SSR
ssh sql@192.168.1.26 "pm2 logs bigbike-website --lines 100"
# ทดสอบ Curl พอร์ตภายในเครื่อง
ssh sql@192.168.1.26 "curl -I http://localhost:3005"
ssh sql@192.168.1.26 "curl -I http://localhost:3002"