123 lines
10 KiB
Markdown
123 lines
10 KiB
Markdown
# รายละเอียดโปรเจกต์ iRelax Aroma
|
|
|
|
โปรเจกต์นี้เป็นระบบ E-commerce สำหรับผลิตภัณฑ์เครื่องหอมและน้ำมันหอมระเหย (Aroma & Essential Oils) โดยมีการออกแบบสถาปัตยกรรมแบบ Monorepo ที่แบ่งส่วนการทำงานออกเป็น 4 ส่วนหลักในโฟลเดอร์ `apps/` ดังนี้:
|
|
|
|
---
|
|
|
|
## 1. Backend (`apps/backend`)
|
|
**ศูนย์กลางการประมวลผลและฐานข้อมูล**
|
|
|
|
* **เทคโนโลยีที่ใช้:** Bun, Elysia.js, Prisma 7, PostgreSQL
|
|
* **การทำงาน:** ทำหน้าที่เป็น RESTful API Server ที่จัดการข้อมูลทั้งหมดของระบบ ตั้งแต่การตรวจสอบสิทธิ์ (Authentication), การจัดการสินค้า (Products), หมวดหมู่ (Categories), คำสั่งซื้อ (Orders) ไปจนถึงการตั้งค่าต่างๆ ของร้านค้า
|
|
* **เป้าหมาย:** เพื่อให้เป็นจุดเชื่อมต่อข้อมูลเดียว (Single Source of Truth) ที่มีความรวดเร็วสูงด้วย Bun และมีความปลอดภัยในการเข้าถึงข้อมูล
|
|
* **การเชื่อมโยง:** เชื่อมต่อกับฐานข้อมูล PostgreSQL และให้บริการ API แก่ `admin`, `ssr`, และ `website`
|
|
|
|
## 2. Admin Portal (`apps/admin`)
|
|
**ระบบจัดการหลังบ้าน (Back-office)**
|
|
|
|
* **เทคโนโลยีที่ใช้:** React, Vite, Tailwind CSS
|
|
* **การทำงาน:** เป็น Web Application สำหรับผู้ดูแลระบบ (Admin) เพื่อใช้ในการจัดการสต็อกสินค้า, ดูรายงานยอดขาย, จัดการบทความ (Articles), และควบคุมการตั้งค่าหน้าร้าน
|
|
* **เป้าหมาย:** เพื่อให้ผู้ดูแลระบบสามารถบริหารจัดการร้านค้าได้อย่างมีประสิทธิภาพผ่าน Interface ที่ใช้งานง่าย
|
|
* **การเชื่อมโยง:** เชื่อมต่อกับ `backend` ผ่าน API เพื่อดึงและอัปเดตข้อมูลต่างๆ
|
|
|
|
## 3. Main Website (`apps/ssr`)
|
|
**เว็บไซต์หลัก (Public Interface)**
|
|
|
|
* **เทคโนโลยีที่ใช้:** Next.js (React), Tailwind CSS
|
|
* **การทำงาน:** เป็นส่วนการแสดงผลที่ใช้ Server-Side Rendering (SSR) เพื่อให้รองรับการทำ SEO (Search Engine Optimization) ได้ดีที่สุด โดยจะเน้นการแสดงสินค้าและบทความให้แก่บุคคลทั่วไป
|
|
* **เป้าหมาย:** เพื่อสร้างการรับรู้แบรนด์ (Brand Awareness) และช่วยให้ลูกค้าค้นหาพบผ่าน Search Engine ได้ง่าย
|
|
* **การเชื่อมโยง:** เชื่อมต่อกับ `backend` เพื่อดึงข้อมูลสินค้าและเนื้อหามาแสดงผลบนหน้าเว็บ
|
|
|
|
## 4. LIFF Mobile App (`apps/website`)
|
|
**หน้ากากมือถือสำหรับลูกค้า (Customer Interface)**
|
|
|
|
* **เทคโนโลยีที่ใช้:** React, Vite, LINE Front-end Framework (LIFF), Tailwind CSS
|
|
* **การทำงาน:** เป็น Single Page Application (SPA) ที่ออกแบบมาเพื่อรันภายในแอปพลิเคชัน LINE โดยเฉพาะ ลูกค้าสามารถสั่งซื้อสินค้า, ติดตามสถานะคำสั่งซื้อ, และรับสิทธิพิเศษต่างๆ ได้ทันทีผ่าน LINE OA
|
|
* **เป้าหมาย:** เพื่อความสะดวกสบายของลูกค้าในการเข้าถึงร้านค้าผ่านช่องทางที่คุ้นเคย (LINE) และสร้างความผูกพันกับลูกค้า (Customer Loyalty)
|
|
* **การเชื่อมโยง:** เชื่อมต่อกับ LINE Platform ผ่าน LIFF API และเชื่อมต่อกับ `backend` เพื่อทำรายการสั่งซื้อและจัดการข้อมูลสมาชิก
|
|
|
|
---
|
|
|
|
## สรุปการเชื่อมโยงของระบบ
|
|
|
|
```mermaid
|
|
graph TD
|
|
subgraph "External Platforms"
|
|
PostgreSQL[(Database)]
|
|
LINE[LINE Platform]
|
|
end
|
|
|
|
subgraph "Internal Apps"
|
|
B[Backend - ElysiaJS]
|
|
A[Admin - React/Vite]
|
|
S[Main Website - Next.js]
|
|
W[LIFF App - React/Vite]
|
|
end
|
|
|
|
A -- API Calls --> B
|
|
S -- API Calls --> B
|
|
W -- API Calls --> B
|
|
W -- Integration --> LINE
|
|
B -- Query/Save --> PostgreSQL
|
|
```
|
|
|
|
* **Backend** คือหัวใจหลักที่ทุกส่วนต้องวิ่งมาหา
|
|
* **Admin** จัดการข้อมูลทั้งหมดผ่าน Backend
|
|
* **Main Website (SSR)** ดึงข้อมูลไปแสดงเพื่อผลทางด้าน Google Search/SEO
|
|
* **LIFF App** เป็นช่องทางหลักที่ลูกค้าใช้สื่อสารและสั่งซื้อสินค้าผ่านแอป LINE
|
|
|
|
---
|
|
|
|
## 5. การ Deployment และ CI/CD
|
|
|
|
โปรเจกต์นี้ใช้ระบบ **Git Hooks (post-receive)** ในการทำ Automated Deployment เมื่อมีการ Push โค้ดไปยังเซิร์ฟเวอร์
|
|
|
|
### Git Remote Configuration
|
|
คุณสามารถส่งโค้ดขึ้นเซิร์ฟเวอร์เพื่อ Deploy ได้ผ่านคำสั่ง:
|
|
```bash
|
|
git push server master
|
|
```
|
|
* **Remote Name:** `server`
|
|
* **Remote URL:** `ti@kitizone.com:/home/ti/git/irelax.git`
|
|
|
|
### ขั้นตอนการทำงานของสคริปต์ Deployment (`post-receive`)
|
|
เมื่อมีการ Push โค้ด สคริปต์จะทำงานโดยอัตโนมัติดังนี้:
|
|
|
|
1. **Checkout & Build**: ดึงโค้ดล่าสุดมายังโฟลเดอร์ชั่วคราวและรัน `bun install`
|
|
2. **Frontend Deployment**:
|
|
* Build `website` และ `admin` (Vite)
|
|
* Deploy ไฟล์ `dist` ไปยัง Nginx paths (`/home/ti/projects/MyNginxMain/nginx/html/irelaxaroma.shop/`)
|
|
3. **Backend Deployment**:
|
|
* Sync โค้ดไปยัง `/home/ti/projects/irelax-api`
|
|
* รัน `prisma generate` และ `prisma migrate deploy` เพื่ออัปเดตฐานข้อมูล
|
|
* Restart บริการด้วย **PM2** (ชื่อ process: `irelax-backend`)
|
|
4. **SSR Deployment**:
|
|
* Build Next.js app และ Sync ไปยัง `/home/ti/projects/irelax-ssr`
|
|
* Restart บริการด้วย **PM2** (ชื่อ process: `irelax-ssr`) บนพอร์ต `3001`
|
|
5. **Cleanup**: ลบไฟล์ชั่วคราวที่ใช้ในการ Build ออก
|
|
|
|
### สรุป URL การเข้าใช้งาน (Production)
|
|
* **Website (SPA):** [https://irelaxaroma.shop](https://irelaxaroma.shop)
|
|
* **Admin Panel:** [https://admin.irelaxaroma.shop](https://admin.irelaxaroma.shop)
|
|
* **API Backend:** [https://api.irelaxaroma.shop](https://api.irelaxaroma.shop)
|
|
* **SSR Next.js:** [https://ssr.irelaxaroma.shop](https://ssr.irelaxaroma.shop)
|
|
|
|
---
|
|
|
|
## 6. ข้อควรปฏิบัติในการอัปเดตฐานข้อมูล (Prisma)
|
|
|
|
เพื่อให้ระบบ Deployment อัปเดตฐานข้อมูลบนเซิร์ฟเวอร์ได้อย่างถูกต้องและปลอดภัย ควรปฏิบัติตามขั้นตอนนี้:
|
|
|
|
1. **ที่เครื่องคอมพิวเตอร์ของคุณ (Local):**
|
|
* ทำการแก้ไขไฟล์ `apps/backend/prisma/schema.prisma` ตามต้องการ
|
|
* รันคำสั่งเพื่อสร้างไฟล์ Migration ใหม่:
|
|
```bash
|
|
npx prisma migrate dev --name <ระบุชื่อการเปลี่ยนแปลง>
|
|
```
|
|
* Prisma จะสร้างไฟล์ในโฟลเดอร์ `apps/backend/prisma/migrations/`
|
|
2. **การ Commit โค้ด:**
|
|
* ต้องทำการ Commit ทั้งไฟล์ `schema.prisma` และ **โฟลเดอร์ migrations** ที่เกิดขึ้นใหม่เข้าไปใน Git ด้วยทุกครั้ง
|
|
3. **การ Deploy:**
|
|
* เมื่อสั่ง `git push server master` ระบบ Git Hook บนเซิร์ฟเวอร์จะตรวจพบไฟล์ Migration ใหม่
|
|
* สคริปต์จะรัน `prisma migrate deploy` ให้โดยอัตโนมัติ เพื่อนำความเปลี่ยนแปลงเข้าสู่ฐานข้อมูล Production โดยไม่ทำให้ข้อมูลเดิมสูญหาย
|