Files
lcbp3/docs/backup/backend_setup.bak
admin aaa5da3ec1
Some checks failed
Spec Validation / validate-markdown (push) Has been cancelled
Spec Validation / validate-diagrams (push) Has been cancelled
Spec Validation / check-todos (push) Has been cancelled
251217:1704 Docunment Number: Update to 1.6.2
2025-12-17 17:04:06 +07:00

171 lines
8.8 KiB
Plaintext

# การติดตั้งและสร้างโปรเจกต์ (Project Initialization)
1. ข้อกำหนดเบื้องต้น (Prerequisites)
ก่อนเริ่ม, ตรวจสอบให้แน่ใจว่าคุณมีเครื่องมือเหล่านี้ติดตั้งบน Windows 11 ของคุณแล้ว:
Node.js: เวอร์ชัน 18.x หรือสูงกว่า
NPM หรือ Yarn: ตัวจัดการ Package (มักจะมาพร้อมกับ Node.js)
NestJS CLI: เครื่องมือ Command-line สำหรับ NestJS
หากยังไม่ได้ติดตั้ง NestJS CLI, ให้เปิด VS Code Terminal หรือ Command Prompt แล้วรันคำสั่ง:
bash
npm install -g @nestjs/cli
## 2.1 สร้างโปรเจกต์ NestJS ใหม่
ไปที่ Directory ที่คุณต้องการเก็บโปรเจกต์ (เช่น C:\Users\YourUser\Development\)
ใช้ NestJS CLI เพื่อสร้างโปรเจกต์ใหม่ ผมจะตั้งชื่อว่า backend-np-dms นะครับ:
Bash
nest new backend
ระบบจะถามว่าต้องการใช้ Package Manager ตัวไหน แนะนำให้เลือก npm, รอจนกว่ากระบวนการจะเสร็จสิ้น คุณจะได้โฟลเดอร์ backend ที่มีโครงสร้างพื้นฐานของ NestJS พร้อมใช้งาน
## 2.2 ติดตั้ง Dependencies ที่จำเป็น
ตอนนี้เราจะติดตั้ง Modules ทั้งหมดที่คุณวางแผนไว้ในคราวเดียว เพื่อให้โปรเจกต์พร้อมสำหรับการพัฒนา
เปิด Terminal ใน VS Code ภายในโฟลเดอร์ backend (cd backend) แล้วรันคำสั่งต่อไปนี้:
* Database & ORM (TypeORM for MariaDB/MySQL)
Bash
npm install @nestjs/typeorm typeorm mysql2
* Configuration Management (สำหรับ .env)
npm install @nestjs/config
* API Documentation
npm install @nestjs/swagger
* Validation & Transformation
npm install class-validator class-transformer
* Security
npm install helmet
* Authentication (JWT)
npm install @nestjs/passport passport passport-jwt @nestjs/jwt
npm install --save-dev @types/passport-jwt
คำอธิบาย:
@nestjs/typeorm typeorm mysql2: สำหรับเชื่อมต่อและจัดการฐานข้อมูล MariaDB
@nestjs/config: สำหรับจัดการ Environment Variables (เช่น ข้อมูลการเชื่อมต่อ DB) ผ่านไฟล์ .env
@nestjs/swagger: สำหรับสร้างหน้าเอกสาร API (Swagger/OpenAPI) โดยอัตโนมัติ
class-validator class-transformer: ใช้สำหรับตรวจสอบความถูกต้องของข้อมูลที่ส่งเข้ามาใน API (Request Body Validation)
helmet: ช่วยเพิ่มความปลอดภัยพื้นฐานโดยการตั้งค่า HTTP Headers ที่เหมาะสม
@nestjs/passport, @nestjs/jwt: เครื่องมือมาตรฐานสำหรับทำระบบ Authentication
## 2.3: ตั้งค่าพื้นฐานในโปรเจกต์ (Initial Configuration)
ตอนนี้เราจะแก้ไขไฟล์หลักๆ เพื่อเปิดใช้งาน Modules ที่ติดตั้งไป
1. สร้างไฟล์ Environment (.env)
ที่ราก (root) ของโปรเจกต์ backend-np-dms, สร้างไฟล์ใหม่ชื่อ .env และใส่ข้อมูลการเชื่อมต่อฐานข้อมูลของคุณ (ข้อมูลนี้จะไม่ถูกเก็บใน Git):
.env
Code snippet
* Database Configuration
DB_TYPE=mysql
DB_HOST=localhost
DB_PORT=3306
DB_USERNAME=your_db_user # <-- แก้ไขเป็น user ของคุณ
DB_PASSWORD=your_db_password # <-- แก้ไขเป็น password ของคุณ
DB_DATABASE=dms_db # <-- แก้ไขเป็นชื่อ database ของคุณ
* Application
API_PORT=3001
💡 Tip: หากคุณรัน MariaDB ผ่าน Docker, DB_HOST อาจจะเป็นชื่อ Service ของ Docker container (เช่น mariadb-container) หรือ IP ของ QNAP ของคุณ
2. แก้ไข app.module.ts เพื่อเชื่อมต่อ Database และ Config
เปิดไฟล์ src/app.module.ts และแก้ไขให้เป็นตามนี้เพื่อ import ConfigModule และ TypeOrmModule:
src/app.module.ts
```TypeScript
import { Module } from '@nestjs/common';
import { ConfigModule, ConfigService } from '@nestjs/config';
import { TypeOrmModule } from '@nestjs/typeorm';
import { AppController } from './app.controller';
import { AppService } from './app.service';
@Module({
imports: [
// 1. Config Module - สำหรับอ่าน .env (ต้องอยู่บนสุด)
ConfigModule.forRoot({
isGlobal: true, // ทำให้ ConfigService พร้อมใช้งานทั่วทั้งแอป
envFilePath: '.env',
}),
// 2. TypeORM Module - สำหรับเชื่อมต่อ Database
TypeOrmModule.forRootAsync({
imports: [ConfigModule],
inject: [ConfigService],
useFactory: (configService: ConfigService) => ({
type: 'mysql',
host: configService.get<string>('DB_HOST'),
port: configService.get<int>('DB_PORT'),
username: configService.get<string>('DB_USERNAME'),
password: configService.get<string>('DB_PASSWORD'),
database: configService.get<string>('DB_DATABASE'),
entities: [__dirname + '/../**/*.entity{.ts,.js}'],
synchronize: true, // สำหรับ Development เท่านั้น! จะสร้างตารางให้อัตโนมัติ
logging: true,
}),
}),
],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}
```
⚠️ คำเตือน: synchronize: true สะดวกมากในช่วงพัฒนาเพราะมันจะปรับโครงสร้างตารางตาม Entity ให้อัตโนมัติ ห้ามใช้ใน Production เด็ดขาด เพราะอาจทำให้ข้อมูลหายได้ ใน Production ควรใช้ระบบ Migration แทน
3. แก้ไข main.ts เพื่อเปิดใช้งาน Swagger, Validation และ Security
เปิดไฟล์ src/main.ts และเพิ่มการตั้งค่าต่างๆ เข้าไป:
src/main.ts
TypeScript
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import { ValidationPipe } from '@nestjs/common';
import { DocumentBuilder, SwaggerModule } from '@nestjs/swagger';
import helmet from 'helmet';
async function bootstrap() {
const app = await NestFactory.create(AppModule);
// เปิดใช้งาน CORS (Cross-Origin Resource Sharing)
app.enableCors();
// เพิ่ม Helmet เพื่อความปลอดภัย
app.use(helmet());
// ตั้งค่า Global Validation Pipe
app.useGlobalPipes(new ValidationPipe({
whitelist: true, // ตัด property ที่ไม่มีใน DTO ออก
transform: true, // แปลงข้อมูลให้เป็น type ที่ระบุใน DTO
}));
// ตั้งค่า Swagger API Documentation
const config = new DocumentBuilder()
.setTitle('LCBP3-DMS API')
.setDescription('The Document Management System API for LCBP3 Project')
.setVersion('1.0')
.addBearerAuth() // สำหรับ JWT
.build();
const document = SwaggerModule.createDocument(app, config);
SwaggerModule.setup('api-docs', app, document); // เข้าถึงได้ที่ /api-docs
// เริ่มรัน Server
const port = process.env.API_PORT || 3001;
await app.listen(port);
console.log(`Application is running on: ${await app.getUrl()}`);
}
bootstrap();
curl -i -X POST \
-H "Content-Type: application/json" \
-d '{"username": "superadmin", "password": "Center#2025"}' \
https://backend.np-dms.work/api/auth/login