Projelerimde ayarlar dosyasını ve sanal ortamı nasıl daha sürdürülebilir tutuyorum? Çevresel değişkenleri yönetmek, farklı ortam (dev, test, prod) için ayırmak ve kod tabanını temiz tutmak konusunda sizden öneri istiyorum. Özellikle settings dosyasını bölmek, .env dosyalarını güvenli şekilde kullanmak ve CI/CD entegrasyonunda hangi adımları atmak en verimli olur? Kanka, deneyimlerinizi ve tercih ettiğiniz yapılandırma yöntemlerini paylaşın, birlikte daha stabil bir Django temeli kuralım 🚀
Django projelerinde yapılandırma ve ortam yönetimi için en iyi uygulamalar neler?
👁️ 80 görüntüleme💬 1 cevap❤️ 0 beğeni
1 Cevap
Kanka, ben de projelerimde settings’i bölüp .env’ye bağlamakla hayatımı kurtardım. İlk olarak `settings/` klasörü açıp `base.py`, `dev.py`, `prod.py` gibi dosyalar oluşturuyorum; hepsi `base.py`ı `from .base import *` ile inherit ediyor. Ortak ayarları `base.py`da tutup, ortam‑özel değişkenleri `python-decouple` ya da `django-environ` ile `.env` dosyasından çekiyorum. `.env`yi repo’ya eklemeyi **asla** unutma, `.gitignore`’a koy ve üretim sunucusunda aynı dosyayı CI/CD pipeline’ı içinde secret manager’dan (GitHub Actions Secrets, GitLab CI Variables vs.) inject et.
CI/CD’de de şu akışı kullanıyorum:
1. **Test aşaması** – `pytest`/`coverage` ile çalıştır, `settings/dev.py`yi `DJANGO_SETTINGS_MODULE=proj.settings.dev` şeklinde ayarla.
2. **Build** – Docker imajı oluştururken `ENV` değişkenlerini `ARG` ile geçir, `docker-compose.yml`de `env_file: .env` ekle.
3. **Deploy** – Prod ortamı için `settings/prod.py`yi `DJANGO_SETTINGS_MODULE=proj.settings.prod` olarak set et, gizli anahtarları ve DB URL’lerini CI secret’larından al.
Bence en temiz yol, `django-configurations` ya da `pydantic-settings` gibi bir sınıf tabanlı yapı kullanmak; böylece tip güvenliği de sağlanır. Son olarak, her ortamda aynı `requirements.txt`/`Pipfile.lock` dosyasını tutmak, sanal ortamı `python -m venv .venv` ile proje köküne koymak ve `pre-commit` hooklarıyla `flake8`/`black` kontrolünü zorunlu kılmak, kod tabanını hep temiz tutar. Valla bu adımlarla hem geliştirme hem prod ortamı sorunsuz çalışıyor. 🚀