2025-10-05 09:21:04 +07:00
2025-10-05 09:21:04 +07:00
xxx
2025-10-05 11:57:43 +07:00
2025-10-05 09:21:04 +07:00
2025-09-24 15:05:42 +07:00
2025-10-05 09:21:04 +07:00
2025-10-05 10:18:59 +07:00
2025-10-05 09:40:55 +07:00
2025-10-03 16:14:09 +07:00

📝 Project Title: ocument Management System (DMS) Web Application

Des

📌 1. Project Overview / Description

  • ระบบ Document Management System (DMS)
  • เป็นเว็บแอปพลิเคชันที่ออกแบบมาเพื่อจัดการเอกสารภายในองค์กรอย่างมีประสิทธิภาพ
  • โดยมีฟังก์ชันหลักในการอัปโหลด จัดเก็บ ค้นหา แชร์ และควบคุมสิทธิ์การเข้าถึงเอกสาร
  • ระบบนี้จะช่วยลดการใช้เอกสารกระดาษ เพิ่มความปลอดภัยในการจัดเก็บข้อมูล
  • และเพิ่มความสะดวกในการทำงานร่วมกันระหว่างทีม

🎯 2. Objectives

  • พัฒนาระบบที่สามารถจัดการเอกสารได้อย่างเป็นระบบ
  • ลดความซ้ำซ้อนในการจัดเก็บเอกสาร
  • เพิ่มความปลอดภัยในการเข้าถึงและจัดการเอกสาร
  • รองรับการทำงานร่วมกันแบบออนไลน์

📦 3. Scope of Work

ระบบจะครอบคลุมฟีเจอร์หลักดังนี้:

  • การลงทะเบียนและเข้าสู่ระบบผู้ใช้งาน
  • การอัปโหลดและจัดเก็บเอกสารในรูปแบบต่าง ๆ (PDF, DOCX, XLSX ฯลฯ)
  • การจัดหมวดหมู่และแท็กเอกสาร
  • การค้นหาเอกสารด้วยคำสำคัญหรือฟิลเตอร์
  • การกำหนดสิทธิ์การเข้าถึงเอกสาร (เช่น อ่านอย่างเดียว, แก้ไข, ลบ)
  • การบันทึกประวัติการใช้งานเอกสาร (Audit Trail)
  • การแจ้งเตือนเมื่อมีการเปลี่ยนแปลงเอกสาร

🛠️ 4. DMS Architecture Deep Dive (Backend + Frontend)

4.0)Executive Summary

  • Reverse proxy (Nginx/NPM) เผยแพร่ Frontend (Next.js) และ Backend (Node.js/Express) ผ่าน HTTPS (HSTS)
  • Backend เชื่อม MariaDB 10.11 (ข้อมูลหลัก DMS) และแยก n8n + Postgres 16 สำหรับ workflow
  • RBAC/ABAC ถูกบังคับใช้งานใน middleware + มีชุด SQL (tables → triggers → procedures → views → seed)
  • ไฟล์จริง (PDF/DWG) เก็บนอก webroot ที่ /share/dmsdata พร้อมมาตรฐานการตั้งชื่อ+โฟลเดอร์
  • Dev/Prod แยกชัดเจนผ่าน Docker multistage + dockercompose + โฟลเดอร์ persist logs/config/certs

4.1) Runtime Topology & Trust Boundaries

Internet Clients (Browser)
    │   HTTPS 443 (HSTS)  [QNAP mgmt = 8443]
    ▼
┌─────────────────────────────────────────────────────┐
│ Reverse Proxy Layer                                 │
│  ├─ Nginx (Alpine)  or  Nginx Proxy Manager (NPM)   │
│  ├─ TLS (LE cert; SAN multisubdomain)              │
│  └─ Routes:                                         │
│     • /, /_next/*   → Frontend (Next.js :3000)      │
│     • /api/*        → Backend (Express :3001)       │
│     • /pma/*        → phpMyAdmin                    │
│     • /n8n/*        → n8n (Workflows)               │
└─────────────────────────────────────────────────────┘
               │                         │
               │                         └──────────┐
               ▼                                    │
         Frontend (Next.js)                         │
               │  Cookie-based Auth (HttpOnly)      │
               ▼                                    ▼
         Backend (Node/Express ESM)  ─────────►  MariaDB 10.11
               │                                    │
               └────────────────────────────────────┘
               Project data (.pdf/.dwg) @ /share/dms-data

         n8n (workflows) ──► Postgres 16  (separate DB for automations)

Trust Boundaries

  • Public zone: Internet ↔ Reverse proxy
  • App zone: Reverse proxy ↔ FE/BE containers (internal Docker network)
  • Data zone: Backend ↔ Databases (MariaDB, Postgres) + /share/dms-data

  • Frontend: Next.js (ESM) / React.js
  • Backend: Node.js / Laravel
  • Database: Mariadb / PostgreSQL
  • Authentication: JWT
  • xx
  • Cloud Storage: QNAP

👥 Target Users

  • พนักงานภายในองค์กร
  • ผู้จัดการฝ่ายเอกสาร
  • ผู้ดูแลระบบ IT

📈 Expected Outcomes

  • ลดเวลาในการค้นหาเอกสารลงอย่างน้อย 50%
  • ลดการใช้เอกสารกระดาษในองค์กร
  • เพิ่มความปลอดภัยในการจัดเก็บข้อมูล
  • รองรับการทำงานแบบ Remote Work

บทบาท: คุณคือ Programmer และ Document Engineer ที่เชี่ยวชาญ

  1. การพัฒนาเว็บแอป (Web Application Development)
  2. Configuration of Container Station on QNAP
  3. Database: mariadb:10.11
  4. Database management: phpmyadmin:5-apache
  5. Backend: node:.js (ESM)
  6. Frontend: next.js, react
  7. Workflow automation: n8n:
  8. Workflow database: postgres:16-alpine
  9. Workflow database management: pgadmin4
  10. Reverse proxy: nginx:1.27-alpine
  11. linux on QNAP
  12. การจัดการฐานข้อมูล (Database Management)
  13. การวิเคราะห์ฐานข้อมูล (Database Analysis)
  14. การจัดการฐานข้อมูลเชิงสัมพันธ์ (Relational Databases)
  15. ภาษา SQL
  16. RBAC

2. ระบบที่ใช้

Server

  • ใช้ Container Station เป็น SERVER บน QNAP (Model: TS-473A, RAM: 32GB, CPU: AMD Ryzen V1500B 4 cores 8 threads) _ เปลี่ยน port 443 ของ QNAP เป็น 8443 แล้ว _

การพัฒนาโครงการ

  • ด้วย Visual Studio Code บน Windows 11
  • ใช้ ๊ UI ของ Container Station เป็นหลัก

โครงสร้างโฟลเดอร์ (บน QNAP)

/share/Container/dms/ ├─ docker-compose.yml # Create โดย UI Container Station ├─ mariadb/ │ ├─ data/ # ข้อมูลจริงของ MariaDB │ ├─ init/ # ข้อมูลเริ่มต้นของ MariaDB │ │ ├─ 01_dms_data_v5_1_deploy_table_rbac.sql # Create all data table & RBAC table here! │ │ ├─ 02_dms_data_v5_1_triggers.sql # Create all triggers here! │ │ ├─ 03_dms_data_v5_1_procedures_handlers.sql # Create all procedures here! │ │ ├─ 04_dms_data_v5_1_views.sql # Create all views here! │ │ ├─ 05 dms_data_v5_1_seeก_data.sql # Seed nescesary data here! │ │ ├─ 06_dms_data_v5_1_seed_users.sql # Seed users data here! │ │ └─ 07_dms_data_v5_1_seed_contract_dwg.sql # Seed contract drawing data here! │ └─ my.cnf ├─ backend/ │ ├─ app/ │ ├─ src/ │ │ ├─ db/ │ │ │ └─models/ │ │ ├─ middleware/ │ │ ├─ routes/ │ │ ├─ utils/ │ │ └─ index.js │ ├─ Dockerfile │ ├─ package.json │ └─ package-lock.json # ไม่มี ├─ frontend/ │ ├─ app/ │ │ ├─ correspondences/ │ │ ├─ dashboard/ │ │ ├─ health/ │ │ ├─ login/ │ │ └─ users/ │ ├─ public/ │ ├─ Dockerfile │ ├─ package.json │ ├─ package-lock.json # ไม่มี │ ├─ next.config.js │ └─ page.jsx ├─ phpmyadmin/ │ ├─ sessions/ # โฟลเดอร์เซสชันถาวรของ phpMyAdmin │ ├─ tmp/ │ ├─ config.user.inc.php │ └─ zzz-custom.ini ├─ nginx/ │ ├─ certs/ │ ├─ nginx.conf │ └─ dms.conf ├─ n8n/ ├─ n8n-cache/ ├─ n8n-postgres/ └─ logs/ ├─ backend/ ├─ frontend/ ├─ nginx/ ├─ pgadmin/ ├─ phpmyadmin/ └─ postgres_n8n/ /share/dms-data # เก็บข้อมมูล .pdf, .dwg แยกตาม correspondences, documents

ภาษา: ใช้ภาษาไทยในการโต้ตอบ ยกเว้น ศัพท์เทคนิคหรือศัพท์เฉพาะทาง

ไฟล์ที่ ีupload

  • Dockerfile ของ backend
  • package.json ของ backend
  • docker-compose.yml ชอง Container station
  • nginx.conf, dms.conf ของ nginx
  • dms_v0_5_0_data_v5_1_sql.zip ประกอบด้วย
    • 01_dms_data_v5_1_deploy_table_rbac.sql # Create all data table & RBAC table here!
    • 02_dms_data_v5_1_triggers.sql # Create all triggers here!
    • 03_dms_data_v5_1_procedures_handlers.sql # Create all procedures here!
    • 04_dms_data_v5_1_views.sql # Create all views here!
    • 05 dms_data_v5_1_seeก_data.sql # Seed nescesary data here!
    • 06_dms_data_v5_1_seed_users.sql # Seed users data here!

งานที่ต้องการ:

  • ไม่ใช้ .env เด็ดขาด Container Station ไม่รองรับ และ docker-compose.yml ได้ทดสอบ รันบน Container station มาแล้ว
  • Code ของ backend ทั้งหมด
  • การทดสอบระบบ backend ทุกส่วน ให้พร้อม สำหรับ frontend

กรณี 2: มี Git อยู่แล้ว (มี main อยู่)

2.1 อัปเดต main ให้ตรงล่าสุดก่อนแตกบร้านช์

cd /share/Container/dms git checkout main git pull --ff-only # ถ้าเชื่อม remote อยู่ git tag -f stable-$(date +%F) # tag จุดเสถียรปัจจุบัน

2.2 แตก branch งาน Dashboard git checkout -b feature/dashboard-update-$(date +%y%m%d) git checkout -b feature/dashboard-update-251004

2.3 ทำงาน/คอมมิตตามปกติ

แก้ไฟล์ frontend/app/dashboard/* และที่เกี่ยวข้อง

git add frontend/app/dashboard git commit -m "feat(dashboard): เพิ่มส่วนจัดการ user" git push -u origin feature/dashboard-update-251004

📘 Use Case: Upload Document

Actor: ผู้ใช้งานทั่วไป (Employee) Description: ผู้ใช้งานสามารถอัปโหลดเอกสารเข้าสู่ระบบเพื่อจัดเก็บและใช้งานในภายหลัง Preconditions: ผู้ใช้งานต้องเข้าสู่ระบบก่อน Main Flow:

ผู้ใช้งานเลือกเมนู “อัปโหลดเอกสาร” เลือกไฟล์จากเครื่องคอมพิวเตอร์ กรอกข้อมูลประกอบ เช่น ชื่อเอกสาร หมวดหมู่ แท็ก กดปุ่ม “อัปโหลด” ระบบบันทึกเอกสารและแสดงผลการอัปโหลดสำเร็จ

Postconditions: เอกสารถูกจัดเก็บในระบบและสามารถค้นหาได้

📘 Use Case:

Search Document

Actor: ผู้ใช้งานทั่วไป Description: ผู้ใช้งานสามารถค้นหาเอกสารจากระบบด้วยคำสำคัญหรือฟิลเตอร์ Preconditions: ผู้ใช้งานต้องเข้าสู่ระบบ Main Flow:

ผู้ใช้งานกรอกคำค้นหรือเลือกฟิลเตอร์ (หมวดหมู่, วันที่, ผู้สร้าง) กดปุ่ม “ค้นหา” ระบบแสดงรายการเอกสารที่ตรงกับเงื่อนไข

Postconditions: ผู้ใช้งานสามารถเปิดดูหรือดาวน์โหลดเอกสารที่ค้นพบได้

Share Document

Actor: ผู้ใช้งานทั่วไป Description: ผู้ใช้งานสามารถแชร์เอกสารให้กับผู้ใช้งานอื่นในระบบ Preconditions: ผู้ใช้งานต้องมีสิทธิ์ในการแชร์เอกสาร Main Flow:

ผู้ใช้งานเลือกเอกสารที่ต้องการแชร์ กดปุ่ม “แชร์” ระบุผู้รับและสิทธิ์การเข้าถึง (อ่าน/แก้ไข) กด “ยืนยัน” ระบบส่งการแจ้งเตือนไปยังผู้รับ

Postconditions: ผู้รับสามารถเข้าถึงเอกสารตามสิทธิ์ที่กำหนด

Manage Access Rights

Actor: ผู้ดูแลระบบ (Admin) Description: ผู้ดูแลระบบสามารถกำหนดสิทธิ์การเข้าถึงเอกสารให้กับผู้ใช้งาน Preconditions: ผู้ดูแลระบบต้องเข้าสู่ระบบ Main Flow:

ผู้ดูแลระบบเลือกเอกสาร กด “จัดการสิทธิ์” เลือกผู้ใช้งานและกำหนดสิทธิ์ (อ่าน, แก้ไข, ลบ) กด “บันทึก”

Postconditions: สิทธิ์การเข้าถึงเอกสารถูกปรับตามที่กำหนด

View Document History

Actor: ผู้ใช้งานทั่วไป / ผู้ดูแลระบบ Description: ผู้ใช้งานสามารถดูประวัติการใช้งานเอกสาร เช่น การแก้ไข การดาวน์โหลด Preconditions: ผู้ใช้งานต้องมีสิทธิ์เข้าถึงเอกสาร Main Flow:

ผู้ใช้งานเปิดเอกสาร เลือก “ดูประวัติ” ระบบแสดงรายการกิจกรรมที่เกี่ยวข้องกับเอกสาร

Postconditions: ผู้ใช้งานสามารถตรวจสอบการเปลี่ยนแปลงย้อนหลังได้

🔄Workflow อัตโนมัติในระบบ DMS

ประโยชน์ของ Workflow อัตโนมัติใน DMS

ลดภาระงานซ้ำ ๆ ของผู้ใช้งาน เพิ่มความปลอดภัยและการควบคุมเอกสาร เพิ่มความเร็วในการดำเนินงาน ลดข้อผิดพลาดจากการทำงานด้วยมือ

🧩 1.Document Approval Workflow

กรณี: เมื่อมีการอัปโหลดเอกสารที่ต้องได้รับการอนุมัติจากหัวหน้า ขั้นตอนอัตโนมัติ:

  1. ผู้ใช้งานอัปโหลดเอกสารและเลือก “ต้องการอนุมัติ”
  2. ระบบส่งแจ้งเตือนไปยังผู้อนุมัติ (เช่น หัวหน้าแผนก)
  3. ผู้อนุมัติสามารถตรวจสอบและกด “อนุมัติ” หรือ “ปฏิเสธ”
  4. ระบบบันทึกสถานะเอกสารและแจ้งผลกลับไปยังผู้ส่ง

📥 2. Auto Tagging & Categorization

กรณี: เอกสารที่อัปโหลดมีชื่อหรือเนื้อหาที่ตรงกับหมวดหมู่ที่กำหนดไว้ ขั้นตอนอัตโนมัติ:

เมื่ออัปโหลดเอกสาร ระบบวิเคราะห์ชื่อไฟล์หรือเนื้อหา ระบบกำหนดหมวดหมู่และแท็กให้โดยอัตโนมัติ เช่น “ใบเสนอราคา” → หมวด “การเงิน” ผู้ใช้งานสามารถแก้ไขได้หากต้องการ

🔐 3. Access Control Workflow

กรณี: เอกสารที่มีความลับสูงต้องจำกัดการเข้าถึง ขั้นตอนอัตโนมัติ:

เมื่ออัปโหลดเอกสารที่มีคำว่า “ลับ” หรือ “Confidential” ระบบกำหนดสิทธิ์เริ่มต้นให้เฉพาะผู้ใช้งานระดับผู้จัดการขึ้นไป ระบบแจ้งเตือนผู้ดูแลระบบให้ตรวจสอบสิทธิ์เพิ่มเติม

📤 4. Expiry & Archiving Workflow

กรณี: เอกสารที่มีอายุการใช้งาน เช่น สัญญา หรือใบอนุญาต ขั้นตอนอัตโนมัติ:

เมื่ออัปโหลดเอกสาร ผู้ใช้งานระบุวันหมดอายุ ระบบแจ้งเตือนก่อนหมดอายุล่วงหน้า เช่น 30 วัน เมื่อถึงวันหมดอายุ ระบบย้ายเอกสารไปยังหมวด “Archive” โดยอัตโนมัติ

📊 5. Audit Trail & Notification Workflow

กรณี: มีการแก้ไขหรือดาวน์โหลดเอกสารสำคัญ ขั้นตอนอัตโนมัติ:

ทุกการกระทำกับเอกสาร (เปิด, แก้ไข, ลบ) จะถูกบันทึกใน Audit Log หากเอกสารถูกแก้ไขโดยผู้ใช้งานที่ไม่ใช่เจ้าของ ระบบแจ้งเตือนเจ้าของเอกสารทันที

Description
The development of Laem Chabang Port Phase 3 Document Management Sytem
https://lcbp3.np-dms.work/
Readme 741 MiB
Languages
JavaScript 94.4%
CSS 2.2%
Dockerfile 1.8%
Shell 1.3%
HTML 0.3%