# چک‌لیست عملیاتی 12Factor App

این چک‌لیست برای مرور سریع یک سرویس قبل از Deploy یا هنگام بازبینی معماری است.

## Codebase

- [ ] سرویس فقط یک repository اصلی دارد.
- [ ] تفاوت محیط‌ها داخل code نگهداری نمی‌شود.
- [ ] branch یا copy جدا برای production وجود ندارد.

## Dependencies

- [ ] همه dependencyها در manifest پروژه ثبت شده‌اند.
- [ ] نسخه runtime و packageها مشخص است.
- [ ] build روی محیط تمیز هم قابل تکرار است.

## Config

- [ ] credential، آدرس سرویس‌ها و feature flagها در code نیستند.
- [ ] config با Environment Variable، Secret یا ConfigMap مدیریت می‌شود.
- [ ] تغییر config قابل ردیابی و قابل rollback است.

## Backing Services

- [ ] Database، Queue، Cache و Storage از طریق config وصل می‌شوند.
- [ ] تعویض resource بدون تغییر code ممکن است.
- [ ] مالکیت، backup و SLA هر resource مشخص است.

## Build, Release, Run

- [ ] build خروجی immutable دارد.
- [ ] هر release شناسه مشخص دارد.
- [ ] rollback یعنی برگشت به release قبلی، نه تغییر دستی روی سرور.

## Processes

- [ ] processها stateless هستند.
- [ ] state پایدار در DB، Redis، Object Storage یا resource مناسب ذخیره می‌شود.
- [ ] فایل مهم داخل container نگهداری نمی‌شود.

## Port Binding

- [ ] app خودش روی port مشخص listen می‌کند.
- [ ] port از config گرفته می‌شود.
- [ ] routing بیرونی جدا از خود app مدیریت می‌شود.

## Concurrency

- [ ] web، worker و scheduler اگر لازم باشند جدا تعریف شده‌اند.
- [ ] هر process type مستقل scale می‌شود.
- [ ] معیار scale برای هر workload مشخص است.

## Disposability

- [ ] startup سریع است.
- [ ] SIGTERM و shutdown درست مدیریت می‌شود.
- [ ] jobها idempotent یا قابل retry هستند.

## Dev/Prod Parity

- [ ] dev، staging و production تا حد ممکن serviceهای مشابه دارند.
- [ ] تفاوت نسخه runtime و backing serviceها کنترل شده است.
- [ ] deploy کوچک و مکرر انجام می‌شود.

## Logs

- [ ] log به stdout/stderr نوشته می‌شود.
- [ ] app خودش مسئول rotate، archive یا ارسال log نیست.
- [ ] correlation id یا ساختار قابل جست‌وجو وجود دارد.

## Admin Processes

- [ ] migration و scriptهای مدیریتی داخل همان repo هستند.
- [ ] admin task با همان release و config محیط هدف اجرا می‌شود.
- [ ] اجرای دستی از لپ‌تاپ با config نامعلوم انجام نمی‌شود.
