ข้ามไปยังเนื้อหา
Dee Wan 1.0 ยังอยู่ระหว่างพัฒนาและยังไม่เปิดตัว (pre-MVP) — ดู ขอบเขตผลิตภัณฑ์ 1.0

ตัวอย่างตัวติดตั้งแบบเว็บ

ตัวติดตั้งแบบเว็บคือ wizard สี่ขั้นตอนที่ให้บริการจากเครื่องของคุณเอง มันต้องใช้ Cloudflare OAuth application ที่คุณลงทะเบียนและเป็นเจ้าของเอง Dee Wan 1.0 ไม่ได้มีมาให้ ตัวติดตั้งแบบเว็บจึงไม่ใช่ วิธีติดตั้ง Dee Wan ที่รองรับ ให้ติดตั้งด้วยตัวติดตั้งแบบบรรทัดคำสั่งตาม การติดตั้ง Dee Wan

หากไม่มี OAuth application คุณยังเดินดู wizard ได้ด้วย npm run install:web:dry-run ซึ่งไม่เปลี่ยนทรัพยากรภายนอก ดู ดูตัวอย่าง wizard โดยไม่เปลี่ยนทรัพยากร Cloudflare

ทั้งสองใช้เอนจินตัวติดตั้ง ไฟล์การตั้งค่า (backend/wrangler.jsonc) และ step ledger เดียวกัน

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

ตัวติดตั้งอ่าน OAuth client id จาก DEEWAN_CF_OAUTH_CLIENT_ID หากไม่มี ขั้นตอน Cloudflare จะแสดง “ต้องตั้งค่าการเข้าสู่ระบบ Cloudflare” และบอกให้คุณใช้ตัวติดตั้งแบบบรรทัดคำสั่ง

Terminal window
npm run install:web

เซิร์ฟเวอร์ฟังบน 127.0.0.1 เท่านั้น ที่ port 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 ต้องมีมัน ดังนั้นหน้าอื่นหรือ โปรแกรมอื่นบนเครื่องเดียวกันจึงควบคุมตัวติดตั้งไม่ได้ request ที่ไม่มีมันจะได้ “This installer is bound to one session. Open the link printed in the terminal.” กด Ctrl-C ใน terminal เมื่อ คุณเสร็จแล้ว

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

หน้านี้มีตัวเลือก ภาษา ที่มี English, ไทย, Русский, Español, Français และ Deutsch ภาษาที่คุณใช้ติดตั้งจะกลายเป็นภาษาเริ่มต้นของไซต์แรกด้วย

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

ตัวติดตั้งแบบเว็บ ขั้นตอนตั้งค่าไซต์: ใช้โดเมนของตนเอง

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

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

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

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

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

ขอสิทธิ์อะไรบ้าง แสดง scope ของ Cloudflare ที่การลงชื่อเข้าขอไว้ทุกประการ มันขึ้น กับคำตอบของคุณ:

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

ไม่มีการขอ scope ของ WAF เลย ดูการจำกัดผู้เยี่ยมชมในขั้นตอนที่ 4

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

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

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

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

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

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

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

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

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

ตัวติดตั้งแบบเว็บไม่ติดตั้งการจำกัดผู้เยี่ยมชม การตั้งค่าถูกบันทึก (SETUP_PUBLIC_RATE_LIMIT ใน backend/wrangler.jsonc) แต่กฎนี้เป็นกฎจำกัดอัตราของ Cloudflare WAF และการลงชื่อเข้าของตัวติดตั้งแบบเว็บไม่มีสิทธิ์ WAF การรันจะรายงานว่า ติดตั้งกฎไม่ได้และทำต่อ กฎจำกัดอัตราการลงชื่อเข้าใช้ก็เป็นเช่นเดียวกัน หากต้องการติดตั้ง ให้รัน npm run setup ภายหลังด้วย API token ที่มี Zone · Zone WAF · Edit (ดู Credential) เมื่อติดตั้งกฎแล้ว มันจะจำกัดการอ่านแบบส่วนตัวด้วย รวมถึง build ของไซต์ที่อ่านจาก IP address เดียว

การตรวจทานยังบอกว่ารายงานข้อผิดพลาดไปที่โปรเจกต์ Sentry ของ Dee Wan เมื่อการติดตั้งมีที่อยู่ของโปรเจกต์นั้น ไม่ว่าจะรวมอยู่ใน build หรือตั้งเป็น secret DEEWAN_SENTRY_DSN และหากไม่มีที่อยู่ จะไม่มีอะไรถูกส่ง ใน build นี้ไม่มีที่อยู่ Sentry ของ Dee Wan รวมอยู่ ดังนั้นไม่มีอะไรถูกส่งไปยัง Dee Wan เว้นแต่ตั้ง DEEWAN_SENTRY_DSN ก่อนตั้งค่านี้ การติดตั้ง → รายงานข้อผิดพลาด จะบอก “บิลด์นี้ไม่มีปลายทางของ Dee Wan ไม่มีการส่งอะไร” รายงานไม่มีเนื้อหา ค่าในฟอร์ม อีเมล หรือ credential เลย หากต้องการส่งไปยังโปรเจกต์ Sentry ของคุณเอง ให้ตั้ง secret OPERATOR_SENTRY_DSN secret เป็นของ Worker ตัวเดียว หากต้องการให้ข้อผิดพลาดของ Worker สำหรับอ่านสาธารณะถูกรายงานด้วย ให้ตั้งที่อยู่ใดที่อยู่หนึ่งที่ใช้บน Worker นั้นด้วย (npx wrangler secret put <NAME> --config wrangler.public.jsonc) ดู Secrets

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

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

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

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

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

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

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

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

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

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

แผงแสดง Worker, ที่อยู่ของ admin และที่อยู่ของ public API ที่ตอบกลับ และ หน้าแสดง สร้างผู้ดูแลระบบ มันเปิด claim link ในแท็บใหม่ ซึ่งคุณเลือก วิธีเข้าสู่ระบบที่ตั้งค่าไว้ ดูClaim การติดตั้ง

claim link ไม่แสดงใน log เลย หน้าเสนอมันผ่านปุ่มนั้น เฉพาะขณะที่ ลิงก์ยังใช้ได้ และเพียงครั้งเดียว หากลิงก์หมดอายุก่อนมีคนใช้ ให้เลือก ดำเนินการต่อ เพื่อออกลิงก์ใหม่ ขณะที่การติดตั้งยังไม่ถูก claim

Terminal window
npm run install:web:dry-run

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

ตัวติดตั้งแบบเว็บบอกว่า port ถูกใช้อยู่ process อื่น ซึ่งมักเป็นตัวติดตั้งตัวที่สอง กำลัง ฟัง port นั้น ปิดมัน หรือตั้ง DEEWAN_INSTALL_PORT เป็น port ที่ว่าง ไม่มีอะไรถูกสร้าง ในบัญชีใดเลย ที่อยู่ redirect ที่ลงทะเบียนไว้ของ OAuth application ต้อง ตรงกับ port ใหม่

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

ขั้นตอน Cloudflare บอกว่า “ต้องตั้งค่าการเข้าสู่ระบบ Cloudflare” ไม่ได้ตั้ง DEEWAN_CF_OAUTH_CLIENT_ID ใช้ตัวติดตั้งแบบบรรทัดคำสั่งกับ API token

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

สำหรับปัญหาที่ตัวติดตั้งแบบบรรทัดคำสั่งก็พบเช่นกัน เช่น ตั้ง DOMAIN แต่ไม่มี DOMAIN_MODE หรือขั้นตอนที่ยังดำเนินการไม่เสร็จ ดู การแก้ไขปัญหา

ติดตั้งด้วยตัวติดตั้งแบบบรรทัดคำสั่ง


ยังไม่เปิดตัว (pre-MVP) และยังไม่มีเวอร์ชันเสถียร
คอมมิตซอร์สโค้ด: fe23db481c422b40e317b92fc98116b4c0c26a87 (มีการแก้ไขที่ยังไม่คอมมิต)
วันที่สร้างเอกสาร (UTC): 2026-10-18T09:22:34.630Z
คอมมิตสำหรับอัปเกรด: ระบุไม่ได้: มีการแก้ไขที่ยังไม่คอมมิต. บันทึกการเปลี่ยนแปลง