docs/
Outline
---
title: چکلیست: اول کدوم عددا رو ببری تو config
slug: config-checklist
lang: fa
published: 2026-11-07
words: 408
lines: 67
size: 3.6 KB
read: 3 min read
---
چکلیست: اول کدوم عددا رو ببری تو config
بقال سر کوچه رو تکتک قوطیا برچسب قیمت جدید میزنه. ولی فروشگاه بزرگ قیمت رو یه جا توی سیستم نگه میداره و همهی صندوقا از همونجا میخوننش. توی کد به این سیستم میگن config: عدد فقط یه جا نوشته میشه و بقیهی کد از همونجا میخونهش.
این ترتیبیه که من عددا رو از کد درمیارم، با مثالهای واقعی از config همین سایت.
۱. اول از همه secretها
پسورد، API key و کلیدهای امضا هیچوقت توی کد یا فایل YAML نیستن. فایل YAML فقط اسم متغیر محیطی رو مینویسه و اگه نباشه برنامه بالا نمیاد:
django:
secret_key: ${DJANGO_SECRET_KEY}
database:
url: ${DATABASE_URL}
۲. هرچی بین سیستمها فرق میکنه
دامنه، URLها، hostها و جای ذخیرهی فایل روی لپتاپت با سرور فرق دارن. فقط وقتی default بذار که امن باشه:
app:
site_url: ${SITE_URL}
storage:
backend: ${STORAGE_BACKEND:-local}
۳. محدودیتها و timeoutها
retry، timeout، حجم آپلود و rate limit همون عدداییان که آخرش دستکاریشون میکنی. واحد رو بذار توی اسم کلید تا کسی حدس نزنه 10 ثانیهست یا دقیقه:
auth:
access_token_minutes: 15
login_failures_limit: 5
login_window_minutes: 15
uploads:
video:
max_mb_s3: 300
۴. عددی که یه فایل مینویسه و یه فایل دیگه میخونه
اگه یه عدد دو جا نوشته شده باشه، یکیش یادت میره. این همون برچسبیه که از زیر دست بقال در رفت. یه بار بنویسش و بذار هر دوتا از همونجا بخونن.
۵. تنظیمات محصول
مدت cache، تعداد آیتمهای هر صفحه، روشن و خاموش کردن یه قابلیت. بدون دست زدن به منطق عوضشون کن:
api:
revalidate_seconds: 60
سه تا قانون که config رو تمیز نگه میداره
- چکش کن. schema من سختگیره: کلید ناشناخته یا جاافتاده برنامه رو با مسیر همون کلید متوقف میکنه. یه غلط تایپی بلند داد میزنه، نه اینکه بیصدا default بخونه.
- فقط یه loader. فقط loader کانفیگ متغیرهای محیطی رو میخونه. بقیهی کد یه آبجکت config تایپدار میگیره.
- یه base، override کوچیک.
base.yamlهمهچیز رو داره وproduction.yamlفقط چیزی رو عوض میکنه که فرق داره، مثل خاموش کردن API docs.
چی توی کد میمونه
هر عددی config نیست. عددی که هیچوقت عوض نمیشه و فقط کنار منطق خودش معنی داره، مثل تعداد روزای هفته، یه constant اسمدار توی کد میمونه. config واسه عدداییه که قراره عوضشون کنی.
ریپوی خودتو چک کن
توی کدت دنبال عدد و رشتههایی بگرد که شبیه تنظیماتن. هرکدوم یه برچسب روی قوطیه. ببرش تو config، یه اسم روشن با واحدش بهش بده و از یه جا بخونش.
| بقال سر کوچه رو تکتک قوطیا برچسب قیمت جدید میزنه. ولی فروشگاه بزرگ قیمت رو یه جا توی سیستم نگه میداره و همهی صندوقا از همونجا میخوننش. توی کد به این سیستم میگن config: عدد فقط یه جا نوشته میشه و بقیهی کد از همونجا میخونهش. |
| این ترتیبیه که من عددا رو از کد درمیارم، با مثالهای واقعی از config همین سایت. |
| ## ۱. اول از همه secretها |
| پسورد، API key و کلیدهای امضا هیچوقت توی کد یا فایل YAML نیستن. فایل YAML فقط اسم متغیر محیطی رو مینویسه و اگه نباشه برنامه بالا نمیاد: |
| ```yaml |
| django: |
| secret_key: ${DJANGO_SECRET_KEY} |
| database: |
| url: ${DATABASE_URL} |
| ``` |
| ## ۲. هرچی بین سیستمها فرق میکنه |
| دامنه، URLها، hostها و جای ذخیرهی فایل روی لپتاپت با سرور فرق دارن. فقط وقتی default بذار که امن باشه: |
| ```yaml |
| app: |
| site_url: ${SITE_URL} |
| storage: |
| backend: ${STORAGE_BACKEND:-local} |
| ``` |
| ## ۳. محدودیتها و timeoutها |
| retry، timeout، حجم آپلود و rate limit همون عدداییان که آخرش دستکاریشون میکنی. واحد رو بذار توی اسم کلید تا کسی حدس نزنه `10` ثانیهست یا دقیقه: |
| ```yaml |
| auth: |
| access_token_minutes: 15 |
| login_failures_limit: 5 |
| login_window_minutes: 15 |
| uploads: |
| video: |
| max_mb_s3: 300 |
| ``` |
| ## ۴. عددی که یه فایل مینویسه و یه فایل دیگه میخونه |
| اگه یه عدد دو جا نوشته شده باشه، یکیش یادت میره. این همون برچسبیه که از زیر دست بقال در رفت. یه بار بنویسش و بذار هر دوتا از همونجا بخونن. |
| ## ۵. تنظیمات محصول |
| مدت cache، تعداد آیتمهای هر صفحه، روشن و خاموش کردن یه قابلیت. بدون دست زدن به منطق عوضشون کن: |
| ```yaml |
| api: |
| revalidate_seconds: 60 |
| ``` |
| ## سه تا قانون که config رو تمیز نگه میداره |
| - **چکش کن.** schema من سختگیره: کلید ناشناخته یا جاافتاده برنامه رو با مسیر همون کلید متوقف میکنه. یه غلط تایپی بلند داد میزنه، نه اینکه بیصدا default بخونه. |
| - **فقط یه loader.** فقط loader کانفیگ متغیرهای محیطی رو میخونه. بقیهی کد یه آبجکت config تایپدار میگیره. |
| - **یه base، override کوچیک.** `base.yaml` همهچیز رو داره و `production.yaml` فقط چیزی رو عوض میکنه که فرق داره، مثل خاموش کردن API docs. |
| ## چی توی کد میمونه |
| هر عددی config نیست. عددی که هیچوقت عوض نمیشه و فقط کنار منطق خودش معنی داره، مثل تعداد روزای هفته، یه constant اسمدار توی کد میمونه. config واسه عدداییه که قراره عوضشون کنی. |
| ## ریپوی خودتو چک کن |
| توی کدت دنبال عدد و رشتههایی بگرد که شبیه تنظیماتن. هرکدوم یه برچسب روی قوطیه. ببرش تو config، یه اسم روشن با واحدش بهش بده و از یه جا بخونش. |




