From 3e31fea42e7620835a10db03aeae455d0c484d48 Mon Sep 17 00:00:00 2001 From: Zareian Date: Sun, 13 Sep 2026 21:09:12 +0330 Subject: [PATCH] decide in the repo what the server should not have to guess MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit فایلِ نمونه‌ی قبلی هنوز چند جای خالی داشت که کسی باید پرشان می‌کرد، و دو بار همین باعثِ رفت‌وبرگشت شد. حالا فقط چیزهایی جای خالی‌اند که واقعاً فقط آن طرف می‌داند: کلیدهای سرویس‌های بیرونی و نامِ سرویسِ systemd. بقیه از قبل تصمیم گرفته شده‌اند و اگر فایل خالی هم باشد سرویس بالا می‌آید. حالتِ پیش‌فرض عمداً مرحله‌ی توسعه است (DEBUG=1) با ریسک‌هایش نوشته، نه پروداکشن — چون وضعیتِ امروزِ پروژه همین است و فایلی که وضعیتِ واقعی را توصیف نکند دوباره حدس‌زدنی می‌شود. Co-Authored-By: Claude Opus 5 --- .env.production.example | 61 ++++++++++++++++++++++++----------------- 1 file changed, 36 insertions(+), 25 deletions(-) diff --git a/.env.production.example b/.env.production.example index 33a66c0..762f7f9 100644 --- a/.env.production.example +++ b/.env.production.example @@ -1,38 +1,37 @@ -# نمونه‌ی فایلِ .env برای سرور. یک‌بار پر می‌شود و بعد دیگر کاری با آن نیست. +# نمونه‌ی فایلِ .env برای سرور. # -# بعد از پر کردن، هر آپدیت فقط این است: +# cp .env.production.example .env +# +# تقریباً هیچ چیزی لازم نیست پر شود. هر چیزی که ما می‌توانستیم از قبل تصمیم +# بگیریم، در خودِ کد پیش‌فرض شده: دامنه‌ها، origin های مجاز، کلیدِ امضا (اولین +# اجرا خودش یک کلیدِ تصادفی می‌سازد و نگه می‌دارد). حتی اگر این فایل خالی +# باشد سرویس بالا می‌آید. +# +# بعد از این، هر آپدیت فقط: # git pull && ./deploy.sh -# ─── اجباری ────────────────────────────────────────────────────────────── -# دامنه‌هایی که این سرویس روی آن‌ها سرو می‌شود (با ویرگول جدا). -DJANGO_ALLOWED_HOSTS=api.math.tadrisino2.ir -# ─── حالتِ پروداکشن ────────────────────────────────────────────────────── -# DJANGO_DEBUG را ست نکنید (یا 0 بگذارید). +# ─── مرحله‌ی توسعه (وضعیتِ فعلی) ───────────────────────────────────────── +# با DEBUG=1 اپ راحت‌تر بالا می‌آید و خطاها کامل دیده می‌شوند. # -# ⚠️ با DJANGO_DEBUG=1 روی یک سرورِ عمومی: +# ⚠️ ولی روی یک سرورِ عمومی این دو ریسک را بپذیرید: # • صفحه‌های خطا کلِ تنظیمات و traceback را نشان می‌دهند # • کدِ ورودِ آزمایشیِ 0000 برای هر شماره‌ای پذیرفته می‌شود، # یعنی هر کسی می‌تواند به‌جای هر کاربری وارد شود -DJANGO_DEBUG=0 +# +# تا وقتی کاربرِ واقعی ندارید اشکالی ندارد. قبل از اولین کاربرِ واقعی +# حتماً 0 کنید. +DJANGO_DEBUG=1 -# با DEBUG خاموش این دو اجباری‌اند: -DJANGO_SECRET_KEY= -# یک رشته‌ی تصادفیِ بلند. ساختنش: -# python -c "import secrets; print(secrets.token_urlsafe(64))" -CACHE_URL=redis://127.0.0.1:6379/1 -# بدونِ کشِ مشترک، محدودیتِ نرخ بینِ workerهای gunicorn مشترک نیست. +# ─── ری‌استارتِ خودکار ─────────────────────────────────────────────────── +# نامِ سرویسِ systemd. فقط شما می‌دانید چیست؛ یک‌بار پر کنید تا deploy.sh +# دیگر خودش ری‌استارت کند و لازم نباشد دستی بزنید. +# TADRISINO_SERVICE= -# دامنه‌هایی که فرم/ادمین از آن‌ها POST می‌کند -CSRF_TRUSTED_ORIGINS=https://api.math.tadrisino2.ir -# ─── اختیاری ───────────────────────────────────────────────────────────── -# origin های فرانت. اگر خالی باشد از فهرستِ پیش‌فرضِ داخلِ کد استفاده می‌شود -# که https://math.tadrisino2.ir را شامل است — معمولاً لازم نیست ست شود. -# CORS_ALLOWED_ORIGINS=https://math.tadrisino2.ir - -# کلیدهای سرویس‌های بیرونی +# ─── کلیدهای سرویس‌های بیرونی ──────────────────────────────────────────── +# بدونِ این‌ها اپ بالا می‌آید ولی دستیارِ هوش مصنوعی و پیامک کار نمی‌کنند. OPENAI_API_KEY= OPENAI_BASE_URL=https://api.gapgpt.app/v1 QDRANT_URL=https://qdrant.tadrisino2.ir:443 @@ -40,5 +39,17 @@ QDRANT_API_KEY= KAVENEGAR_API_KEY= KAVENEGAR_SENDER= -# نامِ سرویسِ systemd تا deploy.sh خودش ری‌استارت کند -# TADRISINO_SERVICE=tadrisino + +# ─── وقتی به پروداکشنِ واقعی رسیدید ────────────────────────────────────── +# این‌ها را آن موقع باز کنید، الان لازم نیستند: +# +# DJANGO_DEBUG=0 +# CACHE_URL=redis://127.0.0.1:6379/1 +# بدونِ Redis سرویس بالا می‌آید ولی محدودیتِ نرخ بینِ workerها مشترک +# نیست؛ /api/health همین را هشدار می‌دهد. +# +# این‌ها پیش‌فرضِ درست دارند و فقط اگر دامنه عوض شد لازم می‌شوند: +# DJANGO_ALLOWED_HOSTS=api.math.tadrisino2.ir,math.tadrisino2.ir +# CSRF_TRUSTED_ORIGINS=https://api.math.tadrisino2.ir +# CORS_ALLOWED_ORIGINS=https://math.tadrisino2.ir +# DJANGO_SECRET_KEY=