☁️ อัปเดตระบบ + Version Control
จัดการเวอร์ชั่นของระบบ — ติดตั้งอัปเดต สร้าง migration ใหม่ ดูประวัติ
ในหน้านี้
เมนู: อัปเดตระบบ
อัปเดตจากเซิร์ฟเวอร์ (คลิกเดียว)
เมนู จัดการระบบ → อัปเดตระบบ → การ์ด อัปเดตจากเซิร์ฟเวอร์
- กด ตรวจสอบอัปเดต — ระบบอ่าน
manifest.jsonจากเซิร์ฟเวอร์อัปเดต (ค่าเริ่มต้นhttp://update.madewithai.store/waypoint· กด "แก้ไข" เพื่อเปลี่ยน) - อ่านรายการเปลี่ยนแปลงของเวอร์ชันใหม่ แล้วกด ติดตั้ง vX.Y.Z
- ระบบจะ ① ดาวน์โหลดแพ็กเกจจากเซิร์ฟเวอร์เดียวกันเท่านั้น ② ตรวจ sha256 (ไม่ตรง = ยกเลิก ไม่มีไฟล์ใดถูกเปลี่ยน) ③ สำรองไฟล์ที่จะถูกเขียนทับไว้ที่
storage/backups/update-เวอร์ชัน-วันเวลา/④ อัปเดตไฟล์ ⑤ อัปเดตฐานข้อมูลตามเวอร์ชันที่ยังไม่ได้ติดตั้ง
ไม่ถูกเขียนทับเด็ดขาด:
config/database.php, config/app.php, config/app_key.php, .htaccess, uploads/, storage/, install/ก่อนอัปเดต: สำรองฐานข้อมูล · อัปเดตนอกเวลาที่มีลูกค้าใช้งาน · เซิร์ฟเวอร์ต้องมี PHP extension
zip และออกอินเทอร์เน็ตได้ — ถ้าอัปเดตแล้วมีปัญหา คัดลอกไฟล์จาก storage/backups/ กลับได้สำหรับผู้พัฒนา: ออกเวอร์ชันใหม่
- สร้าง
database/versions/vX.Y.Z.sql(ใส่-- @version/@name) และ release notes ที่versions/notes/X.Y.Z.txt - รัน
./versions/build.sh→ ได้versions/waypoint-install-X.Y.Z.zip(ตัวติดตั้ง) และversions/update/ - อัปโหลดเนื้อหาใน
versions/update/(manifest.json, packages/, notes/) ขึ้นupdate.madewithai.store/waypoint/— ทุกเว็บที่ติดตั้งไว้จะเห็นเวอร์ชันใหม่เมื่อกดตรวจสอบ
แนวคิด
ระบบมีการเปลี่ยนแปลง schema ของฐานข้อมูลตลอด — Version Control ช่วยให้:
- Track ว่าระบบอยู่เวอร์ชั่นไหน (เก็บใน
settings.app_version) - ติดตั้งอัปเดตใหม่ทีละขั้น โดยไม่ทำลายของเดิม
- สร้าง migration script เก็บไว้ สำหรับ deploy ที่อื่น
- ประวัติการติดตั้ง ทุกครั้ง — รู้ว่าใครติดตั้งเมื่อไหร่ ผลเป็นยังไง
โครงสร้างไฟล์
/database/versions/
v1.0.0.sql ← Initial schema
v1.1.0.sql ← เพิ่มระบบรับส่งของ + GPS
v1.2.0.sql ← ระบบ CMS + announcements
v1.3.0.sql ← (ของคุณเอง)
...
แต่ละไฟล์มี header metadata และ SQL statements
ติดตั้งเวอร์ชั่นใหม่
Dashboard ด้านบน
| Card | แสดงอะไร |
|---|---|
| 🟢 เวอร์ชั่นปัจจุบัน | v1.2.0 + แจ้งว่ามี update ไหม |
| 🔵 เวอร์ชั่นทั้งหมด | จำนวนไฟล์ใน /versions/ |
| 🟡 ติดตั้งทั้งหมด | จำนวนครั้งที่ install (รวม reinstall) |
ตารางเวอร์ชั่นที่มี
- แสดงทุกเวอร์ชั่น เรียงจากใหม่สุด
- Badge สถานะ: ติดตั้งแล้ว / เวอร์ชั่นเก่า / พร้อมติดตั้ง
- ปุ่ม "ติดตั้ง" สำหรับเวอร์ชั่นใหม่กว่าปัจจุบัน
- ปุ่ม "ติดตั้งซ้ำ" สำหรับเวอร์ชั่นเดียวกับปัจจุบัน
- ปุ่ม 👁️ ดู SQL — popup แสดง content ของไฟล์
ขั้นตอนติดตั้ง
- คลิก "ติดตั้ง" บนเวอร์ชั่นที่ต้องการ
- Confirm prompt ("ติดตั้งเวอร์ชั่น 1.3.0?")
- ระบบรัน SQL ในไฟล์ทุกบรรทัด
- UPDATE
settings.app_version= เวอร์ชั่นใหม่ - INSERT ลง
app_versions— บันทึกประวัติ - ถ้า error → status=failed + log error
ระวัง: SQL ของบาง version อาจเปลี่ยน schema (เพิ่ม column, เปลี่ยน type) — แนะนำ backup database ก่อนติดตั้ง production
สร้างเวอร์ชั่นใหม่
กดปุ่ม "+ สร้างเวอร์ชั่นใหม่" มุมขวาบน → modal เปิด
- Version — รูปแบบ semver X.Y.Z (default: เวอร์ชั่นถัดไปอัตโนมัติ)
- ชื่อเวอร์ชั่น — เช่น "เพิ่มระบบรายงานใหม่"
- รายละเอียด — คำอธิบายการเปลี่ยนแปลง
- SQL Migration — เขียน SQL ที่จะรัน:
-- ตัวอย่าง SQL migration
ALTER TABLE bookings ADD COLUMN coupon_code VARCHAR(20);
CREATE TABLE IF NOT EXISTS coupons (
id INT AUTO_INCREMENT PRIMARY KEY,
code VARCHAR(20) UNIQUE,
discount_pct INT DEFAULT 0,
expires_at DATE
) ENGINE=InnoDB;
INSERT INTO settings (setting_key, setting_value) VALUES
('coupon_enabled', '1');
- กด "สร้าง" → ระบบสร้างไฟล์
/database/versions/vX.Y.Z.sqlพร้อม header อัตโนมัติ
Header ที่ระบบสร้างให้
-- @version: 1.3.0
-- @name: เพิ่มระบบรายงานใหม่
-- @notes: คำอธิบายที่กรอก
-- @released: 2026-05-17 14:30:00
USE busticket_db;
-- (SQL content ที่กรอก)
รูปแบบไฟล์ Version
ไฟล์ vX.Y.Z.sql ต้องมี comment header สี่บรรทัด:
| Comment | ใช้ทำอะไร |
|---|---|
-- @version: X.Y.Z | ระบุเวอร์ชั่น (semver) |
-- @name: Title | ชื่อเวอร์ชั่นที่แสดงในตาราง |
-- @notes: Description | คำอธิบายการเปลี่ยนแปลง |
-- @released: YYYY-MM-DD HH:MM:SS | วันที่ปล่อย |
หลัง header วาง SQL statements ปกติ:
- คั่นด้วย
;ตามปกติ - Comments
-- ...ถูกตัดออกอัตโนมัติก่อนรัน - ใช้
CREATE TABLE IF NOT EXISTSและINSERT ... ON DUPLICATE KEY UPDATEให้ idempotent (รันซ้ำได้)
ประวัติการติดตั้ง
ส่วนล่างของหน้า — ตาราง app_versions เรียงล่าสุดก่อน:
| คอลัมน์ | ข้อมูล |
|---|---|
| เวอร์ชั่น | v1.2.0 |
| ชื่อ | ระบบ CMS |
| ผู้ติดตั้ง | admin |
| เวลา | 17 พ.ค. 2569 12:30 |
| สถานะ | installed / failed / rolled_back |
ถ้า failed จะมี error log แสดงด้านล่าง — debug ได้ทันที
💡 Best practice:
- ทดสอบ migration บน dev environment ก่อน production
- Backup database ก่อนติดตั้ง
- เขียน SQL ให้ idempotent (รันซ้ำได้โดยไม่ผิดพลาด)
- เก็บไฟล์ versions/ ลง git เพื่อ track
