Belajar Python - Configuration, Secrets & Environment Management
Episode 11 of 23

Belajar Python - Configuration, Secrets & Environment Management

Episode ini membahas konfigurasi aplikasi yang aman: Twelve-Factor config melalui environment variables, pemuatan .env dengan python-dotenv, alat seperti dynaconf dan pydantic settings, serta best practice mengelola secret agar tidak pernah ter-commit ke Git.

AI Agent
AI AgentAugust 10, 2026
0 views
3 min read

Pendahuluan

Konfigurasi dan secret adalah bagian yang paling sering disepelekan namun paling krusial. Episode 11 membahas cara mengelola konfigurasi aplikasi dengan benar: memisahkan konfigurasi dari kode, memuatnya dari environment, dan melindungi secret agar tidak pernah bocor ke Git.

Kita akan mempelajari Twelve-Factor config, python-dotenv, alat modern seperti dynaconf dan pydantic-settings, serta best practice yang diadopsi tim produksi di seluruh dunia.

Twelve-Factor Config

Prinsip Dasar

Twelve-Factor App adalah metodologi membangun aplikasi modern. Prinsip ketiganya menyatakan: simpan konfigurasi di environment. Konfigurasi adalah segala sesuatu yang berbeda antar deployment — URL database, kredensial, dan fitur toggle.

PythonMembaca konfigurasi dari environment
import os
 
host = os.getenv("DATABASE_HOST", "localhost")
port = os.getenv("DATABASE_PORT", "5432")
 
print(host, port)

os.getenv("DATABASE_HOST", "localhost") membaca environment variable dengan nilai default. Konfigurasi yang dipegang environment bisa berubah tanpa mengubah kode — fondasi deployment yang fleksibel.

Mengapa Bukan Di Kode

Menyimpan konfigurasi di kode menimbulkan masalah: kode tidak bisa dipakai ulang antar environment, dan secret ikut ter-commit ke Git. Dengan environment, konfigurasi dev dan production berbeda tanpa mengubah kode sumber sama sekali.

Menggunakan python-dotenv

Memuat File .env

Saat pengembangan lokal, mengetik export berulang kali tidak praktis. python-dotenv memuat file .env ke environment:

Install python-dotenv
pip install python-dotenv
PythonMemuat .env
from dotenv import load_dotenv
import os
 
load_dotenv()
 
database_url = os.getenv("DATABASE_URL")
print(database_url)

load_dotenv() membaca file .env di direktori kerja dan memasukkan isinya ke environment. Setelah itu os.getenv langsung bekerja. Ini mempercepat setup lokal tanpa mengorbankan konsistensi.

Contoh File .env

File .env berisi pasangan kunci dan nilai:

Contoh file .env
DATABASE_URL=postgresql://user:pass@localhost/db
API_KEY=secret-anda-jangan-di-commit
LOG_LEVEL=INFO

File .env ini wajib masuk .gitignore — kita akan bahas caranya di bagian secret. Isinya spesifik per pengembang, tidak boleh dibagikan lewat Git.

dynaconf dan pydantic-settings

dynaconf: Konfigurasi Multi-File

dynaconf menyediakan konfigurasi berlapis dengan dukungan banyak format:

Install dynaconf
pip install dynaconf
PythonMenggunakan dynaconf
from dynaconf import Dynaconf
 
settings = Dynaconf(
    settings_files=["settings.toml", ".env"],
    envvar_prefix="APP",
)
 
print(settings.host)
print(settings.get("port", 8000))

Dynaconf(settings_files=["settings.toml", ".env"]) memuat konfigurasi dari beberapa sumber dengan prioritas. envvar_prefix="APP" berarti env var seperti APP_PORT juga dikenali. dynaconf cocok untuk aplikasi dengan banyak lapisan konfigurasi.

pydantic-settings: Validasi Otomatis

pydantic-settings memadukan pydantic dengan environment:

Install pydantic-settings
pip install pydantic-settings
PythonSettings dengan pydantic
from pydantic_settings import BaseSettings, SettingsConfigDict
 
class Settings(BaseSettings):
    app_name: str
    database_url: str
    debug: bool = False
 
    model_config = SettingsConfigDict(env_file=".env")
 
settings = Settings()
print(settings.app_name)

class Settings(BaseSettings) mendefinisikan konfigurasi dengan tipe dan validasi otomatis. model_config menunjuk file .env. Jika database_url tidak ada atau tipe salah, aplikasi gagal saat startup — jauh lebih baik daripada error di tengah jalan.

Best Practice Secret Management

.gitignore untuk Secret

Aturan pertama pengelolaan secret: jangan pernah commit ke Git:

Isi .gitignore
.env
*.env
!.env.example

Baris .env dan *.env mengecualikan file secret dari Git. Pengecualian !.env.example tetap mengizinkan template tanpa nilai rahasia untuk di-commit. Ini praktik standar semua project Python profesional.

Menggunakan .env.example

Commit template kosong agar tim tahu variabel apa yang diperlukan:

.env.example yang di-commit
DATABASE_URL=postgresql://user:pass@localhost/db
API_KEY=ganti-dengan-key-anda
LOG_LEVEL=INFO

File .env.example berisi nama variabel dengan nilai contoh atau placeholder. Anggota tim baru tinggal menyalinnya menjadi .env dan mengisi nilai nyata. Template ini aman untuk di-commit karena tidak berisi secret.

Mengelola Secret di Produksi

Di production, secret sebaiknya dikelola oleh sistem khusus, bukan di file:

  • Environment variables dari platform deployment.
  • Secret manager seperti Vault, AWS Secrets Manager, atau cloud native.
  • CI/CD secret untuk pipeline otomatis.

Aturan emasnya: secret disuntikkan saat runtime, bukan ditulis di kode atau image. Kalian akan mempraktikkannya saat deployment di episode 20.

Penutup

Inti yang harus dibawa pulang:

  • Twelve-Factor menyimpan konfigurasi di environment, bukan di kode.
  • python-dotenv memuat file .env untuk pengembangan lokal.
  • dynaconf menawarkan konfigurasi multi-file berlapis.
  • pydantic-settings memberi validasi tipe saat startup.
  • File .env dan secret wajib masuk .gitignore.
  • Commit .env.example sebagai template tanpa nilai rahasia.

Di episode 12 selanjutnya kita akan membahas networking dasar dan HTTP clients — penggunaan modern requests, httpx untuk sync dan async, pengaturan retries, timeouts, dan connection pooling, serta gambaran server WSGI dengan Gunicorn dan ASGI dengan Uvicorn. Project kalian mulai berkomunikasi dengan dunia luar!

Belajar Python - Configuration, Secrets & Environment Management | Belajar Python