0Pricing
AI Agents · Ders

Aracılar İçin Ortam Değişkenleri

os.environ, os.getenv() ve gizli bilgileri kaynak koduna neden asla sabit olarak yazmamanız gerektiği.

Aracılar İçin Ortam Değişkenleri, CoddyKit'te ücretsiz bir AI Agents dersidir. Bu, 4 dersinin 1. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, AI Agents öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. AI Agents kursu toplamda 4 dersten oluşur.

API Anahtarları Neden Sabit Kodlanmamalı?

API anahtarlarını doğrudan kaynak koduna sabit yazmak, en yaygın ve maliyetli güvenlik hatalarından biridir. Sürüm denetimine kaydedilen anahtarlar; gelecekteki katkıcılar, sürekli tümleştirme sistemleri ve depoyu çevrimiçi bulan herkes dahil olmak üzere repository erişimi olan herkes tarafından görülebilir.

Git Geçmişi Sorunu

Sabit kodlanmış bir anahtarı daha sonra kodunuzdan silseniz bile anahtar git geçmişinizde kalır. Repository'yi klonlayan herkes git log veya git show çalıştırarak anahtarı bulabilir. Anahtarlar sürüm denetimine asla girmemelidir.

import os

os.environ['OPENAI_API_KEY'] = 'sk-proj-abc123def456'  # simulate deployment env

OPENAI_API_KEY = os.environ['OPENAI_API_KEY']
print('Key loaded from environment — never hard-coded')

os.environ[] ile os.getenv()

Ortam değişkenlerini okumanın iki yolu vardır. os.environ['KEY'], değişken eksikse KeyError oluşturur; bu, zorunlu anahtarlar için kullanışlıdır. os.getenv('KEY', default) ise değişken eksik olduğunda varsayılan bir değer döndürür; bu da isteğe bağlı ayarlar için kullanışlıdır.

import os

os.environ['OPENAI_API_KEY'] = 'sk-proj-demo-key'

try:
    openai_key = os.environ['OPENAI_API_KEY']
except KeyError:
    print('ERROR: OPENAI_API_KEY environment variable is not set!')
    raise

model = os.getenv('AGENT_MODEL', 'gpt-4o-mini')
timeout = float(os.getenv('AGENT_TIMEOUT', '30'))
log_level = os.getenv('LOG_LEVEL', 'INFO')
max_steps = int(os.getenv('AGENT_MAX_STEPS', '20'))

print(f'Model: {model}, Timeout: {timeout}s, Log: {log_level}')

Başlangıçta Gerekli Ortam Değişkenlerini Doğrulama

En iyi uygulamalardan biri, başlangıçta gerekli tüm ortam değişkenlerini kontrol etmek ve anlaşılır bir hata mesajıyla hemen durmaktır. Bu, bir anahtar eksik olduğunda ajan döngüsünün derinliklerinde ortaya çıkan ve hata ayıklaması zor çalışma zamanı hatalarını önler.

import os
import sys

REQUIRED_VARS = [
    'OPENAI_API_KEY',
    'SEARCH_API_KEY',
    'DATABASE_URL'
]

def check_required_env_vars():
    missing = [var for var in REQUIRED_VARS if not os.getenv(var)]
    if missing:
        print('FATAL: Missing required environment variables:')
        for var in missing:
            print(f'  - {var}')
        print('\nSet these in your .env file or shell environment.')
        sys.exit(1)
    print(f'All {len(REQUIRED_VARS)} required environment variables are set.')

# Call this at the very start of your agent:
# check_required_env_vars()

if __name__ == '__main__':
    for var in REQUIRED_VARS:
        os.environ.setdefault(var, 'demo-value')
    check_required_env_vars()

12 Faktörlü Uygulama İlkesi

12 Faktörlü Uygulama yöntemi, modern yazılımlar için en iyi uygulamaları tanımlar. Faktör III: Yapılandırmayı ortamda saklayın. Dağıtımlar arasında değişen her şey (geliştirme, hazırlık, üretim) — API anahtarları, URL'ler ve özellik bayrakları — koddan değil, ortam değişkenlerinden gelmelidir.

import os

os.environ['OPENAI_API_KEY'] = 'sk-proj-demo'
os.environ['SEARCH_API_KEY'] = 'tvly-demo'
os.environ['DATABASE_URL'] = 'postgresql://user:pass@localhost/agentdb'

config = {
    'openai_key': os.environ['OPENAI_API_KEY'],
    'search_key': os.environ['SEARCH_API_KEY'],
    'database_url': os.environ['DATABASE_URL'],
    'redis_url': os.getenv('REDIS_URL', 'redis://localhost:6379'),
    'enable_caching': os.getenv('ENABLE_CACHING', 'true') == 'true',
    'max_results': int(os.getenv('MAX_RESULTS', '10')),
    'log_level': os.getenv('LOG_LEVEL', 'INFO'),
    'env': os.getenv('ENV', 'development')
}

print('Config loaded from environment:', config['env'])

Kabukta Ortam Değişkenlerini Ayarlama

Ortam değişkenlerini terminal oturumunuzda export (Mac/Linux) veya set (Windows) ile ayarlayın. Bu değişkenlere, o oturumda çalıştırılan tüm programlar erişebilir.

# Mac/Linux (bash/zsh):
# export OPENAI_API_KEY='sk-proj-your-key-here'
# export AGENT_MODEL='gpt-4o-mini'
# python agent.py

# Windows (Command Prompt):
# set OPENAI_API_KEY=sk-proj-your-key-here
# python agent.py

# Windows (PowerShell):
# $env:OPENAI_API_KEY = 'sk-proj-your-key-here'
# python agent.py

# One-liner (temporary, only for this command):
# OPENAI_API_KEY='sk-proj-...' python agent.py

print('Shell exports set env vars for the current session only')

Gerekli Değişkenleri Kod Yorumlarında Listeleme

Ajanınızın gerektirdiği ortam değişkenlerini doğrudan kaynak kodunda belgelendirin. Yeni bir geliştirici, ajan dosyanızın en üst kısmını okuyarak tam olarak neleri yapılandırması gerektiğini anlayabilmelidir.

# agent.py
#
# REQUIRED ENVIRONMENT VARIABLES:
#   OPENAI_API_KEY       OpenAI API key (get from platform.openai.com)
#   SEARCH_API_KEY       Tavily search API key (get from tavily.com)
#
# OPTIONAL ENVIRONMENT VARIABLES:
#   AGENT_MODEL          LLM model (default: gpt-4o-mini)
#   AGENT_MAX_STEPS      Max loop iterations (default: 20)
#   LOG_LEVEL            Logging verbosity: DEBUG|INFO|WARNING (default: INFO)
#   DATABASE_URL         PostgreSQL URL (default: none, disables memory storage)
#
# EXAMPLE SETUP:
#   cp .env.example .env
#   Edit .env with your keys
#   python agent.py --query 'Your question'

print('Document required variables at the top of each agent file')

İç İçe Yapılandırmaya Güvenli Erişim

Çok sayıda yapılandırma seçeneği olan ajanlar için tüm ortam değişkenlerini tek bir yerde okuyup doğrulayan bir yapılandırma sınıfı oluşturun. Bu, doğrulamayı merkezileştirir ve kodunuzun geri kalanını daha temiz hâle getirir.

import os

class AgentConfig:
    def __init__(self):
        self.openai_key = self._require('OPENAI_API_KEY')
        self.search_key = self._require('SEARCH_API_KEY')
        self.model = os.getenv('AGENT_MODEL', 'gpt-4o-mini')
        self.max_steps = int(os.getenv('AGENT_MAX_STEPS', '20'))
        self.log_level = os.getenv('LOG_LEVEL', 'INFO')
        self.env = os.getenv('ENV', 'development')

    def _require(self, key: str) -> str:
        value = os.getenv(key)
        if not value:
            raise EnvironmentError(
                f'Required environment variable {key} is not set. '
                f'See .env.example for setup instructions.'
            )
        return value

# config = AgentConfig()  # raises clear error if any key is missing
# client = openai.OpenAI(api_key=config.openai_key)

if __name__ == '__main__':
    os.environ.setdefault('OPENAI_API_KEY', 'sk-demo-1234')
    os.environ.setdefault('SEARCH_API_KEY', 'demo-search-key')
    config = AgentConfig()
    print(f'Model: {config.model}, max_steps: {config.max_steps}, env: {config.env}')

Günlüklerde Anahtarları Maskeleme

Ham API anahtarlarını asla günlüğe kaydetmeyin. Hata ayıklamak için yapılandırmayı günlüğe kaydetmeniz gerekiyorsa son 4 karakter dışındaki tüm karakterleri maskeleyin. Böylece anahtarın yüklendiğini doğrularken anahtarı açığa çıkarmazsınız.

import os

def mask_key(key: str) -> str:
    if not key or len(key) < 8:
        return '****'
    return '*' * (len(key) - 4) + key[-4:]

def log_config_summary(config: dict):
    print('Agent configuration:')
    for name, value in config.items():
        if 'key' in name.lower() or 'secret' in name.lower() or 'token' in name.lower():
            print(f'  {name}: {mask_key(value)}')
        else:
            print(f'  {name}: {value}')

config = {
    'openai_key': os.getenv('OPENAI_API_KEY', ''),
    'model': 'gpt-4o-mini',
    'max_steps': '20'
}
log_config_summary(config)
# openai_key: ****abcd
# model: gpt-4o-mini

Docker ve CI'da Ortam Değişkenleri

Docker'da ortam değişkenlerini -e bayraklarıyla veya bir --env-file ile aktarın. GitHub Actions'ta bunları gizli bilgiler olarak saklayın ve iş akışı YAML'ında bunlara başvurun. Bunları Docker imajına asla gömmeyin.

# Docker run with env vars:
# docker run -e OPENAI_API_KEY='sk-...' -e AGENT_MODEL='gpt-4o-mini' myagent:latest

# Docker with an env file:
# docker run --env-file .env myagent:latest

# GitHub Actions workflow (secrets stored in repo settings):
# env:
#   OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
#   SEARCH_API_KEY: ${{ secrets.SEARCH_API_KEY }}

# docker-compose.yml:
# services:
#   agent:
#     image: myagent:latest
#     env_file:
#       - .env

print('Never bake secrets into Docker images — always inject at runtime')

Bir Anahtar Açığa Çıktığında Ne Yapılmalı

Bir API anahtarını herkese açık veya paylaşılan bir repository'ye yanlışlıkla kaydederseniz hemen harekete geçin. Anahtarın kontrolünüzden çıktığı anda ele geçirildiğini varsayın; botlar bir kayıt yapıldıktan saniyeler içinde GitHub'ı anahtarlar için tarar.

# Immediate response if a key is exposed:
# 1. REVOKE the key immediately (provider dashboard)
#    OpenAI: platform.openai.com/api-keys -> Delete key
#    Anthropic: console.anthropic.com -> API Keys
# 2. Generate a new key
# 3. Update your .env file with the new key
# 4. Rotate in all environments (staging, prod)

# Remove from git history (does NOT guarantee removal from forks/clones):
# git filter-branch or git-filter-repo to rewrite history
# Force push to all branches

# Note: Rewriting git history cannot undo exposure
# if others have already cloned or forked the repo
print('Revoke immediately. Do not just remove from code — rotate the key.')

Bilgi Kontrolü: Ortam Değişkenleri

Ajan gizli bilgilerinin yönetiminde ortam değişkenlerini anlayıp anlamadığınızı sınayın.

Özet: Ajanlar için Ortam Değişkenleri

Ajanlar için gizli bilgi yönetiminde doğru yaklaşımı artık biliyorsunuz:

  • API anahtarlarını asla sabit kodlamayın; git geçmişinde sonsuza dek kalırlar
  • Zorunlu değişkenler için os.environ['KEY'], isteğe bağlı değişkenler için os.getenv('KEY', default) kullanın
  • Gerekli tüm değişkenleri başlangıçta anlaşılır bir hata mesajıyla doğrulayın
  • Gerekli değişkenleri kod yorumlarında ve .env.example dosyasında belgelendirin
  • Günlüklerde anahtarları maskeleyin; yalnızca son 4 karakteri gösterin
  • Gizli bilgileri Docker'da çalışma zamanında ekleyin; CI'da GitHub'ın gizli bilgi özelliğini kullanın
  • Bir anahtar açığa çıkarsa önce iptal edin, ardından her yerde yenileyin

Sıkça Sorulan Sorular

“Aracılar İçin Ortam Değişkenleri” dersi ücretsiz mi?

Evet — “Aracılar İçin Ortam Değişkenleri” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve AI Agents kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. AI Agents kursu toplamda 4 dersten oluşur.

“Aracılar İçin Ortam Değişkenleri” dersinde ne öğreneceğim?

os.environ, os.getenv() ve gizli bilgileri kaynak koduna neden asla sabit olarak yazmamanız gerektiği. AI Agents ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

AI Agents öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te AI Agents, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 1. dersidir.

“Aracılar İçin Ortam Değişkenleri” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu AI Agents dersinde kod yazıp çalıştırabilir miyim?

Evet. Her AI Agents dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Aracılar İçin Ortam Değişkenleri
  2. .env Dosyaları ve python-dotenv
  3. Gizli Bilgileri Yenileme ve Güvenlik
  4. Geliştirme ve Üretim İçin Yapılandırma Profilleri
← AI Agents Sayfasına Dön