18 điểm bởi GN⁺ 2024-06-26 | 2 bình luận | Chia sẻ qua WhatsApp
  • Sau commit đầu tiên của dotenv vào tháng 7 năm 2013, trong 11 năm nó đã phát triển thành một trong những package được phụ thuộc nhiều nhất trên toàn thế giới
  • Đã đạt tới vị thế tương tự như các phần mềm thiết yếu như TypeScript và ESLint

Vấn đề của dotenv

  • Nguy cơ rò rỉ tệp .env
  • Khó quản lý nhiều môi trường
  • Thiếu tính nhất quán giữa các nền tảng

Giải pháp cho vấn đề: dotenvx

  • Hoạt động giống nhau trên mọi nền tảng
  • Hỗ trợ nhiều môi trường
  • Mã hóa tệp biến môi trường

Có thể chạy ở mọi nơi

  • Hoạt động giống nhau trên mọi ngôn ngữ, framework và nền tảng
  • Có thể inject biến môi trường vào lúc runtime bằng dotenvx run -- your-cmd
  • Engine phân tích .env, mở rộng biến và thay thế lệnh đều hoạt động nhất quán
  • Có thể cài đặt theo nhiều cách như npm, brew, curl, docker, windows
    $ echo "HELLO=World" > .env  
    $ echo "console.log('Hello ' + process.env.HELLO)" > index.js  
    $ node index.js  # không dùng dotenvx  
    Hello undefined  
    $ dotenvx run -- node index.js  # dùng dotenvx  
    Hello World  
    

Hỗ trợ nhiều môi trường

  • Tạo tệp .env.production rồi tải bằng tùy chọn -f
  • Có thể cấu hình nhiều môi trường bằng cách dùng nhiều cờ -f
    $ echo "HELLO=production" > .env.production  
    $ dotenvx run -f .env.production -- node index.js  
    [dotenvx][info] loading env (1) from .env.production  
    Hello production  
    

Mã hóa

  • Thêm mã hóa vào tệp .env bằng lệnh dotenvx encrypt
  • Sử dụng phương thức mã hóa khóa công khai
  • Ngay cả khi tệp .env bị lộ, cũng không thể giải mã nếu không có DOTENV_PRIVATE_KEY
  • Có thể thêm cấu hình mới trong dự án mã nguồn mở mà không cần giải mã các secret trước đó
    $ dotenvx encrypt  
    ✔ encrypted (.env)  
    

Phát hành phiên bản 1.0.0

  • Công bố phát hành dotenvx phiên bản 1.0.0
  • Đây có thể là công cụ quản lý cấu hình thế hệ tiếp theo mà nhiều nhà phát triển sẽ sử dụng

Ý kiến của GN⁺

  • dotenvx mang lại cả bảo mật lẫn sự tiện lợi
  • Hữu ích cho nhà phát triển vì có thể dễ dàng quản lý nhiều môi trường
  • Tính năng mã hóa đặc biệt hữu ích cho các dự án nhạy cảm về bảo mật
  • Các tính năng của dotenvx cung cấp tính nhất quán trên nhiều ngôn ngữ và nền tảng, từ đó nâng cao hiệu quả phát triển

2 bình luận

 
yangeok 2024-07-05

Không cần phân tách chế độ production và chế độ development ngay trong chương trình, mà có thể khai báo trực tiếp trong script chạy luôn nhỉ.

 
GN⁺ 2024-06-26
Ý kiến trên Hacker News
  • Không nên truyền thông tin bí mật qua biến môi trường. Biến môi trường có thể dễ dàng bị rò rỉ. Thay vào đó, nên đọc bí mật từ vault hoặc hệ thống tệp bên trong tiến trình.

  • Lý do dùng tệp .env là vì nó đơn giản và rõ ràng. Nếu muốn dùng cách cấu hình an toàn và mạnh mẽ hơn thì phải đọc tài liệu.

  • Đã bắt đầu sử dụng Mise cho công việc. Chưa dùng nhiều lắm nhưng có vẻ đầy hứa hẹn. Nó xử lý các tác vụ như khởi tạo DB test cục bộ, chạy script linting, đồng thời quản lý cả biến môi trường và môi trường ảo.

  • Vì rò rỉ bí mật là vấn đề lớn, nên việc mã hóa bí mật khi dùng dotenvx là lựa chọn khôn ngoan. Công cụ không hỗ trợ bí mật không được mã hóa sẽ an toàn hơn.

  • Nó giống Sops nhưng mặc định không có tính năng mã hóa. Sops tích hợp dễ dàng với AWS và các giải pháp quản lý khóa hiện có, và qua 5 năm dùng ở hai công ty thì thấy nó rất tốt.

  • Mã hóa rồi commit thông tin bí mật thì tiện, nhưng nếu ai đó truy cập được khóa mã hóa thì toàn bộ bí mật đều có thể bị lộ. Thiết lập trong secret manager của môi trường cloud rồi không đụng lại nữa sẽ an toàn hơn.

  • Biến môi trường bị chia sẻ quá mức còn tệp thì phụ thuộc vào quyền cục bộ. Cần một cách mới để truyền bí mật giữa các tiến trình. Ví dụ, truyền qua Unix socket theo kiểu chỉ có thể đọc đúng một lần.

  • Cần có tài liệu về cách đưa tệp .env vào vault một cách đúng đắn. Nếu vault được bảo vệ bằng mật khẩu thì lại phát sinh vấn đề phải viết mật khẩu vault ở dạng văn bản thuần để ứng dụng có thể đọc được.

  • Muốn quản lý mọi biến môi trường trong một tệp duy nhất theo định dạng TOML. Làm vậy sẽ dễ cập nhật, so sánh và chia sẻ hơn. Nhưng rất khó giữ sự nhất quán về tên môi trường. Điều này thường xuất phát từ các quyết định vội hoặc nhu cầu phát sinh, và mọi người ngại sửa nó.