ว่าด้วยเรื่องของ Env ใน Programming

Wasin Wachirapusitanun
odds.team
Published in
1 min readMay 15, 2024

ได้ความรู้ใหม่มาอีกแล้วหลังจากเขียน 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 แบบ

  1. OS Environment (OS Env)
  2. Environment File (.env File)

แล้วมันต่างกันยังไงล่ะ?

Example | OS ENV and 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 ด้วยตัวเอง

--

--

Wasin Wachirapusitanun
odds.team

I'm a Software Engineer. I wanna improve the software to easily understand and easily to maintain