ว่าด้วยเรื่องของ Env ใน Programming
ได้ความรู้ใหม่มาอีกแล้วหลังจากเขียน Golang ได้สักพัก เนื่องจากช่วงนี้เป็นช่วง Deploy Service ที่ทีมเราได้สร้างขึ้น
เล่าก่อนว่า เรามาจากฝั่ง JavaScript หรือ TypeScript เวลาที่เราทำ .env file ตอนที่เราเอาไป Deploy ก็สามารถที่จะ Replace Variable แล้วเอาไปใช้ได้เลยในตอน Run-time
แต่ ๆๆๆๆ Golang ไม่ได้เป็นอย่างนั้น เราเลยติดตรงนี้หลายวันมาก แล้วไปเจอ Solution ตอน Build-time สุดท้ายปรากฎว่าใช้งานได้
แต่เหตุการณ์ไม่คาดคิดก็เกิดขึ้น มันไม่สามารถทำหลาย ๆ Service ได้ เช่นตอนทำ DR Site กลายเป็นว่า Image นั้น Environment มันเป็นของ Service ตัวหลัก
แล้วในความเป็นจริง .env เราควรไว้ใน Build-time จริงไหมนะ?
เราได้ไปปรึกษาพี่ ๆ Senior DevOps แล้วพบความจริงที่ว่า Environment มันมี 2 แบบ
- OS Environment (OS Env)
- Environment File (.env File)
แล้วมันต่างกันยังไงล่ะ?
1️⃣ OS Environment เป็น Environment ของเครื่องที่เราสามารถ Access เข้าไปได้ เช่น HOSTNAME
, HOME
, PWD
เป็นต้น
2️⃣ Environment File เป็นการทำ File Configuration เพิ่มเติมขึ้นมา ที่มี Variable ต่าง ๆ เพิ่มเติม เช่น DATABASE_NAME
, PORT
โดยทั่วไปจะเป็นคนละตัวกันอยู่แล้ว ไม่ว่าจะเป็น Programming Language ไหน
แต่ที่เราเคยเจอใน JavaScript หรือ TypeScript มันมักจะเอา Value ใน .env file ไป Replace ที่ OS env ให้เอง เลยไม่ต้องทำอะไร
ดังนั้นพอเรารู้อย่างนี้สิ่งที่ต้องทำคือ ไปกำหนด Command ให้ไป Write Environment จาก .env File ตอน Deploy
sh -c env > /app/.env
ทีนี้เราก็จะสามารถใช้ Environment ตอน Run-time ได้เหมือนเดิมแล้ว 🎉
เป็นบทเรียนที่ว่าเราต้องลองดูให้ดีว่า Programming Language ตัวไหนที่เราต้อง Replace Environment ด้วยตัวเอง