Python Modules
Dot Env

Environment Variables di Python

1. Dasar Environment Variables

Environment variables adalah variabel yang disimpan di level sistem operasi dan dapat diakses oleh aplikasi. Di Python, kita bisa menggunakannya untuk menyimpan konfigurasi dan data sensitif.

Menggunakan os.environ

import os
 
# Menyimpan environment variable
os.environ['DATABASE_URL'] = 'postgresql://localhost:5432/mydb'
os.environ['API_KEY'] = 'your-secret-key'
 
# Mengambil environment variable
db_url = os.environ.get('DATABASE_URL')
api_key = os.environ.get('API_KEY', 'default-key')  # Dengan nilai default
 
# Menghapus environment variable
if 'API_KEY' in os.environ:
    del os.environ['API_KEY']

2. Menggunakan File .env

File .env adalah cara umum untuk menyimpan environment variables dalam file teks.

Contoh File .env

DATABASE_URL=postgresql://localhost:5432/mydb
API_KEY=your-secret-key
DEBUG=True
EMAIL_HOST=smtp.gmail.com
EMAIL_PORT=587

Menggunakan python-dotenv

from dotenv import load_dotenv
import os
 
# Memuat file .env
load_dotenv()
 
# Atau tentukan path spesifik
load_dotenv('/path/to/.env')
 
# Mengambil variabel
db_url = os.getenv('DATABASE_URL')
api_key = os.getenv('API_KEY')
debug = os.getenv('DEBUG', 'False') == 'True'

3. Praktik Terbaik

Struktur Direktori

project/
├── .env                  # Variabel environment (tidak di git)
├── .env.example         # Contoh file env (di git)
├── .gitignore           # File git ignore
└── app/
    └── main.py          # Aplikasi Anda

File .gitignore

# Environment Variables
.env
.env.local
.env.*.local

# Tetap simpan file contoh
!.env.example

4. Manajemen Konfigurasi

Menggunakan Class Config

from dotenv import load_dotenv
import os
 
class Config:
    def __init__(self):
        load_dotenv()
 
        # Database
        self.DATABASE_URL = os.getenv('DATABASE_URL')
 
        # API Keys
        self.API_KEY = os.getenv('API_KEY')
 
        # Pengaturan Aplikasi
        self.DEBUG = os.getenv('DEBUG', 'False') == 'True'
        self.ENV = os.getenv('APP_ENV', 'development')
 
    def is_development(self):
        return self.ENV == 'development'
 
    def is_production(self):
        return self.ENV == 'production'
 
# Penggunaan
config = Config()
if config.is_development():
    print("Berjalan dalam mode development")

5. Environment yang Berbeda

Multiple File .env

project/
├── .env                  # Development lokal
├── .env.development     # Server development
├── .env.staging        # Server staging
└── .env.production     # Server production

6. Pertimbangan Keamanan

# Jangan hardcode informasi sensitif
class DatabaseConfig:
    def __init__(self):
        self.url = os.getenv('DATABASE_URL')
        self.username = os.getenv('DB_USERNAME')
        self.password = os.getenv('DB_PASSWORD')
 
        # Validasi konfigurasi yang diperlukan
        if not all([self.url, self.username, self.password]):
            raise ValueError("Konfigurasi database yang diperlukan tidak lengkap")

Tips Penting:

  • Jangan pernah commit file .env yang berisi kredensial asli
  • Selalu sediakan file .env contoh
  • Validasi environment variables yang diperlukan saat startup
  • Gunakan konfigurasi berbeda untuk environment yang berbeda
  • Simpan informasi sensitif dalam environment variables
  • Gunakan enkripsi yang kuat untuk nilai sensitif
  • Lakukan rotasi berkala untuk secrets dan kredensial

Environment variables sangat penting untuk manajemen konfigurasi dan keamanan dalam aplikasi Python. Mereka membantu memisahkan konfigurasi dari kode dan membuat aplikasi lebih portabel dan aman.