x
This commit is contained in:
1 parent
5ba4afb2de
commit
731619af9d
4 files changed
+109
-8
No files matched your search
@@ -12,6 +12,7 @@ export PATH="/home/sql/.bun/bin:/usr/local/bin:/usr/bin:/bin:$PATH"
|
|||||||
# 1. PATH CONFIG
|
# 1. PATH CONFIG
|
||||||
GIT_DIR="/home/sql/git/bigbike.git"
|
GIT_DIR="/home/sql/git/bigbike.git"
|
||||||
WORK_DIR="/home/sql/code/bigbike"
|
WORK_DIR="/home/sql/code/bigbike"
|
||||||
|
TARGET_ADMIN="/var/www/html/bigbike_admin"
|
||||||
BRANCH="master"
|
BRANCH="master"
|
||||||
TEMP_DIR="/tmp/bigbike_build_$(date +%s)"
|
TEMP_DIR="/tmp/bigbike_build_$(date +%s)"
|
||||||
|
|
||||||
@@ -80,7 +81,25 @@ if [ -d "apps/backend" ]; then
|
|||||||
cd "$WORK_DIR"
|
cd "$WORK_DIR"
|
||||||
fi
|
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
|
if [ -d "apps/website" ]; then
|
||||||
echo ">>> Building Next.js Website..."
|
echo ">>> Building Next.js Website..."
|
||||||
cd "$WORK_DIR/apps/website"
|
cd "$WORK_DIR/apps/website"
|
||||||
@@ -101,7 +120,7 @@ if [ -d "apps/website" ]; then
|
|||||||
cd "$WORK_DIR"
|
cd "$WORK_DIR"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# E. Save PM2 state
|
# F. Save PM2 state
|
||||||
$PM2 save
|
$PM2 save
|
||||||
|
|
||||||
echo "========================================================"
|
echo "========================================================"
|
||||||
|
|||||||
@@ -19,7 +19,8 @@
|
|||||||
[ External Gateway / Firewall / Nginx Proxy ]
|
[ External Gateway / Firewall / Nginx Proxy ]
|
||||||
│
|
│
|
||||||
├── Forward Traffic (Domain: bigbike.ddcsprocket.com) ──► 192.168.1.26:3002 (Next.js SSR)
|
├── 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` |
|
| **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` |
|
| **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 (เพื่อป้องกันพอร์ตชน)
|
### ตารางตรวจสอบพอร์ตเดิมบน Server (เพื่อป้องกันพอร์ตชน)
|
||||||
| Port | Service เดิมที่ใช้งานอยู่ | สถานะ |
|
| Port | Service เดิมที่ใช้งานอยู่ | สถานะ |
|
||||||
@@ -131,14 +133,47 @@
|
|||||||
* รัน `$BUN x prisma migrate deploy` (นำ migration files ใหม่ไป Apply ลง DB อัตโนมัติ)
|
* รัน `$BUN x prisma migrate deploy` (นำ migration files ใหม่ไป Apply ลง DB อัตโนมัติ)
|
||||||
* รัน `$BUN x prisma db push --accept-data-loss` (ซิงก์ schema เข้า DB ทันที ป้องกันกรณีแก้ schema.prisma โดยไม่ได้รัน migrate dev)
|
* รัน `$BUN x prisma db push --accept-data-loss` (ซิงก์ schema เข้า DB ทันที ป้องกันกรณีแก้ schema.prisma โดยไม่ได้รัน migrate dev)
|
||||||
* สั่ง `pm2 restart bigbike-backend --update-env` (หากยังไม่เคยรัน จะสั่ง `pm2 start` บนพอร์ต `3005`)
|
* สั่ง `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`
|
* บิลด์ Next.js ด้วย `NODE_ENV=production $BUN run build`
|
||||||
* สั่ง `pm2 restart bigbike-website --update-env` (หากยังไม่เคยรัน จะสั่งรัน standalone `server.js` บนพอร์ต `3002`)
|
* สั่ง `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:
|
### ตรวจสอบสถานะและ Logs บน Server:
|
||||||
```bash
|
```bash
|
||||||
@@ -151,7 +186,11 @@ ssh sql@192.168.1.26 "pm2 logs bigbike-backend --lines 100"
|
|||||||
# ดู Logs สดของ Website SSR
|
# ดู Logs สดของ Website SSR
|
||||||
ssh sql@192.168.1.26 "pm2 logs bigbike-website --lines 100"
|
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 พอร์ตภายในเครื่อง
|
# ทดสอบ Curl พอร์ตภายในเครื่อง
|
||||||
ssh sql@192.168.1.26 "curl -I http://localhost:3005"
|
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 http://localhost:3002"
|
||||||
|
ssh sql@192.168.1.26 "curl -I -H 'Host: admin.bigbike.ddcsprocket.com' http://localhost"
|
||||||
```
|
```
|
||||||
@@ -12,6 +12,7 @@ export PATH="/home/sql/.bun/bin:/usr/local/bin:/usr/bin:/bin:$PATH"
|
|||||||
# 1. PATH CONFIG
|
# 1. PATH CONFIG
|
||||||
GIT_DIR="/home/sql/git/bigbike.git"
|
GIT_DIR="/home/sql/git/bigbike.git"
|
||||||
WORK_DIR="/home/sql/code/bigbike"
|
WORK_DIR="/home/sql/code/bigbike"
|
||||||
|
TARGET_ADMIN="/var/www/html/bigbike_admin"
|
||||||
BRANCH="master"
|
BRANCH="master"
|
||||||
TEMP_DIR="/tmp/bigbike_build_$(date +%s)"
|
TEMP_DIR="/tmp/bigbike_build_$(date +%s)"
|
||||||
|
|
||||||
@@ -80,7 +81,25 @@ if [ -d "apps/backend" ]; then
|
|||||||
cd "$WORK_DIR"
|
cd "$WORK_DIR"
|
||||||
fi
|
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
|
if [ -d "apps/website" ]; then
|
||||||
echo ">>> Building Next.js Website..."
|
echo ">>> Building Next.js Website..."
|
||||||
cd "$WORK_DIR/apps/website"
|
cd "$WORK_DIR/apps/website"
|
||||||
@@ -101,7 +120,7 @@ if [ -d "apps/website" ]; then
|
|||||||
cd "$WORK_DIR"
|
cd "$WORK_DIR"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# E. Save PM2 state
|
# F. Save PM2 state
|
||||||
$PM2 save
|
$PM2 save
|
||||||
|
|
||||||
echo "========================================================"
|
echo "========================================================"
|
||||||
|
|||||||
+24
@@ -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;
|
||||||
|
}
|
||||||
Reference in new issue
Block a user