TRACIT Platform
เอกสารอ่านจากระบบที่รันอยู่จริง · ตรวจล่าสุด 30 ก.ย. 2569

สถาปัตยกรรม และ Tech Stack

ทุกอย่างในหน้านี้มาจากการอ่านคอนเทนเนอร์ ไฟล์ config ของ Traefik และ schema ในฐานข้อมูลจริง ไม่ใช่จากเอกสารที่เขียนทิ้งไว้ — ใช้ตอนรับคนใหม่เข้าทีม ตอนวางแผนระบบใหม่ หรือตอนต้องอธิบายภาพรวมให้ผู้บริหาร

14 แอปที่ผู้ใช้เข้าถึง23 บริการพื้นฐาน3 เซิร์ฟเวอร์

เส้นทางของ request

จากผู้ใช้ลงไปถึงข้อมูล
01
ผู้ใช้ / อุปกรณ์ทางเข้าระบบ
เบราว์เซอร์พนักงานสำนักงาน
LINE LIFFพนักงานภาคสนาม
trac-agent + fleetdเครื่องลูกข่าย
MeshCentral agentremote support
02
Edgeทุก request ผ่านชั้นนี้
Traefik v3.3reverse proxy
Let's EncryptTLS อัตโนมัติ
Security headersmiddleware
IP allow-listเครื่องมือ admin
03
แอปพลิเคชันคอนเทนเนอร์แยกกันต่อแอป
Next.js 157 แอป
Next.js 164 แอป
Flask · Gofleet-api · Fleet MDM
Nginx / Pythonstatic + photos
04
ข้อมูลใช้ร่วมกันเกือบทั้งหมด
Supabase Postgres 15.8public 117 + hr 26 + carpro 3 ตาราง
PostgREST 14.8REST API อัตโนมัติ
PostgreSQL 16CarPro Helper · GlitchTip
MySQL 8.0 · Redis 7Fleet MDM · cache
05
ระบบภายนอกเชื่อมออกนอกแพลตฟอร์ม
Zoho AnalyticsCAR_STATUS ราย ชม.
SAP B1MS SQL อ่านอย่างเดียว
LINE Messagingแจ้งเตือน + LIFF
Microsoft 365 · Graphบิล True · เมล CarPro
Zimbra SMTPอีเมลขาออก
Zabbix · Sangforป้อน KPI
Telvoixcall log / คิวโทรศัพท์
Synology NAS ออฟฟิศดึง backup 90 วัน

การไหลของข้อมูล

15 เส้นทางที่ทำงานอยู่จริง
Resync CAR_STATUS จาก Zohoทุกชั่วโมง 06:00–22:00
  1. Zoho Analytics
  2. n8n
  3. Databridge sync
  4. Export CSV
  5. อีเมล 2 ปลายทาง

สั่ง sync เฉพาะ interval ที่มีตาราง CAR_STATUS ตัวเดียว มี guard กันไม่ให้ลากทั้ง 110 ตารางลง CarPro DB · รอจนสถานะเปลี่ยนจาก In Progress เป็น Success แล้วค่อยแนบไฟล์ ~10,000 แถว

ตั๋ว CarPro จากเมลแจ้งเตือน Jiraทุกนาที
  1. Jira → กล่องเมล CarPro Noti
  2. Microsoft Graph
  3. CarPro Tickets
  4. Supabase carpro + hr.employees
  5. ตั๋ว TRAC Helpdesk (สร้าง/อัปเดตอัตโนมัติ)
  6. KPI: backlog, เวลาปิดงาน, reopen

ไม่มี API จาก CarPro ให้ดึงตั๋วตรง จึง parse เมลแจ้งเตือนแทน · ชื่อ/แผนกผู้แจ้ง join สดจาก HR Admin ไม่เก็บซ้ำ · สถานะฝั่ง vendor ทำให้ตั๋ว Helpdesk หยุดนับ SLA ระหว่างรอ CarPro (ตั้งแต่ 14 ก.ย. 2569)

รายงาน Fleet Inventory รายวันทุกเช้า
  1. n8n schedule
  2. fleet-api (Flask)
  3. Supabase fleet_*
  4. อีเมลทีม Fleet

ตัวประกอบรายงานอยู่ใน fleet-api · n8n แค่ตั้งเวลาและส่งเมล

บิล True เข้าเป็นค่าใช้จ่ายโปรเจกต์วันละครั้ง 08:30
  1. Microsoft 365
  2. n8n
  3. IT Project Board API
  4. Supabase pb_*

เปลี่ยนจาก Outlook Trigger มาเป็น schedule + lookback 48 ชม. เพราะ trigger เดิมมี race ทำให้บิลที่มีไฟล์แนบใหญ่หลุด

ตั๋วใหม่แจ้งเข้ากลุ่ม LINEทันทีที่มีตั๋ว
  1. TRAC Helpdesk
  2. webhook n8n
  3. กลุ่ม LINE ทีม IT

push เข้ากลุ่มคิดโควตาตามจำนวนสมาชิก จึงส่งเฉพาะเหตุการณ์ที่จำเป็น

แจ้งสถานะรถจากภาคสนามตามที่พนักงานกรอก
  1. LINE LIFF
  2. webhook n8n
  3. Supabase
  4. จอ TV ที่สาขา

ฟอร์มเป็นไฟล์ static เสิร์ฟด้วย Nginx ตัว logic อยู่ใน n8n ทั้งหมด

KPI ผู้บริหารcollector push รายชั่วโมง + live pull ตอนเปิดหน้า
  1. Zabbix (VM ออฟฟิศ)
  2. kpi-collector.py
  3. POST /api/kpi/ingest
  4. Supabase kpi_snapshots
  5. หน้า /kpi

uptime ระบบ + CarPro booking availability มาจาก Zabbix SLA · SLA ตั๋วและโปรเจกต์ตรงเวลาดึงสดจาก Helpdesk / Project Board ตอน render · security incident ยังกรอกมือจาก Sangfor

บังคับนโยบายพีซีทั้ง fleetfleetd รายงานทุกชั่วโมง
  1. fleetd บนพีซี
  2. Fleet MDM
  3. MySQL
  4. reconcile ↔ Helpdesk assets ↔ Mesh

ทะเบียนตัวจริงอยู่ที่ Helpdesk, remote อยู่ที่ Mesh, Fleet เป็นชั้นพิสูจน์ (BitLocker/TPM/AV/firewall/update/admin/lock/Win11) · ติดตั้ง agent สั่งผ่าน Mesh แบบเงียบ

เช็คคุณภาพเน็ตรายเครื่องกดจากหน้า asset
  1. TRAC Helpdesk
  2. MeshCentral
  3. PowerShell บนเครื่อง
  4. บันทึกกลับที่ asset

จับคู่เครื่องด้วย BIOS serial ก่อน ถ้าไม่เจอค่อยใช้ชื่อเครื่อง

อนุมัติเอกสารที่อ้างข้อมูล SAPตอนสร้าง/อนุมัติเอกสาร
  1. Doc Approval
  2. MS SQL TRAC_PRD
  3. Supabase doc_*
  4. อีเมลผู้อนุมัติ

ต่อ SAP B1 แบบอ่านอย่างเดียว ผ่านขาเครือข่ายที่ล็อก egress ไว้เฉพาะโฮสต์ SAP · มี cron เช็คว่า SAP ตอบทุก 5 นาที

ข้อมูลพนักงานกลางเรียกตอนใช้งาน
  1. HR Admin
  2. API พนักงาน
  3. Project Board · Approval · Training · Fleet · CarPro Tickets

HR เป็นแหล่งความจริงเรื่องคน แอปอื่นไม่เก็บทะเบียนพนักงานซ้ำ

แชตบอทลูกค้านอกเวลาทำการ (pilot กับลูกค้าจริง)20:00–08:00 · poll ทุก 5 วินาที
  1. LINE OA ผ่าน Pancake
  2. trac-aibot (VM ออฟฟิศ)
  3. Ollama · Qwen3 บน GPU ภายใน
  4. CarPro API ราคา/สาขา/ประกัน
  5. tag รอจองเช้า → ทีมจอง

โมเดลรันในองค์กร ข้อมูลลูกค้าไม่ออกไปผู้ให้บริการ AI ภายนอก · บอทไม่จอง ไม่รับเงิน ไม่ยืนยันราคาสุดท้าย แค่รับเรื่องให้ทีมจองทำต่อตอนเช้า · เปิดกับลูกค้าจริงตั้งแต่ 24 ก.ย. 2569 สรุปผล pilot ต้น ต.ค.

Dashboard รายได้ผู้บริหาร (RB + CB)snapshot ทุกเช้า + อ่านสดตอนเปิดหน้า
  1. Zoho Analytics (ข้อมูล CarPro)
  2. n8n snapshot รายวัน
  3. ตาราง snapshot ใน Zoho
  4. หน้าเว็บบน n8n (มีรหัสผ่าน)

Zoho จัดหน้าตาผ่าน API ไม่ได้ จึงทำหน้าเว็บคู่ขนานบน n8n · เก็บ snapshot รายวันเพื่อดูยอดย้อนหลัง เพราะต้นทางเขียนทับข้อมูลเดิม (เช่น วันสิ้นสุดสัญญาเมื่อต่ออายุ)

สำรองข้อมูลรายชั่วโมง + วันละ 2 ครั้ง
  1. คอนเทนเนอร์ทั้งหมด
  2. /data (ดิสก์แยก)
  3. Duplicati → Google Drive
  4. NAS ออฟฟิศดึงอีกชุด (90 วัน)

ขึ้น Google Drive เฉพาะโฟลเดอร์ offsite ที่คัดไว้ · NAS เป็นฝ่ายดึง (pull) server ไม่มีทางเข้า NAS ถ้าเซิร์ฟเวอร์โดน ransomware ก็ลบสำเนาบน NAS ไม่ได้

โน้ตงานเข้า Gitทุก 10 นาที
  1. Obsidian vault
  2. obsidian-sync
  3. Gitea

commit อัตโนมัติเมื่อมีไฟล์เปลี่ยน

ระบบภายนอกแอปของเราอัตโนมัติที่เก็บข้อมูลปลายทาง

แต่ละแอปใช้อะไร

14 แอป
TRAC Helpdeskตั๋วงาน IT + SLA, ให้คะแนนบริการ, ทะเบียนทรัพย์สิน (ITAM), คลังอะไหล่, KB ถาม AI, แผนผังเครือข่าย, ตั๋ว CarPro อัตโนมัติ
ithelpdesk.thairentacar.com
Runtime
Next.js 15 · React 19
ข้อมูล
Supabase · public (ticket_*, asset_*, kb_*, stock_*)
คอนเทนเนอร์
trac-helpdesk + trac-cron
imapflow (รับเมลเป็นตั๋ว)nodemailerbcryptjsws → MeshCentraltrac-agent (PowerShell)Sentry SDK
HR Adminข้อมูลพนักงาน, สรรหา, org chart, onboarding/offboarding เปิดตั๋ว IT ตามมาตรฐานกลุ่มตำแหน่ง, ติดตามครบทดลองงาน
hr.thairentacar.com
Runtime
Next.js 15 · React 19
ข้อมูล
Supabase · schema hr (26 ตาราง)
คอนเทนเนอร์
hr-admin
rechartsxlsxnodemailerbcryptjsSentry SDKcron ปิดบัญชีคนพ้นสภาพทุกเช้า
IT Project Boardโปรเจกต์และงานของทีม IT, sprint, timesheet, ค่าใช้จ่าย, on-call
itproject.thairentacar.com
Runtime
Next.js 15 · React 19
ข้อมูล
Supabase · public (pb_* 19 ตาราง)
คอนเทนเนอร์
it-project-board + it-project-board-cron
nodemailerbcryptjsSentry SDKcron escalation ทุก 30 นาที
Doc Approvalอนุมัติเอกสารทั้งออฟฟิศ ตาม org chart, อ้าง PR/เอกสารจาก SAP
approval.thairentacar.com
Runtime
Next.js 15 · React 19
ข้อมูล
Supabase · public (doc_* 17 ตาราง)
คอนเทนเนอร์
doc-approval
mssql → SAP B1 (อ่านอย่างเดียว)pdf-libexceljsnodemailerbcryptjscron เช็ค SAP ทุก 5 นาที
Training Portalคอร์สอบรม, quiz, ใบประกาศ
training.thairentacar.com
Runtime
Next.js 15 · React 19
ข้อมูล
Supabase · public (tr_* 9 ตาราง)
คอนเทนเนอร์
training-portal
bcryptjs
Cashcardเงินสดย่อยหลายแผนก (IT, OP)
cashcard.thairentacar.com
Runtime
Next.js 15 · React 19
ข้อมูล
Supabase · public (cc_* 8 ตาราง)
คอนเทนเนอร์
cashcard
bcryptjsRBAC ต่อแผนกSentry SDK
IT Portal + KPIหน้ารวมระบบ, health monitor, สถาปัตยกรรม, API catalog, KPI ผู้บริหาร
portal.thairentacar.com
Runtime
Next.js 15 · React 19
ข้อมูล
Supabase (kpi_snapshots)
คอนเทนเนอร์
portal
ไม่มี dependency นอกจาก next/react + Sentry SDKรับ push KPI จาก collector บน Zabbix
CarPro Ticketsติดตามตั๋ว support ของ CarPro (Jira) จากเมลแจ้งเตือน: สถานะ, ผู้แจ้ง, backlog aging, เวลาปิดงาน
carpro-tickets.thairentacar.com
Runtime
Next.js 16.3 · React 19.2
ข้อมูล
Supabase · schema carpro (3 ตาราง) + join hr.employees
คอนเทนเนอร์
carpro-tickets + carpro-tickets-cron
Microsoft Graph (อ่านกล่องเมล CarPro Noti)bcryptjscron poll ทุกนาทีสร้าง/อัปเดตตั๋ว Helpdesk ให้อัตโนมัติ
Car Lease Dashboardสัญญาเช่ารถระยะยาว, renewal, follow-up, ยอดขายทีม car lease
cb.thairentacar.com
Runtime
Next.js 16.2 · React 19.2
ข้อมูล
Supabase (ผ่าน /api ของตัวเอง)
คอนเทนเนอร์
car-lease
rechartsxlsxzoddate-fns
Fleet Opscall center, เคสซ่อมรถ, โอนรถ, เคลม, master data
fleet.thairentacar.com
Runtime
Next.js 16.2 · React 19.2
ข้อมูล
Supabase · public (fleet_*)
คอนเทนเนอร์
fleet-ops
zodbcryptjsdate-fnsSentry SDK
CarPro Helperแปล incident ไทย↔อังกฤษ, ร่างอีเมล
carpro.103.246.189.85.nip.io
Runtime
Next.js 16.2 · React 19.2
ข้อมูล
PostgreSQL 16 แยกต่างหาก (db: platform)
คอนเทนเนอร์
carpro-helper
pg (ต่อ DB ตรง ไม่ผ่าน Supabase)ไม่ใช้ LLM
Fleet Formฟอร์มแจ้งสถานะรถ UB ⇄ AV ผ่าน LINE
fleetform.103.246.189.85.nip.io
Runtime
Nginx (static LIFF)
ข้อมูล
ส่งเข้า n8n webhook
คอนเทนเนอร์
fleet-form
LINE LIFF
Fleet MDMendpoint management พีซี Windows: policy ความปลอดภัย 8 ข้อ, software + CVE, script
mdm.thairentacar.com
Runtime
Fleet (fleetdm) 4.90.1 · Go
ข้อมูล
MySQL 8.0.44 + Redis แยกจากตัวกลาง
คอนเทนเนอร์
fleetmdm + fleetmdm-mysql + fleetmdm-redis
fleetd agent ติดตั้งผ่าน MeshCentralcron reconcile ทะเบียน ↔ Helpdesk ↔ Mesh ทุกเช้าtier ฟรี
Vaultwardenpassword manager กลางของทีม (Bitwarden self-host)
vault.thairentacar.com
Runtime
Rust · Vaultwarden 1.37.0 · Web-Vault 2026.6.4
ข้อมูล
SQLite ใน ./data (เข้ารหัสฝั่ง client)
คอนเทนเนอร์
vaultwarden
ใช้แอป/extension Bitwarden ของแท้สมัครได้เฉพาะอีเมล @thairentacar.com

บริการภายใน

ไม่มีหน้าจอให้ผู้ใช้
Fleet APIAPI สนับสนุนงาน fleet + รายงาน Fleet Inventory รายวัน
ภายใน · พอร์ต 8000
Runtime
Python · Flask + Gunicorn (2 workers × 2 threads)
ข้อมูล
Supabase
คอนเทนเนอร์
fleet-api
ตัวเดียวในระบบที่ไม่ใช่ Node.jsGlitchTip pilot ตัวแรก
Fleet Photosเสิร์ฟรูปจากงานภาคสนาม
fleetphotos.103.246.189.85.nip.io
Runtime
Python 3 (http server)
ข้อมูล
ไฟล์บนดิสก์
คอนเทนเนอร์
fleet-photos
Uptime Kumaเฝ้าทุกเว็บแอป + cert หมดอายุ + ดิสก์ (แจ้งเมล)
status.thairentacar.com
Runtime
Node.js · Uptime Kuma 1.23.17
ข้อมูล
SQLite ใน ./uptime-kuma-data
คอนเทนเนอร์
uptime-kuma
monitor 26 ตัว (http 22 · keyword 3 · push 1)push heartbeat ดิสก์จาก cron ทุก 30 นาที
GlitchTiperror tracking รวมทุกแอป (Sentry-compatible)
glitch.thairentacar.com
Runtime
Python · Django + Celery
ข้อมูล
PostgreSQL 16 (db: glitchtip) + Redis db1
คอนเทนเนอร์
glitchtip-web + worker
Sentry SDK ใน 6 แอป Next.js + fleet-api

บริการพื้นฐานและเวอร์ชัน

23 รายการ
บริการเวอร์ชันหน้าที่
Traefikv3.3reverse proxy + TLS ทุกโดเมน (26 hostname)
Supabase Postgres15.8ฐานข้อมูลหลักที่ทุกแอปใช้ร่วมกัน
Kong3.9.1API gateway หน้า Supabase
PostgREST14.8สร้าง REST API จาก schema
GoTrue2.186.0auth / JWT
Storage API1.48.26ไฟล์แนบ
Realtime2.76.5subscribe ความเปลี่ยนแปลง
Supavisor2.7.4connection pooler
Supabase Studio2026.04GUI ฐานข้อมูล
PostgreSQL16อินสแตนซ์แยกของ CarPro Helper + GlitchTip
MySQL8.0.44ฐานข้อมูลของ Fleet MDM
Redis7cache (ตัวกลาง + ตัวแยกของ Fleet MDM)
n8n2.23.2automation · 44 workflow (เปิดใช้ 34) + หน้า dashboard รายได้
Fleet (fleetdm)4.90.1endpoint management พีซี Windows
MeshCentral1.2.5remote desktop / สั่งงานเครื่อง
Gitea1.22.6git ของทุกแอป + โน้ต Obsidian
Gitea Actions runner0.2.13CI: typecheck ทุกแอปทุกครั้งที่ push
Uptime Kuma1.23.17เฝ้า 26 monitor + แจ้งเมล
GlitchTiplatesterror tracking (Sentry-compatible)
Vaultwarden1.37.0password manager ของทีม
Duplicatilatestส่งแบ็คอัพขึ้น Google Drive
Portainer CE2.39.2จัดการคอนเทนเนอร์
Ollama0.32.0LLM ในเครื่อง (สำรองไว้)

สำรองข้อมูล

เก็บที่ดิสก์คนละลูกกับระบบ
สำรองอะไรถี่แค่ไหนเก็บนานปลายทาง
PostgreSQL ทุกอินสแตนซ์ (pg_dumpall) + MySQL ของ Fleet MDMทุกชั่วโมง นาทีที่ 307 วัน/data/backups/postgres
ซอร์สโค้ด + config ทุกแอปวันละ 2 ครั้ง (12:00, 00:00)14 วัน/data/backups/platform
n8n SQLite (workflow + credential)วันละครั้ง3 วัน/data/backups/sqlite
ชุด offsite ผ่าน Duplicati (AES-256)ทุก 12 ชม. (13:00, 01:00)14 versionsGoogle Drive
ชุด offsite ดึงโดย NAS ที่ออฟฟิศ (pull, server ต่อ NAS ไม่ได้)วันละ 2 ครั้ง (02:00, 14:00)90 วันSynology DS920+ /PlatformBackup

งานอัตโนมัติ

15 ชุด

เซิร์ฟเวอร์

3 เครื่อง
TRAC-PLATFORM-01103.246.189.85

แอปทั้งหมด, Supabase, n8n, Traefik, Fleet MDM

tracsupabase01103.246.189.77

ระบบ Driver แยกเซิร์ฟเวอร์ + Supabase ของตัวเอง

ESXi ออฟฟิศเครือข่ายภายใน

Zabbix + Grafana + kpi-collector · call log ตู้สาขาโทรศัพท์ (SMDR) · trac-aibot (AI chatbot) · NetAlertX + Netdisco (แผนผังพอร์ตสวิตช์) · NAS DS920+