⚡ Cloud Architecture Manual

PKDERIV Infrastructure & Auto-Provisioning Wizard

คู่มือฉบับสมบูรณ์อธิบายโครงสร้างระบบ ความสามารถ 1-Click Zero-Touch Auto-Provisioning, ระบบป้องกัน Error 522, กลไกออกใบรับรอง SSL อัตโนมัติ และระบบความปลอดภัย 2 ชั้น Rollback & Terminate

1. ภาพรวมระบบ (System Architecture)

โปรแกรม PKDERIV Infrastructure Wizard คือระบบควบคุม Infrastructure อัตโนมัติแบบรวมศูนย์ (Local Management Dashboard) พัฒนาด้วย Node.js + Express ทำงานประสานกันระหว่าง AWS Cloud (Region London: eu-west-2) และ Cloudflare DNS เพื่อควบคุมดูแลให้โดเมน pkderiv.online สามารถออนไลน์ได้ตลอด 24/7 โดยไม่ต้องคลิกหน้า AWS Console แม้แต่คลิกเดียว

ผู้ใช้งาน (Client) ➔ Cloudflare DNS (pkderiv.online) ➔ AWS Elastic IP (16.61.48.164) ➔ EC2 t3.micro (Ubuntu 24.04 LTS) ➔ Nginx (SSL: Let's Encrypt) ➔ App Service (tradeMultiplex)

☁️ AWS Cloud Core

ควบคุม EC2 t3.micro, จัดการ Public Elastic IP, รหัสผ่านกุญแจ SSH PEM, และระบบไฟร์วอลล์ Security Group อัตโนมัติผ่าน AWS SDK v3

🌐 Cloudflare DNS Engine

เชื่อมต่อผ่าน Cloudflare REST API เพื่ออัปเดต A-Record แบบ Real-time รองรับทั้งโหมด DNS-Only (เมฆเทา ⚪) และ Proxied CDN (เมฆส้ม 🟠)

🔒 Automated Origin & Security

สั่งงานเครื่องผ่าน SSH แบบไร้รหัสผ่าน (Key-Based) ติดตั้ง Nginx, ออกใบรับรองแท้ Let's Encrypt (Certbot) และเตรียมสภาพแวดล้อมแอพ

2. กระบวนการ 6-Phase Zero-Touch Auto-Provisioning

เมื่อกดปุ่ม "🚀 Start Auto-Provisioning" ในหน้า Wizard โปรแกรมจะดำเนินการตามขั้นตอน 6 เฟสอย่างเคร่งครัดตั้งแต่ค้นหาทรัพยากรไปจนถึงออนไลน์:

1

Phase 1: Resource Discovery (ตรวจหาโครงสร้างพื้นฐาน)

โปรแกรมจะค้นหา Default VPC และ Public Subnet ใน Region (eu-west-2) พร้อมทั้งค้นหา Ubuntu 24.04 LTS (Noble) AMI ล่าสุด ของ Canonical ผ่าน API โดยอัตโนมัติ เพื่อให้ได้ระบบปฏิบัติการที่ปลอดภัยและทันสมัยที่สุด

DescribeVpcsCommand DescribeSubnetsCommand DescribeImagesCommand
2

Phase 2: KeyPair & Security Group (สร้างกุญแจและระบบไฟร์วอลล์)

สร้าง SSH KeyPair ใหม่ (เช่น pkderiv-key-<timestamp>) บันทึกไฟล์ .pem ลงในโฟลเดอร์ keys/ พร้อมล็อก Permission 0o600 และสร้าง Security Group เปิดพอร์ตที่จำเป็น: พอร์ต 22 (SSH), พอร์ต 80 (HTTP) และ พอร์ต 443 (HTTPS)

CreateKeyPairCommand CreateSecurityGroupCommand AuthorizeSecurityGroupIngressCommand
3

Phase 3: Launch EC2 t3.micro with Cloud-Init (สร้างเครื่องพร้อม User-Data)

สั่ง Launch เครื่อง Instance ขนาด t3.micro โดยส่งสคริปต์ User-Data Bootstrap ไปให้เครื่องติดตั้ง nginx, curl, ufw, git, certbot และ python3-certbot-nginx ทันทีที่เครื่องบูต และรอจนกระทั่งสถานะเปลี่ยนเป็น running

RunInstancesCommand waitForInstanceRunning (Polling 90s)
4

Phase 4: Elastic IP & Cloudflare Anti-522 DNS (ผูก IP และตั้งค่า DNS)

นำ Elastic IP จากคอนฟิก (หรือจองใหม่) มาผูกกับ Network Interface ของเครื่องใหม่ผ่าน AssociateAddressCommand และอัปเดต Cloudflare A-Record ให้ชี้ไปยัง IP ทันที โดยกำหนดค่าเริ่มต้นเป็น proxied: false (DNS Only ⚪) เพื่อรับประกันว่าเข้าเว็บได้ทันที ไม่มี Error 522

AssociateAddressCommand Cloudflare DNS API (proxied: false)
5

Phase 5: Automated SSL Provisioning (ออกใบรับรอง Certbot แท้ 🔒)

โปรแกรมจะรอระบบ SSH พร้อมใช้งาน จากนั้นยิงคำสั่งให้ Certbot ติดต่อขอใบรับรอง SSL ฟรีของแท้จาก Let's Encrypt สำหรับโดเมน pkderiv.online พร้อมติดตั้งลง Nginx ให้เสร็จสรรพ ทำให้เว็บไซต์ใช้งาน HTTPS กุญแจเขียวได้ทันที

Certbot --nginx --agree-tos Auto-Redirect HTTP ➔ HTTPS
6

Phase 6: App Environment & Persistence (เตรียมโฟลเดอร์แอพ & บันทึก .env)

สร้างโฟลเดอร์แอพ /home/ubuntu/indicators_Multiplex กำหนดสิทธิ์ให้ User ubuntu ตรวจเช็ค Systemd Service tradeMultiplex และบันทึก Instance ID, Key Path, Security Group ID ลงในไฟล์ .env อัตโนมัติ

updateEnv() deployAppService()

3. เจาะลึกกลไกแก้ปัญหา Error 522 (Connection Timed Out)

❌ สาเหตุเดิมที่เกิด Error 522:

เมื่อเปิดใช้ Cloudflare Proxy (เมฆส้ม 🟠) ทราฟฟิกของผู้ใช้จะวิ่งเข้า Edge Server ของ Cloudflare ก่อน จากนั้น Cloudflare จะพยายามเชื่อมต่อไปยัง Origin IP (เครื่อง EC2) หากเครื่องเพิ่งสร้างใหม่และมีเพียงใบรับรอง Self-Signed แต่โหมด SSL ของ Cloudflare ตั้งไว้ที่ Full (Strict) การเชื่อมต่อจะล้มเหลวและหมดเวลา (Timeout 15 วินาที) กลายเป็น Error 522

✅ การแก้ไขอัตโนมัติในโปรแกรมเวอร์ชันใหม่:

  • ค่าเริ่มต้น DNS-Only: ตอน Provision โปรแกรมจะสั่ง proxied: false ทำให้โดเมนวิ่งตรงไปยัง Elastic IP 16.61.48.164 ทันที (ตัด Error 522 100%)
  • ออก SSL จริงอัตโนมัติ: ติดตั้ง Certbot ออกใบรับรองแท้ของ Let's Encrypt ใน Phase 5
  • Safe-Activate Proxy: เมื่อเครื่องมีใบรับรองแท้ที่น่าเชื่อถือแล้ว ผู้ใช้สามารถเปิด Cloudflare Proxy (เมฆส้ม) ได้อย่างปลอดภัยโดยไม่มีทางเกิด 522 อีกเลย

4. ระบบ ⏪ Rollback & Terminate New Instance (ปลอดภัย 2 ชั้น)

🛡️ Double-Confirmation Safety Guardrail

ระบบนี้สร้างขึ้นเพื่อแก้ปัญหา: "หากสร้างเครื่องใหม่แล้วต้องการเปลี่ยนใจ ย้ายโดเมนกลับเครื่องเดิม และลบเครื่องใหม่ทิ้งเพื่อไม่ให้เสียเงินค่าบริการ EC2 ต่อเนื่อง" โดยมีกลไกป้องกันการลบผิดเครื่อง 2 ชั้น:

ฟังก์ชัน การทำงาน ระดับความเสี่ยง
1. สลับ Elastic IP กลับ (Rollback Only) ย้าย Elastic IP 16.61.48.164 กลับไปผูกเครื่องเดิม (เช่น nutv99-aws-london) โดเมนจะชี้กลับทันที เครื่องใหม่ยังอยู่ไม่ถูกแตะต้อง Zero Risk (ปลอดภัย 100%)
2. Rollback + สั่ง Terminate เครื่องใหม่ ย้าย Elastic IP กลับเครื่องเดิม แล้วสั่งลบเครื่องใหม่ทิ้งถาวรผ่าน AWS API High Impact (ลบเครื่องถาวร)
🔐 เงื่อนไขความปลอดภัยก่อนปุ่ม Terminate จะทำงานได้:
  1. ผู้ใช้ต้องติ๊กถูกที่ช่องยืนยันความประสงค์จะลบเครื่อง
  2. ผู้ใช้ต้องเลือกเครื่องที่จะลบ และพิมพ์รหัส Instance ID (เช่น i-068063e18e04b28a2) ให้ตรงกันเป๊ะ ๆ ทุกตัวอักษร
  3. ระบบมีระบบตรวจสอบอัตโนมัติ ห้ามลบเครื่องเดียวกับเครื่องเป้าหมาย ที่เราเพิ่งย้าย IP กลับไปเด็ดขาด
  4. รองรับโหมด DRY RUN ให้ทดลองรันขั้นตอนดูก่อนโดยไม่มีการลบเครื่องจริง

5. ระบบวินิจฉัยสุขภาพ 5 จุด (5-Point Health Matrix) & ปุ่ม 1-Click

ในแท็บ "6 Verify All" หรือปุ่ม "🔍 Run Health Check" ระบบจะตรวจสอบส่วนสำคัญ 5 จุดของ Infrastructure:

รายการตรวจสอบ เงื่อนไขที่ถือว่าผ่าน (Pass) ปุ่มแก้ไขด่วน (1-Click Fix)
1. EC2 Instance Instance ID ใน .env มีสถานะเป็น running ▶ Start EC2 Instance
2. Elastic IP (EIP) Elastic IP ผูกอยู่กับ Network Interface ของ Instance อย่างถูกต้อง 🔗 Associate Elastic IP
3. Security Group พอร์ต 80 (HTTP) และ 443 (HTTPS) เปิด Ingress รับทราฟฟิก 🛡️ Authorize Ports 80 & 443
4. Origin Nginx & SSL Service Nginx เปิดทำงาน รับฟังพอร์ต 80/443 และ curl 127.0.0.1 ตอบกลับ 200 OK 🔒 Setup SSL (Certbot) / 🔄 Restart Nginx
5. Cloudflare DNS A-Record ของ pkderiv.online ชี้ตรงกับ Elastic IP ของเครื่อง 🌐 Update A-Record / ⚪ Proxy OFF

6. คู่มือการเริ่มใช้งาน & รายการ API Endpoints

🚀 วิธีเริ่มรันโปรแกรม Wizard

# 1. เข้าสู่โฟลเดอร์โปรเจกต์
cd d:\Rust\aws_config_wizard

# 2. เริ่มเซิร์ฟเวอร์
npm start
# หรือดับเบิลคลิกไฟล์ start-wizard.bat

# 3. เปิดเบราว์เซอร์
http://localhost:3000

📁 ไฟล์คอนฟิกหลัก (.env)

PORT=3000
DRY_RUN=false                 # true = จำลอง, false = รันจริงบน Cloud
AWS_REGION=eu-west-2          # London Region
EC2_INSTANCE_ID=i-xxxxxxx     # Active Instance ID
ELASTIC_IP=16.61.48.164       # Static Public IP
DOMAIN=pkderiv.online         # โดเมนหลัก
CLOUDFLARE_ZONE_ID=xxxxxxx    # Zone ID บน Cloudflare
APP_DIR=/home/ubuntu/indicators_Multiplex
APP_SERVICE=tradeMultiplex

📡 รายการ API Endpoints ที่พร้อมใช้งาน

Method & URL หน้าที่การทำงาน Payload ตัวอย่าง
GET /api/config ดึงการตั้งค่าปัจจุบันจาก .env และโหมด DRY_RUN -
POST /api/check รันการตรวจสอบระบบทั้ง 5 จุดของ Health Matrix -
POST /api/provision เริ่มกระบวนการ 6-Phase Auto-Provisioning สร้างเครื่องใหม่ { "dryRun": false, "cloudflareProxied": false, "setupSsl": true, "deployApp": true }
GET /api/instances ดึงรายการ Instance ทั้งหมดใน Region พร้อม Tags และสถานะ -
POST /api/rollback สลับ Elastic IP กลับเครื่องเดิม และสั่ง Terminate เครื่องใหม่แบบปลอดภัย { "targetInstanceId": "i-0dfe609694660b8d2", "terminateInstanceId": "i-068063e18e04b28a2", "confirmInstanceId": "i-068063e18e04b28a2", "dryRun": false }
POST /api/setup-ssl สั่ง Certbot บนเครื่อง EC2 ออกใบรับรอง Let's Encrypt ทันที -
POST /api/deploy-app เตรียมโฟลเดอร์แอปและตรวจสอบสถานะ Systemd Service -
POST /api/fix/:name สั่งซ่อมแซมรายจุด (start-ec2, eip, sg, nginx, dns, proxy-on, proxy-off) -