สคริปต์ประจำโปรเจกต์ (scripts/)
โฟลเดอร์ scripts/ ที่รากของโปรเจกต์เก็บเครื่องมือบรรทัดคำสั่งที่นักพัฒนาและ AI ผู้ช่วยรันเอง ไม่ได้เป็นส่วนของเว็บหรือ backend ที่ผู้ใช้เห็น ทุกไฟล์ต้องรันจาก ราก repo (provision-postgres.mjs เขียนผลลงโฟลเดอร์ scripts/sql ตามไดเรกทอรีที่รันอยู่)
| สคริปต์ | หน้าที่ | อ่านต่อ |
|---|---|---|
deploy-web-prod.mjs |
แพ็กเว็บ Next.js แบบ standalone ส่งขึ้นเซิร์ฟเวอร์ และรีสตาร์ทบริการ | บันทึกนี้ |
stamp-build-info.mjs |
เขียนเลขรุ่นและวันเวลา build ลงไฟล์ให้หน้าเว็บแสดง | บันทึกนี้ |
ask_deepseek.mjs |
ถามคำถามงานบัญชีและ ERP กับ DeepSeek Reasoner จากบรรทัดคำสั่ง | บันทึกนี้ |
provision-postgres.mjs + sql/ |
สร้างสคริปต์ SQL โครงสร้างฐานข้อมูลและข้อมูลตั้งต้น พร้อมชุดสคริปต์ SQL แก้ข้อมูลเดโม | สร้างฐาน PostgreSQL และชุดสคริปต์ SQL (provision-postgres.mjs, scripts/sql) |
wait_for_issue.py |
ตัวเฝ้า ticket ของ IssueMate (รอแบบไม่เปลืองโทเคน) พร้อมประตูตรวจก่อน deploy | ตัวเฝ้าใบงาน IssueMate: กติกาปลุก ตอบเป็นชุด ด่านตรวจก่อนดีพลอย (wait_for_issue.py) |
notify-chaos-lab.mjs |
ปลุก Chaos Lab ให้ทดสอบซ้ำหลังแก้โค้ด | Chaos Lab: ห้องทำงานเสมือนยิงรายการพร้อมกันเพื่อทดสอบกฎบัญชี (UAT Chaos Lab) |
deploy-web-prod.mjs
ดีพลอยเว็บอย่างเดียว (ส่วน Go backend ไม่เกี่ยว) ต้องตั้ง env BC_DEPLOY_HOST เป็นปลายทาง SSH ก่อน ถ้าไม่ตั้งจะหยุดทันที (:7-8) ที่อยู่เซิร์ฟเวอร์ไม่ถูกเก็บในสคริปต์ และต้อง build เว็บแบบ standalone (frontend/.next/standalone) ไว้ก่อนรัน
ขั้นตอน:
- เตรียม ลบรายการที่ขึ้นต้นด้วยจุดในโฟลเดอร์ standalone (ยกเว้น
.next) แล้วคัดลอก.next/static,publicและsrc/config/help/dataเข้าไป (:46-60) - แพ็ก สร้าง
bc_web_standalone.tar.gzในโฟลเดอร์ชั่วคราวด้วยtar.exeใช้ชื่อไฟล์แบบสัมพัทธ์เพราะ GNU tar ใน Git Bash อ่านC:ในพาธว่าเป็นโฮสต์ระยะไกล (:62-72) - อัปโหลด
scpไฟล์ไปไว้ใน/tmpของเซิร์ฟเวอร์ (:74-96) - เปิดใช้
sshแตกไฟล์ลงโฟลเดอร์เว็บ รีสตาร์ท systemd service ของเว็บ รอ 3 วินาที แล้วตรวจis-activeและลบไฟล์ชั่วคราว (:98-116)
ทุกขั้นที่เรียกโปรแกรมภายนอกผ่าน runWithWatchdog (:22-40) ซึ่งตัดการทำงานเมื่อเกินเวลาแล้วลองใหม่: tar 90 วินาที 2 ครั้ง, scp 120 วินาที 3 ครั้ง, ssh 60 วินาที 3 ครั้ง ถ้าครบจำนวนครั้งแล้วยังไม่ผ่านจะโยน error ออกมา การใช้ BatchMode=yes ทำให้ไม่รอรหัสผ่าน จึงต้องตั้งกุญแจ SSH ไว้ล่วงหน้า
BC_DEPLOY_HOST=<user@host> node scripts/deploy-web-prod.mjs
stamp-build-info.mjs
เขียนไฟล์ frontend/src/config/buildInfo.ts ให้มีค่า BUILD_INFO (version รูปแบบ vYYYY.MM.DD-HHMM, deployedAt เป็นข้อความไทยเช่น วว/ดด/ปปปป ชช:นน:ทท น., deployedIso ที่มี +07:00) และ BUILD_BADGE_TEXT สำหรับแสดงป้ายรุ่นบนหน้าเว็บ เวลาคำนวณเป็นเวลาไทย (UTC+7) ด้วยการบวก 7 ชั่วโมงเอง (stamp-build-info.mjs:7-23)
สคริปต์นี้ถูกเรียกอัตโนมัติก่อนทุกครั้งที่ npm run build ของ frontend ผ่าน prebuild (frontend/package.json:10) ตัวเฝ้า ticket ก็มีฟังก์ชันประทับรุ่นแบบเดียวกันด้วยตัวเลือก --stamp-version (ตัวเฝ้าใบงาน IssueMate: กติกาปลุก ตอบเป็นชุด ด่านตรวจก่อนดีพลอย (wait_for_issue.py))
ask_deepseek.mjs
node scripts/ask_deepseek.mjs "คำถามเรื่องบัญชี ภาษี หรือระบบงาน"
ส่งคำถามไปโมเดล deepseek-reasoner (โหมดคิดเหตุผล) และพิมพ์คำตอบ ชื่อตัวแปรคีย์คือ DEEPSEEK_API_KEY โค้ดค้นจากไฟล์ .env.local ของโฟลเดอร์ที่รันและของ Tester ก่อน แล้วจึงตกมาอ่าน env ของ shell (loadDeepSeekKey, ask_deepseek.mjs:9-31) และไม่เขียนค่าคีย์ลงโค้ดหรือ log เป็นเครื่องมือให้นักพัฒนาถามความเห็นประกอบ คำตอบไม่ใช่แหล่งอ้างอิงทางกฎหมายภาษี
ข้อควรรู้
- สคริปต์ที่ติดต่อเซิร์ฟเวอร์จริง (
deploy-web-prod.mjs) ไม่มีโหมดทดลองรัน (dry run) ตรวจBC_DEPLOY_HOSTให้ถูกก่อนทุกครั้ง provision-postgres.mjsเขียนทับไฟล์ SQL ที่มีชื่อเดียวกันในscripts/sql/ทุกครั้งที่รัน- ตัวเฝ้า ticket และ
ask_deepseek.mjsเรียกบริการภายนอก ค่าเชื่อมต่อทั้งหมดอยู่ใน env ไม่มีค่าลับในโค้ด
ที่มาในโค้ด
scripts/deploy-web-prod.mjs:7-8ต้องมีBC_DEPLOY_HOST,:22-40watchdog และ retry,:46-60เตรียมไฟล์,:62-72แพ็ก tar,:74-96อัปโหลด,:98-116แตกไฟล์และรีสตาร์ทscripts/stamp-build-info.mjs:7-34คำนวณเวลาไทยและเขียนbuildInfo.ts,frontend/package.json:10เรียกก่อน buildscripts/ask_deepseek.mjs:1-6วิธีใช้,:9-28การหาคีย์,:47-48โมเดลscripts/provision-postgres.mjs:1-5สร้าง SQL ลงscripts/sql- ดูเพิ่ม: สร้างฐาน PostgreSQL และชุดสคริปต์ SQL (provision-postgres.mjs, scripts/sql) · ตัวเฝ้าใบงาน IssueMate: กติกาปลุก ตอบเป็นชุด ด่านตรวจก่อนดีพลอย (wait_for_issue.py) · Chaos Lab: ห้องทำงานเสมือนยิงรายการพร้อมกันเพื่อทดสอบกฎบัญชี (UAT Chaos Lab) · ระบบ UAT ภาพรวม: บอททดสอบอัตโนมัติและ Chaos Lab (UAT System Overview) · ระบบทดสอบ ภาพรวม: บอท UAT, Stagehand, Playwright และ Go test (Tests Overview) · ระบบ AI Copilot ภาพรวม (AI System Overview) · การ build และ deploy backend: Docker, Kubernetes, Makefile (Deployment)