Có thể phân chia development mode và production mode bằng file .env được không?

168 lượt xem

profile picture

Ẩn danh

Ngày 16 tháng 06 năm 2023

Hiện tại thì em đang dùng 2 file là .env.production.local và .env.development.local để phân chia hai mỗi trường dev mode và prod mode. Ví dụ về kênh yêu cầu API thì ở dev mode em sẽ là test server còn ở prod mode thì sẽ là server thật Nhưng khi e có nói chuyện với 1 bạn dev ở cty khác thì mọi ng lại bảo là họ chỉ dùng một file .env duy nhất để phân chia dev mode và prod mode thôi. Tại vì file .env có thể tự đổi dev mode thành prod mode được. Không biết là có đúng vậy không ạ?

Đánh giá câu hỏi ngay!

Hãy ấn Up Vote với những câu hỏi cụ thể và chi tiết

Hãy ấn Down Vote với những câu hỏi chưa rõ ràng Careerly sẽ nhắc người hỏi chỉnh sửa lại.

3 câu trả lời

BEST

Ảnh đại diện của Tuan Nguyen Van

Hi bạn ẩn danh. Mình gợi ý cho bạn thử xem okela không nhé. Hiện tại, tất cả project mình từng làm từ Back-end: Go, Java, Python hay Front-end: ReactJS, VueJS đều cũng chỉ sự dụng 1 file .env thôi. Trước hết nói qua định nghĩa về biến môi trường để hiểu rõ và từ đó suy ra vì sao ta set được biến môi trường Định nghĩa: Biến môi trường là một giá trị được đặt trong môi trường hoạt động của một hệ thống máy tính. Nó là một giá trị động có thể được sử dụng bởi các chương trình hoạt động trên hệ thống để thay đổi cách chúng hoạt động. Các biến môi trường thường được lưu trữ trong phiên làm việc hiện tại và có hiệu lực trong phiên làm việc đó. Các biến môi trường có thể được đặt và xem bằng cách sử dụng lệnh "export" trong cửa sổ dòng lệnh. Quay lại câu hỏi của bạn trước tiên mình trả lời câu của bạn: Mình không biết bạn đang làm FE hay BE nhưng đa phần sẽ lưu, khai báo các biến môi trường trong 1 file có đuôi .env ( file trong code này chỉ để lưu đỡ quên và chạy trên local thôi ) trong code và set các biến này ở trên môi trường dev, prod. Để đọc các biến môi trường này thì bạn có thể dùng thư viện sẵn có của từng ngôn ngữ để đọc và lấy ra. Ví dụ: - NodeJS: Bạn có thể lấy biến môi trường bằng thằng process => const value = process.env.VARIABLE_NAME; - Golang: Bạn có thể dùng os để lấy biến môi trường => os.Getenv("DB_SOURCE") Để bảo mật an toàn hơn thay vì set ở biến môi trường có thể trường hợp khi bị hacker tấn công => hacker đọc hết thông tin => bạn có thể tìm hiểu thêm về Vault nhé. Hi vọng câu trả lời của mình sẽ giúp bạn 1 phần nào đó. Nice weekend!

Ảnh đại diện của Hieu Pham

Cá nhân mình thấy thì có vẻ như bạn đang dùng NextJS (Nếu không đúng thì thôi nha =)) ), mà nói chung thì đối với đa phần các dự án, việc quy định nên tổ chức file env như nào chủ yếu vẫn là tự team đánh giá xem phương án nào là phù hợp với quy mô, tình hình của team...một nhóm các dự án trong 1 team thì nên tổ chức giống nhau, tuy nhiên các dự án của các team khác nhau thì không cần thiết lắm. Việc phân chia các file dev và prod riêng ra được cái là sẽ khá dễ quản lý, tuy nhiên thì 2 file cũng sẽ mất công cấu hình chuyển đổi hơn so với 1 file, đó là tất yếu. Còn việc file .env tự đổi từ prod về dev hay ngược lại thì chắc chắn là không có "tự" rồi, luôn luôn sẽ có 1 nào đó cấu hình ở đâu đó đề handle việc chuyển đổi này, chỉ có điều bạn biết hay không mà thôi. Đối với Nextjs nói riêng thì có kha khá nhiều cách để có thể switch giữa 2 file này, cũng còn tùy thuộc vào cách code của dev hay tổ chức thống nhất của các team nữa, tuy nhiên một trong những cách đơn giản nhất nếu muốn dùng chung 1 file cho các môi trường dev lẫn prod đó là cứ tạo 1 file chung (tuy nhiên vẫn phải define riêng tham số cho từng môi trường nha) rồi switch trong code lúc đọc env ra. Nói chung về mặt công nghệ thì dĩ nhiên là có thể làm được, tuy nhiên việc đặt cả môi trường Prod và Dev vào chung 1 file cá nhân mình thấy là không hợp lý, đặc biệt là với team size lớn vì dev cũng không nhất thiết phải biết rõ thông tin về prod làm gì, chưa kể nếu các file env chứa các key mã hóa chẳng hạn thì sẽ đem đến nguy cơ cao lộ lọt các thông tin về bảo mật. Trong case này thì mình nghĩ vẫn nên là tách 2 file riêng ra sẽ là hợp lý nhất.

Ảnh đại diện của Phan Đăng Lâm

Ở các dự án bên mình thì sẽ quản lý như thế này. 1/ Các biến môi trường cho prod: Chỉ có leader hoặc 1 vài bên liên quan chịu trách nhiệm quản lý. Không share cho member không liên quan. 2/ Các biến môi trường cho staging hoặc dev: Có thể chia sẻ cho member sử dụng. Cho nên các thông tin biến môi trường nên lưu vào document và set quyền tương ứng. Kết luận: file .env chỉ cần tạo 1 file.

Đăng ký ngay bây giờ để đọc toàn bộ câu trả lời!

Cộng đồng lập trình viên sẽ giải đáp tường tận cho bạn.

Xem thêm

Đồng ý với Điều khoản dịch vụ Chính sách bảo mật của Careerly

Bạn đã có tài khoản rồi?

Đăng ký ngay bây giờ để đọc toàn bộ câu trả lời!

Cộng đồng lập trình viên sẽ giải đáp tường tận cho bạn.