From 731619af9dd34ec8b35eee8f58412cedfcd0a837 Mon Sep 17 00:00:00 2001 From: unknown Date: Sat, 17 Oct 2026 14:25:27 +0700 Subject: [PATCH] x --- serverinfo/192.168.1.26/bigbike-post-receive | 23 ++++++++- .../bigbike.ddcsprocket.com/docs/README.md | 47 +++++++++++++++++-- .../bigbike.ddcsprocket.com/hook/post-receive | 23 ++++++++- .../nginx/admin.bigbike.ddcsprocket.com.conf | 24 ++++++++++ 4 files changed, 109 insertions(+), 8 deletions(-) create mode 100644 serverinfo/192.168.1.26/bigbike.ddcsprocket.com/nginx/admin.bigbike.ddcsprocket.com.conf diff --git a/serverinfo/192.168.1.26/bigbike-post-receive b/serverinfo/192.168.1.26/bigbike-post-receive index 68431ec..9dfa123 100644 --- a/serverinfo/192.168.1.26/bigbike-post-receive +++ b/serverinfo/192.168.1.26/bigbike-post-receive @@ -12,6 +12,7 @@ export PATH="/home/sql/.bun/bin:/usr/local/bin:/usr/bin:/bin:$PATH" # 1. PATH CONFIG GIT_DIR="/home/sql/git/bigbike.git" WORK_DIR="/home/sql/code/bigbike" +TARGET_ADMIN="/var/www/html/bigbike_admin" BRANCH="master" TEMP_DIR="/tmp/bigbike_build_$(date +%s)" @@ -80,7 +81,25 @@ if [ -d "apps/backend" ]; then cd "$WORK_DIR" fi -# D. Setup Website SSR (if apps/website exists) +# D. Build & Deploy Admin Panel (React Vite SPA) +if [ -d "apps/admin" ]; then + echo ">>> Building Admin Panel (React Vite SPA)..." + cd "$WORK_DIR/apps/admin" + export VITE_API_URL="https://api.bigbike.ddcsprocket.com/api" + export VITE_FRONTEND_URL="https://bigbike.ddcsprocket.com" + $BUN run build + + if [ -d "$TARGET_ADMIN" ]; then + echo "Deploying Admin Panel to $TARGET_ADMIN..." + rsync -av --delete dist/ "$TARGET_ADMIN"/ + else + echo "⚠️ Target directory $TARGET_ADMIN not found. Please create it once with:" + echo " sudo mkdir -p $TARGET_ADMIN && sudo chown -R sql:sql $TARGET_ADMIN" + fi + cd "$WORK_DIR" +fi + +# E. Setup Website SSR (if apps/website exists) if [ -d "apps/website" ]; then echo ">>> Building Next.js Website..." cd "$WORK_DIR/apps/website" @@ -101,7 +120,7 @@ if [ -d "apps/website" ]; then cd "$WORK_DIR" fi -# E. Save PM2 state +# F. Save PM2 state $PM2 save echo "========================================================" diff --git a/serverinfo/192.168.1.26/bigbike.ddcsprocket.com/docs/README.md b/serverinfo/192.168.1.26/bigbike.ddcsprocket.com/docs/README.md index 87386cf..413b053 100644 --- a/serverinfo/192.168.1.26/bigbike.ddcsprocket.com/docs/README.md +++ b/serverinfo/192.168.1.26/bigbike.ddcsprocket.com/docs/README.md @@ -19,7 +19,8 @@ [ 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) + ├── Forward Traffic (Domain: api.bigbike.ddcsprocket.com) ─► 192.168.1.26:3005 (Elysia API) + └── Forward Traffic (Domain: admin.bigbike.ddcsprocket.com) ─► 192.168.1.26:80 (Nginx Static: /var/www/html/bigbike_admin) ``` --- @@ -68,6 +69,7 @@ | :--- | :--- | :---: | :--- | :--- | | **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` | +| **Admin Panel** | *N/A (Nginx Static)* | **`80`** | `Nginx Static Build` | `/var/www/html/bigbike_admin` | ### ตารางตรวจสอบพอร์ตเดิมบน Server (เพื่อป้องกันพอร์ตชน) | Port | Service เดิมที่ใช้งานอยู่ | สถานะ | @@ -131,14 +133,47 @@ * รัน `$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`) -4. **Website Service (Next.js SSR):** +4. **Admin Panel (React Vite SPA):** + * รัน `$BUN run build` ใน `apps/admin` (พร้อม Inject `VITE_API_URL`) + * ซิงก์ไฟล์ build จาก `apps/admin/dist/` ไปยัง `/var/www/html/bigbike_admin/` อัตโนมัติ +5. **Website Service (Next.js SSR):** * บิลด์ Next.js ด้วย `NODE_ENV=production $BUN run build` * สั่ง `pm2 restart bigbike-website --update-env` (หากยังไม่เคยรัน จะสั่งรัน standalone `server.js` บนพอร์ต `3002`) -5. **Persist State:** สั่ง `pm2 save` เพื่อบันทึกรายชื่อโปรเซส ให้ฟื้นตัวอัตโนมัติเมื่อเซิร์ฟเวอร์รีบูต +6. **Persist State:** สั่ง `pm2 save` เพื่อบันทึกรายชื่อโปรเซส ให้ฟื้นตัวอัตโนมัติเมื่อเซิร์ฟเวอร์รีบูต --- -## 7. คำสั่งที่ใช้ในการตรวจสอบและแก้ไขปัญหา (Runbook & Troubleshooting) +## 7. ขั้นตอนการตั้งค่า Nginx สำหรับ Admin Panel (One-Time Setup) + +ทำเพียงครั้งเดียวบนเซิร์ฟเวอร์ `sql@192.168.1.26` ผ่าน SSH: + +### ขั้นที่ 1: สร้างโฟลเดอร์ Web Root และมอบสิทธิ์ให้ user `sql` +```bash +sudo mkdir -p /var/www/html/bigbike_admin +sudo chown -R sql:sql /var/www/html/bigbike_admin +``` + +### ขั้นที่ 2: นำไฟล์ Nginx Config ไปเปิดใช้งาน +```bash +# คัดลอกคอนฟิกไปยัง sites-available +sudo cp /home/sql/code/bigbike/serverinfo/192.168.1.26/bigbike.ddcsprocket.com/nginx/admin.bigbike.ddcsprocket.com.conf /etc/nginx/sites-available/admin.bigbike.ddcsprocket.com.conf + +# ทำ Symlink เปิดใช้งานเว็บใน sites-enabled +sudo ln -sf /etc/nginx/sites-available/admin.bigbike.ddcsprocket.com.conf /etc/nginx/sites-enabled/ + +# ตรวจสอบความถูกต้องและสั่ง Reload +sudo nginx -t +sudo systemctl reload nginx +``` + +### ขั้นที่ 3: ซิงก์ไฟล์ Build ล่าสุดเข้าโฟลเดอร์ทันที (ไม่ต้องรอ Push รอบถัดไป) +```bash +rsync -av --delete /home/sql/code/bigbike/apps/admin/dist/ /var/www/html/bigbike_admin/ +``` + +--- + +## 8. คำสั่งที่ใช้ในการตรวจสอบและแก้ไขปัญหา (Runbook & Troubleshooting) ### ตรวจสอบสถานะและ Logs บน Server: ```bash @@ -151,7 +186,11 @@ 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" +# ดู Nginx Error Log สำหรับ Admin Panel +ssh sql@192.168.1.26 "tail -n 50 /var/log/nginx/bigbike_admin_error.log" + # ทดสอบ Curl พอร์ตภายในเครื่อง ssh sql@192.168.1.26 "curl -I http://localhost:3005" ssh sql@192.168.1.26 "curl -I http://localhost:3002" +ssh sql@192.168.1.26 "curl -I -H 'Host: admin.bigbike.ddcsprocket.com' http://localhost" ``` diff --git a/serverinfo/192.168.1.26/bigbike.ddcsprocket.com/hook/post-receive b/serverinfo/192.168.1.26/bigbike.ddcsprocket.com/hook/post-receive index 68431ec..9dfa123 100644 --- a/serverinfo/192.168.1.26/bigbike.ddcsprocket.com/hook/post-receive +++ b/serverinfo/192.168.1.26/bigbike.ddcsprocket.com/hook/post-receive @@ -12,6 +12,7 @@ export PATH="/home/sql/.bun/bin:/usr/local/bin:/usr/bin:/bin:$PATH" # 1. PATH CONFIG GIT_DIR="/home/sql/git/bigbike.git" WORK_DIR="/home/sql/code/bigbike" +TARGET_ADMIN="/var/www/html/bigbike_admin" BRANCH="master" TEMP_DIR="/tmp/bigbike_build_$(date +%s)" @@ -80,7 +81,25 @@ if [ -d "apps/backend" ]; then cd "$WORK_DIR" fi -# D. Setup Website SSR (if apps/website exists) +# D. Build & Deploy Admin Panel (React Vite SPA) +if [ -d "apps/admin" ]; then + echo ">>> Building Admin Panel (React Vite SPA)..." + cd "$WORK_DIR/apps/admin" + export VITE_API_URL="https://api.bigbike.ddcsprocket.com/api" + export VITE_FRONTEND_URL="https://bigbike.ddcsprocket.com" + $BUN run build + + if [ -d "$TARGET_ADMIN" ]; then + echo "Deploying Admin Panel to $TARGET_ADMIN..." + rsync -av --delete dist/ "$TARGET_ADMIN"/ + else + echo "⚠️ Target directory $TARGET_ADMIN not found. Please create it once with:" + echo " sudo mkdir -p $TARGET_ADMIN && sudo chown -R sql:sql $TARGET_ADMIN" + fi + cd "$WORK_DIR" +fi + +# E. Setup Website SSR (if apps/website exists) if [ -d "apps/website" ]; then echo ">>> Building Next.js Website..." cd "$WORK_DIR/apps/website" @@ -101,7 +120,7 @@ if [ -d "apps/website" ]; then cd "$WORK_DIR" fi -# E. Save PM2 state +# F. Save PM2 state $PM2 save echo "========================================================" diff --git a/serverinfo/192.168.1.26/bigbike.ddcsprocket.com/nginx/admin.bigbike.ddcsprocket.com.conf b/serverinfo/192.168.1.26/bigbike.ddcsprocket.com/nginx/admin.bigbike.ddcsprocket.com.conf new file mode 100644 index 0000000..6b6bb6b --- /dev/null +++ b/serverinfo/192.168.1.26/bigbike.ddcsprocket.com/nginx/admin.bigbike.ddcsprocket.com.conf @@ -0,0 +1,24 @@ +server { + listen 80; + server_name admin.bigbike.ddcsprocket.com; + + # ตำแหน่งโฟลเดอร์ Build ของ React Admin Panel + root /var/www/html/bigbike_admin; + index index.html; + + # สำคัญมากสำหรับ React Router SPA: + # ถ้าไม่พบไฟล์ ($uri) ให้ส่งกลับไปที่ index.html เสมอ + location / { + try_files $uri $uri/ /index.html; + } + + # ตั้งค่า Cache สำหรับ Static Assets เพื่อความเร็ว + location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ { + expires 30d; + add_header Cache-Control "public, no-transform"; + } + + # Logging + error_log /var/log/nginx/bigbike_admin_error.log; + access_log /var/log/nginx/bigbike_admin_access.log; +}