การกำหนดค่าสภาพแวดล้อมและข้อมูลลับ
การกำหนดค่าแบบ twelve-factor ตัวแปรสภาพแวดล้อม และข้อมูลลับของ Docker
การกำหนดค่าสภาพแวดล้อมและข้อมูลลับ เป็นบทเรียน Go Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Go Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Go Academy มีบทเรียนทั้งหมด 4 บทเรียน
การกำหนดค่าแอปแบบ 12 ปัจจัย
แนวทางแอปแบบ 12 ปัจจัยแนะนำให้จัดเก็บการกำหนดค่าไว้ในตัวแปรสภาพแวดล้อม ไม่ใช่ในโค้ดหรือไฟล์การกำหนดค่า วิธีนี้ทำให้แอปย้ายระหว่างสภาพแวดล้อมการพัฒนา การทดสอบก่อนใช้งานจริง และการใช้งานจริงได้โดยไม่ต้องแก้ไขโค้ด
os.Getenv
อ่านตัวแปรสภาพแวดล้อมด้วย os.Getenv (คืนค่า "" หากไม่ได้ตั้งค่า) หรือ os.LookupEnv (คืนค่ากับบูลีนที่ระบุว่ามีตัวแปรหรือไม่):
port := os.Getenv("PORT")
if port == "" { port = "8080" }
dsn, ok := os.LookupEnv("DATABASE_URL")
if !ok { log.Fatal("DATABASE_URL not set") }การโหลดไฟล์ .env
ใช้ github.com/joho/godotenv เพื่อโหลดไฟล์ .env ในการพัฒนา ในสภาพแวดล้อมจริง ให้แพลตฟอร์มเป็นผู้ฉีดตัวแปรสภาพแวดล้อมผ่าน Docker, Kubernetes หรือระบบคลาวด์
godotenv.Load() // loads .env if present; ignores error in prodการกำหนดค่าที่มีโครงสร้างด้วย envconfig
github.com/kelseyhightower/envconfig จะจับคู่ตัวแปรสภาพแวดล้อมกับฟิลด์ของโครงสร้าง พร้อมแปลงชนิดข้อมูลและตรวจสอบความถูกต้อง:
type Config struct {
Port int `envconfig:"PORT" default:"8080"`
DBUrl string `envconfig:"DB_URL" required:"true"`
LogLevel string `envconfig:"LOG_LEVEL" default:"info"`
}
var cfg Config
envconfig.MustProcess("", &cfg)การจัดการข้อมูลลับ
อย่าเก็บข้อมูลลับ เช่น รหัสผ่าน คีย์ API หรือใบรับรอง TLS ไว้ในตัวแปรสภาพแวดล้อมของสภาพแวดล้อมจริง เพราะข้อมูลเหล่านี้จะปรากฏในรายการกระบวนการและล็อก ให้ใช้ตัวจัดการข้อมูลลับ เช่น AWS Secrets Manager, HashiCorp Vault หรือ Kubernetes Secrets ที่เมานต์เป็นไฟล์
การอ่านข้อมูลลับจากไฟล์
เมานต์ข้อมูลลับเป็นไฟล์ แล้วอ่านข้อมูลเหล่านั้นเมื่อเริ่มต้นโปรแกรม:
secret, err := os.ReadFile("/run/secrets/db_password")
if err != nil { log.Fatal(err) }
dsn := fmt.Sprintf("postgres://user:%s@host/db", strings.TrimSpace(string(secret)))ข้อมูลลับของ Kubernetes
ใน Kubernetes ให้เมานต์ค่าจาก Secret เป็นตัวแปรสภาพแวดล้อมหรือเป็นไฟล์ในโวลุม โดยควรเลือกการเมานต์เป็นไฟล์ เนื่องจากสามารถหมุนเวียนข้อมูลลับได้โดยไม่ต้องเริ่มพ็อดใหม่
แฟล็กฟีเจอร์
เก็บชื่อแฟล็กฟีเจอร์ไว้ในตัวแปรสภาพแวดล้อมสำหรับการเปิดหรือปิดแบบง่าย ๆ หากเป็นกฎของแฟล็กที่ซับซ้อน เช่น การทยอยเปิดใช้งานตามเปอร์เซ็นต์หรือการกำหนดเป้าหมาย ให้ใช้บริการแฟล็กฟีเจอร์โดยเฉพาะ
การตรวจสอบการกำหนดค่าเมื่อเริ่มต้น
ตรวจสอบการกำหนดค่าที่จำเป็นทั้งหมดเมื่อเริ่มต้น และหยุดทำงานทันทีหากมีสิ่งใดขาดหายหรือไม่ถูกต้อง การหยุดทำงานทันทีดีกว่าปล่อยให้เกิดข้อผิดพลาดเมื่อได้รับคำขอแรก
if cfg.DBUrl == "" { log.Fatal("DB_URL required") }การกำหนดค่าที่ไม่เปลี่ยนแปลง
ถือว่าการกำหนดค่าไม่เปลี่ยนแปลงหลังจากเริ่มต้นแล้ว หากจำเป็นต้องอัปเดตการกำหนดค่าแบบทันที ให้ใช้บริการแฟล็กฟีเจอร์หรือแหล่งเก็บการกำหนดค่าที่มีกลไกเฝ้าดู แทนการโหลดตัวแปรสภาพแวดล้อมใหม่แบบทันที
การกำหนดค่าในการทดสอบ
ใช้ t.Setenv เพื่อตั้งค่าตัวแปรสภาพแวดล้อมตลอดระยะเวลาของการทดสอบ วิธีนี้ปลอดภัยสำหรับการทดสอบแบบขนานใน Go 1.17 ขึ้นไป
t.Setenv("PORT", "9090")
// test code here...ตรวจสอบความเข้าใจ
เหตุใดจึงไม่ควรเก็บข้อมูลลับไว้ในตัวแปรสภาพแวดล้อมของสภาพแวดล้อมจริง
สรุป: การกำหนดค่าสภาพแวดล้อมและข้อมูลลับ
ประเด็นสำคัญ:
- เก็บการกำหนดค่าไว้ในตัวแปรสภาพแวดล้อม และใช้ godotenv สำหรับไฟล์ .env ในการพัฒนาในเครื่อง
- ใช้ envconfig เพื่อเติมค่าลงในโครงสร้างที่ระบุชนิดข้อมูล พร้อมค่าปริยาย
- เมานต์ข้อมูลลับเป็นไฟล์ และใช้ Vault หรือ Secrets Manager ในสภาพแวดล้อมจริง
- ตรวจสอบการกำหนดค่าทั้งหมดเมื่อเริ่มต้น และหยุดทำงานทันทีหากมีสิ่งใดขาดหาย
เรียนรู้ Go ด้วย AI tutor — ฟรี
เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป
- คอร์ส
- 51
- บทเรียน
- 203
คำถามที่พบบ่อย
บทเรียน “การกำหนดค่าสภาพแวดล้อมและข้อมูลลับ” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การกำหนดค่าสภาพแวดล้อมและข้อมูลลับ” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Go Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Go Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การกำหนดค่าสภาพแวดล้อมและข้อมูลลับ”
การกำหนดค่าแบบ twelve-factor ตัวแปรสภาพแวดล้อม และข้อมูลลับของ Docker คุณปฏิบัติ Go Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Go Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Go Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน
บทเรียน “การกำหนดค่าสภาพแวดล้อมและข้อมูลลับ” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Go Academy นี้ได้ไหม
ได้ บทเรียน Go Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การสร้าง Docker หลายขั้นตอนสำหรับ Go
- การกำหนดค่าสภาพแวดล้อมและข้อมูลลับ
- Docker Compose สำหรับการพัฒนาในเครื่อง
- การตรวจสอบสถานะและการปรับแต่งสำหรับการใช้งานจริง