การติดตั้ง 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) ตัวติดตั้งทั้งสองแบบเสนอให้ใช้เป็นชั้นป้องกันเพิ่มเติมหน้า ส่วนผู้ดูแล และจะปิดอยู่จนกว่าคุณจะเปิดใช้
ดาวน์โหลดโค้ดและติดตั้ง dependency
หัวข้อที่มีชื่อว่า “ดาวน์โหลดโค้ดและติดตั้ง dependency”git clone --recurse-submodules <repository-url> dee-wan-cmscd dee-wan-cmsnode 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 ซึ่งไม่แตะต้องสิ่งใดเลย
ตัวติดตั้งแบบเว็บ
หัวข้อที่มีชื่อว่า “ตัวติดตั้งแบบเว็บ”เริ่มใช้งาน
หัวข้อที่มีชื่อว่า “เริ่มใช้งาน”npm run install:webเซิร์ฟเวอร์ listen บน 127.0.0.1 เท่านั้น ที่พอร์ต 8976 เว้นแต่จะตั้ง DEEWAN_INSTALL_PORT ไว้
และแสดงลิงก์หนึ่งลิงก์:
Dee Wan installerOpen 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, ผู้ดูแลระบบ และ ติดตั้ง ดำเนินการต่อ บันทึกขั้นตอนปัจจุบันก่อนไปต่อ และ ย้อนกลับ กลับไปยังขั้นตอนก่อนหน้า
ขั้นตอนที่ 1: เว็บไซต์
หัวข้อที่มีชื่อว่า “ขั้นตอนที่ 1: เว็บไซต์”
จะติดตั้งไว้ที่ไหน มีสองคำตอบ:
- บนโดเมนของฉันเอง: กรอกโดเมนใน โดเมนของคุณ เช่น
example.com - บนที่อยู่ที่ Cloudflare จัดให้: เว้นโดเมนว่างไว้
ขั้นตอนนี้ไม่ถามอะไรอีก ชื่อโครงสร้างพื้นฐานและฟีเจอร์เสริมมีค่าเริ่มต้นที่ใช้งานได้ และ อยู่ในขั้นตอนติดตั้ง
ขั้นตอนที่ 2: Cloudflare
หัวข้อที่มีชื่อว่า “ขั้นตอนที่ 2: Cloudflare”
- ภายใต้ เชื่อมต่อ Cloudflare เลือก อนุญาต Cloudflare ซึ่งจะเปิด Cloudflare ในแท็บใหม่ ลิงก์จะถูกปิดใช้งานขณะที่คุณมีการเปลี่ยนแปลงที่ยังไม่ได้บันทึก (“บันทึกการตั้งค่าของคุณก่อนเชื่อมต่อ”)
- อนุมัติคำขอ จากนั้นแท็บจะแสดง Connected และระบุว่าตัวติดตั้งถือข้อมูลรับรอง Cloudflare สำหรับเซสชันนี้เท่านั้น ปิดแท็บแล้วกลับไปที่ตัวติดตั้ง ซึ่งการ์ดจะแสดง เชื่อมต่อสำหรับเซสชันนี้เท่านั้น
- เลือกบัญชีภายใต้ บัญชี Cloudflare ใด แล้วเลือก ใช้บัญชีนี้ หากการ เข้าสู่ระบบของคุณเข้าถึงได้เพียงบัญชีเดียว ระบบจะเลือกให้ ทุกสิ่งที่ installation สร้างขึ้นจะ เรียกเก็บเงินกับบัญชีนี้
- เลือก แพ็กเกจฐานข้อมูล 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 และเลือกบัญชีแล้ว
ข้อมูลรับรองถูกเก็บไว้ในหน่วยความจำของตัวติดตั้ง ไม่ได้เขียนลงดิสก์ หากหมดอายุ หน้านี้จะแสดง “การเชื่อมต่อหมดอายุ เชื่อมต่ออีกครั้งเพื่อดำเนินการต่อ” การอนุญาตอีกครั้งไม่กระทบสิ่งใด ที่สร้างไว้แล้ว
ขั้นตอนที่ 3: ผู้ดูแลระบบ
หัวข้อที่มีชื่อว่า “ขั้นตอนที่ 3: ผู้ดูแลระบบ”กรอก อีเมลผู้ดูแลระบบ หนึ่งที่อยู่ ลิงก์ลงชื่อเข้าใช้ครั้งแรก (ลิงก์รับสิทธิ์) จะผูกกับ ที่อยู่นี้ และมีเพียงที่อยู่นี้เท่านั้นที่รับสิทธิ์ installation ได้
ขั้นตอนที่ 4: ติดตั้ง
หัวข้อที่มีชื่อว่า “ขั้นตอนที่ 4: ติดตั้ง”
ตรวจสอบ แสดงสิ่งที่คุณตัดสินใจ: ที่อยู่, ที่อยู่สำหรับลงชื่อเข้าใช้ตามแผน, ที่อยู่เว็บไซต์ตามแผน, บัญชี 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
ลิงก์รับสิทธิ์จะไม่แสดงในบันทึกเลย หน้าเสนอลิงก์ผ่านปุ่มนั้นเท่านั้น เฉพาะขณะที่ ลิงก์ยังใช้ได้ และเพียงครั้งเดียว
ดูตัวอย่างตัวช่วยโดยไม่แตะต้อง Cloudflare
หัวข้อที่มีชื่อว่า “ดูตัวอย่างตัวช่วยโดยไม่แตะต้อง Cloudflare”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:
export CLOUDFLARE_API_TOKEN=… # skips the token promptexport CLOUDFLARE_ACCOUNT_ID=… # skips the account pickerข้อมูลรับรองจะถูกหาตามลำดับนี้: ตัวแปรที่ export ใน shell ของคุณ จากนั้นไฟล์ .env ของ
repository จากนั้นค่าใน backend/wrangler.jsonc เมื่อ environment แทนที่ค่า
ที่ต่างกันใน config ตัวติดตั้งจะแจ้งให้ทราบ
token จะถูกตรวจสอบก่อนสร้างสิ่งใด การรันแบบโต้ตอบให้ลองได้สามครั้ง การรันแบบ ไม่โต้ตอบจะหยุดที่ความล้มเหลวครั้งแรก ไม่ว่ากรณีใด token ที่ตรวจสอบไม่ผ่านหมายความว่า จะไม่มีการสร้างทรัพยากร Cloudflare ใด ๆ
secret ของแอปพลิเคชันจะไม่ถูกเก็บใน wrangler.jsonc เด็ดขาด ดู Secrets
การติดตั้งแบบโต้ตอบ: npm run setup
หัวข้อที่มีชื่อว่า “การติดตั้งแบบโต้ตอบ: npm run setup”npm run setupsetup พาคุณผ่านการติดตั้งและบันทึกแต่ละคำตอบลงใน backend/wrangler.jsonc ไปเรื่อย ๆ
ดังนั้นการรันครั้งที่สองจะไม่ถามซ้ำ ตามลำดับ มันจะ:
- หาหรือสร้าง
backend/wrangler.jsoncและหา token กับบัญชี หาก token เข้าถึงได้หลายบัญชี จะถามว่าจะใช้บัญชีใด - ถามว่าบัญชีใช้แพ็กเกจ D1 ใด (Free, 500 MB ต่อฐานข้อมูล; Paid, 10 GB ต่อฐานข้อมูล)
- รัน preflight และแสดงรายงาน หากการตรวจสอบไม่ผ่าน จะหยุดก่อนสร้างสิ่งใด (“Setup stopped before creating any Cloudflare resources. Fix the FAIL rows above.”) หากจะมีการสร้าง หรือแก้ไขทรัพยากร จะขอให้คุณยืนยัน
- ถามว่า installation จะอยู่ที่ใด (โดเมนของคุณเอง หรือที่อยู่ที่ Cloudflare จัดให้)
จากนั้นถามโดเมน ซับโดเมนของผู้ดูแล (ค่าเริ่มต้น
cms) และซับโดเมนของ API เนื้อหาสาธารณะ (ค่าเริ่มต้นcontent) - ถามว่าจะตั้งค่า DNS หรือไม่ จะตั้งค่า Cloudflare Access หรือไม่ (ค่าเริ่มต้น ไม่) และจะ ติดตั้งกฎ rate-limiting บน API สาธารณะหรือไม่ (ค่าเริ่มต้น ไม่)
- ถามชื่อโปรเจกต์ Pages และชื่อ Worker
- ถามผู้ให้บริการพื้นที่เก็บข้อมูล Cloudflare R2 หรือ Cloudflare Images สำหรับ R2 จะสร้าง
บักเก็ต (ค่าเริ่มต้น
dee-wan-cms-images) เปิดการเข้าถึงแบบสาธารณะผ่านที่อยู่r2.devที่ Cloudflare จัดการ หรือโดเมนสื่อที่กำหนดเอง และตรวจสอบว่าไฟล์ที่อัปโหลดให้บริการได้จริง - ถามว่าจะเปิดการนำเข้าข้อมูลหรือไม่ ซึ่งจะสร้างบักเก็ต R2 ส่วนตัวสำหรับไฟล์ archive ที่อัปโหลด (ค่าเริ่มต้น ไม่)
- สร้างฐานข้อมูล D1 และเสนอให้ใช้ schema (ค่าเริ่มต้น ใช่) การติดตั้งใหม่ไม่ต้องมี ขั้นตอน migrate แยก
- build และ deploy UI ผู้ดูแล, Worker ของผู้ดูแล และ Worker สำหรับอ่านแบบสาธารณะ เก็บ
Worker secret และเชื่อม route, DNS record และแอปพลิเคชัน Access ที่คุณเลือก มัน
เขียน
backend/wrangler.public.jsoncเมื่อบัญชี โซน และ database id ได้ข้อสรุปแล้ว และ ไม่เขียนทับไฟล์ที่มีอยู่แล้วเด็ดขาด - เสนอให้รัน health check
- ถามอีเมลของผู้ดูแลระบบคนแรก หากยังไม่ได้ตั้ง
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
วางแผนก่อน: npm run plan
หัวข้อที่มีชื่อว่า “วางแผนก่อน: npm run plan”npm run plannpm run plan -- --jsonplan แสดงทุกขั้นตอนที่ installation จะทำ และสถานะที่แต่ละขั้นตอนอยู่แล้ว มัน
ทำงานจาก config และ ledger บนดิสก์เท่านั้น: ไม่แตะเครือข่าย ไม่สร้างสิ่งใด และ
ไม่มีค่าใช้จ่าย --json แสดงแผนที่เครื่องอ่านได้พร้อม planVersion
แต่ละขั้นตอนมีสถานะใดสถานะหนึ่งต่อไปนี้:
| เครื่องหมาย | สถานะ | ความหมาย |
|---|---|---|
✓ |
done | บันทึกว่าเสร็จแล้ว |
• |
to do | จะรัน |
– |
not applicable | ข้ามสำหรับการตั้งค่านี้ พร้อมเหตุผล |
✗ |
blocked | ยังรันไม่ได้ เช่น เพราะไม่พบ Cloudflare API token |
? |
unresolved | การรันครั้งก่อนขอสิ่งนี้แล้วไม่เคยบันทึกคำตอบ หรือล้มเหลว apply ตรวจสอบบัญชีก่อนทำซ้ำ และปฏิเสธแทนการเดา |
↻ |
re-checked | การตรวจสอบที่รันทุกครั้งที่ apply |
คำสั่งย่อยของตัวติดตั้ง: npm run install:cms
หัวข้อที่มีชื่อว่า “คำสั่งย่อยของตัวติดตั้ง: npm run install:cms”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 และปฏิเสธหาก
ไม่ได้ระบุไว้เลย
Exit code
หัวข้อที่มีชื่อว่า “Exit code”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หรือ exportD1_PLAN - บัญชี เมื่อ token เข้าถึงได้หลายบัญชี: ตั้ง
account_idใน config หรือ exportCLOUDFLARE_ACCOUNT_ID - ผู้ดูแลระบบคนแรก: ตั้ง
BOOTSTRAP_ADMIN_EMAILภายใต้varsการรันแบบไม่มีผู้ดูแลจะไม่ ถามค่านี้ และหากไม่มีค่านี้ จะออกลิงก์รับสิทธิ์ไม่ได้
ตัวอย่าง:
npm run install:cms -- apply --account <account-id> --jsonการใช้บัญชี Cloudflare ร่วมกัน
หัวข้อที่มีชื่อว่า “การใช้บัญชี Cloudflare ร่วมกัน”ชื่อทรัพยากรเริ่มต้น (dee-wan-cms-backend, dee-wan-cms-db และอื่น ๆ) กำหนดตายตัว ดังนั้นสอง
installation ในบัญชี Cloudflare เดียวกันจะชนกัน ตั้ง DEEWAN_RESOURCE_PREFIX เพื่อแยก namespace ของทุก
ทรัพยากรที่การรันจัดเตรียม:
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
หัวข้อที่มีชื่อว่า “รับสิทธิ์ installation”จะยังไม่มีใครมีบัญชีจนกว่า 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 สำหรับฟีเจอร์เสริม
หัวข้อที่มีชื่อว่า “เพิ่ม secret สำหรับฟีเจอร์เสริม”secret ตั้งด้วย wrangler secret put จากไดเรกทอรี backend/ ไม่ใช่ในไฟล์เด็ดขาด ตัวอย่างเช่น
ฟีเจอร์ AI ต้องใช้คีย์ DeepInfra:
npx wrangler secret put DEEPINFRA_API_KEYดู Secrets สำหรับรายการทั้งหมด
deploy การอัปเดตและใช้ migration
หัวข้อที่มีชื่อว่า “deploy การอัปเดตและใช้ migration”ตัวติดตั้ง deploy ทุกอย่างครั้งเดียว หลังจากคุณเปลี่ยนโค้ดหรือการตั้งค่า ให้ deploy อีกครั้ง:
npm run deploy # admin Worker, admin UI and the public read Workernpm run healthdeploy ปฏิเสธที่จะรันหากไม่มี 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
npm run teardown -- --config backend/wrangler.jsonc # list what would be deletednpm 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