Hầu hết thời gian, tôi lưu trữ cấu hình ứng dụng phát triển trong thư mục gốc của dự án, như thế này:
app
|-- config.json
Nhưng đó dường như không phải là cách tiếp cận tốt nhất, vì cấu hình này cuối cùng được lưu trữ trong hệ thống kiểm soát phiên bản - có thể dẫn đến tên người dùng, mật khẩu bị rò rỉ và các nội dung nhạy cảm khác.
12 Hướng dẫn ứng dụng Factor khuyên bạn nên bỏ hoàn toàn các tệp cấu hình và sử dụng các biến môi trường để thiết lập cấu hình:
... lưu trữ cấu hình trong các biến môi trường. Env vars dễ dàng thay đổi giữa các triển khai mà không thay đổi bất kỳ mã nào; Không giống như các tập tin cấu hình, rất ít khả năng chúng được kiểm tra vào mã repo một cách tình cờ; và không giống như các tệp cấu hình tùy chỉnh hoặc các cơ chế cấu hình khác như Thuộc tính hệ thống Java, chúng là một tiêu chuẩn không biết ngôn ngữ và hệ điều hành.
Điều đó nghe có vẻ thực sự tốt với tôi, nhưng một cửa hàng nói các biến môi trường ở đâu, mà không kiểm tra chúng trong kiểm soát nguồn? Và công cụ nào tôi có thể sử dụng để chuyển các biến đó vào ứng dụng? Có thể có hàng tá tùy chọn cấu hình và nhập chúng bằng tay mỗi khi bạn khởi chạy ứng dụng không đẹp - vì vậy chúng phải được lưu trữ trong một số loại tệp ở đâu đó. Do đó, tập tin đã nói sẽ kết thúc trong kiểm soát nguồn và chúng tôi quay trở lại nơi chúng tôi đã bắt đầu.
Có một số cách xử lý tùy chọn cấu hình được chấp nhận phổ biến, điều đó không có nguy cơ lưu trữ cấu hình cục bộ trong kiểm soát nguồn?
.gitignore
nơi tôi có thể xác định các tệp hoặc thư mục không nên được kiểm tra trong kiểm soát phiên bản. Như bạn nói tôi không thấy nơi Env vars thực sự có ích, vì bạn có một tập lệnh để đặt chúng và nên được lưu trữ cùng với dự án hoặc bạn có chúng 'ở đâu đó' trên hệ thống của bạn (thư mục chính hoặc ngay cả khi máy khởi động các tập lệnh) dường như tự tạo ra rất nhiều vấn đề, đặc biệt là nếu cần nhiều cấu hình. Trong mọi trường hợp, tôi sẽ phân chia các tệp cấu hình để thông tin bí mật đi vào các tệp khác nhau.