690520:1652 224 to 226 AI #07
CI / CD Pipeline / build (push) Successful in 4m32s
CI / CD Pipeline / deploy (push) Successful in 5m48s

This commit is contained in:
2026-05-20 16:52:20 +07:00
parent f17a81d363
commit 1580ab2c18
2 changed files with 733 additions and 0 deletions
+731
View File
@@ -0,0 +1,731 @@
# คู่มือการตั้งค่าและเริ่มต้น Development (Development Setup Guide)
> **LCBP3-DMS — Document Management System**
> เอกสารนี้ครอบคลุมขั้นตอนการตั้งค่า environment สำหรับการพัฒนาทั้ง Backend และ Frontend
>
> อัปเดตล่าสุด: 2026-05-20
---
## 📋 Table of Contents
1. [Prerequisites](#prerequisites)
2. [การติดตั้งเครื่องมือพื้นฐาน](#การติดตั้งเครื่องมือพื้นฐาน)
3. [การตั้งค่า Docker Services Stack](#การตั้งค่า-docker-services-stack)
4. [การตั้งค่า Environment Variables](#การตั้งค่า-environment-variables)
5. [การติดตั้ง Dependencies](#การติดตั้ง-dependencies)
6. [การตั้งค่า Database](#การตั้งค่า-database)
7. [การเริ่มต้น Backend Development](#การเริ่มต้น-backend-development)
8. [การเริ่มต้น Frontend Development](#การเริ่มต้น-frontend-development)
9. [การทดสอบระบบ](#การทดสอบระบบ)
10. [การ Debug และ Troubleshooting](#การ-debug-และ-troubleshooting)
11. [Checklist ก่อนเริ่มทำงาน](#checklist-ก่อนเริ่มทำงาน)
---
## Prerequisites
### ระบบที่รองรับ
- **Operating System**: Windows 10/11, macOS, Linux
- **RAM**: ขั้นต่ำ 8GB (แนะนำ 16GB)
- **Disk Space**: ขั้นต่ำ 10GB
### เครื่องมือที่ต้องการ
| Tool | Minimum Version | Recommended | หมายเหตุ |
|------|----------------|--------------|-----------|
| **Node.js** | >=24.0.0 | 24.15.0 LTS | ใช้ LTS version |
| **pnpm** | >=10.33.0 | 10.33.0 | Package manager |
| **Docker Desktop** | >=24.x | Latest | สำหรับ services stack |
| **Git** | >=2.x | Latest | Version control |
---
## การติดตั้งเครื่องมือพื้นฐาน
### 1. ติดตั้ง Node.js
ดาวน์โหลดจาก: https://nodejs.org/
```bash
# ตรวจสอบ version หลังติดตั้ง
node -v
# ควรได้: v24.15.0 หรือสูงกว่า
```
### 2. ติดตั้ง pnpm
```bash
# ติดตั้ง pnpm ผ่าน npm
npm install -g pnpm
# หรือใช้ standalone installer
# ดูที่: https://pnpm.io/installation
# ตรวจสอบ version
pnpm -v
# ควรได้: 10.33.0 หรือสูงกว่า
```
### 3. ติดตั้ง Docker Desktop
ดาวน์โหลดจาก: https://www.docker.com/products/docker-desktop/
- เลือก Docker Desktop for Windows/Mac/Linux
- ติดตั้งและรัน Docker Desktop
- ตรวจสอบว่า Docker ทำงานได้:
```bash
docker -v
# ควรได้: Docker version 24.x.x
docker ps
# ควรแสดง container list (ว่างหรือมี container)
```
### 4. ติดตั้ง Git
ดาวน์โหลดจาก: https://git-scm.com/
```bash
git --version
# ควรได้: git version 2.x.x
```
---
## การตั้งค่า Docker Services Stack
Services Stack ประกอบด้วย:
- **MariaDB** - Database
- **Redis** - Cache & Queue
- **Elasticsearch** - Search engine
- **Qdrant** - Vector store (AI)
- **ClamAV** - Virus scanning
- **phpMyAdmin** - Database management tool
### 1. Clone Repository
```bash
git clone https://git.np-dms.work/np-dms/lcbp3.git
cd lcbp3
```
### 2. รัน Docker Services
```bash
cd backend
docker compose up -d
```
ตรวจสอบสถานะ services:
```bash
docker compose ps
```
ควรเห็น services ทั้งหมดในสถานะ "Up" หรือ "healthy"
| Service | Port | Credentials |
|---------|------|-------------|
| **MariaDB** | 3306 | user: `admin` / pass: `Center2025` / DB: `lcbp3_dev` |
| **Redis** | 16379 | password: `Center2025` |
| **Elasticsearch** | 9200 | No auth (dev mode) |
| **Qdrant** | 6333 | No auth |
| **ClamAV** | 3310 | No auth |
| **phpMyAdmin** | 8080 | user: `admin` / pass: `Center2025` |
### 3. ตรวจสอบ Services Health
```bash
# ตรวจสอบ MariaDB
docker compose exec mariadb mysql -u admin -pCenter2025 -e "SHOW DATABASES;"
# ตรวจสอบ Redis
docker compose exec redis redis-cli -a Center2025 ping
# ควรได้: PONG
# ตรวจสอบ Elasticsearch
curl http://localhost:9200/_cluster/health
```
---
## การตั้งค่า Environment Variables
### Backend Environment Variables
สร้างไฟล์ `.env` ใน `backend/`:
```bash
cd backend
cp .env.example .env
```
แก้ไขค่าสำคัญใน `backend/.env`:
```dotenv
# Database
DB_HOST=localhost
DB_PORT=3306
DB_USERNAME=admin
DB_PASSWORD=Center2025
DB_DATABASE=lcbp3_dev
# Redis
REDIS_HOST=localhost
REDIS_PORT=16379
REDIS_PASSWORD=Center2025
# JWT - สร้างด้วยคำสั่ง: openssl rand -base64 32
JWT_SECRET=<ใส่ค่าที่สร้างจาก openssl>
# File Storage
UPLOAD_DEST=./uploads
MAX_FILE_SIZE=52428800
# ClamAV
CLAMAV_HOST=localhost
CLAMAV_PORT=3310
# AI Services (ถ้ามี AI Host)
AI_HOST_URL=http://192.168.10.100:11434
AI_QDRANT_URL=http://192.168.10.100:6333
OLLAMA_URL=http://192.168.10.100:11434
OLLAMA_MODEL_MAIN=gemma4:e4b
OLLAMA_MODEL_EMBED=nomic-embed-text
```
**สร้าง JWT_SECRET:**
```bash
openssl rand -base64 32
```
### Frontend Environment Variables
สร้างไฟล์ `.env.local` ใน `frontend/`:
```bash
cd frontend
cp .env.example .env.local
```
แก้ไขค่าใน `frontend/.env.local`:
```dotenv
# API Configuration
NEXT_PUBLIC_API_URL=http://localhost:3001/api
# NextAuth Configuration - สร้างด้วย: openssl rand -base64 32
AUTH_SECRET=<ใส่ค่าที่สร้างจาก openssl>
```
**สร้าง AUTH_SECRET:**
```bash
openssl rand -base64 32
```
**⚠️ สำคัญ:** JWT_SECRET และ AUTH_SECRET ต้องเป็นค่าที่ต่างกัน
---
## การติดตั้ง Dependencies
### ติดตั้ง Dependencies ทั้งหมด (Monorepo)
จาก root directory ของ project:
```bash
cd lcbp3
pnpm install
```
คำสั่งนี้จะติดตั้ง dependencies สำหรับ:
- Root workspace
- Backend
- Frontend
### ติดตั้งเฉพาะ Backend
```bash
cd backend
pnpm install
```
### ติดตั้งเฉพาะ Frontend
```bash
cd frontend
pnpm install
```
---
## การตั้งค่า Database
### 1. Import Schema (ครั้งแรกเท่านั้น)
ถ้า database ว่างหรือเพิ่งสร้างใหม่:
```bash
# จาก root directory
mysql -u admin -pCenter2025 lcbp3_dev < specs/03-Data-and-Storage/lcbp3-v1.8.0-schema-01-drop.sql
mysql -u admin -pCenter2025 lcbp3_dev < specs/03-Data-and-Storage/lcbp3-v1.8.0-schema-02-tables.sql
mysql -u admin -pCenter2025 lcbp3_dev < specs/03-Data-and-Storage/lcbp3-v1.8.0-schema-03-views-indexes.sql
```
### 2. Import Seed Data
```bash
mysql -u admin -pCenter2025 lcbp3_dev < specs/03-Data-and-Storage/lcbp3-v1.8.0-seed-basic.sql
mysql -u admin -pCenter2025 lcbp3_dev < specs/03-Data-and-Storage/lcbp3-v1.8.0-seed-permissions.sql
```
### 3. หรือใช้คำสั่ง Seed จาก Backend
```bash
cd backend
pnpm seed
```
### 4. ตรวจสอบ Database
ผ่าน phpMyAdmin: http://localhost:8080
หรือผ่าน command line:
```bash
mysql -u admin -pCenter2025 lcbp3_dev
mysql> SHOW TABLES;
mysql> SELECT COUNT(*) FROM users;
mysql> SELECT COUNT(*) FROM organizations;
```
---
## การเริ่มต้น Backend Development
### 1. รัน Development Server
```bash
cd backend
pnpm run start:dev
```
หรือจาก root directory:
```bash
pnpm dev:backend
```
Backend จะรันที่: http://localhost:3001
### 2. เข้าถึง API Documentation
- **Swagger UI**: http://localhost:3001/api/docs
- **API Root**: http://localhost:3001/api
### 3. คำสั่งที่มีประโยชน์
```bash
# รันใน watch mode (auto-reload)
pnpm run start:dev
# Build สำหรับ production
pnpm run build
# รัน production build
pnpm run start:prod
# Run unit tests
pnpm run test
# Run e2e tests
pnpm run test:e2e
# Run test coverage
pnpm run test:cov
# Lint code
pnpm run lint
# Format code
pnpm run format
```
### 4. โครงสร้าง Backend
```
backend/
├── src/
│ ├── common/ # Shared utilities, guards, decorators
│ ├── config/ # Configuration module
│ ├── database/ # Database entities
│ ├── modules/ # Feature modules
│ │ ├── auth/
│ │ ├── user/
│ │ ├── project/
│ │ ├── correspondence/
│ │ ├── rfa/
│ │ ├── drawing/
│ │ ├── workflow-engine/
│ │ ├── ai/
│ │ └── ...
│ └── main.ts
├── test/ # Unit & E2E tests
├── uploads/ # File upload storage
└── package.json
```
### 5. การสร้าง Module ใหม่
ใช้ NestJS CLI:
```bash
cd backend
npx nest g module modules/<module-name>
npx nest g controller modules/<module-name>
npx nest g service modules/<module-name>
```
---
## การเริ่มต้น Frontend Development
### 1. รัน Development Server
```bash
cd frontend
pnpm run dev
```
หรือจาก root directory:
```bash
pnpm dev:frontend
```
Frontend จะรันที่: http://localhost:3000
### 2. เข้าถึง Application
- **Frontend**: http://localhost:3000
- **Login**: ใช้ credentials จาก seed data
### 3. คำสั่งที่มีประโยชน์
```bash
# รัน development server
pnpm run dev
# Build สำหรับ production
pnpm run build
# Start production server
pnpm run start
# Run unit tests (Vitest)
pnpm run test
# Run E2E tests (Playwright)
pnpm run test:e2e
# Lint code
pnpm run lint
# Type check
pnpm run type-check
```
### 4. โครงสร้าง Frontend
```
frontend/
├── app/ # Next.js App Router
│ ├── (admin)/ # Admin panel routes
│ ├── (auth)/ # Authentication pages
│ ├── (dashboard)/ # Main dashboard routes
│ └── api/ # API routes
├── components/ # React Components
├── lib/ # Utilities & API clients
├── hooks/ # Custom React hooks
├── types/ # TypeScript definitions
├── public/ # Static assets
└── package.json
```
### 5. การสร้าง Page ใหม่
ใช้ Next.js App Router:
```bash
cd frontend/app/(dashboard)/<feature>
mkdir <feature>
```
สร้าง `page.tsx` และ `layout.tsx` ตามโครงสร้างที่มีอยู่
---
## การทดสอบระบบ
### 1. ทดสอบ Backend API
```bash
# ทดสอบ health check
curl http://localhost:3001/api
# ทดสอบ login
curl -X POST http://localhost:3001/api/auth/login \
-H "Content-Type: application/json" \
-d '{"email":"admin@np-dms.work","password":"<password>"}'
```
### 2. ทดสอบ Frontend
เปิด browser ไปที่: http://localhost:3000
- ลอง login ด้วย credentials จาก seed data
- เข้าไปดูหน้า dashboard
- ทดสอบสร้าง/แก้ไขข้อมูล
### 3. รัน Tests
**Backend:**
```bash
cd backend
pnpm run test # Unit tests
pnpm run test:e2e # E2E tests
```
**Frontend:**
```bash
cd frontend
pnpm run test # Vitest unit tests
pnpm run test:e2e # Playwright E2E tests
```
---
## การ Debug และ Troubleshooting
### ปัญหาที่พบบ่อย
#### 1. Docker Services ไม่รัน
```bash
# ตรวจสอบ logs
docker compose logs
# รันใหม่
docker compose down
docker compose up -d
# ตรวจสอบ port conflicts
netstat -ano | findstr :3306
```
#### 2. Database Connection Error
ตรวจสอบ:
- Docker services รันอยู่หรือไม่
- Credentials ใน `.env` ตรงกับ services หรือไม่
- Database ถูกสร้างแล้วหรือยัง
```bash
# ทดสอบ connection
docker compose exec mariadb mysql -u admin -pCenter2025 lcbp3_dev
```
#### 3. Backend ไม่รัน
ตรวจสอบ:
- Dependencies ติดตั้งครบหรือไม่
- Environment variables ตั้งค่าถูกต้องหรือไม่
- Port 3001 ไม่ถูกใช้โดย process อื่น
```bash
# ตรวจสอบ port
netstat -ano | findstr :3001
# ลบ process ถ้าจำเป็น
taskkill /PID <PID> /F
```
#### 4. Frontend ไม่รัน
ตรวจสอบ:
- Dependencies ติดตั้งครบหรือไม่
- `NEXT_PUBLIC_API_URL` ชี้ไปที่ backend ที่ถูกต้อง
- Port 3000 ไม่ถูกใช้โดย process อื่น
#### 5. TypeScript Errors
```bash
# Backend type check
cd backend
pnpm run build
# Frontend type check
cd frontend
pnpm run type-check
```
### การ Debug ด้วย VS Code
**Backend:**
1. เปิด folder `backend/` ใน VS Code
2. กด F5 หรือไปที่ Run and Debug
3. เลือก "Launch NestJS"
**Frontend:**
1. เปิด folder `frontend/` ใน VS Code
2. กด F5 หรือไปที่ Run and Debug
3. เลือก "Launch Next.js"
---
## Checklist ก่อนเริ่มทำงาน
### Prerequisites
- [ ] Node.js >=24.0.0 ติดตั้งแล้ว
- [ ] pnpm >=10.33.0 ติดตั้งแล้ว
- [ ] Docker Desktop ติดตั้งและรันอยู่
- [ ] Git ติดตั้งแล้ว
- [ ] Repository clone เรียบร้อย
### Docker Services
- [ ] `docker compose up -d` รันใน `backend/` แล้ว
- [ ] ทุก services อยู่ในสถานะ "Up" หรือ "healthy"
- [ ] MariaDB สามารถเชื่อมต่อได้
- [ ] Redis สามารถเชื่อมต่อได้
- [ ] Elasticsearch สามารถเชื่อมต่อได้
### Environment Variables
- [ ] `backend/.env` สร้างแล้ว
- [ ] `JWT_SECRET` ตั้งค่าแล้ว (ใช้ค่าที่ generate)
- [ ] `frontend/.env.local` สร้างแล้ว
- [ ] `AUTH_SECRET` ตั้งค่าแล้ว (ใช้ค่าที่ generate)
- [ ] `JWT_SECRET` และ `AUTH_SECRET` เป็นค่าที่ต่างกัน
- [ ] Database credentials ตรงกับ Docker services
### Database
- [ ] Schema import เรียบร้อย (ครั้งแรก)
- [ ] Seed data import เรียบร้อย (ครั้งแรก)
- [ ] ตรวจสอบว่า tables ถูกสร้างแล้ว
- [ ] ตรวจสอบว่า seed data มีอยู่
### Dependencies
- [ ] `pnpm install` ที่ root สำเร็จ
- [ ] Backend dependencies ติดตั้งครบ
- [ ] Frontend dependencies ติดตั้งครบ
### Development Servers
- [ ] Backend รันที่ http://localhost:3001
- [ ] Frontend รันที่ http://localhost:3000
- [ ] Swagger UI เข้าถึงได้ที่ http://localhost:3001/api/docs
- [ ] ไม่มี error ใน console logs
### Testing
- [ ] ทดสอบ login ผ่าน frontend ได้
- [ ] ทดสอบ API endpoints ผ่าน Swagger ได้
- [ ] Unit tests รันผ่าน (backend)
- [ ] Unit tests รันผ่าน (frontend)
---
## ทรัพยากรเพิ่มเติม
### เอกสารประกอบ
- **Project README**: `README.md`
- **Backend Guidelines**: `specs/05-Engineering-Guidelines/05-02-backend-guidelines.md`
- **Frontend Guidelines**: `specs/05-Engineering-Guidelines/05-03-frontend-guidelines.md`
- **ADR-019 UUID Strategy**: `specs/06-Decision-Records/ADR-019-hybrid-identifier-strategy.md`
- **ADR-007 Error Handling**: `specs/06-Decision-Records/ADR-007-error-handling-strategy.md`
### Tools & Documentation
- **NestJS Docs**: https://docs.nestjs.com/
- **Next.js Docs**: https://nextjs.org/docs
- **TypeORM Docs**: https://typeorm.io/
- **React Hook Form**: https://react-hook-form.com/
- **TanStack Query**: https://tanstack.com/query/latest
### Dev URLs
| Service | URL |
|---------|-----|
| **Frontend** | http://localhost:3000 |
| **Backend API** | http://localhost:3001/api |
| **Swagger UI** | http://localhost:3001/api/docs |
| **phpMyAdmin** | http://localhost:8080 |
| **Elasticsearch** | http://localhost:9200 |
| **Qdrant Dashboard** | http://localhost:6333/dashboard |
---
## การปิดระบบ Development
```bash
# หยุด backend และ frontend (Ctrl+C)
# หยุด Docker services
cd backend
docker compose down
# หรือหยุดและลบ volumes (ข้อมูล DB จะหาย)
docker compose down -v
```
---
## คำถามที่พบบ่อย (FAQ)
### Q: ต้องรัน Docker services ทุกครั้งหรือไม่?
A: ใช่ ต้องรัน `docker compose up -d` ใน `backend/` ก่อนเริ่ม development ทุกครั้ง
### Q: สามารถรันเฉพาะ backend หรือ frontend ได้ไหม?
A: ได้ ใช้คำสั่ง `pnpm dev:backend` หรือ `pnpm dev:frontend` จาก root directory
### Q: JWT_SECRET และ AUTH_SECRET ต้องเหมือนกันหรือไม่?
A: ไม่ ต้องเป็นค่าที่ต่างกันเพื่อความปลอดภัย
### Q: ต้อง import schema ทุกครั้งหรือไม่?
A: ไม่ ต้อง import เฉพาะครั้งแรกเท่านั้น หรือเมื่อมีการเปลี่ยนแปลง schema
### Q: ถ้าต้องการ reset database ทั้งหมด?
A: รัน `docker compose down -v` แล้ว import schema ใหม่
---
## ข้อควรระวัง
⚠️ **Security:**
- ห้าม commit `.env` หรือ `.env.local` ไฟล์
- ห้ามใช้ค่า secrets จริงใน production
- เปลี่ยน password สำหรับ production environment
⚠️ **Data Integrity:**
- อย่าแก้ไข database schema โดยตรงโดยไม่ทำตาม ADR-009
- ใช้ seed data สำหรับ development เท่านั้น
⚠️ **Performance:**
- ปิด Docker services เมื่อไม่ใช้งานเพื่อประหยัด resources
- ใช้ watch mode สำหรับ development เท่านั้น (ไม่ใช่ production)
---
**สำหรับคำถามเพิ่มเติม หรือปัญหาที่พบ กรุณาติดต่อทีม Development หรือสร้าง Issue ใน Gitea**