Ortam değişkeni yapılandırması
İçindekiler:
Özet
Sorun
Uygulamalarımızın, dağıtım ortamına bağlı olarak farklı davranabilmesi için yapıtlar/ikili dosyalar/kaynak kodunun ötesinde yapılandırılabilir olmasını istiyoruz.
Bunu başarmak için ortam değişkeni yapılandırmasını kullanmak istiyoruz.
Yapılandırmayı sürüm kontrolü yapabileceğimiz dosyaları kullanarak yönetmek istiyoruz.
Nelerin yapılandırılabileceği ve ilgili varsayılanlar gibi bazı geliştirici deneyimi ergonomisi sağlamak istiyoruz.
Karar
İlgili varsayılan dosya ve şema dosyası ile .env dosyalarına karar verildi.
Durum
Karar verildi. Ortaya çıkan yeni yetenekleri değerlendirmeye açığız.
Ayrıntılar
Varsayımlar
Uygulama kodunu ve ortam kodunu ayırmayı tercih ediyoruz. Uygulamanın geliştirme ortamı, test ortamı, demo ortamı, üretim ortamı vb. gibi farklı ortamlarda farklı çalışması gerektiğini varsayıyoruz.
"12 faktörlü uygulama" endüstri uygulamasını ve hatta daha da ilgili olan "15 faktörlü uygulama" uygulamasını tercih ediyoruz.
Önceki projelerimizin çoğu, bir .env dosyası veya benzeri .env dizini kuralını kullanmıştır. Bunları sürüm kontrolünden uzak tutmak ve bunun yerine bunları dağıtmak, sürümlemek ve yönetmek için başka bir yol kullanmak tipik bir uygulamadır.
Kısıtlamalar
Gizli bilgileri kaynak kod yönetim (SCM) sürüm kontrol sistemimizden (VCS) uzak tutmak istiyoruz.
Popüler yazılım çerçeveleri ve kütüphaneleriyle uyumluluğu hedeflemek istiyoruz. Örneğin, Node'un ortam değişkeni yapılandırmasını okumak için "dotenv" adlı bir modülü vardır.
Pozisyonlar
Birkaç yaklaşımı değerlendirdik:
Yapılandırmayı
config.jsdosyası gibi uygulamada depolayın.Yapılandırmayı
.envdosyası gibi ortamda depolayın.Yapılandırmayı lisans sunucusu gibi bilinen bir konumdan alın.
Argüman
.env dosyası yaklaşımını seçtik çünkü:
Uzmanlar da dahil olmak üzere popülerdir.
Ekiplerimizin birçok projede defalarca başarıyla kullandığı
.envdosyaları modelini takip eder.Basittir. Özellikle, bir lisans sunucusu yaklaşımına kıyasla denetim yeteneklerinin eksikliği gibi gördüğümüz önemli ödünleşimlerle şimdilik sorun yaşamıyoruz.
Etkiler
Ortam değişkeni yapılandırmasını genelden herhangi bir gizli bilgi yönetiminden ayırmanın bir yolunu bulmamız gerekiyor.
Bağlantılı
Bağlantılı kararlar
Tüm uygulamalarımızın bu yaklaşımı kullanmasını bekliyoruz.
İkili dosyada veya kaynak kodda sabit kodlama gibi daha az yetenekli bir yaklaşım kullanan uygulamalarımızı yükseltmeyi planlayacağız.
Lisans sunucusu gibi daha yetenekli bir yaklaşım kullanan uygulamalarımızı olduğu gibi tutacağız.
Bağlantılı gereksinimler
Dosyalar için kancalar, testler ve sürekli entegrasyon dahil olmak üzere devops yetenekleri ekleyeceğiz.
Bu karar hakkında tüm geliştirici ekip arkadaşlarını eğitmemiz gerekiyor.
Bağlantılı eserler
Dağıttığımız her alanın kendi .env dosyasına ve ilgili dosyalara ihtiyacı olacaktır.
Bağlantılı ilkeler
Kolayca geri döndürülebilir.
Notlar
Örnek .env dosyası:
NAME=Alice Anderson
EMAIL=alice@example.com
Örnek .env.defaults dosyası:
NAME=Joe Doe
EMAIL=joe@example.com
Sadece anahtarları içeren örnek .env.schema dosyası:
NAME
EMAIL