# Foxxio Platform Deployment Guide & System Architecture ### Target Domain: `foxxio.ddcsprocket.com` ### Target Server: `sql@192.168.1.26` ### Gateway Server: `adminweb@192.168.1.24` --- ## 1. บทบาทของเซิร์ฟเวอร์ (System Architecture & Role) * **Application Server:** `192.168.1.26` (Hostname: `sql`, User: `sql`) * **บทบาท:** Application Runner (PM2 / Bun / Node) + Static Nginx Host สำหรับ Admin Panel * **ขอบเขต:** * รัน API Service (Elysia / Bun) บน Port **`3006`** * รัน Website SSR (Next.js / Node.js) บน Port **`3003`** * รัน Admin Panel (React Vite SPA) ผ่าน Nginx Port **`80`** ชี้ไปยัง `/var/www/html/foxxio_admin` * **Gateway / Reverse Proxy:** `192.168.1.24` (Docker Nginx) * จัดการ SSL Termination (Let's Encrypt Certbot) * Proxy Traffic ตาม Domain เข้ามายัง `192.168.1.26` ``` [ User Request ] │ ▼ [ Gateway: 192.168.1.24 (Docker Nginx + SSL) ] │ ├── https://foxxio.ddcsprocket.com ──────► http://192.168.1.26:3003 (Next.js SSR) ├── https://foxxio.ddcsprocket.com/api/ ──► http://192.168.1.26:3006 (Elysia API) ├── https://api.foxxio.ddcsprocket.com ───► http://192.168.1.26:3006 (Elysia API) └── https://admin.foxxio.ddcsprocket.com ─► http://192.168.1.26:80 (Admin Static SPA) ``` --- ## 2. โครงสร้าง Git Repository & การเชื่อมต่อ (Git Info) ### ฝั่ง Server (`192.168.1.26`) | รายการ | ตำแหน่ง Path บน Server | รายละเอียด | | :--- | :--- | :--- | | **Bare Repository** | `/home/sql/git/foxxio.git` | จุดรับ Git Push จากเครื่อง Local | | **Symlink Alias** | `/home/sql/git/foxxio.ddcsprocket.com.git` | ชี้ไปยัง `foxxio.git` | | **Working Directory** | `/home/sql/code/foxxio` | โฟลเดอร์แตกไฟล์ Source Code และรันโปรเจกต์ | | **Hook Script** | `/home/sql/git/foxxio.git/hooks/post-receive` | สคริปต์สั่ง Build และ Restart PM2 อัตโนมัติ (`chmod +x`) | ### ฝั่ง Local (`d:\cms`) * **Git Remote Name:** `foxxio` * **Remote URL:** `sql@192.168.1.26:/home/sql/git/foxxio.git` * **คำสั่ง Deploy:** ```powershell git remote add foxxio sql@192.168.1.26:/home/sql/git/foxxio.git git push foxxio master ``` --- ## 3. แผนผังพอร์ต & การจัดการ PM2 (Process Management) ### พอร์ตและ Process ของ Foxxio | Service | PM2 Process Name | Port | Runtime / Command | CWD | | :--- | :--- | :---: | :--- | :--- | | **Backend API** | `foxxio-backend` | **`3006`** | `bun run src/index.ts` | `/home/sql/code/foxxio/apps/backend` | | **Website (SSR)** | `foxxio-website` | **`3003`** | `node server.js` หรือ `bun run start` | `/home/sql/code/foxxio/apps/website` | | **Admin Panel** | *N/A (Nginx Static)* | **`80`** | Nginx Static Build | `/var/www/html/foxxio_admin` | ### ตารางพอร์ตบน Server 192.168.1.26 | Port | Service ที่ใช้งาน | สถานะ | | :---: | :--- | :---: | | **3001** | `shop-ddcth` (Next.js) | ใช้งานอยู่ | | **3002** | `bigbike-website` (Next.js SSR) | ใช้งานอยู่ | | **3003** | `foxxio-website` (Next.js SSR) | **Foxxio** | | **3005** | `bigbike-backend` (Elysia API) | ใช้งานอยู่ | | **3006** | `foxxio-backend` (Elysia API) | **Foxxio** | | **4000** | `aroka-backend` | ใช้งานอยู่ | | **5000** | `ddc hr backend` | ใช้งานอยู่ | --- ## 4. การตั้งค่าฐานข้อมูล & ไฟล์ .env ### 1) ฐานข้อมูล PostgreSQL บน `192.168.1.26` * **Database Name:** `foxxio_db` * **Connection String:** ```text DATABASE_URL="postgresql://postgres:password@localhost:5432/foxxio_db?schema=public" ``` ### 2) Environment Variables * **Backend (`/home/sql/code/foxxio/apps/backend/.env`):** ```env PORT=3006 DATABASE_URL="postgresql://postgres:password@localhost:5432/foxxio_db?schema=public" NODE_ENV=production APP_URL="https://api.foxxio.ddcsprocket.com" BACKEND_PUBLIC_URL="https://api.foxxio.ddcsprocket.com" CORS_ORIGIN="https://admin.foxxio.ddcsprocket.com,https://spa.foxxio.ddcsprocket.com,https://foxxio.ddcsprocket.com,http://localhost:3000,http://localhost:3003" JWT_SECRET="foxxio-secret-key-prod-2026-ddc" OMISE_SECRET_KEY="" ``` * **Website SSR (`/home/sql/code/foxxio/apps/website/.env`):** ```env PORT=3003 NODE_ENV=production NEXT_PUBLIC_API_URL="https://api.foxxio.ddcsprocket.com/api" ``` --- ## 5. คำสั่ง Sudo One-Liner สำหรับ Server 192.168.1.26 รันคำสั่งด้านล่างนี้บน `sql@192.168.1.26` เพียงครั้งเดียว: ```bash # 1. ปลดบล็อก UFW พอร์ต 3003 และ 3006 sudo ufw allow 3003/tcp comment "Foxxio Website SSR" sudo ufw allow 3006/tcp comment "Foxxio Backend API" sudo ufw reload # 2. สร้างโฟลเดอร์ Web Root สำหรับ Admin Panel sudo mkdir -p /var/www/html/foxxio_admin sudo chown -R sql:sql /var/www/html/foxxio_admin # 3. ติดตั้ง Nginx Virtual Host สำหรับ Admin Panel sudo tee /etc/nginx/sites-available/admin.foxxio.ddcsprocket.com.conf > /dev/null << 'EOF' server { listen 80; server_name admin.foxxio.ddcsprocket.com; root /var/www/html/foxxio_admin; index index.html; location / { try_files $uri $uri/ /index.html; } location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ { expires 30d; add_header Cache-Control "public, no-transform"; } error_log /var/log/nginx/foxxio_admin_error.log; access_log /var/log/nginx/foxxio_admin_access.log; } EOF sudo ln -sf /etc/nginx/sites-available/admin.foxxio.ddcsprocket.com.conf /etc/nginx/sites-enabled/ sudo nginx -t && sudo systemctl reload nginx ``` --- ## 6. การตั้งค่าบน Gateway 192.168.1.24 (`adminweb@192.168.1.24`) 1. **`foxxio.ddcsprocket.com.conf`**: Proxy `/` ไปยัง `192.168.1.26:3003` และ `/api/` ไปยัง `192.168.1.26:3006` 2. **`admin.foxxio.ddcsprocket.com.conf`**: Proxy ไปยัง `192.168.1.26:80` (พร้อม SSL เดิม) 3. **`api.foxxio.ddcsprocket.com.conf`**: Proxy ไปยัง `192.168.1.26:3006`