Deploy Cloudflare Pages ไม่ใช้ GitHub Actions ได้ไหม? เชื่อม Git กับ Direct Upload ต่างกันยังไง

ตอบสั้น ๆ: ไม่ต้องใช้ GitHub Actions ก็เผยแพร่เว็บบน Cloudflare Pages ได้ ถ้าโปรเจกต์ Pages เชื่อมกับ GitHub ไว้แล้ว ทุกครั้งที่ push โค้ด Cloudflare จะ build…

หาสิ่งผิดปกติ
วิธีใช้เครื่องมืออ่าน

ฟังจะอ่านบทความออกเสียง อ่านเร็วแสดงวลีทีละช่วงตามความเร็วที่เลือก ฝึกภาษาใช้เปรียบเทียบบทความฉบับแปลที่มีอยู่ บันทึกจะเก็บบุ๊กมาร์กในเบราว์เซอร์นี้ และเปิดอีกครั้งได้จากรายการที่บันทึกในเครื่องเล่น อ่านแบบเกมทุบอิฐจะเปลี่ยนตัวอักษรในบทความเป็นก้อนอิฐให้ทุบเล่น

แชร์บทความนี้

แชร์บทความนี้

Deploy Cloudflare Pages ไม่ใช้ GitHub Actions ได้ไหม? เชื่อม Git กับ Direct Upload ต่างกันยังไง
ภาพที่สร้างโดย AI
โฆษณา
โฆษณา

ตอนแรกแค่อยากวางลิงก์เดียว

ตอบสั้น ๆ: ไม่ต้องใช้ GitHub Actions ก็เผยแพร่เว็บบน Cloudflare Pages ได้ ถ้าโปรเจกต์ Pages เชื่อมกับ GitHub ไว้แล้ว ทุกครั้งที่ push โค้ด Cloudflare จะ build และ deploy ให้เอง ส่วนถ้าเป็นโปรเจกต์แบบ Direct Upload (อัปโหลดตรง) ก็ build เว็บทั้งชุดแล้วอัปโหลดผลลัพธ์ด้วย Wrangler นี่คือเรื่องที่ผมอ้อมไปไกลกว่าจะเข้าใจ

งานจริง ๆ เล็กมาก เพื่อให้ผ่านการตรวจเว็บของโปรแกรมแอฟฟิลิเอต ผมต้องวางลิงก์สินค้าฮาร์ดดิสก์พกพาแค่ลิงก์เดียวในบทความจริง ก่อนลิงก์มีข้อความบอกชัด ๆ ว่า "หน้านี้มีลิงก์แอฟฟิลิเอต ถ้าคุณซื้อผ่านลิงก์ เจ้าของเว็บอาจได้ค่าคอมมิชชัน" สร้างลิงก์ ใส่ในบทความ แล้ว commit ขึ้น GitHub

เสร็จแล้ว ผมคิดอย่างนั้น

แต่พอโค้ดขึ้น GitHub ปุ๊บ ความเข้าใจผิดก็โผล่มา

โค้ดอยู่บน GitHub ไม่ได้แปลว่าหน้าเว็บขึ้นออนไลน์แล้ว

GitHub Actions ที่ใช้ประจำ รอบนี้ใช้ไม่ได้ มีคนเสนอว่าให้ใช้ Cloudflare Worker ดักเฉพาะ URL นั้นแล้วส่งหน้าเว็บจากตรงนั้นแทน แต่ภายใต้เงื่อนไขการใช้งานรอบนี้ ทางนั้นก็ใช้ไม่ได้เหมือนกัน

แค่อยากวางลิงก์เดียว กลายเป็นประชุมเรื่อง deploy ไปซะงั้น: "CI ล่ะ? Worker ล่ะ? Pages เชื่อม Git หรือเป็น Direct Upload?"

โปรเจกต์ "ซากราดาฟามีเลียสายแอฟฟิลิเอต อาคาร 2" จึงเริ่มก่อสร้าง

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


1. ทำไมต้องมีหน้าเว็บที่เปิดได้จริงก่อน

Sovrn Commerce แนะนำเว็บคอนเทนต์และบล็อกว่า ให้วางลิงก์ Commerce บนเว็บที่สมัครไว้ก่อน แล้วสร้างคลิกสักหน่อย หลังจากนั้นแคมเปญถึงจะเข้าสู่การตรวจ[3]

แปลว่าไม่ใช่ "อนุมัติก่อนแล้วค่อยวางลิงก์" แต่ต้องให้ผู้ตรวจเห็นตัวอย่างจริงที่ใช้งานได้ก่อน

Sovrn ยังขอให้ทุกหน้าที่มีลิงก์แอฟฟิลิเอตบอกผู้อ่านให้ชัดว่าคุณอาจได้เงินจากลิงก์นั้น และข้อความนี้ต้องอยู่ก่อนลิงก์หรือเนื้อหาโปรโมต[4]

ไม่จำเป็นต้องมีเว็บเปรียบเทียบสินค้าหรูหรา เงื่อนไขสั้นนิดเดียว:

  • มีบทความจริงบนเว็บที่สมัครไว้
  • บทความนั้นมีลิงก์แอฟฟิลิเอต
  • ข้อความแจ้งอยู่ก่อนลิงก์
  • ใครก็เปิดหน้าได้ผ่าน URL สาธารณะ
  • หลังเผยแพร่แล้ว สร้างคลิกทดสอบได้สักหน่อย

จุดสำคัญคือข้อรองสุดท้าย: ไฟล์ใน repository บน GitHub ยังไม่ใช่หน้าเว็บสาธารณะ


2. GitHub Actions ใช้ไม่ได้ ไม่ได้แปลว่า Cloudflare Pages ใช้ไม่ได้

GitHub Actions คือเครื่องมือทำงานอัตโนมัติ (CI/CD) ของ GitHub ใช้รัน build เทสต์ และ deploy อยู่ใน GitHub

ส่วน Cloudflare Pages มีระบบเชื่อม Git ของตัวเอง เชื่อมโปรเจกต์ Pages เข้ากับ GitHub หรือ GitLab ได้โดยตรง พอ push ขึ้น repository นั้นเมื่อไร Cloudflare ก็ build และ deploy เอง[1]

ขั้นตอนเป็นแบบนี้:

push ขึ้น GitHub → Cloudflare Pages เห็น commit ใหม่ → Cloudflare build → Cloudflare deploy

ในสายนี้ไม่มี workflow ของ GitHub Actions เลยสักตัว

ตรงนี้สำคัญ "ใช้ GitHub Actions ไม่ได้" กับ "GitHub ส่งเว็บขึ้น Cloudflare ไม่ได้" เป็นคนละเรื่องกัน

ลองนึกภาพว่า GitHub Actions คือสายพานในโกดังของเราเอง ส่วนระบบเชื่อม Git ของ Cloudflare คือบริษัทขนส่งที่มารับของถึงที่

สายพานหยุดได้ แต่รถขนส่งก็ยังมารับของตามปกติ


3. เรื่องแรก: ดูให้ชัดว่าโปรเจกต์ Pages ของคุณเป็นแบบไหน

ถ้าข้ามขั้นนี้ไป Cloudflare Pages จะกลายเป็นเขาวงกตเร็วมาก

วิธีเผยแพร่หลัก ๆ มีสองแบบ:

แบบ อะไรเป็นตัวเริ่ม ใคร build และ deploy เหมาะกับ
เชื่อม Git (Git integration) push ขึ้น GitHub / GitLab Cloudflare ยึด repository เป็นหลักและอยากเผยแพร่อัตโนมัติ
Direct Upload (อัปโหลดตรง) ไฟล์ที่ build เสร็จแล้ว Wrangler หรือแดชบอร์ด build บนเครื่องตัวเองหรือ CI อื่นแล้วอัปโหลดผลลัพธ์

เอกสารทางการของ Cloudflare เขียนไว้ชัดว่า โปรเจกต์ที่สร้างด้วยการเชื่อม Git จะเปลี่ยนเป็นโปรเจกต์ Direct Upload ธรรมดาทีหลังไม่ได้ โปรเจกต์ที่เชื่อม Git แล้วยัง deploy เองด้วย Wrangler ได้ แต่ใช้การลากแล้ววางบนแดชบอร์ดไม่ได้[1][2]

กลับกันก็เหมือนกัน โปรเจกต์ที่เริ่มเป็น Direct Upload จะเพิ่มการเชื่อม Git ทีหลังในโปรเจกต์เดิมไม่ได้ ถ้าอยาก deploy อัตโนมัติจาก Git ต้องสร้างโปรเจกต์ Pages ใหม่[2]

เพราะฉะนั้นคำถามแรกไม่ใช่ "จะ deploy ยังไง?"

แต่คือ: "โปรเจกต์ Pages ตอนนี้ของเราเป็นแบบเชื่อม Git หรือ Direct Upload?"

ตอบข้อนี้ได้ ตัวเลือกครึ่งหนึ่งก็ตัดทิ้งได้เลย


4. ถ้าเป็นแบบเชื่อม Git ไม่ต้องไปชุบชีวิต GitHub Actions เพื่อเผยแพร่

ถ้า repository บน GitHub เชื่อมกับ Cloudflare Pages ไว้ถูกต้องแล้ว ทางที่เร็วที่สุดไม่ใช่ Worker และไม่ใช่ CI ตัวใหม่

ให้เช็กเรื่องเหล่านี้ในโปรเจกต์ Pages:

  1. เชื่อมกับ repository บน GitHub ที่ถูกต้อง
  2. branch สำหรับ production เป็น branch ที่อยากเผยแพร่จริง ๆ
  3. การ build อัตโนมัติของ branch production ไม่ได้ถูกหยุดไว้
  4. คำสั่ง build และโฟลเดอร์ผลลัพธ์ตรงกับโปรเจกต์ปัจจุบัน
  5. หลัง push มี deploy ใหม่โผล่ในหน้า Deployments ของ Pages
  6. เห็นเนื้อหาใหม่ที่ที่อยู่ pages.dev
  7. สุดท้าย โดเมนของคุณเองก็แสดงเนื้อหาใหม่เหมือนกัน

ระบบเชื่อม Git ของ Cloudflare ทำงานโดย build และ deploy จาก commit บน branch ที่เชื่อมไว้[1]

ดังนั้นต่อให้ GitHub Actions ใช้ไม่ได้ชั่วคราว ตราบใดที่การ build ของ Cloudflare เองยังทำงาน เว็บก็ยังอัปเดตได้

สิ่งที่ต้องทำตอนนี้ไม่ใช่สร้างระบบซับซ้อนเพิ่ม แต่คือดูว่า "จุดรับของ" ของ Cloudflare เปิดอยู่หรือเปล่า


5. ถ้าเป็น Direct Upload ให้อัปโหลดผล build ทั้งชุด ไม่ใช่โยนขึ้นไปหน้าเดียว

Direct Upload คือการส่งไฟล์เว็บแบบ static ที่เสร็จทั้งชุดให้ Cloudflare Pages เอกสารทางการอธิบายวิธีอัปโหลดไฟล์ที่ build แล้วด้วย Wrangler หรือผ่านแดชบอร์ด[2]

ตรงนี้มักมีทางลัดอันตรายโผล่มา:

"แก้แค่บทความเดียว อัปโหลดแค่ไฟล์ HTML นั้นไม่ได้เหรอ?"

ถ้าเว็บ static ของคุณ build ทั้งเว็บพร้อมกัน อย่าทำแบบนั้นดีกว่า

เพราะสิ่งที่ deploy ไม่ใช่ "ไฟล์เดียวที่แก้ใน Git" แต่เป็น ผล build ของทั้งเว็บ ณ ตอนนั้น การ build ครั้งหนึ่งมักสร้างรายการหน้า CSS, JavaScript ดัชนีค้นหา รูปภาพ และกฎการเปลี่ยนเส้นทางใหม่ไปพร้อมกัน ถ้ายัดหน้าเดียวเข้าไปเอง เว็บที่ออนไลน์อยู่ก็จะไม่ตรงกับ repository อีกต่อไป

ถ้าใช้ Direct Upload ขั้นตอนพื้นฐานคือ:

ดึงโค้ดล่าสุด → รันคำสั่ง build ของโปรเจกต์ → เช็กโฟลเดอร์ผลลัพธ์ → deploy ผลลัพธ์ทั้งหมด → เปิด URL จริงเพื่อตรวจ

เช่น เว็บ static ที่ทำด้วย Node ก็รันคำสั่ง build ของโปรเจกต์อย่าง pnpm build แล้วอัปโหลดโฟลเดอร์ที่ได้อย่าง dist

ที่สำคัญคืออย่าปล่อยให้เว็บจริงกลายเป็น "โลกคู่ขนานลึกลับที่มีใครแก้ไฟล์ด้วยมือ"


6. ถ้า Worker ใช้ไม่ได้ ก็ตัดทิ้งจากแผนไปเลย

เวลาต้องเผยแพร่หน้าเดียวด่วน ๆ การใช้ Worker ดักเส้นทางนั้นก็ทำได้ในทางทฤษฎี

แต่ถ้าเงื่อนไขการใช้งานไม่อนุญาตให้ใช้ Worker อย่างรอบนี้ การวางแผนวนรอบมันก็ไม่มีประโยชน์

ยิ่งเก็บทาง "เผื่อจะใช้ได้" ไว้ในแบบแปลนมากเท่าไร ดูแลทีหลังก็ยิ่งยาก

  • GitHub Actions: ใช้ไม่ได้
  • Worker: ใช้ไม่ได้
  • งั้นเลือกหนึ่งอย่าง: เชื่อม Git ของ Cloudflare Pages หรือ Direct Upload

แค่นั้นเอง

หาประตูหลักที่เปิดอยู่บานเดียวให้เจอ เร็วกว่าสร้างทางหนีไฟสิบทาง

อย่าสร้างระบบ deploy ชุดที่สองแค่เพื่อเผยแพร่ลิงก์แอฟฟิลิเอตลิงก์เดียว

นี่คือบทเรียนใหญ่ที่สุดของรอบนี้


7. "เผยแพร่แล้ว" ต้องยืนยันที่หน้าจริง ไม่ใช่ดูจากรหัส commit

ความผิดพลาดคลาสสิกของการดูแลเว็บ คือการนับขั้นตอนระหว่างทางว่า "เสร็จแล้ว"

  • เขียนโค้ดเสร็จแล้ว
  • commit ขึ้น GitHub แล้ว
  • build ผ่านแล้ว
  • มี deploy โผล่บน Cloudflare แล้ว

ทั้งหมดนี้สำคัญ แต่ผู้อ่านเห็นแค่ URL สุดท้าย

สำหรับหน้าที่ใช้ตรวจแอฟฟิลิเอตแบบรอบนี้ ขั้นเช็กสุดท้ายคือ:

  1. เปิด URL สาธารณะในหน้าต่างไม่ระบุตัวตนได้
  2. แสดงบทความเวอร์ชันล่าสุด
  3. ข้อความแจ้งแอฟฟิลิเอตอยู่ก่อนลิงก์
  4. ลิงก์สินค้าพาไปหน้าที่ถูกต้อง
  5. แสดงผลบนมือถือได้ดี
  6. ถ้าจำเป็น สร้างคลิกทดสอบสักหน่อย
  7. ดูจำนวนคลิกและสถานะการตรวจในบัญชี Sovrn

Sovrn อธิบายขั้นตอนของแคมเปญสายคอนเทนต์/บล็อกว่า วางลิงก์ สร้างคลิก แล้วค่อยตรวจ[3]

เพราะฉะนั้น "ขึ้น GitHub แล้ว รอตรวจเลย" ยังไม่พอ จะยืนอยู่บนเส้นสตาร์ตได้ ก็ต่อเมื่อผู้ตรวจเห็นลิงก์จริงทำงานบน URL ที่ออนไลน์อยู่


8. ต่อไป อย่าฝังลิงก์แอฟฟิลิเอตตายตัวไว้ในเนื้อบทความ

ลิงก์เดียววางเองก็ไม่มีปัญหา

แต่พอบทความมีเป็นร้อยเป็นพัน แล้วต้องมีคนตัดสินใจทุกครั้งว่า "บทความนี้ใส่โฆษณาไหม? ใส่ตรงไหน? สินค้าอะไร? สำหรับประเทศไหน?" ข้าง ๆ โรงงานคอนเทนต์ก็จะงอกโรงงานโฆษณาขึ้นมาอีกโรง

ขั้นต่อไปคือแยกเนื้อบทความออกจากข้อมูลสร้างรายได้

เช่น ในบทความใส่แค่บล็อกตั้งค่าเล็ก ๆ แบบนี้:

article_id: example-123
affiliate: true
placement: after_solution
max_products: 3
market_mode: auto
product_theme: external-storage

แล้วตอนเผยแพร่ค่อยทำตามลำดับนี้:

บทความ → ตัดสินว่าจะสร้างรายได้ไหม → เลือกสินค้า → สร้างลิงก์แอฟฟิลิเอต → แทรกตอนสร้างหน้าเว็บ → วัดผล

เนื้อบทความเก็บไว้เป็นสินทรัพย์ระยะยาว ส่วน URL สินค้า สต็อก ร้านค้า และการแยกตามประเทศ ทำเป็นชิ้นส่วนที่เปลี่ยนได้ตลอด

แบบนี้เวลาลิงก์เสียหรือเปลี่ยนสินค้า ก็ไม่ต้องรื้อเนื้อหาทั้ง 12 ภาษา

ลิงก์แอฟฟิลิเอตไม่ใช่ตัวบทความ

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


9. สรุป: เมื่อ CI พัง อย่าเพิ่งสร้างปราสาทใหม่ ให้หาทางเข้าจริงของ Cloudflare ก่อน

เรื่องรอบนี้เป็นตัวอย่างที่ดีมาก

ตอนแรกแค่: "วางลิงก์ฮาร์ดดิสก์สักลิงก์เพื่อให้ผ่านการตรวจ"

ลิงก์ทำเสร็จ ข้อความแจ้งเขียนเสร็จ โค้ดก็ขึ้น GitHub แล้ว

แต่พอถึงขั้นขึ้นออนไลน์จริง GitHub Actions ใช้ไม่ได้ จะอ้อมด้วย Worker ก็ไม่ได้อีก

ถ้าตอนนั้นเพิ่มระบบใหม่เข้าไปอีก เป้าหมายจะค่อย ๆ เปลี่ยนจาก "เผยแพร่ลิงก์เดียว" เป็น "ขยายระบบ deploy" โดยไม่รู้ตัว

สุดท้ายแล้ว สิ่งที่ต้องตัดสินใจมีแค่นี้:

  • ถ้าโปรเจกต์ Pages เป็นแบบเชื่อม Git ก็ให้ Cloudflare build เอง
  • ถ้าเป็น Direct Upload ให้ build ทั้งเว็บแล้วอัปโหลดผล build ตัวจริง
  • ถ้า Worker ใช้ไม่ได้ ก็ตัดออกจากตัวเลือก
  • อย่าเรียก commit บน GitHub ว่า "เผยแพร่แล้ว"
  • เช็กข้อความแจ้ง ลิงก์ การแสดงผล และคลิกบน URL สาธารณะจริง

สิ่งที่อันตรายที่สุดทางเทคนิคไม่ใช่การมีตัวเลือกน้อย

แต่คือการปล่อยตัวเลือกที่ใช้ไม่ได้ค้างไว้ในแบบแปลนตลอดไป


ลึกลงไปอีกนิด: บล็อกทั่วไปต้องกี่ปีถึงเริ่มทำเงิน?

โฆษณาหนังสือในหัวข้อนี้

  • The Psychology of Money (ฉบับภาษาอังกฤษ)

    Morgan Housel / Harriman House Publishing / 2020

    หนังสือในด้าน การเงินส่วนบุคคล ซึ่งเป็นสาขาของบทความนี้

บทความนี้มีลิงก์พันธมิตร (โฆษณา). เกี่ยวกับโฆษณา As an Amazon Associate I earn from qualifying purchases.

แชร์บทความนี้

หากบทความนี้มีประโยชน์ คุณสามารถสนับสนุนเว็บไซต์ได้ สนับสนุน

โฆษณา
โฆษณา
โฆษณา

อีกสักเรื่องไหม มีอะไรสนุก ๆ บ้าง

อ่านจบแล้วก็ลองต่อเลย: เรื่องใกล้เคียงไม่กี่เรื่อง และเรื่องที่ต่างไปเลยแต่สนุก

  1. ร่างกายมนุษย์ใช้งานยากเกินไปทำไมไม่มีค่าสเตตัส “พละกำลัง +1” อันเดียว
  2. ทำไม "ในฐานะสามี" "ในฐานะแฟน" "ในฐานะครอบครัว" ถึงเป็นต้นเหตุของการทะเลาะกัน
  3. ทำไม “Yohohoho” ของ Ado กลับมาฮิต? เพลง Binks' Sake ถูกรีมิกซ์จนมีคนเล่นด้วยเมโลเดียน
  4. ทำไมพิธีกรหญิงใน TODAY ถึงรีบห้ามเมื่ออัล โรเกอร์พูดว่า “Big Red”?

วันนี้อ่านเรื่องนี้

แต่ละบทความตอบคำถามที่ผู้อ่านบทความนี้มักสงสัยต่อ

ดูบทความทั้งหมดบทความเรื่อง เงิน เพิ่มเติม

หาบทความอื่น

บทความทั้งหมด

Mendoi-chan

ผู้ดูแลเว็บไซต์

Mendoi-chan

เรียบเรียงความยุ่งยากในที่ทำงานและชีวิตประจำวันให้เป็นโครงสร้างที่ชัดเจนและขั้นตอนถัดไปที่ทำได้จริง

โฆษณา

บทความล่าสุด

  1. 1ทำไม ChatGPT Plus เห็น Dots แต่ใช้งานไม่ได้? เรื่องตลกของป้ายชื่อกับประตูล็อก
  2. 2ท่าเต้นรัมเพิลสติลต์สกินมาจากหนังเก่าเรื่องไหน? ไม่มีหนังเรื่องนั้น
  3. 3เกมต่างโลกโยนภารกิจมาไม่หยุด แต่ฉันแค่อยากกลับบ้านให้เร็วที่สุด
  4. 42XKO เตรียมเพิ่ม Sett กับ Samira วันที่ 27 ต.ค. แต่จะเป็นตัวละครใหม่ชุดสุดท้ายจริงหรือ?
  5. 5ชนะชีวิตในเกม 1 in 8 Billion คืออะไร? อายุยืน เงินเยอะ หรือคนที่รัก
โฆษณา