สถาปัตยกรรมรันไทม์
ระบบที่ทำงานอยู่จริงเป็นการผสมกันของแอปไคลเอนต์ บริการที่มีการจัดการ และบริการแบบกำหนดเองที่โฮสต์บน AWS
วิธีที่ง่ายที่สุดในการทำความเข้าใจคือไล่ตามขอบเขตความไว้วางใจ
โทโพโลยีรันไทม์
โมเดลความไว้วางใจ
ทิศทางด้าน identity ของรีโพตอนนี้คือ:
- Authentik เป็นผู้ให้บริการ identity และแหล่งความจริงของ OIDC
- Supabase ยังคงเป็นชั้นข้อมูลแอปและการอนุญาต
- ความสามารถของแบ็กเอนด์แบบกำหนดเองอยู่ใน NestJS API
สิ่งนี้สร้างโมเดลรันไทม์แบบไฮบริด:
- identity ไม่ได้เป็นของ frontend
- ข้อมูลหลักของผลิตภัณฑ์ไม่ได้ถูก hard-code ไว้ใน API
- บาง workflow ยังขับเคลื่อนด้วยบริการ ในขณะที่ API แบบกำหนดเองค่อย ๆ เติบโต
รันไทม์ของ AIRS
สำหรับ AIRS รันไทม์ปัจจุบันมี Expo app เป็นศูนย์กลาง:
- แอปชุดเดียวกันรองรับทั้งพฤติกรรมเนทีฟบนมือถือและการเผยแพร่บนเว็บ
- การยืนยันตัวตนถูก abstraction ผ่านแพ็กเกจ auth ที่ใช้ร่วมกัน
- Supabase เป็นส่วนหนึ่งของโมเดลการเชื่อมต่อฝั่งไคลเอนต์อยู่แล้ว
- พฤติกรรมที่เกี่ยวข้องกับวอลเล็ทมีอยู่ในสแตกของแอปสาธารณะ
กล่าวอีกแบบ AIRS ไม่ใช่แค่ frontend เชิงการตลาดแบบ static แต่เป็นจุดเร ิ่มต้นของรันไทม์แอปจริง
รันไทม์ของแอดมิน
คอนโซลแอดมินถูกแยกออกจาก AIRS สาธารณะอย่างตั้งใจ:
- มีเป้าหมายการปรับใช้ของตัวเอง
- ใช้ OIDC flow ผ่าน Authentik
- ออกแบบมาสำหรับการใช้งานภายในและงานปฏิบัติการ
- สามารถปล่อยร่วมกับ API แบบกำหนดเองใน dashboard stack แบบรวมได้
การแยกเช่นนี้ช่วยลดการ coupling โดยไม่ตั้งใจระหว่างเส้นทางของผู้ใช้สาธารณะกับ workflow ของผู้ปฏิบัติการภายใน
รันไทม์ของเอกสาร
ระบบเอกสารมีสองโหมด:
- การส่งมอบเอกสารสาธารณะผ่าน Docusaurus
- เวิร์กโฟลว์บรรณาธิการที่มีการป้องกันผ่าน Decap CMS ร ่วมกับการควบคุมด้วย Authentik
นั่นหมายความว่าเอกสารถูกปฏิบัติเป็นพื้นผิวผลิตภัณฑ์จริง ที่มีทั้งการยืนยันตัวตน เวิร์กโฟลว์เนื้อหา และ dependency ของโครงสร้างพื้นฐาน ไม่ใช่แค่โฟลเดอร์ markdown แบบ static