คู่มือกู้คืนเว็บไซต์แบบสแตนด์อโลน
วิธีกู้คืนข้อมูลและสื่อของเว็บไซต์แบบสแตนด์อโลนด้วยเครื่องมือของผู้ให้บริการเอง Dee Wan ไม่มีบริการสำรองข้อมูล โครงการนี้ยังไม่เคยรันขั้นตอนใดในหน้านี้กับ deployment จริง ซ้อมกับสำเนาที่ทิ้งได้ก่อนพึ่งพาขั้นตอนเหล่านี้
คำสั่ง Wrangler ด้านล่างเป็นของ Cloudflare ตรวจพารามิเตอร์และข้อจำกัดของ D1 เมื่อ 2026-10-19 กับเอกสารอ้างอิงคำสั่ง R2, คู่มือนำเข้าและส่งออก D1 และเอกสารอ้างอิง D1 Time Travel รีโพซิทอรีนี้รันเองเฉพาะ wrangler d1 export (scripts/d1.ts)
สิ่งที่ต้องกู้คืน
หัวข้อที่มีชื่อว่า “สิ่งที่ต้องกู้คืน”| ส่วน | อยู่ที่ไหน | กู้คืนด้วย |
|---|---|---|
| โค้ด | รีโพซิทอรีของคุณ | Git คอมมิตระบุโค้ดชุดนั้น |
| แถวเนื้อหาที่สร้าง | ตารางที่สร้างในฐานข้อมูล D1 ของคุณ | โหลด snapshot ที่คอมมิตใหม่ (npm run data:load) หรือกู้คืนฐานข้อมูล |
| แถวของคุณเอง | ตารางของคุณเองในฐานข้อมูล D1 เดียวกัน | กู้คืนฐานข้อมูลเท่านั้น |
| สื่อ | R2 bucket หรือไดเรกทอรีแบบสาธารณะและส่วนตัวของคุณ หากย้ายสื่อมาอยู่ในความดูแลของคุณแล้ว | สำเนาไฟล์ต้นฉบับและไฟล์ขนาดต่าง ๆ ของคุณเอง |
| บันทึกการส่งออก | ไดเรกทอรีของบัญชีรายการและไฟล์ส่งออกที่เก็บไว้ | สำเนา graduation.exports.json, snapshot และ manifest ของสื่อ |
| Secret | repository secret และ Worker secret ของคุณ | ที่เก็บ secret ของคุณ ห้ามอยู่ในไฟล์สำรอง |
การย้อนกลับโค้ดในส่วน การตั้งค่า ไม่ได้กู้คืนแถวหรือสื่อข้างต้นเลย
เก็บข้อมูลสำรอง
หัวข้อที่มีชื่อว่า “เก็บข้อมูลสำรอง”หยุดกระบวนการที่เขียนข้อมูลก่อน ได้แก่ งานของคุณเองและการดีพลอยจาก CMS มายังเว็บไซต์นี้
ส่งออกฐานข้อมูลเป็นไฟล์:
npx wrangler d1 export <database-name> --remote --output backup-<date>.sqlระหว่างส่งออก คำขออื่นที่เข้าฐานข้อมูลจะถูกบล็อก และ Cloudflare ไม่ส่งออกฐานข้อมูลที่มี virtual table ค่าตัวเลขผ่าน number ของ JavaScript จำนวนเต็มที่เกินความแม่นยำ 52 บิตจึงอาจเปลี่ยน
บันทึกคอมมิตของรีโพซิทอรีที่ดีพลอย เวลาที่ส่งออก และ checksum ของไฟล์ เก็บ graduation.exports.json พร้อม snapshot และไฟล์ data/media-manifest.json ของชุดส่งออกที่บัญชีรายการคุ้มครอง ได้แก่ ชุดที่ใช้งานอยู่ ชุดสำหรับย้อนกลับ ชุดที่ปักหมุด และชุดที่ยังอยู่ในนโยบายเก็บตามอายุและจำนวน ดูการเก็บรักษาชุดส่งออก
สำหรับ manifest ของสื่อแต่ละชุดที่ต้องเก็บ ให้คัดลอกอ็อบเจกต์ตาม destinationKey ของแต่ละรายการและ variants[].destinationKey ทั้งหมด พร้อมเก็บ checksum และขนาดที่บันทึกไว้ ข้ามรายการที่มี outcome: "external" เพราะไฟล์ยังอยู่กับผู้ให้บริการภายนอกและไม่มีอ็อบเจกต์ปลายทางให้คัดลอก หากต้องสำรองไฟล์เหล่านั้น ให้ใช้เครื่องมือของผู้ให้บริการนั้นแยกต่างหาก
เลือกที่เก็บตามรายการ: visibility: "private" หมายถึง bucket หรือไดเรกทอรีส่วนตัว หากไม่มี visibility ให้ใช้ที่เก็บสาธารณะ ไฟล์ขนาดต่าง ๆ ใช้ที่เก็บเดียวกับรายการต้นฉบับ สำหรับ R2 ใช้ npx wrangler r2 object get <bucket>/<key> --remote --file <path> เพื่อดาวน์โหลดทีละอ็อบเจกต์ เก็บสำเนาไว้นอกที่เก็บเดิมและบันทึกว่าแต่ละไฟล์มาจาก bucket หรือไดเรกทอรีใด เก็บชนิดเนื้อหาและเมทาดาทาที่จำเป็นต่อการให้บริการไฟล์ด้วย
กู้คืนในสภาพแวดล้อมแยกก่อน
หัวข้อที่มีชื่อว่า “กู้คืนในสภาพแวดล้อมแยกก่อน”สร้างฐานข้อมูลใหม่และโหลดไฟล์ส่งออกเข้าไป:
npx wrangler d1 create <restore-database-name>npx wrangler d1 execute <restore-database-name> --remote --file backup-<date>.sqldeployment ที่สร้างหาฐานข้อมูลของตัวเองจากการตั้งค่า และโครงการนี้ไม่มีคำสั่งที่ชี้ไปยังสำเนาที่กู้คืน ให้ชี้การตั้งค่า Worker แยกที่ไม่ใช่ production ไปยังฐานข้อมูลที่กู้คืนเอง ดีพลอยคอมมิตที่บันทึกไว้ แล้วตรวจโดยมี API_BEARER_TOKEN ใน environment:
npm run verify:deployment -- --origin 'https://restore.example.com' --expect-commit <full-commit-sha>npm run verify:mediaverify:deployment เทียบเนื้อหาที่ดีพลอยกับ snapshot ที่คอมมิต verify:media ตรวจการอ้างอิงสื่อใน projection ที่คอมมิต ไม่ได้ดาวน์โหลดไบต์ เปิดหน้าและสื่อตัวอย่างด้วยตัวเอง
กู้คืนฐานข้อมูล D1 ณ เวลาที่กำหนด
หัวข้อที่มีชื่อว่า “กู้คืนฐานข้อมูล D1 ณ เวลาที่กำหนด”Cloudflare D1 Time Travel กู้คืนฐานข้อมูลในที่เดิมไปยังเวลาก่อนหน้า: ย้อนได้สูงสุด 30 วันบนแพ็กเกจ Workers Paid และ 7 วันบนแพ็กเกจ Workers Free --timestamp รับ Unix timestamp หรือเวลา RFC 3339 ที่มี timezone --bookmark รับ bookmark ที่ info แสดง
npx wrangler d1 time-travel info <database-name>npx wrangler d1 time-travel restore <database-name> --timestamp <time>คำสั่งนี้เขียนทับฐานข้อมูลจริง รวมถึงตารางของคุณเอง และยกเลิก query ที่กำลังทำงาน ส่งออกก่อน สคีมาที่กู้คืนอาจเก่ากว่าโค้ดที่ดีพลอย ตรวจว่า migration ของคอมมิตที่ดีพลอยตรงกับฐานข้อมูลที่กู้คืนก่อนให้บริการ traffic จากฐานนั้น
กู้คืนสื่อ
หัวข้อที่มีชื่อว่า “กู้คืนสื่อ”กู้คืนไฟล์ต้นฉบับและไฟล์ขนาดต่าง ๆ ด้วย key ปลายทางที่บันทึกไว้ ลงใน bucket หรือไดเรกทอรีสาธารณะหรือส่วนตัวที่ตรงกัน สำหรับ R2 ใช้ npx wrangler r2 object put <bucket>/<key> --remote --file <path> แล้วคืนค่าเมทาดาทาของอ็อบเจกต์ด้วยเครื่องมือของผู้ให้บริการ เทียบ checksum และขนาดของไฟล์ที่กู้คืนกับ manifest ห้ามนำไฟล์ส่วนตัวหรือไฟล์ขนาดต่าง ๆ ของมันไปไว้ในที่เก็บที่เปิดให้เข้าถึงแบบสาธารณะ
เก็บบัญชีรายการและไฟล์ส่งออกที่ต้องรักษาไว้พร้อมไฟล์ที่กู้คืน อย่ารันการล้างชุดส่งออกจนกว่าการตั้งค่าที่เก็บในบัญชีรายการจะตรงกับที่กู้คืน และไฟล์ของชุดส่งออกที่ได้รับการคุ้มครองจะครบถ้วน รายการจากผู้ให้บริการภายนอกต้องยังเปิด URL เดิมได้ การกู้คืนอ็อบเจกต์ของ CMS ไม่ได้กู้คืนไฟล์เหล่านั้น
ขณะที่ CMS ยังเก็บสื่อที่อ้างอิงอยู่ npm run backend:deliver พร้อม --media จะย้ายสื่อเป็นส่วนหนึ่งของการสร้างและส่งมอบแบบเต็ม ไฟล์ส่วนตัวต้องมีที่เก็บปลายทางส่วนตัวที่ตั้งค่าแยกไว้ คำสั่งนี้สร้างชุดส่งออกใหม่จากเนื้อหาที่เผยแพร่อยู่ในปัจจุบัน ไม่ได้กู้คืนชุดส่งออกเก่าหรือสื่อที่ CMS ไม่มีแล้ว
สลับใช้งาน
หัวข้อที่มีชื่อว่า “สลับใช้งาน”ชี้ production ไปยังสำเนาที่แยกไว้ หรือทำการกู้คืนซ้ำบน production หลังสำเนานั้นผ่านการตรวจเท่านั้น เก็บฐานข้อมูลเดิมไว้จนเจ้าของยอมรับผล เปิดกระบวนการที่เขียนข้อมูลกลับเป็นขั้นตอนสุดท้าย
ที่เกี่ยวข้อง: การย้อนกลับและการกู้คืน, การสำรองและกู้คืน CMS, คู่มือการแยกออก
ขั้นตอนถัดไป
หัวข้อที่มีชื่อว่า “ขั้นตอนถัดไป”ดู route การยืนยันตัวตน และพฤติกรรมการดีพลอยได้ใน เอกสารอ้างอิง API
ยังไม่เปิดตัว (pre-MVP) และยังไม่มีเวอร์ชันเสถียร
คอมมิตซอร์สโค้ด: e207e63239a627fbd2ae9c414ef7c6eb19fcfe5a (มีการแก้ไขที่ยังไม่คอมมิต)
วันที่สร้างเอกสาร (UTC): 2026-10-21T09:28:24.214Z
คอมมิตสำหรับอัปเกรด: ระบุไม่ได้: มีการแก้ไขที่ยังไม่คอมมิต. บันทึกการเปลี่ยนแปลง