Go Academy · บทเรียน

การกำหนดค่าสภาพแวดล้อมและข้อมูลลับ

การกำหนดค่าแบบ twelve-factor ตัวแปรสภาพแวดล้อม และข้อมูลลับของ Docker

บทเรียน 2 จาก 413 ขั้นตอน

การกำหนดค่าสภาพแวดล้อมและข้อมูลลับ เป็นบทเรียน 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. การสร้าง Docker หลายขั้นตอนสำหรับ Go
  2. การกำหนดค่าสภาพแวดล้อมและข้อมูลลับ
  3. Docker Compose สำหรับการพัฒนาในเครื่อง
  4. การตรวจสอบสถานะและการปรับแต่งสำหรับการใช้งานจริง
← กลับไปที่ Go Academy