ข้ามไปยังเนื้อหา

โหมด bundled และ headless

TOME_CMS_FRONTEND_MODE กำหนดว่าหน้าเว็บสาธารณะจะมาจาก TomeCMS เองหรือจากเว็บของคุณ ในโหมด bundled ซึ่งเป็นค่าเริ่มต้น TomeCMS แสดงหน้าเว็บเองด้วยธีมของเว็บ ส่วนในโหมด headless TomeCMS จะเลิกแสดงหน้าเหล่านั้น แล้วให้เว็บหรือแอปของคุณเองดึงเนื้อหาจาก Headless API ไปแสดงให้ผู้อ่าน หน้าแอดมินทำงานเหมือนกันทั้งสองโหมด

ในโหมด headless ที่อยู่เหล่านี้จะตอบ 404 พร้อมข้อความธรรมดา Not found.

ที่อยู่ สิ่งที่โหมด bundled แสดง
/ เปลี่ยนเส้นทางไปที่หน้าแรกในภาษาเริ่มต้นของเว็บ
/th และ /en หน้าแรกของแต่ละภาษา
/th/blog/<slug> และ /en/blog/<slug> บทความ
/th/<slug> และ /en/<slug> เพจ
/blog/<slug> ที่อยู่บทความแบบเก่า ซึ่งส่งผู้อ่านต่อไปที่บทความ
/sitemap.xml sitemap
/rss.xml ฟีด RSS

สิ่งที่ตั้งไว้ในเมนู “การเปลี่ยนเส้นทาง” ของหน้าแอดมินใช้ได้ในโหมด bundled เท่านั้น เพราะที่อยู่ของบทความและเพจข้างต้นเป็นตัวที่ส่งผู้อ่านต่อตามที่ตั้งไว้ ในโหมด headless ที่อยู่เก่าจึงตอบ 404 เหมือนที่อยู่อื่น และ API ก็ไม่ได้บอกว่าเนื้อหาย้ายไปที่ไหน เว็บของคุณต้องส่งผู้อ่านจากที่อยู่เก่าไปที่อยู่ใหม่เอง

ที่อยู่อื่นทั้งหมดตอบแบบเดียวกันไม่ว่าจะอยู่ในโหมดไหน

  • หน้าแอดมินที่ path ที่คุณเลือกไว้ในตัวช่วยตั้งค่าครั้งแรก และการเข้าสู่ระบบ
  • /install และ /recovery
  • /health/live และ /health/ready
  • /media/<id> ซึ่งส่งเบราว์เซอร์ต่อไปที่ไฟล์ใน bucket
  • Headless API ใต้ /api/v1/content/ รวมถึงการพรีวิวฉบับร่าง
  • /api/v1/stats/hit ซึ่งใช้นับผู้อ่าน
  • /robots.txt ซึ่งมีกฎต่างกันในแต่ละโหมด

ในบรรดา route ของ API มีเพียง route นับผู้อ่านที่ทำงานต่างกันตามโหมด ในโหมด bundled จะรับการนับจากตัวเว็บเองเท่านั้น ส่วนในโหมด headless จะรับจาก origin ใดก็ได้ เว็บของคุณจึงส่งการนับมาได้ วิธีส่งอยู่ในหน้านับผู้อ่านจากเว็บแบบ headless

ในโหมด bundled /robots.txt ให้ crawler เข้ามาได้ กันไม่ให้เข้า /api/ และบอกที่อยู่ของ sitemap

User-agent: *
Allow: /
Disallow: /api/
User-agent: OAI-SearchBot
Allow: /
Disallow: /api/
Sitemap: https://cms.example.com/sitemap.xml

ที่อยู่ของ sitemap มาจาก TOME_CMS_PUBLIC_URL

ในโหมด headless ไฟล์นี้ขอให้ crawler ทุกตัวอยู่นอก origin ของ CMS ทั้งหมด เพราะผู้อ่านจะเจอเนื้อหาของคุณบนเว็บของคุณเอง

User-agent: *
Disallow: /
User-agent: OAI-SearchBot
Disallow: /

ในโหมดนี้ TomeCMS ไม่มี sitemap หรือฟีดให้ จึงต้องเผยแพร่สองอย่างนี้จากเว็บของคุณเอง

ตั้งโหมดไว้ใน .env.local ในโฟลเดอร์โค้ด ถ้าในไฟล์ยังไม่มีบรรทัดนี้ให้เพิ่มเข้าไป

TOME_CMS_FRONTEND_MODE='headless'

แล้วรันสคริปต์ deploy อีกครั้ง

Terminal window
./scripts/deploy-vps.sh

คอนเทนเนอร์ของแอปรับค่าจาก .env.local ตอนที่ Compose สร้างคอนเทนเนอร์ ค่าใหม่จึงมีผลเมื่อสร้างคอนเทนเนอร์ขึ้นใหม่เท่านั้น สคริปต์ deploy ทำขั้นนี้ให้ทุกครั้งที่รัน และคงค่าอื่นในไฟล์ไว้ตามเดิม สคริปต์อ่าน TOME_CMS_FRONTEND_MODE จากไฟล์อย่างเดียว การ export ค่านี้ใน shell จึงไม่มีผลอะไร ค่าอื่น ๆ และวิธีที่สคริปต์จัดการค่าเหล่านั้นอยู่ในหน้าการตั้งค่า

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

การสลับโหมดเปลี่ยนแค่สิ่งที่ origin ตอบกลับ บทความ เพจ มีเดีย และการตั้งค่ายังอยู่ครบเหมือนเดิม ส่วนลิงก์ “ดูเว็บไซต์” ในหน้าแอดมินยังเปิด / ซึ่งตอบ 404 ในโหมด headless