ข้ามไปที่เนื้อหา

S4 — ผลการสำรวจทางเทคนิค (Technical Reconnaissance)

วันที่สำรวจ: 6 เมษายน 2569

วัตถุประสงค์: ตรวจสอบสถานะเซิร์ฟเวอร์ ฐานข้อมูล และประเมินความยากง่ายในการรวมระบบ V1 + V2


สรุปภาพรวมเซิร์ฟเวอร์ที่เกี่ยวข้อง

graph TB
    subgraph PROD["Production Servers"]
        V1["V1 — 10.136.27.41<br/>Windows · Apache/XAMPP<br/>PHP 7.2 + CodeIgniter<br/>emediation.rlpd.go.th"]
        V2["V2 — 10.136.27.87<br/>Ubuntu 20.04 · Apache + PM2<br/>Node.js 14 + Vue.js<br/>emediations.rlpd.go.th"]
    end
    subgraph UAT["UAT Server"]
        UATVM["UAT — 10.136.27.124<br/>Ubuntu 24.04 · Docker<br/>V1(PHP:9008) + V2(Vue:9009 + Node:4000)"]
    end
    subgraph DB["Database Tier"]
        PRODDB["Production DB — 10.136.27.149:3412<br/>SQL Server 2022<br/>PSDBPRDDB · Schema: MEDIATE<br/>95 tables · 12,378 cases"]
        LEGACYDB["Legacy DB — 10.136.27.43:1433<br/>SQL Server 2017<br/>mediate2020: 55,343 cases<br/>mediate2020-NEW: 10,886 cases"]
    end

    V1 -->|"MEDIATE schema"| PRODDB
    V2 -->|"mediate2020-NEW"| LEGACYDB
    UATVM -->|"Container MSSQL :1433"| UATVM

V1 — เครื่องแม่ข่าย Production (10.136.27.41)

รายการ รายละเอียด
ชื่อเครื่อง (ไม่ระบุ)
IP 10.136.27.41
OS Windows Server (XAMPP)
Web Server Apache/2.4.63 (Win64) + OpenSSL/3.3.2 + PHP/7.2.34
Framework PHP + CodeIgniter (cookie: flowcart_mediate_ci_session)
App Version v9.0
Domain emediation.rlpd.go.th
Protocol HTTPS (Redirect HTTP→HTTPS)
เปิดให้บริการ Port 80, 443, 3389 (RDP), 1433 (MSSQL)
พอร์ตปิด 22, 3306, 8080, 9008
DB Connection MEDIATE schema → 10.136.27.149:3412 (PSDBPRDDB)
Local MSSQL Port 1433 เปิด แต่ credentials ที่มีเข้าไม่ได้

Web Application Endpoints

Path Status หมายเหตุ
/home 200 หน้าแรก (Public)
/mediation/request 200 ยื่นคำร้องไกล่เกลี่ย (Public)
/mediation/tracking 200 ติดตามสถานะ (Public)
/training 200 หลักสูตรอบรม (Public)
/login 500 ต้อง Login (ผิด route)
/admin, /officer, /mediator 500 ต้อง Login
/people_center/register ลงทะเบียนศูนย์ไกล่เกลี่ย
/mediator/register สมัครผู้ไกล่เกลี่ย

ฟีเจอร์หลักที่พบจากหน้าเว็บ

  • ยื่นคำร้องขอไกล่เกลี่ย (Online Request)
  • ติดตามสถานะคำร้อง (Case Tracking)
  • ลงทะเบียนศูนย์ไกล่เกลี่ยประจำท้องที่ (People Center Registration)
  • สมัครเป็นผู้ไกล่เกลี่ย (Mediator Registration)
  • อบรมหลักสูตร / เช็คสถานะ (Training Management)

V2 — เครื่องแม่ข่าย Production (10.136.27.87)

รายการ รายละเอียด
ชื่อเครื่อง (Hostname) e-medication-phase2
IP 10.136.27.87
OS Ubuntu 20.04.5 LTS, Kernel 5.4.0-216
Disk 1,006 GB total, 195 GB used (21%)
RAM 16 GB total, 2.7 GB used
Web Server Apache/2.4.41 (Ubuntu)
Runtime Node.js v14.20.0, PM2 v5.2.0
Domain emediations.rlpd.go.th
เปิดให้บริการ Port 22 (SSH), 80, 443, 4000 (API)
พอร์ตปิด 3000, 8080, 8443, 9008, 9009
MySQL localhost:3306 (internal, access restricted)

โครงสร้างแอปพลิเคชันบนเครื่อง

/opt/nodejs/ ├── mediation-backend2025/ ← ★ ACTIVE (Phase 1 by MFEC/Webify) │ ├── .git → github.com/webify-th/rlpd-7sys-mediation-nodejs.git │ ├─��� package.json (Express 4.18 + Sequelize + MSSQL + MySQL2 + LDAP + JWT) │ ├── routes/ (11 files: auth, model, mssql, ldap, mail, sms, webex, msc, appman, file) │ ├── controllers/ (17 files - มี mssqlController หลายเวอร์ชันตามวันที่) │ └── models/ (21 files: user, meeting, training, signature, ...) │ ├── mediation-frontend2025/ ← Phase 1 Vue.js frontend (CoreUI Pro) │ ├── src/ │ └── online_bkk_20260104/ (backup) │ ├── mediation-backend/ ← Original V2 backend ("docextreme-backend") │ ├��─ .git → github.com/pravarntle/Mediation-New-Backend.git │ └── package.json (Express 4.17 + MSSQL 9 + MySQL2) │ ├── mediation-frontend/ ← Original V2 frontend │ └── (Vue.js) │ ├── mediation-new-backend/ ← Iteration of V2 backend │ └── .git → github.com/pravarntle/Mediation-New-Backend.git │ └── backend/ ← (older backend)

กระบวนการทำงาน (Active Process)

Process PID ข้อมูล
PM2 (root) 1062 God Daemon — จัดการ process
mediation-backend2025 4188339 node /opt/nodejs/mediation-backend2025/bin/www2 (ใช้ CPU 1%, RAM 643MB)
Apache 941 Serving static files on :80/:443

Environment (.env ของ backend2025)

Key Value หมายเหตุ
PORT 4000 Express API port
API_SSO_URL https://webportal.rlpd.go.th SSO integration
BACKEND_BASE_URL https://api-emediations.rlpd.go.th/ Self-reference

ข้อสังเกต

  • Backend2025 มี dependency ทั้ง mssql (SQL Server) และ mysql2 (MySQL) — ใช้ทั้งสองฐานข้อมูล
  • มี mssqlController ที่มีหลายเวอร์ชันตามวันที่ (copy-based versioning, ไม่ใช้ Git branch)
  • Alfresco ECM integration (document management) — ecm.osdev.co.th:8082
  • Webex integration สำหรับ Online Mediation

UAT Server (10.136.27.124) — Mediation Deployment

รายการ รายละเอียด
Hostname rlpd7systemsuat
OS Ubuntu 24.04.3 LTS
Disk 98 GB total, 67 GB used (72%) ⚠
RAM 7.7 GB total, 3.6 GB used

Docker Containers ที่เกี่ยวข้องกับ S4

Container Image Port บทบาท
mediation2 rlpd-mediation-2 (PHP/CI) 9008 V1 Mediator Portal (emediation)
rlpd-mediation-vue-frontend rlpd-7sys-mediation-vue 9009 Phase 1 Officer Backend Office
rlpd-mediation-bo-backend rlpd-7sys-mediation-nodejs 4000 Phase 1 API Backend

Nginx Routing

Domain Proxy Target ระบบ
emediation.rlpd.go.th localhost:9008 V1 PHP (Mediator-facing)
emediations.rlpd.go.th/online/ localhost:9009 V2/Phase1 Vue.js (Officer BO)
emediations.rlpd.go.th/api-data/, /auth/, /sql-query/, etc. localhost:4000 Phase 1 Node.js API

Docker Compose: V1 PHP Container (mediation2)

```yaml

DB Config

DB_HOSTNAME=10.136.27.124 # ← ชี้ไป Container MSSQL ของ UAT DB_NAME=mediate2020-NEW # ← ใช้ DB mediate2020-NEW DB_DRIVER=sqlsrv ```

ข้อสังเกตสำคัญ

V1 PHP บน UAT ชี้ไปที่ mediate2020-NEW ไม่ใช่ MEDIATE schema — แสดงว่าบน UAT ทั้ง V1 และ V2 ใช้ฐานข้อมูลเดียวกัน


ฐานข้อมูล — การวิเคราะห์เชิงลึก

Production DB (10.136.27.149:3412) — Schema: MEDIATE

รายการ ข้อมูล
SQL Server Version 2022 (RTM) — 16.0.1000.6
Database PSDBPRDDB (Single Database สำหรับทุกระบบ)
Schema ทั้งหมด 31 schemas
MEDIATE tables 95 tables
mediate2020 tables 1 table (cms_news — 2 rows)
MEDIATEV2025 tables 0 tables (Phase 1 ไม่ได้สร้าง schema ใหม่)
Stored Procedures 0 ในทุก mediation schema
Foreign Keys 0 ใน MEDIATE schema

ตารางหลัก — MEDIATE schema (Production)

Table Rows หมายเหตุ
cms_people_center_assessment_result 237,695 ผลประเมินศูนย์ไกล่เกลี่ย (ใหญ่สุด)
cms_user_logs 52,675 Log การใช้งาน
cms_training_management_checkin 35,317 การลงทะเบียนอบรม
cms_people_center_participant 29,545 สมาชิกศูนย์ไกล่เกลี่ย
cms_mediator_applicant_item 21,134 รายละเอียดผู้สมัครไกล่เกลี่ย
cms_mediation 12,378 เรื่องไกล่เกลี่ย (core cases)
cms_mediator_appointment 11,275 นัดหมายผู้ไกล่เกลี่ย
cms_mediator_applicant 7,768 ผู้สมัครไกล่เกลี่ย
cms_users 3,185 ผู้ใช้งาน
cms_institute_mediation 2,940 ศูนย์ไกล่เกลี่ย

Legacy DB (10.136.27.43:1433) — Database: mediate2020

รายการ ข้อมูล
SQL Server Version 2017 (RTM) — 14.0.1000.169
Databases ทั้งหมด 24 databases (รวมทุกระบบเก่า)
mediate2020 tables 79 tables
mediate2020-NEW tables ~81 tables (clone ที่มีข้อมูลอัปเดตกว่า)

ตารางหลัก — mediate2020 (Legacy)

Table Rows (mediate2020) Rows (mediate2020-NEW) Rows (MEDIATE on .149)
cms_people_center_assessment_result 150,917 215,570 237,695
cms_mediation 55,343 10,886 12,378
cms_user_logs 38,213 48,922 52,675
cms_mediator_applicant 7,384 7,705 7,768
cms_users 2,950 3,177 3,185
cms_institute_mediation 2,842 2,939 2,940
cms_mediation_booking 736 1,822

ข้อมูลวิเคราะห์เชิงลึก

  • mediate2020.cms_mediation มี 55,343 rows ซึ่งมากกว่า Production MEDIATE (12,378 rows) อย่างมาก
  • mediate2020-NEW.cms_mediation มีเพียง 10,886 rows — น่าจะเป็นข้อมูลที่ถูก migrate/copy มาบางส่วน
  • mediate2020-NEW มี row counts ใกล้เคียงกับ MEDIATE schema มากกว่า → น่าจะเป็น clone ของ production
  • ข้อมูลเรื่องไกล่เกลี่ยเก่า (55K records ใน mediate2020) อาจเป็นข้อมูลสะสมจากก่อนที่จะย้ายมาใช้ schema ใหม่

เปรียบเทียบ Schema: MEDIATE vs mediate2020

cms_mediation (ตารางหลัก)

เปรียบเทียบ MEDIATE (Prod .149) mediate2020 (Legacy .43)
จำนวนคอลัมน์ ~107 columns ~107 columns
Primary Key mediation_id (int) mediation_id (int)
โครงสร้าง เหมือนกัน เหมือนกัน
คอลัมน์ idcard varchar(20) varchar(13)
Binary columns certificate, evidence, doc_money (varbinary) ไม่มี (เพิ่มมาทีหลัง)

cms_users

เปรียบเทียบ MEDIATE mediate2020
จำนวนคอลัมน์ 29 29
โครงสร้าง เหมือนกัน เหมือนกัน
position nvarchar(240) varchar(50)

ตารางที่มีเฉพาะใน MEDIATE (ไม่มีใน mediate2020)

  • cms_compensation_* (8 tables) — เพิ่มมาจาก Phase 1 (ระบบเบิกจ่าย)
  • cms_comment_certificate — ใบรับรองผู้ไกล่เกลี่ย
  • cms_profile_ktbcorp* (4 tables) — ข้อมูลธนาคาร KTB
  • cms_training_management_* (2 tables) — เพิ่มเติม
  • cms_mediation_copy1, cms_mediator_applicant_copy1 — backup copies

การประเมินความยากง่ายในการรวม V1 + V2

ระดับความยาก: ปานกลาง-สูง (6/10) ⚠

ปัจจัยที่ทำให้ง่ายขึ้น (Favorable)

  1. ฐานข้อมูลเดียวกัน — ทั้ง V1 และ V2 ใช้ MSSQL, schema เกือบเหมือนกัน 100%
  2. ชื่อตาราง/คอลัมน์ตรงกันcms_mediation มี 107 columns เหมือนกันทั้งสองฝั่ง
  3. ไม่มี Stored Procedures — Business logic อยู่ในโค้ดแอปพลิเคชัน ไม่ได้ผูกกับ DB
  4. ไม่มี Foreign Keys — ไม่ต้องกังวลเรื่อง referential integrity ตอน migrate
  5. มี codebase ที่พร้อมใช้ — Phase 1 backend (mediation-backend2025) เป็น Node.js ที่ connect MSSQL ได้แล้ว
  6. UAT มีทุกอย่างรันอยู่ — สามารถทดสอบได้ทันที

ปัจจัยที่ทำให้ยากขึ้น (Challenging)

  1. Tech Stack ต่างกัน — V1 = PHP/CodeIgniter, V2/Phase1 = Node.js/Express/Vue.js → ต้องเลือก stack เดียว
  2. ข้อมูล mediate2020 มี 55K records vs Production 12K — ต้องวิเคราะห์ว่าเป็น superset หรือแยกกัน
  3. 5+ codebases บนเครื่อง V2backend, mediation-backend, mediation-backend2025, mediation-new-backend, mediation-frontend, mediation-frontend2025 → code fragmentation
  4. นักพัฒนาต่างทีม — Phase 1 by Webify (webify-th), V2 original by pravarntle → คนละ coding style
  5. Copy-based versioningmssqlController.js มีหลายสำเนาตามวันที่ (-20250907, -20251229, -20260326) แทนที่จะใช้ Git branch
  6. V1 อยู่บน Windows — ถ้าจะย้ายต้อง containerize PHP app
  7. Binary data ในตาราง — certificate, evidence, doc_money เป็น varbinary ใน MEDIATE (Production) แต่ไม่มีใน mediate2020 เดิม
  8. Alfresco ECM dependency — Phase 1 backend2025 เชื่อมกับ Alfresco (external) สำหรับจัดการเอกสาร

แนวทางที่แนะนำ

graph LR
    A["Phase 2 ระบบรวม"] --> B["Backend: Node.js<br/>(ต่อยอดจาก backend2025)"]
    A --> C["Frontend: Vue.js<br/>(ต่อยอดจาก frontend2025)"]
    A --> D["DB: MEDIATE schema<br/>บน PSDBPRDDB (.149:3412)"]

    B --> E["Migrate V1 PHP logic<br/>→ Node.js controllers"]
    B --> F["Merge data จาก mediate2020<br/>→ MEDIATE schema"]
    C --> G["รวม UI ทั้ง V1+V2<br/>เป็นจุดเข้าเดียว"]

ขั้นตอนที่แนะนำ

  1. Data Reconciliation (สัปดาห์ 1-2)

    • วิเคราะห์ mediate2020 (55K records) เทียบกับ MEDIATE (12K records)
    • ระบุข้อมูลซ้ำ / ข้อมูลที่ต้อง migrate
    • วาง migration script
  2. Feature Mapping (สัปดาห์ 1-2)

    • Map ทุกเมนู/ฟีเจอร์ของ V1 PHP กับ V2 Vue.js
    • ระบุฟีเจอร์ที่ซ้ำกัน / มีเฉพาะใน V1 / มีเฉพาะใน V2
    • ระบุ gap กับ TOR 7.14
  3. Build on Phase 1 Foundation (สัปดาห์ 3+)

    • ใช้ mediation-backend2025 (Node.js) เป็น backend หลัก
    • ใช้ mediation-frontend2025 (Vue.js/CoreUI) เป็น frontend หลัก
    • เพิ่ม features จาก V1 ที่ขาดหาย
    • ชี้ DB ไปที่ MEDIATE schema บน Production (.149)
  4. Data Migration (ก่อน UAT)

    • Merge ข้อมูลจาก mediate2020 เข้า MEDIATE schema
    • Handle binary columns (certificate, evidence)
    • Validate data integrity

ข้อมูลเพิ่มเติมจากทีม Phase 1

จาก Phase 1 Team (6 เมษายน 2569):

  • V1 = 10.136.27.41 → Server Production ระบบไกล่เกลี่ย V1 (PHP)
  • V2 = 10.136.27.87 → Server Production ระบบไกล่เกลี่ย V2 (Node+Vue)
  • 10.136.27.124 = VM UAT รวมทุกระบบตอน dev Phase 1 (Docker containers)
  • .41 กับ .87 เป็น server production ของระบบไกล่เกลี่ยจริงที่ใช้อยู่

Appendix: Legacy DB (10.136.27.43) — ฐานข้อมูลทั้งหมด

Database สถานะ หมายเหตุ
mediate2020 ONLINE V2 mediation database (55K cases)
mediate2020-NEW ONLINE Clone/snapshot (10K cases, ใช้โดย UAT)
RLPD01 ONLINE ระบบ RLPD เก่า
RLPD02 / RLPD02uat ONLINE ระบบ RLPD เก่า v2
rlpd2021 ONLINE ระบบ RLPD ปี 2564
db_rlpd_ocipa / rlpd_ocipa ONLINE OCIPA (S6) เก่า
rlpd_134 / rlpd_134_test ONLINE ค่าตอบแทนทนาย 134 (S5) เก่า
rlpd_elearning ONLINE E-Learning
rlpd_esaraban ONLINE สารบรรณอิเล็กทรอนิกส์
rlpd_scn103 ONLINE SCN103
import_data ONLINE ข้อมูลนำเข้า
test_1, test_2, TEST-NEW-2 ONLINE ฐานข้อมูลทดสอบ