18 คะแนน โดย GN⁺ 2024-06-26 | 2 ความคิดเห็น | แชร์ทาง WhatsApp
  • หลังจากคอมมิตแรกของ 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 ความคิดเห็น

 
yangeok 2024-07-05

ในโปรแกรมไม่ต้องแยกโหมดโปรดักชันกับโหมดพัฒนา และยังประกาศได้ตรงจากสคริปต์รันเลยสินะ

 
GN⁺ 2024-06-26
ความคิดเห็นบน Hacker News
  • ไม่ควรส่งต่อข้อมูลลับผ่านตัวแปรสภาพแวดล้อม เพราะตัวแปรสภาพแวดล้อมรั่วไหลได้ง่าย ควรให้อ่านข้อมูลลับจาก vault หรือจากระบบไฟล์ภายในโปรเซสแทน

  • เหตุผลที่ใช้ไฟล์ .env คือมันเรียบง่ายและชัดเจน ถ้าจะใช้วิธีจัดการคอนฟิกที่ปลอดภัยและทรงพลังกว่า ก็ต้องไปอ่านเอกสาร

  • เริ่มใช้ Mise กับงานแล้ว ยังไม่ได้ใช้มากนักแต่ดูมีอนาคต ใช้มันจัดการงานอย่างการตั้งค่าเริ่มต้น local test DB การรันสคริปต์ lint และยังจัดการตัวแปรสภาพแวดล้อมกับ virtual environment ได้ด้วย

  • เพราะการรั่วไหลของข้อมูลลับเป็นปัญหาใหญ่ จึงเป็นเรื่องฉลาดที่จะเข้ารหัสข้อมูลลับเมื่อใช้ dotenvx เครื่องมือที่ไม่รองรับข้อมูลลับแบบไม่เข้ารหัสจะปลอดภัยกว่า

  • คล้ายกับ Sops แต่ไม่มีความสามารถเข้ารหัสเป็นค่าเริ่มต้น Sops ผสานรวมกับ AWS และโซลูชันจัดการกุญแจที่มีอยู่ได้ง่าย และจากที่เคยใช้ในที่ทำงานสองแห่งตลอด 5 ปีที่ผ่านมา ถือว่าดีมาก

  • การเข้ารหัสข้อมูลลับแล้วคอมมิตนั้นสะดวก แต่ถ้าเข้าถึงกุญแจเข้ารหัสได้ ข้อมูลลับทั้งหมดก็อาจถูกเปิดเผยได้ การตั้งค่าไว้ในตัวจัดการข้อมูลลับของคลาวด์แล้วไม่ต้องไปแตะอีกจะปลอดภัยกว่า

  • ตัวแปรสภาพแวดล้อมถูกแชร์มากเกินไป ส่วนไฟล์ก็ขึ้นอยู่กับสิทธิ์ในเครื่อง จึงจำเป็นต้องมีวิธีใหม่ในการส่งข้อมูลลับระหว่างโปรเซส เช่น ส่งผ่าน Unix socket ในลักษณะที่อ่านได้เพียงครั้งเดียว

  • ควรมีเอกสารอธิบายวิธีใส่ไฟล์ .env ลงใน vault อย่างถูกต้อง หาก vault ถูกป้องกันด้วยรหัสผ่าน ก็จะเกิดปัญหาว่าเราต้องเขียนรหัสผ่านของ vault เป็นข้อความล้วนเพื่อให้แอปพลิเคชันอ่านได้

  • อยากจัดการตัวแปรสภาพแวดล้อมทั้งหมดในไฟล์เดียวด้วยรูปแบบ TOML แบบนี้จะอัปเดต เปรียบเทียบ และแชร์ได้ง่ายขึ้น แต่การรักษาความสม่ำเสมอของชื่อ environment ทำได้ยาก ซึ่งมักเกิดจากการตัดสินใจแบบเร่งด่วนหรือความจำเป็น และคนก็มักไม่กล้าแก้ไข