จาก dotenv สู่ dotenvx - ตัวจัดการคอนฟิกยุคถัดไป
(dotenvx.com)- หลังจากคอมมิตแรกของ dotenv ในเดือนกรกฎาคม 2013 ก็เติบโตตลอด 11 ปีจนกลายเป็นหนึ่งในแพ็กเกจที่มีการพึ่งพามากที่สุดทั่วโลก
- ก้าวขึ้นสู่สถานะใกล้เคียงกับซอฟต์แวร์สำคัญอย่าง TypeScript และ ESLint
ปัญหาของ dotenv
- มีความเสี่ยงที่ไฟล์ .env จะรั่วไหล
- จัดการหลายสภาพแวดล้อมได้ยาก
- ขาดความสม่ำเสมอข้ามแพลตฟอร์ม
วิธีแก้ปัญหา: dotenvx
- ทำงานเหมือนกันบนทุกแพลตฟอร์ม
- รองรับหลายสภาพแวดล้อม
- เข้ารหัสไฟล์ตัวแปรสภาพแวดล้อม
รันได้ทุกที่
- ทำงานเหมือนกันในทุกภาษา เฟรมเวิร์ก และแพลตฟอร์ม
- สามารถ inject ตัวแปรสภาพแวดล้อมขณะรันไทม์ได้ด้วย
dotenvx run -- your-cmd - เอนจินสำหรับพาร์ส .env, การขยายตัวแปร, การแทนที่คำสั่ง และอื่น ๆ ทำงานเหมือนกัน
- ติดตั้งได้หลายวิธี เช่น npm, brew, curl, docker, windows
$ echo "HELLO=World" > .env $ echo "console.log('Hello ' + process.env.HELLO)" > index.js $ node index.js # เมื่อไม่มี dotenvx Hello undefined $ dotenvx run -- node index.js # เมื่อใช้ dotenvx Hello World
รองรับหลายสภาพแวดล้อม
- สร้างไฟล์
.env.productionแล้วโหลดด้วยออปชัน-f - สามารถกำหนดค่าหลายสภาพแวดล้อมได้ด้วยการใช้แฟลก
-fหลายตัว$ echo "HELLO=production" > .env.production $ dotenvx run -f .env.production -- node index.js [dotenvx][info] loading env (1) from .env.production Hello production
การเข้ารหัส
- เพิ่มการเข้ารหัสให้ไฟล์ .env ได้ด้วยคำสั่ง
dotenvx encrypt - ใช้วิธีเข้ารหัสแบบกุญแจสาธารณะ
- แม้ไฟล์ .env จะรั่วไหล ก็ไม่สามารถถอดรหัสได้หากไม่มี
DOTENV_PRIVATE_KEY - ในโปรเจกต์โอเพนซอร์สสามารถเพิ่มคอนฟิกใหม่ได้โดยไม่ต้องถอดรหัสความลับเดิม
$ dotenvx encrypt ✔ encrypted (.env)
เปิดตัวเวอร์ชัน 1.0.0
- ประกาศเปิดตัว dotenvx เวอร์ชัน 1.0.0
- น่าจะเป็นเครื่องมือจัดการคอนฟิกยุคถัดไปที่นักพัฒนาจำนวนมากสามารถนำไปใช้ได้
ความเห็นของ GN⁺
dotenvxมอบทั้งความปลอดภัยและความสะดวกในการใช้งาน- ช่วยให้จัดการหลายสภาพแวดล้อมได้ง่าย จึงมีประโยชน์สำหรับนักพัฒนา
- ความสามารถด้านการเข้ารหัสมีประโยชน์อย่างยิ่งกับโปรเจกต์ที่อ่อนไหวด้านความปลอดภัย
- ความสามารถของ
dotenvxสร้างความสม่ำเสมอข้ามภาษาและแพลตฟอร์ม ช่วยเพิ่มประสิทธิภาพการพัฒนา
2 ความคิดเห็น
ในโปรแกรมไม่ต้องแยกโหมดโปรดักชันกับโหมดพัฒนา และยังประกาศได้ตรงจากสคริปต์รันเลยสินะ
ความคิดเห็นบน Hacker News
ไม่ควรส่งต่อข้อมูลลับผ่านตัวแปรสภาพแวดล้อม เพราะตัวแปรสภาพแวดล้อมรั่วไหลได้ง่าย ควรให้อ่านข้อมูลลับจาก vault หรือจากระบบไฟล์ภายในโปรเซสแทน
เหตุผลที่ใช้ไฟล์
.envคือมันเรียบง่ายและชัดเจน ถ้าจะใช้วิธีจัดการคอนฟิกที่ปลอดภัยและทรงพลังกว่า ก็ต้องไปอ่านเอกสารเริ่มใช้ Mise กับงานแล้ว ยังไม่ได้ใช้มากนักแต่ดูมีอนาคต ใช้มันจัดการงานอย่างการตั้งค่าเริ่มต้น local test DB การรันสคริปต์ lint และยังจัดการตัวแปรสภาพแวดล้อมกับ virtual environment ได้ด้วย
เพราะการรั่วไหลของข้อมูลลับเป็นปัญหาใหญ่ จึงเป็นเรื่องฉลาดที่จะเข้ารหัสข้อมูลลับเมื่อใช้ dotenvx เครื่องมือที่ไม่รองรับข้อมูลลับแบบไม่เข้ารหัสจะปลอดภัยกว่า
คล้ายกับ Sops แต่ไม่มีความสามารถเข้ารหัสเป็นค่าเริ่มต้น Sops ผสานรวมกับ AWS และโซลูชันจัดการกุญแจที่มีอยู่ได้ง่าย และจากที่เคยใช้ในที่ทำงานสองแห่งตลอด 5 ปีที่ผ่านมา ถือว่าดีมาก
การเข้ารหัสข้อมูลลับแล้วคอมมิตนั้นสะดวก แต่ถ้าเข้าถึงกุญแจเข้ารหัสได้ ข้อมูลลับทั้งหมดก็อาจถูกเปิดเผยได้ การตั้งค่าไว้ในตัวจัดการข้อมูลลับของคลาวด์แล้วไม่ต้องไปแตะอีกจะปลอดภัยกว่า
ตัวแปรสภาพแวดล้อมถูกแชร์มากเกินไป ส่วนไฟล์ก็ขึ้นอยู่กับสิทธิ์ในเครื่อง จึงจำเป็นต้องมีวิธีใหม่ในการส่งข้อมูลลับระหว่างโปรเซส เช่น ส่งผ่าน Unix socket ในลักษณะที่อ่านได้เพียงครั้งเดียว
ควรมีเอกสารอธิบายวิธีใส่ไฟล์ .env ลงใน vault อย่างถูกต้อง หาก vault ถูกป้องกันด้วยรหัสผ่าน ก็จะเกิดปัญหาว่าเราต้องเขียนรหัสผ่านของ vault เป็นข้อความล้วนเพื่อให้แอปพลิเคชันอ่านได้
อยากจัดการตัวแปรสภาพแวดล้อมทั้งหมดในไฟล์เดียวด้วยรูปแบบ TOML แบบนี้จะอัปเดต เปรียบเทียบ และแชร์ได้ง่ายขึ้น แต่การรักษาความสม่ำเสมอของชื่อ environment ทำได้ยาก ซึ่งมักเกิดจากการตัดสินใจแบบเร่งด่วนหรือความจำเป็น และคนก็มักไม่กล้าแก้ไข