สร้างเว็บไซต์แรกและเผยแพร่เนื้อหา
ขั้นตอนนี้ใช้หน้าผู้ดูแล CMS และ API อ่านข้อมูลสาธารณะ ไม่ใช่แบ็กเอนด์ที่แยกออกแล้ว โมเดล article, ฟิลด์ title, slug hello และโฮสต์ www.example.com เป็นตัวอย่าง ให้แทนด้วยค่าที่สร้างจริง
1. ติดตั้งและรับบัญชีผู้ดูแล
หัวข้อที่มีชื่อว่า “1. ติดตั้งและรับบัญชีผู้ดูแล”ทำ การติดตั้ง ให้เสร็จ เปิดลิงก์รับบัญชีผู้ดูแลแบบใช้ครั้งเดียวแล้วตั้งรหัสผ่าน อย่าใส่ข้อมูลลับสำหรับดีพลอยลงในเนื้อหาหรือภาพหน้าจอ หากใช้ชุดข้อมูลตัวอย่างในเครื่อง ให้ทำตาม การตั้งค่ารีโพซิทอรี แทน บัญชีตัวอย่างในเครื่องไม่ใช่บัญชีสำหรับระบบจริง
2. สร้างหรือเลือกเว็บไซต์
หัวข้อที่มีชื่อว่า “2. สร้างหรือเลือกเว็บไซต์”เมื่อสร้างเว็บไซต์ ให้เลือก เว็บไซต์ หรือ บล็อก เปลี่ยนตัวเลือกนี้ภายหลังไม่ได้ เว็บไซต์ที่เลือก บล็อก จะได้โมเดล Post เริ่มต้นหนึ่งโมเดลและหน้าจอ โพสต์ ดู เว็บไซต์บล็อก ขั้นตอนนี้ใช้ตัวเลือก เว็บไซต์
เลือกเว็บไซต์เป้าหมายก่อนแก้ไข ตั้งค่าโฮสต์สาธารณะและภาษาในส่วนตั้งค่าเว็บไซต์ เลือกภาษาหลักและนโยบายภาษาแบบ strict หรือ fallback การเลือกเว็บไซต์กำหนดขอบเขตคำขอผู้ดูแล ส่วน Worker สาธารณะระบุเว็บไซต์จากโฮสต์ของคำขอ โฮสต์โดยตรงของ Worker ไม่ได้กลายเป็นโฮสต์เว็บไซต์โดยอัตโนมัติ
3. กำหนดโมเดล Article
หัวข้อที่มีชื่อว่า “3. กำหนดโมเดล Article”ในตัวสร้างโมเดล สร้าง article เพิ่มฟิลด์ข้อความ title ที่จำเป็น แล้วใช้โมเดล ตรวจสอบคำเตือนการเปลี่ยนแปลงที่อาจกระทบข้อมูลก่อนยืนยัน เลือกการมองเห็นแบบสาธารณะเฉพาะข้อมูลที่เปิดเผยได้ ข้อมูลอ้างอิงฟิลด์ อธิบายความสัมพันธ์ สื่อ และคอมโพเนนต์ โมเดล Article ทั่วไปไม่ได้กลายเป็นหน้าเว็บที่แสดงผลโดยอัตโนมัติ
4. บันทึกและตรวจทานเนื้อหา
หัวข้อที่มีชื่อว่า “4. บันทึกและตรวจทานเนื้อหา”เปิด เนื้อหา เลือกโมเดล สร้างรายการในภาษาที่ต้องการ กรอกชื่อเรื่อง และตั้ง slug เป็น hello บันทึกฉบับร่าง การบันทึกไม่ใช่การเผยแพร่ เปิดรายการอีกครั้งเพื่อตรวจว่าข้อมูลถูกบันทึก หากเปิดโหมดตรวจทาน ให้ส่งตามขั้นตอนที่หน้าจอแสดงและให้ผู้มีสิทธิ์อนุมัติ อย่าข้ามการเปลี่ยนสถานะที่ระบบปฏิเสธ
5. เผยแพร่และตรวจสอบ
หัวข้อที่มีชื่อว่า “5. เผยแพร่และตรวจสอบ”ใช้การเปลี่ยนสถานะเผยแพร่ที่ระบบอนุญาตด้วยบทบาทที่มีสิทธิ์ จากเซิร์ฟเวอร์หรือเทอร์มินัล เรียกโฮสต์สาธารณะของเว็บไซต์:
curl --fail --silent --show-error 'https://www.example.com/v1/article/hello?locale=en'เมื่อสำเร็จ คำตอบมีรายการที่เผยแพร่แล้วอยู่ใน data รายการที่เป็นเพียงร่างจะไม่เป็นสาธารณะ โฮสต์ที่ไม่รู้จัก โมเดลส่วนตัว ภาษาที่ไม่มี หรือ slug ที่ยังไม่ได้เผยแพร่อาจตอบ 404 อ่าน เหตุผลการปฏิเสธของ API สาธารณะ ก่อนเปลี่ยนการมองเห็นหรือสิทธิ์เพื่อแก้ปัญหา
6. เชื่อมตัวแสดงผลและตรวจสอบการถอนเผยแพร่
หัวข้อที่มีชื่อว่า “6. เชื่อมตัวแสดงผลและตรวจสอบการถอนเผยแพร่”เชื่อมฟรอนต์เอนด์ตาม คู่มือ client และพรีวิว เว็บไซต์ที่แสดงผลต้องมีการบิลด์และดีพลอยของตัวเอง การเผยแพร่รายการ CMS เพียงอย่างเดียวไม่ได้ยืนยันว่าหน้าเว็บถูกดีพลอยแล้ว ถอนเผยแพร่รายการตัวอย่างที่ลบได้ และตรวจว่าหายจาก API สาธารณะ รวมถึง ระบบค้นหา หลังสร้างดัชนีใหม่สำเร็จ การรวบรวมข้อมูลค้นหาที่ล้มเหลวต้องไม่แทนที่ดัชนีเดิมที่ใช้งานอยู่
ขั้นตอนถัดไป: เลือกวิธีที่เว็บไซต์ทำงาน
หัวข้อที่มีชื่อว่า “ขั้นตอนถัดไป: เลือกวิธีที่เว็บไซต์ทำงาน”การใช้งานประจำวันไม่ต้องตั้งค่าเพิ่ม CMS ยังให้บริการเนื้อหาของคุณขณะที่คุณแก้ไขและเผยแพร่ ทำต่อด้วย เครื่องมือสร้างหน้า, บล็อก, โมเดลและฟิลด์ และ ผู้ใช้และสิทธิ์เข้าถึง
แบ็กเอนด์อิสระเป็นทางเลือก เลือกเมื่อคุณต้องการรีโพซิทอรีของตัวเองที่มี API Worker ฐานข้อมูล และการดีพลอยที่สร้างให้เท่านั้น ระบบสร้างจากเว็บไซต์ที่มีอยู่แล้ว จึงตัดสินใจภายหลังได้ ดู สิ่งที่ Dee Wan สร้างให้
เริ่มจากโปรเจกต์ Astro ที่แก้ไขได้
หัวข้อที่มีชื่อว่า “เริ่มจากโปรเจกต์ Astro ที่แก้ไขได้”จากรากรีโพซิทอรี สร้างโปรเจกต์เริ่มต้นในไดเรกทอรีใหม่หรือว่าง:
npm run reference:starter -- --out ../my-website --config ./starter-config.jsoncd ../my-websitenpm cinpm run checknpm run buildnpm run preview -- --port 4321ใช้ Node เวอร์ชันที่ระบุใน .nvmrc และสร้าง starter-config.json ก่อนรันคำสั่ง:
{ "site_id": "YOUR_SITE_ID", "canonical_origin": "https://YOUR_PUBLIC_CMS_HOST", "routes": { "format": 1, "routes": [{ "model": "YOUR_PAGE_MODEL", "path": "/{locale}/{slug}" }] }}แทนค่าตัวพิมพ์ใหญ่ด้วย ID เว็บไซต์ ที่อยู่ API สาธารณะ และ slug โมเดลหน้าของคุณ ชื่อโฮสต์ของ API ต้องตรงกับโดเมนที่ตั้งไว้สำหรับเว็บไซต์ เพราะ API สาธารณะเลือกเว็บไซต์จากชื่อโฮสต์ ไม่ใช่ site_id แต่ละเส้นทางต้องมี {slug} และเพิ่ม {locale} หากต้องการให้ภาษาอยู่ในที่อยู่เว็บ สำหรับบล็อกให้เพิ่ม "blog": true หากใช้ CMS ในเครื่อง ให้ระบุ "local": true ใช้ที่อยู่ loopback ของ API และตั้งโดเมนเว็บไซต์ให้ตรงกับชื่อโฮสต์นั้น เช่น 127.0.0.1 ส่วนตัวเว็บไซต์ให้ใช้คนละพอร์ต ระบบปฏิเสธฟิลด์ตั้งค่าที่ไม่รู้จัก
โปรเจกต์มีเวอร์ชันแพ็กเกจที่ตรึงไว้พร้อม lockfile ซอร์ส Astro การตั้งค่า Wrangler และข้อมูลความเข้ากันได้ของสัญญาหน้าและโปรโตคอลตัวแสดงผลปัจจุบัน แก้เค้าโครงและสไตล์ใน src/template/ และใช้ npm run dev -- --port 4321 ระหว่างพัฒนา รันไทม์อ่านเนื้อหาที่เผยแพร่ สื่อ ฟอร์ม และการค้นหาผ่าน API สาธารณะที่มีอยู่ ลิงก์ภาษาอื่นใช้ที่อยู่ที่เผยแพร่จริง SEO และ rich block ที่รองรับใช้ตัวแสดงผลเดียวกับเว็บไซต์แบบจัดการและการแสดงตัวอย่าง ไม่มีโทเค็นจัดการ CMS ฐานข้อมูล หรือเซิร์ฟเวอร์ปลั๊กอินอยู่ในโปรเจกต์
ซอร์สที่สร้างเป็นของคุณ เมื่ออัปเดต CMS ให้สร้างโปรเจกต์ใหม่ในไดเรกทอรีอื่น แล้วรวมไฟล์รันไทม์และสัญญาฉบับใหม่เข้าด้วยกันโดยเก็บการแก้ไขเทมเพลตของคุณ ตัวสร้างไม่เขียนทับเว็บไซต์เดิม โปรเจกต์นี้อ่านเนื้อหาปัจจุบันจาก CMS ส่วนการส่งมอบแบบแยกอิสระ ใช้ส่งออกแบ็กเอนด์และสำเนาเนื้อหา การบิลด์ในเครื่องไม่ได้ดีพลอยเว็บไซต์หรือยืนยันผลบนผู้ให้บริการ
ฟอร์มส่งข้อมูลไปยังปลายทางสาธารณะที่กำหนดไว้บนเว็บไซต์เอง ระบบรันเว็บไซต์แบบพกพาจะจำกัดขนาดคำขอแล้วส่งต่อไปยัง CMS ตามที่อยู่ที่ตั้งไว้ จากนั้น CMS จะเก็บข้อมูลและจัดส่งผ่านบริการฟอร์มเดิม คำขอจากเบราว์เซอร์ต้องมาจากเว็บไซต์นั้น และจะไม่ส่งต่อข้อมูลรับรองของผู้ดูแล
เว็บไซต์อ้างอิง: รันซ้ำในเครื่อง
หัวข้อที่มีชื่อว่า “เว็บไซต์อ้างอิง: รันซ้ำในเครื่อง”รีโพซิทอรีมีเว็บไซต์อ้างอิงสมมติชื่อ Meridian Review เป็นชุดที่เลือกไว้แน่นอนจาก seed corpus (scripts/seed-corpus/reference-site.ts) ประกอบด้วยภาษาอังกฤษและเยอรมัน โพสต์บล็อกที่แปลแล้วสามโพสต์พร้อมภาพปก และหน้าที่ประกอบขึ้นหนึ่งหน้าซึ่งมีส่วนเนื้อหาหลากหลายและภาพสามภาพ ไม่มีส่วนใดในนั้นอธิบายองค์กรจริง
การทดสอบหนึ่งรายการสร้างเว็บไซต์นี้ตั้งแต่ต้นจนจบบนฐานข้อมูลใหม่ รันจาก backend/ ด้วย Node เวอร์ชันใน .nvmrc:
DEEWAN_SITE_BUILD=1 npx vitest run test/reference-site-acceptance.test.ts --maxWorkers=1 --no-file-parallelismการทดสอบติดตั้งไลบรารีของไซต์และบิลด์จริง จึงใช้เวลาหลายนาทีและต้องให้เครื่องว่างจากงานอื่น ใช้พอร์ต 43261 ถึง 43263 หากต้องการย้ายพอร์ตให้ตั้ง DEEWAN_SITE_BUILD_REFERENCE_PORT หากไม่มี DEEWAN_SITE_BUILD=1 การทดสอบจะถูกข้าม และการทดสอบที่ถูกข้ามไม่พิสูจน์อะไร
ตามลำดับ การทดสอบจะ:
- สร้างไซต์จากไมเกรชันของรีโพซิทอรี พร้อมทั้งสองภาษา บล็อก และโมเดลหน้า;
- อัปโหลดภาพ สร้างและเผยแพร่โพสต์กับหน้า;
- ออกลิงก์พรีวิวที่บันทึกไว้สำหรับฉบับร่าง และตรวจว่ามีเพียงลิงก์นั้นที่เปิดฉบับร่างได้;
- สร้างไซต์ บิลด์ และให้บริการผ่าน Wrangler;
- ตรวจที่อยู่หน้าและโพสต์ตามภาษา เนื้อหาหลากหลาย และภาพในผลลัพธ์ที่บิลด์แล้ว;
- เพิ่มฟิลด์ของโมเดล เผยแพร่โพสต์ เปลี่ยนชื่อหน้า แล้วสร้างใหม่ทับปลายทางเดิม จากนั้นตรวจว่าไฟล์ที่คุณเป็นเจ้าของไม่เปลี่ยนแม้แต่ไบต์เดียว มีการเพิ่มไมเกรชัน และไมเกรชันที่ใช้แล้วไม่ถูกเขียนทับ;
- บิลด์ใหม่และตรวจว่าหน้าที่เปลี่ยนชื่อแล้วถูกให้บริการ;
- เผยแพร่การแก้ไขที่ผิด กู้เวอร์ชันก่อนหน้า และตรวจว่าบล็อกแสดงต้นฉบับ;
- ทำสำเนาสำรอง SQLite ของฐานข้อมูล และตรวจว่าการสร้างจากสำเนาให้ข้อมูลไซต์เดียวกัน โดยไม่นับเวลาสร้างและเวลาแก้ไข
การกู้คืนในที่นี้คือการกู้เวอร์ชันของรีโพซิทอรีและสำเนาสำรองที่การสร้างไซต์อ่านได้ รีโพซิทอรีไม่มีคำสั่งกู้คืนคำสั่งเดียว ดูการสำรองและกู้คืน
นี่เป็นหลักฐานในเครื่องเท่านั้น การตรวจรับเว็บไซต์อ้างอิงที่ติดตั้งจริงรอการอนุญาตและยังไม่ได้รัน ต้องมีบัญชี Cloudflare (Workers, D1, R2) รีโพซิทอรี GitHub และชื่อโฮสต์ และรวมถึงการกู้คืนด้วยเครื่องมือของผู้ให้บริการ ในการรันในเครื่อง ภาพไปที่ที่เก็บแบบบันทึก ไม่ใช่ R2 อย่าถือว่าการรันในเครื่องที่ผ่านเป็นหลักฐานของการติดตั้งจริง
ยังไม่เปิดตัว (pre-MVP) และยังไม่มีเวอร์ชันเสถียร
คอมมิตซอร์สโค้ด: fe23db481c422b40e317b92fc98116b4c0c26a87 (มีการแก้ไขที่ยังไม่คอมมิต)
วันที่สร้างเอกสาร (UTC): 2026-10-18T09:22:34.630Z
คอมมิตสำหรับอัปเกรด: ระบุไม่ได้: มีการแก้ไขที่ยังไม่คอมมิต. บันทึกการเปลี่ยนแปลง