# πŸ—ΊοΈ ΰΉΰΈœΰΈ™ΰΈœΰΈ±ΰΈ‡ Network Architecture & Container Services (LCBP3-DMS) ΰΉΰΈœΰΈ™ΰΈœΰΈ±ΰΈ‡ΰΈ™ΰΈ΅ΰΉ‰ΰΉΰΈͺΰΈ”ΰΈ‡ΰΈΰΈ²ΰΈ£ΰΉΰΈšΰΉˆΰΈ‡ΰΈͺΰΉˆΰΈ§ΰΈ™ΰΉ€ΰΈ„ΰΈ£ΰΈ·ΰΈ­ΰΈ‚ΰΉˆΰΈ²ΰΈ’ (VLANs), ΰΈΰΈ²ΰΈ£ΰΉ€ΰΈŠΰΈ·ΰΉˆΰΈ­ΰΈ‘ΰΈ•ΰΉˆΰΈ­ Firewall (ACLs) แΰΈ₯ΰΈ°ΰΈšΰΈ—ΰΈšΰΈ²ΰΈ—ΰΈ‚ΰΈ­ΰΈ‡ Server ΰΈ—ΰΈ±ΰΉ‰ΰΈ‡ΰΈͺΰΈ­ΰΈ‡ΰΈ•ΰΈ±ΰΈ§ (QNAP: Application, ASUSTOR: Infrastructure) --- ## 1. ΰΈ ΰΈ²ΰΈžΰΈ£ΰΈ§ΰΈ‘ΰΈΰΈ²ΰΈ£ΰΉΰΈšΰΉˆΰΈ‡ΰΈšΰΈ—ΰΈšΰΈ²ΰΈ— Server ``` β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ LCBP3-DMS INFRASTRUCTURE β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ QNAP TS-473A β”‚ ASUSTOR AS5403T β”‚ β”‚ (Application & Database) β”‚ (Infrastructure & Backup) β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ βœ” Application Runtime β”‚ βœ” File Storage (NFS/SMB) β”‚ β”‚ βœ” API / Web (NestJS, Next.js) β”‚ βœ” Backup Target (Restic/Borg) β”‚ β”‚ βœ” Database (MariaDB Primary) β”‚ βœ” Docker Infra (Registry, Portainer) β”‚ β”‚ βœ” High CPU / RAM usage β”‚ βœ” Monitoring (Prometheus, Grafana) β”‚ β”‚ βœ” Worker / Queue (Redis) β”‚ βœ” Log Aggregation (Loki) β”‚ β”‚ βœ” API Gateway (NPM) β”‚ βœ” Uptime Monitoring (Uptime Kuma) β”‚ β”‚ βœ– ΰΉ„ΰΈ‘ΰΉˆΰΉ€ΰΈΰΉ‡ΰΈš backup ΰΈ£ΰΈ°ΰΈ’ΰΈ°ΰΈ’ΰΈ²ΰΈ§ β”‚ βœ– ΰΉ„ΰΈ‘ΰΉˆΰΈ£ΰΈ±ΰΈ™ App logic หนัก β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ Container: Container Station β”‚ Container: Portainer β”‚ β”‚ IP: 192.168.10.8 β”‚ IP: 192.168.10.9 β”‚ β”‚ Storage: 4TBΓ—4 RAID5 + 1TB SSD β”‚ Storage: 6TBΓ—3 RAID5 + 1TB SSD β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` --- ## 2. Data Flow Diagram ```mermaid flowchart TB subgraph Internet["🌐 Internet"] User[("πŸ‘€ User")] end subgraph QNAP["πŸ’Ύ QNAP TS-473A (App Server)"] NPM["πŸ”² NPM
(Reverse Proxy)"] Frontend["πŸ“± Next.js
(Frontend)"] Backend["βš™οΈ NestJS
(Backend API)"] DB["πŸ—„οΈ MariaDB"] Redis["πŸ“¦ Redis"] ES["πŸ” Elasticsearch"] end subgraph ASUSTOR["πŸ’Ύ ASUSTOR AS5403T (Infra Server)"] Portainer["🐳 Portainer"] Registry["πŸ“¦ Registry"] Prometheus["πŸ“Š Prometheus"] Grafana["πŸ“ˆ Grafana"] Uptime["⏱️ Uptime Kuma"] Backup["πŸ’Ύ Restic/Borg"] NFS["πŸ“ NFS Storage"] end User -->|HTTPS 443| NPM NPM --> Frontend NPM --> Backend Frontend --> Backend Backend --> DB Backend --> Redis Backend --> ES DB -.->|Scheduled Backup| Backup Backup --> NFS Portainer -.->|Manage| QNAP Prometheus -.->|Collect Metrics| Backend Prometheus -.->|Collect Metrics| DB Uptime -.->|Health Check| NPM ``` --- ## 3. Docker Management View ```mermaid flowchart TB subgraph Portainer["🐳 Portainer (ASUSTOR - Central Management)"] direction TB subgraph LocalStack["πŸ“¦ Local Infra Stack"] Registry["Docker Registry"] Prometheus["Prometheus"] Grafana["Grafana"] Uptime["Uptime Kuma"] Backup["Restic/Borg"] Loki["Loki (Logs)"] ClamAV["ClamAV"] end subgraph RemoteStack["πŸ”— Remote: QNAP App Stack"] Frontend["Next.js"] Backend["NestJS"] MariaDB["MariaDB"] Redis["Redis"] ES["Elasticsearch"] NPM["NPM"] Gitea["Gitea"] N8N["n8n"] PMA["phpMyAdmin"] end end ``` --- ## 4. Security Zones Diagram ```mermaid flowchart TB subgraph PublicZone["🌐 PUBLIC ZONE"] direction LR NPM["NPM (Reverse Proxy)"] SSL["SSL/TLS Termination"] end subgraph AppZone["πŸ“± APPLICATION ZONE (QNAP)"] direction LR Frontend["Next.js"] Backend["NestJS"] N8N["n8n"] Gitea["Gitea"] end subgraph DataZone["πŸ’Ύ DATA ZONE (QNAP - Internal Only)"] direction LR MariaDB["MariaDB"] Redis["Redis"] ES["Elasticsearch"] end subgraph InfraZone["πŸ› οΈ INFRASTRUCTURE ZONE (ASUSTOR)"] direction LR Backup["Backup Services"] Registry["Docker Registry"] Monitoring["Prometheus + Grafana"] Logs["Loki / Syslog"] end PublicZone -->|HTTPS Only| AppZone AppZone -->|Internal API| DataZone DataZone -.->|Backup| InfraZone AppZone -.->|Metrics| InfraZone ``` --- ## 5. ΰΉΰΈœΰΈ™ΰΈœΰΈ±ΰΈ‡ΰΈΰΈ²ΰΈ£ΰΉ€ΰΈŠΰΈ·ΰΉˆΰΈ­ΰΈ‘ΰΈ•ΰΉˆΰΈ­ΰΉ€ΰΈ„ΰΈ£ΰΈ·ΰΈ­ΰΈ‚ΰΉˆΰΈ²ΰΈ’ (Network Flow) ```mermaid graph TD direction TB subgraph Flow1["ΰΈΰΈ²ΰΈ£ΰΉ€ΰΈŠΰΈ·ΰΉˆΰΈ­ΰΈ‘ΰΈ•ΰΉˆΰΈ­ΰΈˆΰΈ²ΰΈΰΈ ΰΈ²ΰΈ’ΰΈ™ΰΈ­ΰΈ (Public WAN)"] User["ΰΈœΰΈΉΰΉ‰ΰΉƒΰΈŠΰΉ‰ΰΈ‡ΰΈ²ΰΈ™ΰΈ ΰΈ²ΰΈ’ΰΈ™ΰΈ­ΰΈ (Internet)"] end subgraph Router["Router (ER7206) - Gateway"] User -- "Port 80/443 (HTTPS/HTTP)" --> ER7206 ER7206["Port Forwarding
TCP 80 β†’ 192.168.10.8:80
TCP 443 β†’ 192.168.10.8:443"] end subgraph VLANs["ΰΉ€ΰΈ„ΰΈ£ΰΈ·ΰΈ­ΰΈ‚ΰΉˆΰΈ²ΰΈ’ΰΈ ΰΈ²ΰΈ’ΰΉƒΰΈ™ (VLANs & Firewall Rules)"] direction LR subgraph VLAN10["VLAN 10: Servers
192.168.10.x"] QNAP["QNAP NAS
(192.168.10.8)"] ASUSTOR["ASUSTOR NAS
(192.168.10.9)"] end subgraph VLAN20["VLAN 20: MGMT
192.168.20.x"] AdminPC["Admin PC / Switches"] end subgraph VLAN30["VLAN 30: USER
192.168.30.x"] OfficePC["PC ΰΈžΰΈ™ΰΈ±ΰΈΰΈ‡ΰΈ²ΰΈ™/Wi-Fi"] end subgraph VLAN70["VLAN 70: GUEST
192.168.70.x"] GuestPC["Guest Wi-Fi"] end subgraph Firewall["Firewall ACLs (OC200/ER7206)"] direction TB rule1["Rule 1: DENY
Guest (VLAN 70) β†’ All VLANs"] rule2["Rule 2: DENY
Server (VLAN 10) β†’ User (VLAN 30)"] rule3["Rule 3: ALLOW
User (VLAN 30) β†’ QNAP
Ports: 443, 80"] rule4["Rule 4: ALLOW
MGMT (VLAN 20) β†’ All"] end GuestPC -.x|rule1| QNAP QNAP -.x|rule2| OfficePC OfficePC -- "https://lcbp3.np-dms.work" -->|rule3| QNAP AdminPC -->|rule4| QNAP AdminPC -->|rule4| ASUSTOR end ER7206 --> QNAP subgraph DockerQNAP["Docker 'lcbp3' (QNAP - Applications)"] direction TB subgraph PublicServices["Services ΰΈ—ΰΈ΅ΰΉˆ NPM ΰΉ€ΰΈ›ΰΈ΄ΰΈ”ΰΈͺΰΈΉΰΉˆΰΈ ΰΈ²ΰΈ’ΰΈ™ΰΈ­ΰΈ"] direction LR NPM["NPM (Nginx Proxy Manager)"] FrontendC["frontend:3000"] BackendC["backend:3000"] GiteaC["gitea:3000"] PMAC["pma:80"] N8NC["n8n:5678"] end subgraph InternalServices["Internal Services (Backend Only)"] direction LR DBC["mariadb:3306"] CacheC["cache:6379"] SearchC["search:9200"] end NPM -- "lcbp3.np-dms.work" --> FrontendC NPM -- "backend.np-dms.work" --> BackendC NPM -- "git.np-dms.work" --> GiteaC NPM -- "pma.np-dms.work" --> PMAC NPM -- "n8n.np-dms.work" --> N8NC BackendC -- "lcbp3 Network" --> DBC BackendC -- "lcbp3 Network" --> CacheC BackendC -- "lcbp3 Network" --> SearchC end subgraph DockerASUSTOR["Docker 'lcbp3' (ASUSTOR - Infrastructure)"] direction TB subgraph InfraServices["Infrastructure Services"] direction LR PortainerC["portainer:9443"] RegistryC["registry:5000"] PrometheusC["prometheus:9090"] GrafanaC["grafana:3000"] UptimeC["uptime-kuma:3001"] end subgraph BackupServices["Backup & Storage"] direction LR ResticC["restic/borg"] NFSC["NFS Share"] end PortainerC -.->|"Remote Endpoint"| NPM PrometheusC -.->|"Scrape Metrics"| BackendC ResticC --> NFSC end QNAP --> NPM ASUSTOR --> PortainerC DBC -.->|"Scheduled Backup"| ResticC ``` --- ## 6. ΰΈͺΰΈ£ΰΈΈΰΈ›ΰΈΰΈ²ΰΈ£ΰΈ•ΰΈ±ΰΉ‰ΰΈ‡ΰΈ„ΰΉˆΰΈ² Firewall ACLs (ΰΈͺำหรับ Omada OC200) ΰΈ™ΰΈ΅ΰΉˆΰΈ„ΰΈ·ΰΈ­ΰΈ£ΰΈ²ΰΈ’ΰΈΰΈ²ΰΈ£ΰΈΰΈŽ (Rules) ΰΈ—ΰΈ΅ΰΉˆΰΈ„ΰΈΈΰΈ“ΰΈ•ΰΉ‰ΰΈ­ΰΈ‡ΰΈͺΰΈ£ΰΉ‰ΰΈ²ΰΈ‡ΰΉƒΰΈ™ **Settings > Network Security > ACL** (ΰΉ€ΰΈ£ΰΈ΅ΰΈ’ΰΈ‡ΰΈ₯ΰΈ³ΰΈ”ΰΈ±ΰΈšΰΈˆΰΈ²ΰΈΰΈšΰΈ™ΰΈ₯ΰΈ‡ΰΈ₯ΰΉˆΰΈ²ΰΈ‡): | ΰΈ₯ΰΈ³ΰΈ”ΰΈ±ΰΈš | Name | Policy | Source | Destination | Ports | | :---- | :--------------------- | :-------- | :---------------- | :------------------------ | :----------------------------------- | | **1** | Isolate-Guests | **Deny** | Network β†’ VLAN 70 | Network β†’ VLAN 10, 20, 30 | All | | **2** | Isolate-Servers | **Deny** | Network β†’ VLAN 10 | Network β†’ VLAN 30 (USER) | All | | **3** | Block-User-to-Mgmt | **Deny** | Network β†’ VLAN 30 | Network β†’ VLAN 20 (MGMT) | All | | **4** | Allow-User-to-Services | **Allow** | Network β†’ VLAN 30 | IP β†’ QNAP (192.168.10.8) | Port Group β†’ Web (443, 80, 81, 2222) | | **5** | Allow-MGMT-to-All | **Allow** | Network β†’ VLAN 20 | Any | All | | **6** | Allow-Server-Internal | **Allow** | IP β†’ 192.168.10.8 | IP β†’ 192.168.10.9 | All (QNAP ↔ ASUSTOR) | | **7** | (Default) | Deny | Any | Any | All | --- ## 7. ΰΈͺΰΈ£ΰΈΈΰΈ›ΰΈΰΈ²ΰΈ£ΰΈ•ΰΈ±ΰΉ‰ΰΈ‡ΰΈ„ΰΉˆΰΈ² Port Forwarding (ΰΈͺำหรับ Omada ER7206) ΰΈ™ΰΈ΅ΰΉˆΰΈ„ΰΈ·ΰΈ­ΰΈ£ΰΈ²ΰΈ’ΰΈΰΈ²ΰΈ£ΰΈΰΈŽΰΈ—ΰΈ΅ΰΉˆΰΈ„ΰΈΈΰΈ“ΰΈ•ΰΉ‰ΰΈ­ΰΈ‡ΰΈͺΰΈ£ΰΉ‰ΰΈ²ΰΈ‡ΰΉƒΰΈ™ **Settings > Transmission > Port Forwarding**: | Name | External Port | Internal IP | Internal Port | Protocol | | :-------------- | :------------ | :----------- | :------------ | :------- | | Allow-NPM-HTTPS | 443 | 192.168.10.8 | 443 | TCP | | Allow-NPM-HTTP | 80 | 192.168.10.8 | 80 | TCP | > **ΰΈ«ΰΈ‘ΰΈ²ΰΈ’ΰΉ€ΰΈ«ΰΈ•ΰΈΈ**: Port forwarding ΰΉ„ΰΈ›ΰΈ—ΰΈ΅ΰΉˆ QNAP (NPM) ΰΉ€ΰΈ—ΰΉˆΰΈ²ΰΈ™ΰΈ±ΰΉ‰ΰΈ™, ASUSTOR ΰΉ„ΰΈ‘ΰΉˆΰΈ„ΰΈ§ΰΈ£ΰΉ€ΰΈ›ΰΈ΄ΰΈ”ΰΈ£ΰΈ±ΰΈš traffic ΰΈˆΰΈ²ΰΈΰΈ ΰΈ²ΰΈ’ΰΈ™ΰΈ­ΰΈ --- ## 8. Container Service Distribution ### QNAP (192.168.10.8) - Application Services | Container | Port | Domain | Network | | :------------ | :--- | :------------------ | :------ | | npm | 81 | npm.np-dms.work | lcbp3 | | frontend | 3000 | lcbp3.np-dms.work | lcbp3 | | backend | 3000 | backend.np-dms.work | lcbp3 | | mariadb | 3306 | (internal) | lcbp3 | | cache (redis) | 6379 | (internal) | lcbp3 | | search (es) | 9200 | (internal) | lcbp3 | | gitea | 3000 | git.np-dms.work | lcbp3 | | n8n | 5678 | n8n.np-dms.work | lcbp3 | | pma | 80 | pma.np-dms.work | lcbp3 | ### ASUSTOR (192.168.10.9) - Infrastructure Services | Container | Port | Domain | Network | | :------------ | :--- | :--------------------- | :------ | | portainer | 9443 | portainer.np-dms.work | lcbp3 | | prometheus | 9090 | prometheus.np-dms.work | lcbp3 | | grafana | 3000 | grafana.np-dms.work | lcbp3 | | uptime-kuma | 3001 | uptime.np-dms.work | lcbp3 | | registry | 5000 | registry.np-dms.work | lcbp3 | | node-exporter | 9100 | (internal) | lcbp3 | | cadvisor | 8080 | (internal) | lcbp3 | | loki | 3100 | (internal) | lcbp3 | | restic/borg | N/A | (scheduled job) | host | --- ## 9. Backup Flow ``` β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ BACKUP STRATEGY β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ β”‚ β”‚ QNAP (Source) ASUSTOR (Target) β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β”‚ MariaDB β”‚ ──── Daily 2AM ────▢ β”‚ /volume1/backup/db/ β”‚ β”‚ β”‚ β”‚ (mysqldump) β”‚ β”‚ (Restic Repository) β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚ β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β”‚ Redis RDB β”‚ ──── Daily 3AM ────▢ β”‚ /volume1/backup/ β”‚ β”‚ β”‚ β”‚ + AOF β”‚ β”‚ redis/ β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚ β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β”‚ App Config β”‚ ──── Weekly ───────▢ β”‚ /volume1/backup/ β”‚ β”‚ β”‚ β”‚ + Volumes β”‚ Sunday 4AM β”‚ config/ β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚ β”‚ β”‚ Retention Policy: β”‚ β”‚ β€’ Daily: 7 days β”‚ β”‚ β€’ Weekly: 4 weeks β”‚ β”‚ β€’ Monthly: 6 months β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` --- > πŸ“ **ΰΈ«ΰΈ‘ΰΈ²ΰΈ’ΰΉ€ΰΈ«ΰΈ•ΰΈΈ**: เอกΰΈͺΰΈ²ΰΈ£ΰΈ™ΰΈ΅ΰΉ‰ΰΈ­ΰΉ‰ΰΈ²ΰΈ‡ΰΈ­ΰΈ΄ΰΈ‡ΰΈˆΰΈ²ΰΈ Architecture Document **v1.8.0** - Last updated: 2026-01-28