Environment variables nedir ki?

Erdem Köşk
Kodcular
Published in
3 min readMar 2, 2020

Node js ile uygulamamızı geliştirirken elimizde bir sürü parametre oluyor genelde. Api’ın hangi portta ayağa kalkacağı yada bizim için kritik şifreleme paternlerimizi sakladığımız yer vb gibi.

Bir uygulamayı yayınlamak, geliştiricilerin nasıl yayınladıklarını düşünmelerini gerektiren büyük bir yoldur. Birçok uygulama, prod ortamına dağıtılmadan önce bir dev ortamında denenir veya geliştirilir. Her ortamın doğru yapılandırıldığından emin olmalıyız, örneğin prod uygulamamız dev veritabanımızı kullanıyorsa felaket olabilir.

Bunları static dosyalara yazmak bir çözüm gibi görünebilir ancak işleyişte pekte akıllıca olduğunu söylemek gerekir. Şimdi gelelim bunun sebeplerine…

Nedir bu Environment variables?

Ortam değişkenleri, işletim sistemimizde bulunan veya uygulamanın kapsayıcısında çalışan uygulamamızın dışındaki değişkenlerdir. Ortam değişkeni, bir değere eşitlenen bir addır. Örnek vermek gerekirse

const test = ‘test’;

gibi bir değişken atama ve veri tutma durumu sadece kod yazarken ve programın içinden yapılır. Ancak aslında environment variables ile bu program dışından da yapılabilinir.

Yani durumu göre çalışan bir programın hali hazırdaki verilerini değiştirebilir ve bunun için tek satır koda dokunmamız gerekmez.

Peki Neden Kullanılırız?

Bu kullanışlı yapıyı kullanmak için o kadar fazla sebep ve neden sayabiliriz ki. Ancak belli başlı olanlara değinmek faydalı olucaktır.

1)Güvenlik

Evet, yanlış duymadınız . Yazdığımız api yapımızda elimizde kullanıcıları hashlemek için şifremiz olsun. Bu şifre ile verileri hashler ve bu şifre ile tekrar eski haline getiririz. Peki bu şifreyi nasıl şifreliyeceğiz?

Hmmm… Bu pek makul gelmemeye başladı. Yazdığımız bu şifreyi dosya içine yazarsak doğrudan git gibi sistemlerle kodun içinde repomuzda saklamak zorunda kalacağız. Her girenin görebileceği bir şifre ne kadar güvenli olabilir ki ? Ama gerekli parametreleri .env dosyamızda tutup bunu stage folderına almazsak hep güvende kalabiliriz!

2)Pratik

Kim bir port numarasını değiştirmek için kodu değiştirmek ister ki ? Hele birden fazla takım halinde çalışıyorsak… Bu tam bir kabusa dönebilir. Ancak duruma göre paramterleri değiştirerek tek bir tuşla ayar yapabilme keyfi… İşte bu paha biçilemez.

Nasıl Kullanırım?

Büyük uygulamalar birçok ortam değişkenine sahip olma eğilimindedir. Bunları daha iyi yönetmek için, ortam değişkenlerini bir dosyadan yüklememizi sağlayan npm kütüphanesi olan dotenv kütüphanesini kullanabiliriz.

test.js

const http = require('http');  
const hostname = process.env.HOST || 'localhost';

const port = process.env.PORT || 3000;

http.createServer((req, res) => {
res.statusCode = 200;
res.setHeader('Content-Type', 'application/json'); res.end(`{"message": "Hello World"}`); });
server.listen(port, hostname, () => {
console.log(`Server running at http://${hostname}:${port}/`);
});

Yukarıdaki kod betiği ile göründüğü üzere hostname ve port’u dışarıdan alıcağımızı söyledik. Burada her koşul için yinede default bir veri atamanızı tavsiye ederim.

Şimdi uygulamamızı terminalden direkt başlatırsak

nodemon .

Görüceğimiz şu olucak

Server running at http://localhost:3000/

Bu hiçbir env belirtecimiz olmadan başlatma süreciydi . Peki böyle başlatsaydık ?

HOST=127.0.0.1 PORT=4000 node test.js

Elde edeceğimiz sonuç ise …

Server running at http://127.0.0.1:4000/

Evettttt kafamızda bir ampül yandı değil mi ? Kolayca gerekli değişkenleri dışardan yönetmeyi başardık.

Peki bu değişkenleri her seferinde terminalden mi vermemiz gerekecek?

Tabiki hayır… Burada imdadımıza dotenv koşuyor. Gelin hep beraber kurulum yapalım.

npm install dotenv --save

Şimdi yapmamız gereken 2 adımımız var…

1)Öncelikle .env adında bir dosya yaratmak ve içine istediğimiz değişkenleri yazmak diyebilirim. Bu sürekli değişkenleri terminalden verme olayımızı durdurucak.

HOST=localhost 
PORT=3000

2) test.js kodumuza şu kod satırını eklemek.

require('dotenv').config()

Eveet artık hazırız!

SONUÇ

Environment variables uygulamamızın kodu dışında bulunur, uygulamamızın çalıştığı yerde kullanılabilir. Uygulamalarımızın yapılandırmasını kodundan ayırmak için kullanılabilir, bu da uygulamalarımızın farklı ortamlara kolayca dağıtılmasını sağlar. Node.js uygulamalarında, ortam değişkenleri process.env genel değişkeni aracılığıyla kullanılabilir. .Env dosyası hiçbir zaman kaynak kodu deposunda olmamalıdır.

--

--