Archi's Academy

BLACK FRIDAY

85% de descuento durante todo noviembre

whatsapp
Contáctanos

Software Development

Coding

Node.js’te Ortam Değişkenleri Nasıl Tanımlanır ve Kullanılır? Uygulamalı Rehber

Veritabanı şifrelerini, API anahtarlarını ve gizli bilgileri doğrudan kaynak koda yazmak, veri sızıntılarının en kestirme yoludur. Üretim uygulamaları bu verileri güvenle yönetmek için ortam değişkenleri kullanır – gelin bunu doğru şekilde yapalım.

Ortam Değişkenleri Neden Bu Kadar Önemli?

Bir Node.js uygulaması geliştiriyorsunuz. Kodunuzun bir veritabanı şifresine, üçüncü parti bir servisten alınan API anahtarına ve geliştirme/üretim ortamına göre değişen ayarlara ihtiyacı var.
Temelde üç seçeneğiniz var:
  1. Her şeyi koda gömmek (hardcode) – Veritabanı şifresi config.js içinde, API anahtarı bir yorum satırında, tüm sırlar git’e commit edilmiş. Bu, hacklenmenin en garantili yollarından biridir. Yapmayın.
  2. Ortam değişkenleri kullanmak – Hassas verileri koddan ayırırsınız. Geliştirme, test ve üretim için farklı değerler kullanabilirsiniz. Güvenli, ölçeklenebilir ve sektörde standart.
  3. Gizli yönetim hizmeti kullanmak – AWS Secrets Manager, HashiCorp Vault vb. Büyük ölçekli sistemler için kurumsal yaklaşım.
Çoğu proje ve ekip için, özellikle başlangıçta, dotenv ile ortam değişkenleri en mantıklı çözümdür.

Ortam Değişkenleri Aslında Nedir?

Ortam değişkenleri, işletim sistemi seviyesinde tanımlanan ve uygulamanızın çalışma anında okuyabildiği değerlerdir.
Bir örnek:
DB_PASSWORD=supersecret123
API_KEY=abc123xyz789
NODE_ENV=production
Bu değerleri kodunuza gömmek yerine, Node.js içinde şöyle okursunuz:
const password = process.env.DB_PASSWORD; // "supersecret123"
const apiKey = process.env.API_KEY;       // "abc123xyz789"
const env = process.env.NODE_ENV;        // "production"
İşletim sistemi bu değerleri, Node.js’te global bir nesne olan process.env içine enjekte eder. Uygulama ayağa kalktığında hepsi oradadır.

Neden Önemli?

Güvenlik: Sırlar kaynak kodda veya git geçmişinde görünmez. Depoyu açık kaynak yapsanız bile şifreleriniz ortada olmaz.
Yapılandırma Yönetimi: Geliştirme, staging ve üretim gibi farklı ortamlar için farklı değerler atayabilirsiniz; kodu değiştirmek zorunda kalmazsınız.
Deploy Esnekliği: Aynı kod tabanını farklı sunuculara deploy edersiniz, her sunucu kendi ortam değişkenlerini sağlar ve uygulama otomatik uyum sağlar.

Sorun: Değişkenleri Elle Ayarlamak Yorucu

Her geliştirici için ve her deploy ortamında ortam değişkenlerini tek tek elle ayarlamak zahmetli.
macOS/Linux’ta:
export DB_HOST=localhost
export DB_PASSWORD=mypassword
export API_KEY=key123
Windows (PowerShell) için:
$env:DB_HOST="localhost"
$env:DB_PASSWORD="mypassword"
$env:API_KEY="key123"
Ekipteki herkesin bunu tekrar tekrar yapması gerekiyor. Her CI/CD pipeline’ında da aynı hikâye. Hata yapmaya çok açık bir süreç.
Tam bu noktada dotenv hayat kurtarıyor.

Dotenv Kullanımı: En Kolay Yol

Dotenv, .env dosyanızdaki ortam değişkenlerini otomatik olarak process.env içine yükleyen küçük ama çok kullanışlı bir Node.js kütüphanesidir.

Adım 1: Dotenv’i Kurun

npm install dotenv
veya Yarn ile:
yarn add dotenv

Adım 2: .env Dosyası Oluşturun

Proje kök dizininde bir .env dosyası açın:
DB_HOST=localhost
DB_PORT=5432
DB_USER=admin
DB_PASSWORD=mysecurepassword
API_KEY=abc123xyz789
NODE_ENV=development
JWT_SECRET=your-jwt-secret-key
LOG_LEVEL=info

Adım 3: Uygulamada Değişkenleri Yükleyin

Uygulamanızda, en başta (bu değişkenlere ihtiyaç duyan herhangi bir koddan önce) dotenv’i çağırın:
// app.js veya server.js – İLK SATIR
require('dotenv').config();


// Artık process.env kullanılabilir
const express = require('express');
const app = express();


const dbHost = process.env.DB_HOST;
const dbPort = process.env.DB_PORT;
const apiKey = process.env.API_KEY;


console.log(`Veritabanına bağlanılıyor: ${dbHost}:${dbPort}`);
app.listen(3000);
Kritik nokta: require('dotenv').config() çağrısını, ortam değişkenlerine ihtiyaç duyan tüm require/import’lardan önce yapın.

Adım 4: .env Dosyasını .gitignore’a Ekleyin

.env dosyasını asla git’e commit etmeyin. Aksi takdirde tüm sırlar repoda görünür.
# .gitignore
.env
.env.local
.env.*.local

Adım 5: Şablon Dosyası Paylaşın (Sır Olmadan)

Aynı anahtarları içeren ama sahte/değiştirilecek değerler barındıran bir .env.example oluşturun:
# .env.example – Commit edilecek olan bu
DB_HOST=localhost
DB_PORT=5432
DB_USER=admin
DB_PASSWORD=change_me
API_KEY=change_me
NODE_ENV=development
JWT_SECRET=change_me
LOG_LEVEL=info
Ekip arkadaşlarınız bu dosyayı kopyalayıp kendi makinalarında doldurur:
cp .env.example .env
# Sonra .env içini gerçek değerlerle güncelleyin

Uygulamalı Örnek: Express API ve Ortam Değişkenleri

Express.js ile basit ama gerçekçi bir örnek düşünelim:
// server.js
require('dotenv').config();


const express = require('express');
const postgres = require('pg');


const app = express();


// Ortamdan yapılandırmayı oku
const config = {
  db: {
    host: process.env.DB_HOST,
    port: process.env.DB_PORT,
    user: process.env.DB_USER,
    password: process.env.DB_PASSWORD,
    database: process.env.DB_NAME
  },
  api: {
    port: process.env.PORT || 3000,
    apiKey: process.env.API_KEY,
    jwtSecret: process.env.JWT_SECRET
  },
  env: process.env.NODE_ENV || 'development'
};


// Zorunlu değişkenleri doğrula
if (!config.api.apiKey) {
  throw new Error('API_KEY ortam değişkeni zorunludur');
}


// Veritabanına bağlan
const pool = new postgres.Pool(config.db);


// Rotalar
app.get('/api/users', (req, res) => {
  const authHeader = req.headers.authorization;
  const token = authHeader?.split(' ');[11]


  // JWT_SECRET ile token doğrulama
  if (!token) {
    return res.status(401).json({ error: 'Unauthorized' });
  }


  // Connection pool ile sorgu çalıştır
  pool.query('SELECT * FROM users', (err, result) => {
    if (err) throw err;
    res.json(result.rows);
  });
});


// Sunucuyu başlat
const port = config.api.port;
app.listen(port, () => {
  console.log(`Sunucu ${config.env} modunda ${port} portunda çalışıyor`);
});
Bu yapı ile:
  • Veritabanı bilgileri .env dosyasından gelir
  • API anahtarları ve diğer sırlar ortam değişkeni olarak yönetilir
  • Aynı kod, farklı .env dosyalarıyla dev, staging ve prod’da çalışır
  • Hiçbir hassas bilgi git deposuna girmez

Ortam Değişkenleri İçin En İyi Pratikler

1. Gerekli Değişkenleri Uygulama Başlangıcında Doğrulayın

DB_PASSWORD eksik olduğu için runtime’da hata almak yerine, uygulama açılır açılmaz kontrol edin.
require('dotenv').config();


const required = ['DB_HOST', 'DB_USER', 'DB_PASSWORD', 'API_KEY'];
const missing = required.filter(key => !process.env[key]);


if (missing.length > 0) {
  throw new Error(`Eksik ortam değişkenleri: ${missing.join(', ')}`);
}

2. Merkezî Bir Config Nesnesi Kullanın

Projenin her yerine process.env.XYZ yazmak yerine, tek bir konfigürasyon modülü oluşturun:
// config.js
require('dotenv').config();


module.exports = {
  database: {
    host: process.env.DB_HOST,
    port: process.env.DB_PORT,
    user: process.env.DB_USER,
    password: process.env.DB_PASSWORD
  },
  api: {
    key: process.env.API_KEY,
    jwtSecret: process.env.JWT_SECRET
  },
  app: {
    port: process.env.PORT || 3000,
    environment: process.env.NODE_ENV || 'development'
  }
};


// Kullanım
const config = require('./config');
console.log(config.database.host);

3. Farklı Ortamlar İçin Farklı .env Dosyaları

.env           # Varsayılan / geliştirme
.env.production # Üretime özel ayarlar
.env.test       # Test ortamı
Doğru dosyayı yükleyin:
const envFile = process.env.NODE_ENV === 'production'
  ? '.env.production'
  : '.env';

require('dotenv').config({ path: envFile });

4. İlgili Değişkenleri Ön Eklerle Gruplayın

Okunabilirliği artırmak için değişkenleri mantıksal gruplara ayırın:
# Veritabanı
DB_HOST=localhost
DB_PORT=5432
DB_USER=admin


# Redis
REDIS_HOST=localhost
REDIS_PORT=6379


# Üçüncü parti servisler
STRIPE_API_KEY=sk_...
SENDGRID_API_KEY=SG_...

5. Her Değişkeni Belgelerle Açıklayın

.env.example içinde yorum satırları ekleyin:
# Veritabanı bağlantısı
DB_HOST=localhost      # PostgreSQL sunucu adresi
DB_PORT=5432           # PostgreSQL portu
DB_USER=admin          # Veritabanı kullanıcı adı
DB_PASSWORD=change_me  # Veritabanı şifresi


# API ayarları
API_KEY=change_me      # Üçüncü parti servis API anahtarı
JWT_SECRET=change_me   # JWT imzalama için gizli anahtar


# Uygulama
PORT=3000              # Express sunucu portu
NODE_ENV=development   # Ortam (development/staging/production)

Üretimde Dotenv Yerine Ne Kullanılır?

Geliştirme ve küçük projeler için dotenv fazlasıyla yeterli. Daha büyük sistemler ve kurumsal ortamlarda ise şu seçenekler öne çıkıyor:

AWS Secrets Manager

Gizli bilgileri AWS içinde tutar, uygulama çalışma anında çeker. Bulut ortamları için daha güvenli.

HashiCorp Vault

Kurumsal seviyede gizli yönetimi: rotasyon, loglama, detaylı yetkilendirme.

CI/CD Ortam Değişkenleri

GitHub Actions, GitLab CI, CircleCI gibi platformlar ortam değişkenlerini pipeline seviyesinde tanımlamanıza izin verir. Sunucuda ekstra .env dosyasına gerek kalmaz.

Kubernetes Secrets

Kubernetes kullanıyorsanız, yapılandırma ve gizli bilgileri Secrets ve ConfigMap üzerinden yönetebilirsiniz.
Öğrenme ve Node.js’e giriş aşamasında, özellikle Archi’s Academy gibi içeriklerde, başlangıç için önerilen yaklaşım hâlâ dotenv’tir.

Node.js’i Gerçek Anlamda Öğrenmek

Ortam değişkenleri, üretim için hazır bir Node.js uygulamasının sadece bir parçası. Konfigürasyon, deploy ve operasyon tarafını anlamak, yalnızca “kod yazan” geliştiricilerden bir adım öne geçmenizi sağlar.
Archi's Academy içindeki Backend Development track, sadece Node.js kodu yazmayı değil, aynı zamanda API’leri gerçek ortamlarda nasıl konfigüre edip ölçekleyeceğinizi de öğretir.
Learn by Doing. Prove by Doing. Get Hired.
Screenshot from 2026-07-20 15-16-00.png

Sonuç: Sırlar Kodda Değil, Ortamda Kalmalı

Gizli bilgileri doğrudan kaynak koda yazmak ciddi bir güvenlik açığıdır. Ortam değişkenleri, hassas yapılandırmaları yönetmek için sektör standardıdır. Bu deseni erken öğrenirseniz, sızan şifreler yüzünden kriz yaşama ihtimaliniz dramatik şekilde düşer.
Geliştirmede dotenv ile başlayın, deseni anlayın. Uygulamanız büyüdükçe, ihtiyaç oldukça gizli yönetimi için daha gelişmiş araçlara geçin.

Ortam değişkenleri, Node.js konfigürasyonu veya backend en iyi pratikleri hakkında sorularınız mı var? Archi's Academy ekibi yardımcı olmaya hazır – istediğiniz zaman bizimle iletişime geçin.
archis-trainee

Abanseka Sylvester

Pazartesi, Tem 20, 2026