- 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.productionrồ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
.envbằng lệnhdotenvx encrypt - Sử dụng phương thức mã hóa khóa công khai
- Ngay cả khi tệp
.envbị 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⁺
dotenvxmang 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
dotenvxcung 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
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ỉ.
Ý 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
.envlà 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ó.