Ortam Değişkeni
- İngilizcesi
- Environment Variable
- Okunuşu
- invayrınmınt veriıbıl
Günlük kullanımda iki ad da yaygın.
Kısaca
Ortam değişkeni, programın dışında işletim sistemi ya da çalışma zamanınca ayarlanan, programın davranışını yapılandırmak için okuduğu adlandırılmış değerdir.
Ortam değişkeni nedir?
Ortam değişkeni, PORT=3000 ya da NODE_ENV=production gibi, programın koduna değil programın çalıştığı ortama ait bir anahtar-değer çiftidir. Her süreç başlarken üst sürecinin ortam değişkenlerinin bir kopyasını alır ve program nasıl davranacağına karar vermek için bunları okuyabilir. İşletim sistemleri de kendi ayarları için bunları kullanır; örneğin PATH, kabuğun komutları aradığı klasörleri listeler.
Ortam değişkenleri, aynı koda farklı yerlerde farklı ayarlar vermenin, örneğin bir dizüstü bilgisayardaki yerel veritabanı ile bulutta canlı ortamdaki veritabanı arasında geçiş yapmanın standart yoludur. Yapılandırmayı bu şekilde kod tabanının dışında tutmak, twelve-factor app metodolojisinin temel fikridir. Node.js'te bunları process.env.NAME ile, Python'da os.environ ile, kabukta ise $NAME ile okursunuz; konteynerler, CI/CD pipeline'ları ve barındırma platformlarının hepsi bunları ortam bazında ayarlamanıza izin verir.
Kiralık bir arabanın ayarlarını düşünün: araba (kodunuz) herkes için aynıdır, ama her sürücü yola çıkmadan önce koltuğu ve aynaları (değişkenleri) ayarlar. Yerel geliştirme sırasında birçok proje değişkenleri, başlangıçta bir kütüphane ya da çalışma zamanı tarafından yüklenen bir .env dosyasında tutar; örneğin Node.js bir tanesini --env-file bayrağıyla okuyabilir.
Yaygın bir hata, ortam değişkenlerini otomatik olarak gizli saymaktır. API anahtarları gibi gizli bilgiler için pratiktirler, ancak bir .env dosyası asla Git'e commit edilmemelidir; onu .gitignore dosyasına ekleyin ve bunun yerine yer tutucu değerler içeren bir .env.example dosyasını commit edin. Ayrıca frontend framework'lerinde tarayıcıya açılan ve genellikle NEXT_PUBLIC_ ya da VITE_ gibi bir önekle işaretlenen değişkenler JavaScript paketinin içine gömülür ve herkes tarafından görülebilir; bu yüzden asla gizli bilgi içermemelidir.
Önemli noktalar
- Ortam değişkenleri, kod tarafından değil ortam tarafından sağlanan anahtar-değer ayarlarıdır.
- Aynı kodun her ortamda farklı yapılandırmayla çalışmasını sağlar.
- Alt süreçler, üst süreçlerinin ortam değişkenlerinin bir kopyasını devralır.
- Gizli bilgiler içeren
.envdosyalarını asla sürüm kontrolüne commit etmeyin. - Frontend koduna açılan değerler herkese açıktır; bu yüzden gizli bilgileri sunucuda tutun.
Örnek
# Set a variable for the current shell session, then read it
export API_URL="https://api.example.com"
echo "$API_URL"
# Set a variable for a single command only
PORT=8080 node server.js
# List all environment variables, or show just your PATH
env
echo "$PATH"
# Load variables from a .env file into a Node.js app (Node.js 20.6 and later)
node --env-file=.env server.jsSık sorulan sorular
.env dosyası nedir?
.env dosyası, yerel geliştirme için ortam değişkenlerini saklayan KEY=value satırlarından oluşan düz bir metin dosyasıdır. Araçlar ve çalışma zamanları onu başlangıçta yükler; çoğunlukla gizli bilgiler içerdiği için .gitignore dosyasında listelenmelidir.
Ortam değişkenleri gizli bilgileri saklamak için güvenli midir?
Gizli bilgileri kaynak koda gömmekten daha güvenlidir ama tamamen güvenli değildir; çünkü süreçteki her kod, hatta bazen çökme raporları ya da hata ayıklama araçları bunları okuyabilir. Canlı ortamda birçok ekip, değerleri çalışma zamanında enjekte eden, rotasyonu ve erişim kontrolünü destekleyen özel bir gizli bilgi yöneticisi kullanır.
Ortam değişkenim neden undefined?
Yaygın nedenler; adda yazım hatası, değişkeni farklı bir terminal oturumunda ayarlamak, değişiklikten sonra uygulamayı yeniden başlatmayı unutmak ya da frontend framework'lerinde gerekli genel öneki eklememektir. Değişkenler bir süreç başlarken okunur; bu yüzden değişiklikler zaten çalışmakta olan programları etkilemez.
İlgili sayfalar
- DeğişkenProgramlamanın Temelleri, s. 10Değişken, bir programda sayı ya da metin gibi bir değeri tutan ve kodun çalışırken okuyup değiştirebildiği, adlandırılmış bir depolama alanıdır.
- Node.jsBackend ve API'ler, s. 31Node.js, JavaScript'i tarayıcı dışında çalıştıran, en çok web sunucuları, API'ler ve komut satırı araçları için kullanılan açık kaynaklı çalışma ortamıdır.
- API AnahtarıGüvenlik, s. 2API anahtarı, API çağrılarında uygulamayı veya projeyi tanımlayan, erişim denetimi, kullanım takibi ve hız sınırı için kullanılan benzersiz gizli bir dizedir.
- .gitignoreSürüm Kontrolü, s. 1.gitignore, Git'in izlememesi gereken bağımlılık, derleme çıktısı, günlük ve gizli bilgi gibi dosya ve klasörlerin kalıplarını listeleyen düz metin dosyadır.
- DockerDevOps ve Bulut, s. 15Docker, bir uygulamayı ve ihtiyaç duyduğu her şeyi, her makinede aynı şekilde çalışan bir konteyner içinde paketlemeye yarayan açık kaynaklı bir platformdur.
- CI/CDDevOps ve Bulut, s. 9CI/CD, kod değişikliklerini sık sık derleyen, test eden ve yayınlayan otomatik pratikler bütünüdür; yazılım kullanıcılara hızlı ve güvenli biçimde ulaşır.
- Twelve-Factor AppYazılım Mimarisi, s. 44Twelve-factor app, bulutta taşınabilir, dağıtımı kolay ve ölçeklenmesi basit olması için on iki pratiğe göre geliştirilmiş bir web uygulamasıdır.
Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin