12 factor - Mrsmithz/Project-SW-Dev-and-Env GitHub Wiki
12 Factor
-
Codebase ควรใช้ Codebase เดียวกัน หรือมีลักษณะแบบ 1 ต่อ 1 ระหว่าง Codebase และ App เสมอ
-
Dependencies มีการระบุ Dependencies ให้ชัดเจนว่าใช้ Package อะไร version อะไร
-
Config มีการจัดการ Config โดยมีการกำหนด Environment Variable ครบทุกตัวที่ใช้ในระบบโดยเก็บแยกไว้เช่น .env
-
Backing Services มีการเรียกใช้ service ภายนอก
-
Build, Release, Run เมื่อ Source Code พร้อมที่จะ Deploy แล้ว เราก็จะทำ 3 ขั้นตอน โดยแบ่งเป็น
- Build stage — คือ แปลงจาก Source Code ไปเป็นซอฟต์แวร์ที่พร้อมจะทำงาน (executable)
- Release stage — คือ นำซอฟต์แวร์ที่ได้จากขั้นตอน Build มารวมกับ Config เพื่อเตรียมนำไปใช้งาน
- Run stage (หรือ “runtime”) — นำซอฟต์แวร์ไปใช้งานใน Environment ต่างๆ
-
Processes Application Application ควรทำงานแบบ Stateless Process คือ จะไม่เก็บข้อมูลบน Server แต่หากจำเป็นต้องเก็บ ต้องทำ Backing Services เก็บข้อมูลแทน
-
Port Binding ระบุ Port ชัดเจน
-
Concurrency สามารถปรับ Scale out (Horizontal scaling)
-
Disposability แอปพลิเคชันเรา Startup Time ต้องไว และมีการจัดการข้อมูลให้เรียบร้อยเมื่อมีการ Shutdown
-
Dev/prod parity ทำสภาพแวดล้อมของ Development, Staging และ Production ให้เหมือนกันมากที่สุด
-
Logs ทำ Logs ให้เป็น Event Streams
-
Admin processes เตรียมคำสั่งสำหรับงานแอดมินเพื่อสร้าง Process ที่ใช้ Release เดียวกับแอปพลิเคชัน
ตัวอย่างการนำไปใช้ 12-Factor
-
Codebase ใช้ Git Version Control ในการทำงาน
-
Dependencies มีการกำหนด Dependencies ภายใน package.json ตัวอย่าง
-
Config มีการกำหนด Environment Variable ภายในไฟล์ .env
-
Build, release, run มีการใช้ Dockerfile และ docker-compose.ymal
-
Port binding มีการกำหนด Port ชัดเจน