ข้ามไปยังเนื้อหา
Pre-MVP โค้ดเบส 1.0 ยังไม่ใช่ผลิตภัณฑ์ที่เผยแพร่ — ดู ขอบเขตผลิตภัณฑ์ 1.0

การติดตั้ง Dee Wan

คู่มือนี้ติดตั้ง Dee Wan CMS ลงในบัญชี Cloudflare ของคุณเอง installation (การติดตั้ง Dee Wan หนึ่งชุด) ประกอบด้วย Worker ของผู้ดูแล, Worker สำหรับอ่านแบบสาธารณะ, UI ผู้ดูแลบน Cloudflare Pages, ฐานข้อมูล D1 ควบคุมหนึ่งชุด, พื้นที่เก็บสื่อ และข้อมูลรับรองที่อยู่เบื้องหลังสิ่งเหล่านี้ installation ถูกสร้างขึ้นครั้งเดียว มีลิงก์รับสิทธิ์ (claim link) หนึ่งลิงก์ และให้บริการได้หลาย ไซต์ (ดูคำศัพท์ของผลิตภัณฑ์)

มีเอนจินตัวติดตั้งเพียงตัวเดียว ซึ่งมีสองอินเทอร์เฟซ:

  • ตัวติดตั้งแบบเว็บ ตัวช่วยสี่ขั้นตอนที่ให้บริการจากเครื่องของคุณเอง (npm run install:web);
  • ตัวติดตั้งแบบบรรทัดคำสั่ง: npm run setup สำหรับการรันแบบโต้ตอบ และ npm run install:cms <verb> สำหรับการรันที่วางแผนได้ ทำต่อได้ และเขียนสคริปต์ได้

ทั้งสองแบบอ่านและเขียนไฟล์การตั้งค่าเดียวกัน คือ backend/wrangler.jsonc และบัญชีบันทึกขั้นตอน (step ledger) เดียวกัน และทั้งสองแบบรันรายการขั้นตอนเดียวกับที่ npm run plan แสดง

Dee Wan 1.0 อยู่ในสถานะก่อนเผยแพร่ (pre-release) การติดตั้งกับ Cloudflare จริงเป็นหนึ่งในเกณฑ์การยอมรับที่ ยังเปิดอยู่ ดูขอบเขตผลิตภัณฑ์ 1.0 ว่าอะไรครอบคลุมและอะไรไม่ ครอบคลุม

  • บัญชี Cloudflare ที่มี Workers, D1, Pages และ R2 หรือ Cloudflare Images
  • Node.js 22.14 ขึ้นไปในสาย 22 หรือ 24.10 ขึ้นไปในสาย 24 repository มีไฟล์ .nvmrc (24.18.1) มาให้ ดังนั้น nvm use จะเลือกเวอร์ชันที่ถูกต้อง
  • npm ตรงตามที่ package.json ประกาศไว้ (11.16.0) ซึ่งเป็น npm ที่มาพร้อมกับ Node ตาม .nvmrc
  • Git สำหรับ clone repository พร้อม submodule
  • (ไม่บังคับ) โดเมนของคุณเอง หากต้องการใช้ โดเมนนั้นต้องเป็นโซนในบัญชี Cloudflare เดียวกัน หากไม่มี installation จะใช้ที่อยู่ที่ Cloudflare จัดให้ (pages.dev และ workers.dev)
  • (ไม่บังคับ) DeepInfra API key หากคุณต้องการฟีเจอร์ AI คุณเพิ่มคีย์นี้หลังติดตั้ง

ไม่จำเป็นต้องใช้ Cloudflare Access (Zero Trust) ตัวติดตั้งทั้งสองแบบเสนอให้ใช้เป็นชั้นป้องกันเพิ่มเติมหน้า ส่วนผู้ดูแล และจะปิดอยู่จนกว่าคุณจะเปิดใช้

Terminal window
git clone --recurse-submodules <repository-url> dee-wan-cms
cd dee-wan-cms
node scripts/install-dependencies.mjs

ติดตั้ง dependency ด้วย node scripts/install-dependencies.mjs เสมอ ห้ามใช้ npm install หรือ npm ci เปล่า ๆ สคริปต์นี้ปฏิเสธ npm เวอร์ชันอื่น แตก dependency tree ที่ล็อกไว้ โดยปิด install script แล้ว rebuild เฉพาะแพ็กเกจที่สคริปต์ได้รับการอนุมัติแล้วเท่านั้น

clone ใหม่ไม่ต้อง build ด้วยมือ: setup, deploy และ migrate:d1 จะ build แพ็กเกจและ Prisma client ให้หากยังไม่มี

นี่คือขั้นตอนที่ตัวติดตั้ง (installer) รันตามลำดับ npm run plan แสดงรายการเดียวกันสำหรับ การตั้งค่าของคุณ พร้อมสถานะของแต่ละขั้นตอน

ขั้นตอน สิ่งที่สร้างหรือทำ
ตรวจสอบ Node และ Wrangler ตรวจสอบเท่านั้น
ตรวจสอบโทเค็น Cloudflare API ตรวจสอบเท่านั้น
เลือกบัญชี Cloudflare ตรวจสอบเท่านั้น
ตรวจสอบก่อนเริ่ม — ขอบเขตของโทเค็น แพ็กเกจ ทรัพยากรที่มีอยู่ ตรวจสอบเท่านั้น หยุดการรันก่อนสร้างสิ่งใดหากการตรวจสอบไม่ผ่าน
สร้างฐานข้อมูลควบคุม D1 ฐานข้อมูล D1 (ชื่อเริ่มต้น dee-wan-cms-db)
ใช้การย้ายฐานข้อมูลกับ D1 schema พร้อมบทบาท (role) และ workflow ที่ seed ไว้
จัดเตรียมบักเก็ตส่วนตัวสำหรับไฟล์นำเข้า บักเก็ต R2 ส่วนตัวสำหรับไฟล์ archive ที่นำเข้า เฉพาะเมื่อคุณเลือก
เชื่อมต่อเว็บไซต์แรกกับชื่อโฮสต์ hostname สาธารณะสำหรับไซต์แรก
สร้าง UI ผู้ดูแล build เท่านั้น
ติดตั้งอินเทอร์เฟซผู้ดูแลไปยัง Pages โปรเจกต์ Pages (ชื่อเริ่มต้น dee-wan-cms)
ติดตั้ง Worker สำหรับผู้ดูแล Worker (ชื่อเริ่มต้น dee-wan-cms-backend)
สร้างและเก็บความลับสำหรับลงนามเซสชัน Worker secret
จัดเตรียมพื้นที่เก็บสื่อ บักเก็ตสื่อ R2 หรือ binding ของ Cloudflare Images
ติดตั้ง API สาธารณะ Worker สำหรับอ่านแบบสาธารณะ (ตั้งชื่อตาม Worker ของผู้ดูแลโดยต่อท้ายด้วย -public) และ hostname ของมัน
สร้างและเก็บคีย์ลงนามโทเค็นเว็บไซต์ Worker secret บน Worker ของผู้ดูแลและ Worker สาธารณะ
เชื่อมเส้นทางของ Worker Worker route บนโซนของคุณ เฉพาะเมื่อใช้โดเมนของคุณเอง
ชี้ DNS ไปยังการติดตั้ง DNS record ภายใต้โดเมนของคุณ เฉพาะเมื่อใช้โดเมนของคุณเองและเปิดการตั้งค่า DNS
วาง Cloudflare Access ไว้หน้าระบบผู้ดูแล แอปพลิเคชันและนโยบายของ Access เฉพาะเมื่อคุณเปิด Access
ตรวจสอบว่าการติดตั้งตอบสนอง ตรวจสอบเท่านั้น
ออกลิงก์รับสิทธิ์สำหรับผู้ดูแลระบบคนแรก ลิงก์ใช้ครั้งเดียว แสดงเพียงครั้งเดียว

ทรัพยากรอย่าง Workers, โปรเจกต์ Pages, ฐานข้อมูล D1 และบักเก็ต R2 เป็นทรัพยากร Cloudflare ที่มีค่าใช้จ่ายในบัญชีที่คุณเลือก

เมื่อใช้โดเมนของคุณเอง โดยค่าเริ่มต้น UI ผู้ดูแลจะให้บริการที่ cms.<your-domain> และ API สาธารณะที่ content.<your-domain> หากไม่มีโดเมน UI ผู้ดูแลจะให้บริการที่ <pages-project>.pages.dev และ API สาธารณะที่ <admin-worker>-public.<your-workers.dev-subdomain>.workers.dev

ตัวติดตั้งแบบเว็บ ตัวติดตั้งแบบบรรทัดคำสั่ง
เริ่มด้วย npm run install:web npm run setup หรือ npm run install:cms -- <verb>
อินเทอร์เฟซ หน้าเบราว์เซอร์บน 127.0.0.1 ที่ให้บริการจากเครื่องของคุณ คำถามในเทอร์มินัล หรือไม่มีคำถามเลยเมื่อใช้ --yes
ข้อมูลรับรอง Cloudflare การเข้าสู่ระบบ Cloudflare (OAuth) เก็บไว้ในหน่วยความจำตลอดเซสชัน API token ที่คุณสร้างเอง จาก environment, .env หรือจากคำถาม
ต้องมี แอปพลิเคชัน Cloudflare OAuth ที่ตั้งค่าไว้สำหรับ build นี้ (ดูด้านล่าง) Cloudflare API token ที่มีสิทธิ์ตามรายการ
การวางแผนและการเขียนสคริปต์ แสดงสิ่งที่จะถูกสร้างก่อนคุณติดตั้ง plan, เอาต์พุต --json และ exit code ที่กำหนดตายตัว
ทำต่อหลังหยุด ปุ่ม ดำเนินการต่อ npm run install:cms -- resume หรือรัน setup อีกครั้ง

การเข้าสู่ระบบ Cloudflare ของตัวติดตั้งแบบเว็บต้องใช้แอปพลิเคชัน Cloudflare OAuth ที่ลงทะเบียนไว้ ตัวติดตั้งอ่าน client id จาก DEEWAN_CF_OAUTH_CLIENT_ID Dee Wan 1.0 ไม่ได้มาพร้อม แอปพลิเคชันที่ลงทะเบียนไว้ ดังนั้นหากคุณไม่มีแอปพลิเคชันและไม่ได้ตั้งตัวแปรนั้น ขั้นตอน Cloudflare จะแสดง “ต้องตั้งค่าการเข้าสู่ระบบ Cloudflare” และบอกให้คุณใช้ตัวติดตั้งแบบบรรทัดคำสั่งแทน คุณยัง ไล่ดูตัวช่วยได้ด้วย npm run install:web:dry-run ซึ่งไม่แตะต้องสิ่งใดเลย

Terminal window
npm run install:web

เซิร์ฟเวอร์ listen บน 127.0.0.1 เท่านั้น ที่พอร์ต 8976 เว้นแต่จะตั้ง DEEWAN_INSTALL_PORT ไว้ และแสดงลิงก์หนึ่งลิงก์:

Dee Wan installer
Open this link. It is bound to this session and is not written to disk:
http://127.0.0.1:8976/?t=<session-token>

token ในลิงก์ถูกสร้างขึ้นสำหรับการรันครั้งนี้ ทุก request ต้องมี token นี้ ดังนั้นหน้าเว็บหรือ โปรแกรมอื่นบนเครื่องเดียวกันจึงควบคุมตัวติดตั้งไม่ได้ request ที่ไม่มี token จะได้รับ “This installer is bound to one session. Open the link printed in the terminal.” กด Ctrl-C ในเทอร์มินัลเมื่อ ใช้งานเสร็จ

หลังเข้าสู่ระบบ Cloudflare จะส่งเบราว์เซอร์กลับไปที่ http://127.0.0.1:<port>/oauth/cloudflare และ ที่อยู่นี้ต้องตรงกับที่ลงทะเบียนไว้กับแอปพลิเคชัน OAuth ทุกประการ DEEWAN_CF_OAUTH_REDIRECT ใช้แทนที่ค่านี้ได้

หน้านี้มีตัวเลือก ภาษา ได้แก่ อังกฤษ ไทย รัสเซีย สเปน ฝรั่งเศส และเยอรมัน ภาษาที่คุณใช้ติดตั้งจะกลายเป็นภาษาเริ่มต้นของไซต์แรกด้วย

ตัวช่วยมีสี่ขั้นตอน: เว็บไซต์, Cloudflare, ผู้ดูแลระบบ และ ติดตั้ง ดำเนินการต่อ บันทึกขั้นตอนปัจจุบันก่อนไปต่อ และ ย้อนกลับ กลับไปยังขั้นตอนก่อนหน้า

ตัวติดตั้งแบบเว็บ ขั้นตอนเว็บไซต์: installation จะอยู่บนโดเมนของตัวเอง

จะติดตั้งไว้ที่ไหน มีสองคำตอบ:

  • บนโดเมนของฉันเอง: กรอกโดเมนใน โดเมนของคุณ เช่น example.com
  • บนที่อยู่ที่ Cloudflare จัดให้: เว้นโดเมนว่างไว้

ขั้นตอนนี้ไม่ถามอะไรอีก ชื่อโครงสร้างพื้นฐานและฟีเจอร์เสริมมีค่าเริ่มต้นที่ใช้งานได้ และ อยู่ในขั้นตอนติดตั้ง

ตัวติดตั้งแบบเว็บ ขั้นตอน Cloudflare: เชื่อมต่อสำหรับเซสชันนี้แล้ว เลือกแพ็กเกจ D1 แล้ว

  1. ภายใต้ เชื่อมต่อ Cloudflare เลือก อนุญาต Cloudflare ซึ่งจะเปิด Cloudflare ในแท็บใหม่ ลิงก์จะถูกปิดใช้งานขณะที่คุณมีการเปลี่ยนแปลงที่ยังไม่ได้บันทึก (“บันทึกการตั้งค่าของคุณก่อนเชื่อมต่อ”)
  2. อนุมัติคำขอ จากนั้นแท็บจะแสดง Connected และระบุว่าตัวติดตั้งถือข้อมูลรับรอง Cloudflare สำหรับเซสชันนี้เท่านั้น ปิดแท็บแล้วกลับไปที่ตัวติดตั้ง ซึ่งการ์ดจะแสดง เชื่อมต่อสำหรับเซสชันนี้เท่านั้น
  3. เลือกบัญชีภายใต้ บัญชี Cloudflare ใด แล้วเลือก ใช้บัญชีนี้ หากการ เข้าสู่ระบบของคุณเข้าถึงได้เพียงบัญชีเดียว ระบบจะเลือกให้ ทุกสิ่งที่ installation สร้างขึ้นจะ เรียกเก็บเงินกับบัญชีนี้
  4. เลือก แพ็กเกจฐานข้อมูล D1: ฟรี หรือ แบบเสียเงิน Cloudflare ไม่มีวิธีเปิดเผยให้อ่านได้ว่า บัญชีใช้แพ็กเกจใด และสองแพ็กเกจเก็บเนื้อหาได้ในปริมาณต่างกัน ดังนั้น ตัวติดตั้งจึงถามแทนการเดา

ขอสิทธิ์อะไรบ้าง แสดงรายการขอบเขต (scope) ของ Cloudflare ที่การเข้าสู่ระบบขออย่างแม่นยำ ซึ่งขึ้นอยู่ กับคำตอบของคุณ:

เมื่อใด Scope
เสมอ account-settings.read, d1.write, workers-scripts.write, page.write, workers-r2.write
เมื่อใช้โดเมนของคุณเอง zone.read, workers-routes.write
เมื่อใช้โดเมนของคุณเองและเปิดการตั้งค่า DNS dns.write
เมื่อเปิด Cloudflare Access access.write, access-acct.read, access-service-token.write

หากภายหลังคุณเปลี่ยนการตั้งค่าที่ทำให้สิทธิ์ที่ต้องใช้เปลี่ยนไป ตัวติดตั้งจะทิ้งการอนุญาตเดิม และแสดง “บันทึกแล้ว การเปลี่ยนนี้ทำให้สิทธิ์ที่ต้องใช้เปลี่ยนไป กรุณาเชื่อมต่อ Cloudflare อีกครั้ง”

ปุ่มดำเนินการต่อจะถูกปฏิเสธจนกว่าจะเชื่อมต่อ Cloudflare และเลือกบัญชีแล้ว

ข้อมูลรับรองถูกเก็บไว้ในหน่วยความจำของตัวติดตั้ง ไม่ได้เขียนลงดิสก์ หากหมดอายุ หน้านี้จะแสดง “การเชื่อมต่อหมดอายุ เชื่อมต่ออีกครั้งเพื่อดำเนินการต่อ” การอนุญาตอีกครั้งไม่กระทบสิ่งใด ที่สร้างไว้แล้ว

กรอก อีเมลผู้ดูแลระบบ หนึ่งที่อยู่ ลิงก์ลงชื่อเข้าใช้ครั้งแรก (ลิงก์รับสิทธิ์) จะผูกกับ ที่อยู่นี้ และมีเพียงที่อยู่นี้เท่านั้นที่รับสิทธิ์ installation ได้

ตัวติดตั้งแบบเว็บ ขั้นตอนติดตั้ง: การตรวจสอบที่อยู่ตามแผนและทุกสิ่งที่จะถูกสร้างขึ้น

ตรวจสอบ แสดงสิ่งที่คุณตัดสินใจ: ที่อยู่, ที่อยู่สำหรับลงชื่อเข้าใช้ตามแผน, ที่อยู่เว็บไซต์ตามแผน, บัญชี Cloudflare, แพ็กเกจฐานข้อมูล D1 และผู้ดูแลระบบ จะถูกสร้างขึ้น แสดงทุกขั้นตอนที่จะสร้างบางสิ่งและยังไม่ได้ทำ

ปรับแต่งโครงสร้างพื้นฐาน เปิดการตั้งค่าที่เหลือ:

การตั้งค่า ค่าเริ่มต้น
ที่ที่คุณเข้าสู่ระบบ (ซับโดเมนของผู้ดูแล) cms
ที่ที่เว็บไซต์ของคุณอ่านข้อมูล (ซับโดเมนของ API สาธารณะ) content
ชี้โดเมนของคุณมาที่การติดตั้งนี้ เปิด ต้องใช้โดเมนของคุณเอง
ขอให้เข้าสู่ระบบ Cloudflare ก่อนเข้าหน้าผู้ดูแล (Cloudflare Access) ปิด ต้องใช้โดเมนของคุณเอง
จำกัดความถี่ที่ผู้เข้าชมหนึ่งคนอ่านเนื้อหาของคุณได้ ปิด ต้องใช้โดเมนของคุณเอง
ชื่อบริการ (Worker ของผู้ดูแล) dee-wan-cms-backend
ชื่อโปรเจกต์ (โปรเจกต์ Pages) dee-wan-cms
ซับโดเมน workers.dev ของคุณ ว่าง ใช้สำหรับที่อยู่ของ API สาธารณะเมื่อคุณไม่มีโดเมน
จำนวนวินาทีที่เก็บคำตอบของเว็บไซต์ 0 ซึ่งทำให้ผู้อ่านทุกคนเห็นเนื้อหาล่าสุด
เตรียมบักเก็ตสำหรับนำเข้าเนื้อหาจากระบบอื่นด้วย ปิด

ส่วนผู้ดูแลและเว็บไซต์ต้องใช้ซับโดเมนต่างกัน หากคุณเปิด Access ให้สังเกตคำเตือนสองข้อ ที่หน้านี้แสดง: ทุกคนที่คุณเชิญต้องมีรายชื่ออยู่ในนโยบาย Cloudflare Access ด้วย และหาก แอปพลิเคชัน Access ถูกลบหรือตั้งค่าผิด ทุกคนจะเข้าใช้งานไม่ได้ ข้อจำกัดผู้เข้าชมยัง มีผลกับการอ่านแบบส่วนตัวด้วย รวมถึงการ build ไซต์ที่อ่านจากที่อยู่ IP เดียว

หน้าตรวจสอบยังระบุด้วยว่ารายงานข้อผิดพลาดจะถูกส่งไปยังโปรเจกต์ Sentry ของ Dee Wan (ประเภทข้อผิดพลาด, ข้อความ ที่ทำความสะอาดแล้ว, stack trace และ route; ไม่มีเนื้อหา ค่าที่กรอกในฟอร์ม อีเมล หรือข้อมูลรับรองเด็ดขาด) คุณปิด ได้ภายหลังใน Settings → Integrations → Error reports หรือโดยตั้งตัวแปรของ Worker DEEWAN_ERROR_REPORTING เป็น off

หากคุณแก้ไขการตั้งค่าในขั้นตอนนี้ ปุ่มหลักจะเปลี่ยนเป็น บันทึกการเปลี่ยนแปลง เมื่อบันทึกทุกอย่าง แล้ว ให้เลือก ติดตั้ง

ตัวติดตั้งปฏิเสธที่จะเริ่มการรันด้วยการตั้งค่าที่คุณยังไม่ได้ตรวจสอบ หากไฟล์การตั้งค่า เปลี่ยนไประหว่างที่เปิดหน้านี้อยู่ จะแสดง “การตั้งค่าเปลี่ยนไประหว่างที่เปิดหน้านี้ ยังไม่มีการเริ่มสิ่งใด ตรวจสอบแล้วลองใหม่”

การบันทึกแต่ละครั้งจะเขียนคำตอบของคุณลงใน backend/wrangler.jsonc (หรือไฟล์ที่ระบุด้วย --config) และคงคอมเมนต์ทั้งหมดในไฟล์ไว้ หากไฟล์ยังไม่มี จะสร้างไฟล์ใหม่ การเลือก บัญชีจะเขียน account_id ไฟล์นี้ถูก gitignore เพราะเก็บค่าจริงของคุณ ตัวติดตั้งแบบเว็บ แก้ไขการตั้งค่า wrangler.toml ไม่ได้ ให้แปลงเป็น wrangler.jsonc หรือใช้ ตัวติดตั้งแบบบรรทัดคำสั่ง

การรันติดตั้งเองคือเอนจินบรรทัดคำสั่ง: หน้านี้เริ่ม install:cms apply (หรือ resume) ด้วย --yes โดยส่งข้อมูลรับรอง Cloudflare จากการเข้าสู่ระบบของคุณ มันทำทุกอย่างที่ npm run setup ทำ รวมถึงการเขียน backend/wrangler.public.jsonc สำหรับ Worker สำหรับอ่านแบบสาธารณะ

แผงข้างตัวช่วยแสดง สิ่งที่จะเกิดขึ้น ก่อนการรัน ความคืบหน้า ระหว่างรัน และ สิ่งที่ทำเสร็จแล้ว เมื่อเสร็จสิ้น รายละเอียดทางเทคนิค แสดงบันทึกของตัวติดตั้ง โดยลบ ข้อมูลรับรองออกแล้ว

หน้านี้จะ poll ต่อเนื่องระหว่างที่การรันดำเนินอยู่ หากคุณโหลดหน้าใหม่ จะกลับมาที่การรันเดิม หากขาด การติดต่อกับตัวติดตั้ง จะแสดง “ขาดการเชื่อมต่อกับตัวติดตั้ง ระบบอาจยังทำงานอยู่ โปรดโหลดหน้านี้ใหม่”

หากการรันหยุด แผงจะบอกว่าหยุดที่ใด (“หยุดที่: …”) และต้องทำอะไรต่อ:

  • หากบางขั้นตอนเสร็จแล้ว: “ความคืบหน้าของคุณถูกบันทึกไว้แล้ว ทำต่อได้เมื่อคุณพร้อม” เลือก ดำเนินการต่อ ขั้นตอนที่เสร็จแล้วจะไม่ถูกทำซ้ำ
  • หากยังไม่มีสิ่งใดถูกสร้าง: “ยังไม่มีสิ่งใดถูกสร้างขึ้น ติดตั้งอีกครั้งได้เมื่อคุณพร้อม” เลือก ติดตั้ง

การรันที่จบลงโดยยังมีงานเหลือ (exit code 4, incomplete) จะถูกรายงานเป็น “ยังไม่เสร็จ” และ ไม่ถือว่าสำเร็จ ตรวจสอบบันทึก แก้สิ่งที่บันทึกระบุ แล้วทำต่อ

ตัวติดตั้งแบบเว็บ เสร็จสิ้น: ทุกขั้นตอนเสร็จแล้วและปุ่มสร้างผู้ดูแลระบบ

แผงแสดง Worker, ที่อยู่ของผู้ดูแล และที่อยู่ของ API สาธารณะที่ตอบสนอง และ หน้าจะแสดง สร้างผู้ดูแลระบบ ปุ่มนี้เปิดลิงก์รับสิทธิ์ในแท็บใหม่ ซึ่งคุณตั้ง รหัสผ่านได้ ดูรับสิทธิ์ installation

ลิงก์รับสิทธิ์จะไม่แสดงในบันทึกเลย หน้าเสนอลิงก์ผ่านปุ่มนั้นเท่านั้น เฉพาะขณะที่ ลิงก์ยังใช้ได้ และเพียงครั้งเดียว

Terminal window
npm run install:web:dry-run

คำสั่งนี้ให้บริการหน้าเดียวกันเพื่อการตรวจดู โดยแทนที่ผลกระทบภายนอกทั้งหมด การตั้งค่าและ ledger อยู่ในโฟลเดอร์ชั่วคราวที่ถูกลบเมื่อกด Ctrl-C การค้นหาบัญชีและการรันติดตั้ง เป็นแบบจำลองตามสคริปต์ และไม่มีสิ่งใดไปถึง Cloudflare คำสั่งนี้ listen ที่พอร์ต 8978 เว้นแต่จะตั้ง DEEWAN_INSTALL_PORT ไว้ การเข้าสู่ระบบจะเสร็จเมื่อคุณเปิดลิงก์เข้าสู่ระบบที่แสดงตอนเริ่ม อย่ากด อนุญาต Cloudflare ซึ่งจะเปิด Cloudflare ด้วย client id ตัวยึดตำแหน่ง

ตัวติดตั้งแบบบรรทัดคำสั่งต้องใช้ Cloudflare API token npm run setup จะถามหา token หากยังไม่ได้ ตั้งไว้ และแสดงรายการสิทธิ์พร้อมเหตุผลของแต่ละข้อ รวมถึงลิงก์ไปยังตัวแก้ไข token ของ Cloudflare ที่เลือกสิทธิ์เหล่านั้นไว้ล่วงหน้า และยังบอกให้คุณรวมทุกบัญชีและทุกโซน

สิทธิ์ เหตุผล
Account · Account Settings · Read หาบัญชีที่ทรัพยากรสังกัดอยู่
Account · D1 · Edit สร้างฐานข้อมูลและใช้ migration
Account · Workers Scripts · Edit deploy API Worker
Account · Cloudflare Pages · Edit สร้างและ deploy โปรเจกต์ UI ผู้ดูแล
Account · Workers R2 Storage · Edit สร้างบักเก็ตสื่อ
Account · Access: Service Tokens · Edit ออก service token ที่ Workers ใช้
Account · Zero Trust · Edit สร้างแอปพลิเคชัน Access ที่ป้องกันส่วนผู้ดูแล
Zone · Zone · Read ระบุโซนที่โดเมนของคุณสังกัดอยู่
Zone · DNS · Edit ชี้ hostname ไปที่ Worker
Zone · Workers Routes · Edit route hostname ไปยัง Worker
User · API Tokens · Edit ตรวจสอบตัว token เอง
Zone · WAF · Edit (optional) ติดตั้งกฎ auth และกฎ rate-limit ของ API สาธารณะ (ถ้าเลือกใช้)

npm run doctor แสดงรายการเดียวกันเมื่อไม่มี token หรือ token ขาดสิทธิ์ ทั้งสองมา จาก scripts/cloudflare-token-scopes.ts ดังนั้น token ที่สร้างตามที่ doctor ขอจะเป็น token ที่ setup ยอมรับ หากคุณใช้ Cloudflare Images, setup แนะนำให้ใช้ token แยกที่มีเพียงสิทธิ์ Cloudflare Images: Edit

หากต้องการข้ามคำถาม ให้ตั้ง token และบัญชีใน environment:

Terminal window
export CLOUDFLARE_API_TOKEN=# skips the token prompt
export CLOUDFLARE_ACCOUNT_ID=# skips the account picker

ข้อมูลรับรองจะถูกหาตามลำดับนี้: ตัวแปรที่ export ใน shell ของคุณ จากนั้นไฟล์ .env ของ repository จากนั้นค่าใน backend/wrangler.jsonc เมื่อ environment แทนที่ค่า ที่ต่างกันใน config ตัวติดตั้งจะแจ้งให้ทราบ

token จะถูกตรวจสอบก่อนสร้างสิ่งใด การรันแบบโต้ตอบให้ลองได้สามครั้ง การรันแบบ ไม่โต้ตอบจะหยุดที่ความล้มเหลวครั้งแรก ไม่ว่ากรณีใด token ที่ตรวจสอบไม่ผ่านหมายความว่า จะไม่มีการสร้างทรัพยากร Cloudflare ใด ๆ

secret ของแอปพลิเคชันจะไม่ถูกเก็บใน wrangler.jsonc เด็ดขาด ดู Secrets

Terminal window
npm run setup

setup พาคุณผ่านการติดตั้งและบันทึกแต่ละคำตอบลงใน backend/wrangler.jsonc ไปเรื่อย ๆ ดังนั้นการรันครั้งที่สองจะไม่ถามซ้ำ ตามลำดับ มันจะ:

  1. หาหรือสร้าง backend/wrangler.jsonc และหา token กับบัญชี หาก token เข้าถึงได้หลายบัญชี จะถามว่าจะใช้บัญชีใด
  2. ถามว่าบัญชีใช้แพ็กเกจ D1 ใด (Free, 500 MB ต่อฐานข้อมูล; Paid, 10 GB ต่อฐานข้อมูล)
  3. รัน preflight และแสดงรายงาน หากการตรวจสอบไม่ผ่าน จะหยุดก่อนสร้างสิ่งใด (“Setup stopped before creating any Cloudflare resources. Fix the FAIL rows above.”) หากจะมีการสร้าง หรือแก้ไขทรัพยากร จะขอให้คุณยืนยัน
  4. ถามว่า installation จะอยู่ที่ใด (โดเมนของคุณเอง หรือที่อยู่ที่ Cloudflare จัดให้) จากนั้นถามโดเมน ซับโดเมนของผู้ดูแล (ค่าเริ่มต้น cms) และซับโดเมนของ API เนื้อหาสาธารณะ (ค่าเริ่มต้น content)
  5. ถามว่าจะตั้งค่า DNS หรือไม่ จะตั้งค่า Cloudflare Access หรือไม่ (ค่าเริ่มต้น ไม่) และจะ ติดตั้งกฎ rate-limiting บน API สาธารณะหรือไม่ (ค่าเริ่มต้น ไม่)
  6. ถามชื่อโปรเจกต์ Pages และชื่อ Worker
  7. ถามผู้ให้บริการพื้นที่เก็บข้อมูล Cloudflare R2 หรือ Cloudflare Images สำหรับ R2 จะสร้าง บักเก็ต (ค่าเริ่มต้น dee-wan-cms-images) เปิดการเข้าถึงแบบสาธารณะผ่านที่อยู่ r2.dev ที่ Cloudflare จัดการ หรือโดเมนสื่อที่กำหนดเอง และตรวจสอบว่าไฟล์ที่อัปโหลดให้บริการได้จริง
  8. ถามว่าจะเปิดการนำเข้าข้อมูลหรือไม่ ซึ่งจะสร้างบักเก็ต R2 ส่วนตัวสำหรับไฟล์ archive ที่อัปโหลด (ค่าเริ่มต้น ไม่)
  9. สร้างฐานข้อมูล D1 และเสนอให้ใช้ schema (ค่าเริ่มต้น ใช่) การติดตั้งใหม่ไม่ต้องมี ขั้นตอน migrate แยก
  10. build และ deploy UI ผู้ดูแล, Worker ของผู้ดูแล และ Worker สำหรับอ่านแบบสาธารณะ เก็บ Worker secret และเชื่อม route, DNS record และแอปพลิเคชัน Access ที่คุณเลือก มัน เขียน backend/wrangler.public.jsonc เมื่อบัญชี โซน และ database id ได้ข้อสรุปแล้ว และ ไม่เขียนทับไฟล์ที่มีอยู่แล้วเด็ดขาด
  11. เสนอให้รัน health check
  12. ถามอีเมลของผู้ดูแลระบบคนแรก หากยังไม่ได้ตั้ง BOOTSTRAP_ADMIN_EMAIL และ แสดงลิงก์รับสิทธิ์

จบด้วย “Setup complete!” สรุปการตั้งค่า และขั้นตอนถัดไป หากขาดส่วนที่จำเป็น จะจบด้วย “Setup did not complete” และระบุสิ่งที่ขาดแทน

setup ยังรับ --access / --no-access และ --public-rate-limit / --no-public-rate-limit เพื่อตอบคำถามเหล่านั้นทางบรรทัดคำสั่ง เช่น npm run setup -- --no-access

Terminal window
npm run plan
npm run plan -- --json

plan แสดงทุกขั้นตอนที่ installation จะทำ และสถานะที่แต่ละขั้นตอนอยู่แล้ว มัน ทำงานจาก config และ ledger บนดิสก์เท่านั้น: ไม่แตะเครือข่าย ไม่สร้างสิ่งใด และ ไม่มีค่าใช้จ่าย --json แสดงแผนที่เครื่องอ่านได้พร้อม planVersion

แต่ละขั้นตอนมีสถานะใดสถานะหนึ่งต่อไปนี้:

เครื่องหมาย สถานะ ความหมาย
done บันทึกว่าเสร็จแล้ว
to do จะรัน
not applicable ข้ามสำหรับการตั้งค่านี้ พร้อมเหตุผล
blocked ยังรันไม่ได้ เช่น เพราะไม่พบ Cloudflare API token
? unresolved การรันครั้งก่อนขอสิ่งนี้แล้วไม่เคยบันทึกคำตอบ หรือล้มเหลว apply ตรวจสอบบัญชีก่อนทำซ้ำ และปฏิเสธแทนการเดา
re-checked การตรวจสอบที่รันทุกครั้งที่ apply
Terminal window
npm run install:cms -- <verb> [options]
คำสั่งย่อย สิ่งที่ทำ เปลี่ยนแปลงบัญชี
plan บอกว่าการติดตั้งจะทำอะไร เหมือนกับ npm run plan ไม่
apply รันการติดตั้ง ใช่ สร้างทรัพยากรที่มีค่าใช้จ่าย
resume ทำต่อการติดตั้งที่หยุดกลางทาง ปฏิเสธหากยังไม่มีขั้นตอนใดเสร็จ ใช่ สร้างทรัพยากรที่มีค่าใช้จ่าย
doctor ตรวจสอบก่อนเริ่ม ไม่เปลี่ยนแปลงสิ่งใด ไม่
verify ทดสอบ deployment ตั้งแต่ต้นจนจบ ห้ามชี้ไปที่ production เด็ดขาด ให้เพิ่ม --read-only ที่นั่น สร้างไซต์ โมเดล และเนื้อหา เว้นแต่ใช้ --read-only
teardown ลบสิ่งที่การติดตั้งสร้างขึ้น เป็น dry run เว้นแต่ส่ง --apply เฉพาะเมื่อใช้ --apply
manifest แสดงบันทึกการติดตั้งที่ปกปิดข้อมูลแล้ว (บัญชี ชื่อทรัพยากร ประวัติขั้นตอน) สำหรับส่งมอบ ไม่มีข้อมูลรับรองอยู่เลย ไม่

apply และ resume รันเอนจินเดียวกับ npm run setup step ledger คือสิ่งที่ทำให้ การรันครั้งที่สองทำต่อแทนการทำซ้ำ: แต่ละขั้นตอนที่เสร็จจะถูกบันทึกในไฟล์ ledger ที่ root ของ repository หนึ่งไฟล์ต่อหนึ่งบัญชี Cloudflare (.dee-wan-cms-install.<account>.json) ไฟล์ ledger ที่อ่านได้ไม่ครบจะหยุดการรันแทนที่จะถูกเพิกเฉย

ตัวเลือก:

ตัวเลือก ความหมาย
--config <file> installation ที่จะดำเนินการ ค่าเริ่มต้น wrangler.jsonc ชื่อเปล่า ๆ จะถูกค้นหาใน backend/
--account <id> บัญชี Cloudflare เป้าหมาย ระบุอย่างชัดเจน ทุกขั้นตอนที่คำสั่งย่อยรันจะถูกตรึงไว้กับบัญชีนี้
--json เอาต์พุตที่เครื่องอ่านได้ มีผลเท่ากับ --yes
--yes, -y ไม่ถามเลย ล้มเหลวแทนการถาม

verify ยังส่งต่อ --read-only, --public, --admin, --email, --model และ --disposable ส่วน teardown ส่งต่อ --apply และ --yes ตัวเลือกอื่นใด ตัวเลือกที่ซ้ำ หรือตัวเลือกที่ให้ค่าว่าง (เช่น --account= จากตัวแปร shell ที่ไม่ได้ตั้ง) จะถูก ปฏิเสธ ไม่ใช่ถูกเพิกเฉย

apply, resume, teardown และ verify (เว้นแต่ใช้ --read-only) ต้องมีบัญชี โดยจะใช้ จาก --account จากนั้น CLOUDFLARE_ACCOUNT_ID จากนั้น account_id ใน config และปฏิเสธหาก ไม่ได้ระบุไว้เลย

install:cms จบด้วย code ที่กำหนดตายตัว เพื่อให้สคริปต์แยกทางตามผลลัพธ์ได้:

Code ชื่อ ความหมาย สิ่งที่ต้องทำ
0 ok การติดตั้งเสร็จสมบูรณ์ ไม่ต้องทำอะไร
1 usage บรรทัดคำสั่งผิด หรือ resume ไม่พบสิ่งที่จะทำต่อ แก้คำสั่ง
2 blocked ขาดสิ่งที่มีแต่คุณเท่านั้นที่ให้ได้ เช่น token หรือบัญชี ให้สิ่งนั้น แล้วรันอีกครั้ง
3 failed การรันพัง อ่านเอาต์พุตและแก้สาเหตุก่อนทำซ้ำ
4 incomplete การรันไม่พัง แต่ยังมีงานเหลือ ลองใหม่ได้อย่างปลอดภัยตามเดิม ปกติด้วย resume
5 unresolved มีขั้นตอนที่เริ่มแล้วแต่ไม่ทราบผล ตรวจดูบัญชีก่อนทำซ้ำสิ่งใด

plan ใช้ code เดียวกันเพื่ออธิบายสถานะปัจจุบัน: 2 เมื่อมีขั้นตอนที่ blocked, 5 เมื่อมีขั้นตอนที่ unresolved, 4 เมื่อมีงานเหลือ และ 0 เมื่อทุกอย่างเสร็จแล้ว

เมื่อใช้ --yes, --json, DEEWAN_YES=1 หรือ CI=true ทุกคำถามจะใช้ค่าเริ่มต้น คำถาม ที่ไม่มีค่าเริ่มต้นที่ปลอดภัยจะเป็นข้อผิดพลาดที่ระบุการตั้งค่าที่ต้องเพิ่ม แทนการเดา:

  • installation อยู่ที่ใด: ตั้ง "DOMAIN_MODE": "custom" พร้อม "DOMAIN" หรือ "DOMAIN_MODE": "cloudflare" ภายใต้ vars ใน backend/wrangler.jsonc
  • แพ็กเกจ D1: ตั้ง "D1_PLAN": "free" หรือ "paid" ภายใต้ vars หรือ export D1_PLAN
  • บัญชี เมื่อ token เข้าถึงได้หลายบัญชี: ตั้ง account_id ใน config หรือ export CLOUDFLARE_ACCOUNT_ID
  • ผู้ดูแลระบบคนแรก: ตั้ง BOOTSTRAP_ADMIN_EMAIL ภายใต้ vars การรันแบบไม่มีผู้ดูแลจะไม่ ถามค่านี้ และหากไม่มีค่านี้ จะออกลิงก์รับสิทธิ์ไม่ได้

ตัวอย่าง:

Terminal window
npm run install:cms -- apply --account <account-id> --json

ชื่อทรัพยากรเริ่มต้น (dee-wan-cms-backend, dee-wan-cms-db และอื่น ๆ) กำหนดตายตัว ดังนั้นสอง installation ในบัญชี Cloudflare เดียวกันจะชนกัน ตั้ง DEEWAN_RESOURCE_PREFIX เพื่อแยก namespace ของทุก ทรัพยากรที่การรันจัดเตรียม:

Terminal window
DEEWAN_RESOURCE_PREFIX=test-a1b2 npm run setup # creates test-a1b2-dee-wan-cms-db, …
DEEWAN_RESOURCE_PREFIX=test-a1b2 npm run teardown # dry run; only touches test-a1b2-*

prefix ต้องเป็นตัวอักษรพิมพ์เล็ก ตัวเลข และขีดกลาง ขึ้นต้นด้วยตัวอักษรหรือตัวเลข และยาวไม่เกิน 24 ตัวอักษร เมื่อตั้งไว้ teardown จะข้ามและรายงานทรัพยากรใดก็ตามที่ชื่อไม่มี prefix นี้

ตั้งค่านี้สำหรับ installation ใหม่ ไม่ใช่ installation ที่มีอยู่แล้ว Wrangler หาฐานข้อมูล D1 จากชื่อใน backend/wrangler.jsonc ดังนั้น prefix จะใช้ได้ก็ต่อเมื่อ setup เขียนชื่อที่มี prefix ลงใน ไฟล์นั้นแล้วเท่านั้น ดู การรันตัวติดตั้งกับบัญชีที่ใช้ร่วมกัน

จะยังไม่มีใครมีบัญชีจนกว่า installation จะถูกรับสิทธิ์ ตัวติดตั้งออกลิงก์รับสิทธิ์แบบใช้ครั้งเดียว ที่ผูกกับอีเมลผู้ดูแลระบบ:

  • ตัวติดตั้งแบบเว็บเสนอลิงก์ผ่าน สร้างผู้ดูแลระบบ;
  • npm run setup แสดงลิงก์หนึ่งครั้ง พร้อมที่อยู่ที่ลิงก์เป็นของ และเวลาที่หมดอายุ

เปิดลิงก์และตั้งรหัสผ่านอย่างน้อย 12 ตัวอักษร ซึ่งจะสร้าง superadmin และคุณจะ เข้าสู่ระบบทันที ลิงก์หมดอายุหลัง 15 นาทีและแสดงเพียงครั้งเดียว เก็บไว้เพียง hash ของลิงก์ ดังนั้น จึงแสดงซ้ำไม่ได้

หากลิงก์หมดอายุก่อนมีคนใช้ ให้รันตัวติดตั้งอีกครั้ง (ดำเนินการต่อ ในตัวติดตั้ง แบบเว็บ, npm run install:cms -- resume หรือ npm run setup) ลิงก์รับสิทธิ์ที่หมดอายุนับว่ายัง ไม่เสร็จ ดังนั้นการรันจะออกลิงก์ใหม่ตราบใดที่ installation ยังไม่ถูกรับสิทธิ์

npm run claim:link -- --remote --email <address> คือทางฉุกเฉินสำหรับภายหลัง: มันออก ลิงก์ตั้งรหัสผ่านเฉพาะให้ superadmin ที่ active เพียงคนเดียวเท่านั้น ไม่สามารถสร้างผู้ดูแลระบบคนแรกได้ ดู การลงชื่อเข้าใช้และการกลับเข้าระบบ

  • npm run health รันการตรวจสอบหลัง deploy กับที่อยู่ที่ deploy แล้ว เมื่อเปิด Access ไว้ จะ ตรวจสอบชั้นป้องกันด้วย
  • npm run verify -- --read-only --public <public-api-url> ตรวจสอบ deployment โดยไม่เขียน สิ่งใด เพิ่ม --model <slug> เพื่ออ่านโมเดลที่เผยแพร่แล้วหนึ่งโมเดล
  • npm run verify โดยไม่มี --read-only จะสร้างไซต์ โมเดล และเนื้อหา ใช้กับ deployment ที่ทิ้งได้เท่านั้น
  • npm run doctor คือ preflight แบบอ่านอย่างเดียวที่ระบุสิ่งที่ขาดและวิธีแก้
  • npm run plan ควรรายงานว่าไม่มีอะไรเหลือให้ทำ

secret ตั้งด้วย wrangler secret put จากไดเรกทอรี backend/ ไม่ใช่ในไฟล์เด็ดขาด ตัวอย่างเช่น ฟีเจอร์ AI ต้องใช้คีย์ DeepInfra:

Terminal window
npx wrangler secret put DEEPINFRA_API_KEY

ดู Secrets สำหรับรายการทั้งหมด

ตัวติดตั้ง deploy ทุกอย่างครั้งเดียว หลังจากคุณเปลี่ยนโค้ดหรือการตั้งค่า ให้ deploy อีกครั้ง:

Terminal window
npm run deploy # admin Worker, admin UI and the public read Worker
npm run health

deploy ปฏิเสธที่จะรันหากไม่มี backend/wrangler.public.jsonc installation ที่ตั้งใจ ไม่ให้บริการเนื้อหาสาธารณะใช้ npm run deploy -- --admin-only ในการ deploy ดู Deploy

เมื่อ release ถัดไปเพิ่ม database migration ให้ใช้ด้วย npm run migrate:d1 ดู Database migration

npm run teardown ลบทรัพยากรที่ระบุชื่อไว้ใน config ของ installation: Workers, โปรเจกต์ Pages, ฐานข้อมูล D1, บักเก็ต R2, แอปพลิเคชัน Access และ DNS record เป็น dry run เว้นแต่ คุณส่ง --apply

Terminal window
npm run teardown -- --config backend/wrangler.jsonc # list what would be deleted
npm run teardown -- --config backend/wrangler.jsonc --apply # delete it
  • หากไม่มี --config, teardown จะปฏิเสธเว้นแต่ตั้ง DEEWAN_RESOURCE_PREFIX ไว้ จึงไม่มีทาง เล็งไปที่ installation เริ่มต้นโดยไม่ตั้งใจ
  • ทุกทรัพยากรจะถูกแสดงรายการก่อนลบสิ่งใด ทรัพยากรที่มีอยู่แต่ไม่ได้ระบุชื่อใน config จะถูกรายงานและข้ามไป
  • ก่อนลบฐานข้อมูล D1 จะเสนอให้ export แต่ละฐานข้อมูลเป็นไฟล์ .sql บนเครื่อง (ค่าเริ่มต้น ใช่) หาก export ที่คุณขอล้มเหลว จะไม่มีการลบสิ่งใด
  • เพื่อยืนยัน คุณต้องพิมพ์ ชื่อ บัญชี Cloudflare
  • แบบไม่มีผู้ดูแล (--yes หรือ CI=true) คุณต้องส่ง --export-dir <directory> หรือ --skip-export และ --confirm-account <name>
  • หลังจากนั้น backend/wrangler.jsonc ยังเก็บ identifier เดิมไว้ ให้ลบไฟล์นี้ก่อน ติดตั้งใหม่

npm run install:cms -- teardown รันสคริปต์เดียวกันสำหรับ config และบัญชีที่เลือก และ ส่งต่อเฉพาะ --apply และ --yes สำหรับตัวเลือกแบบไม่มีผู้ดูแลข้างต้น ให้รัน npm run teardown โดยตรง

เริ่มด้วย npm run doctor และ npm run plan doctor ระบุสิ่งที่ขาดและวิธีแก้ plan แสดงว่าขั้นตอนใดเสร็จแล้ว เหลืออยู่ blocked หรือ unresolved โดยไม่แตะเครือข่าย

ตัวติดตั้งแบบเว็บแจ้งว่าพอร์ตถูกใช้อยู่ มีโปรเซสอื่น ซึ่งมักเป็นตัวติดตั้งตัวที่สอง listen อยู่บนพอร์ตนั้น ปิดโปรเซสนั้น หรือตั้ง DEEWAN_INSTALL_PORT เป็นพอร์ตที่ว่าง ไม่มีสิ่งใดถูกสร้าง ในบัญชีใด หากคุณใช้แอปพลิเคชัน Cloudflare OAuth ที่อยู่ redirect ที่ลงทะเบียนไว้ต้อง ตรงกับพอร์ตใหม่

หน้าแสดง “This installer is bound to one session.” เปิดลิงก์ที่แสดงใน เทอร์มินัลให้ตรงทุกตัวอักษร ตัวติดตั้งที่รีสตาร์ตจะแสดงลิงก์ใหม่

ขั้นตอน Cloudflare แสดง “ต้องตั้งค่าการเข้าสู่ระบบ Cloudflare” build นี้ไม่มีแอปพลิเคชัน Cloudflare OAuth (ไม่ได้ตั้ง DEEWAN_CF_OAUTH_CLIENT_ID) ให้ใช้ตัวติดตั้งแบบบรรทัดคำสั่งกับ API token

ตัวติดตั้งแบบเว็บอ่านหรือแก้ไขการตั้งค่าไม่ได้ มันแก้ไขได้เฉพาะ wrangler.jsonc แก้ backend/wrangler.jsonc หากรูปแบบผิด หรือแปลง wrangler.toml เป็น wrangler.jsonc จากนั้น โหลดหน้าใหม่

การรันหยุดกลางทาง ทำต่อ: ดำเนินการต่อ ในตัวติดตั้งแบบเว็บ หรือ npm run install:cms -- resume ขั้นตอนที่เสร็จแล้วจะไม่ถูกทำซ้ำ resume ปฏิเสธเมื่อยังไม่มีสิ่งใด เสร็จ ให้ใช้ apply แทนในกรณีนั้น

Exit code 4 (incomplete) การรันไม่พังและลองใหม่ได้อย่างปลอดภัยตามเดิม อ่าน เอาต์พุตเพื่อดูสิ่งที่เหลือ ซึ่งปกติเป็นสิ่งที่ต้องแก้ที่ Cloudflare แล้วทำต่อ

Exit code 3 (failed) อ่านเอาต์พุต แก้สาเหตุ แล้วรันอีกครั้ง

Exit code 5 หรือขั้นตอนที่มีเครื่องหมาย ? (unresolved) การรันครั้งก่อนขอบางอย่างจาก Cloudflare และไม่เคยบันทึกคำตอบ หรือล้มเหลว ตัวติดตั้งตรวจสอบบัญชีก่อนทำ ขั้นตอนนั้นซ้ำ และปฏิเสธหากไม่สามารถบอกได้ ตรวจดูทรัพยากรที่ระบุในบัญชี Cloudflare ของคุณ แก้ไข แล้วรันอีกครั้ง

Preflight ไม่ผ่าน setup หยุดก่อนสร้างสิ่งใด แก้แถวที่มีเครื่องหมาย FAIL ในรายงาน แล้วรันอีกครั้ง

ตรวจสอบ token ไม่ได้ ตรวจสอบสิทธิ์ วันหมดอายุ และว่า token ครอบคลุม บัญชีนั้น จะไม่มีการสร้างสิ่งใดจนกว่า token จะผ่านการตรวจสอบ

การรันแบบไม่มีผู้ดูแลหยุดเพราะขาดคำตอบ ข้อความจะระบุการตั้งค่าที่ต้องเพิ่มใน backend/wrangler.jsonc (หรือตัวแปร environment ที่ต้อง export) เพิ่มค่านั้นแล้วรันอีกครั้ง ดู การรันแบบไม่มีผู้ดูแล

“Setup did not complete: this deployment has no way in.” ออกลิงก์รับสิทธิ์ไม่ได้ หรือ ยังไม่ได้ติดตั้ง secret สำหรับลงนามเซสชัน ตั้ง BOOTSTRAP_ADMIN_EMAIL ภายใต้ vars ใน backend/wrangler.jsonc (หนึ่งที่อยู่เท่านั้น) แก้สาเหตุที่เอาต์พุตระบุ แล้วรัน setup อีกครั้ง

ลิงก์รับสิทธิ์หมดอายุ รันตัวติดตั้งอีกครั้งเพื่อออกลิงก์ใหม่ ดู รับสิทธิ์ installation