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 โดยตรง
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:
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 เสมอ:
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:
2) ตำแหน่งไฟล์ .env ที่ติดตั้งไว้บน Server (192.168.1.26)
- Backend API:
/home/sql/code/bigbike/apps/backend/.env
- Website (Next.js SSR):
/home/sql/code/bigbike/apps/website/.env
(ไฟล์ 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 (หากยังไม่เคยรัน จะสั่งรัน standalone server.js บนพอร์ต 3002)
- Persist State: สั่ง
pm2 save เพื่อบันทึกรายชื่อโปรเซส ให้ฟื้นตัวอัตโนมัติเมื่อเซิร์ฟเวอร์รีบูต
7. คำสั่งที่ใช้ในการตรวจสอบและแก้ไขปัญหา (Runbook & Troubleshooting)
ตรวจสอบสถานะและ Logs บน Server: