With NODE_ENV=production (always, in the Docker image) the API lists every problem at once and does not start while any of these holds: - OTP_MASTER_CODE is set: the fixed test login signs in any customer. A test server built from the production image must say so with TEST_SERVER_ALLOW_MASTER_CODE=yes. - JWT_CUSTOMER_SECRET is missing, equal to JWT_SECRET, or under 32 characters. - JWT_SECRET is missing, the published dev key, or under 32 characters. - CORS_ORIGINS is empty, `*`, or not full origins. It no longer falls back to allow-all. Checked live: a misconfigured start lists all four problems; a correct one starts, answers the allowed origin, and blocks any other. docs/SERVER-SETUP-CHECKLIST.md is the operator's list. DELIVERY.md, docker-compose.yml and .env.example are updated to match. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
3.6 KiB
فهرست تنظیمات سرور اصلی
برای کسی که به سرور اصلی (سرور واقعیِ مشتریها) دسترسی دارد.
از این نسخه به بعد، سرور تا وقتی سه مورد زیر درست نشده باشند روشن نمیشود. در گزارش سرور، فهرست کامل ایرادها با هم چاپ میشود؛ همه را درست کنید و یک بار دوباره راهاندازی کنید.
این بررسی فقط در حالت اصلی (NODE_ENV=production) انجام میشود. تصویر داکرِ
سرور همیشه در این حالت است.
۱. حذف کد ثابت ورود آزمایشی
| متغیر | مقدار درست |
|---|---|
OTP_MASTER_CODE |
خالی یا کلاً حذفشده |
تا وقتی این کد هست، هر کسی که آن را بداند وارد حساب هر مشتری میشود.
سرور آزمایشیای که عمداً این کد را لازم دارد، باید کنارش
TEST_SERVER_ALLOW_MASTER_CODE=yesبگذارد. این را هرگز روی سرور اصلی نگذارید.
۲. کلید جدا برای مشتریها
| متغیر | مقدار درست |
|---|---|
JWT_SECRET |
یک رشتهی تصادفی، دستکم ۳۲ نویسه (کلید ورود مدیرها) |
JWT_CUSTOMER_SECRET |
یک رشتهی تصادفیِ دیگر، دستکم ۳۲ نویسه (کلید ورود مشتریها و کارشناسها) |
دو مقدار نباید یکی باشند. ساختن مقدار تصادفی، روی هر سیستمی که Node دارد:
node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"
دو بار اجرا کنید و هر خروجی را برای یکی از دو متغیر بگذارید.
⚠ عوض کردن این کلیدها همه را از حساب بیرون میکند. مدیرها و مشتریها یک بار دوباره وارد میشوند. اطلاعات کسی از بین نمیرود.
⚠ اگر ACCOUNTING_SECRET_KEY خالی باشد، رمز ذخیرهشدهی نرمافزار حسابداری از
JWT_SECRET ساخته میشود. با عوض شدن JWT_SECRET باید یک بار دوباره در
«تنظیمات حسابداری» پنل وارد شوید. بهتر است ACCOUNTING_SECRET_KEY هم یک مقدار
تصادفیِ جدا بگیرد و دیگر عوض نشود.
۳. نشانیهای مجاز
| متغیر | مقدار درست |
|---|---|
CORS_ORIGINS |
نشانی کامل پنل و اپها، با ویرگول جدا |
نمونه:
CORS_ORIGINS=https://adm.henzagold.ir,https://app.henzagold.ir,https://app2.henzagold.ir
- هر نشانی با
https://شروع شود و مسیر نداشته باشد؛ مثلاً/adminدر آخرش نیاید. - هر دامنهای که پنل یا یکی از دو اپ از آن باز میشود باید در فهرست باشد؛ وگرنه آن صفحه نمیتواند با سرور حرف بزند.
*پذیرفته نمیشود.
بعد از تنظیم
- سرور را دوباره راهاندازی کنید.
- در گزارش سرور باید
Nest application successfully startedدیده شود. اگر سرور بالا نیامد، فهرست ایرادها همانجا چاپ شده است. - پنل مدیریت و هر دو اپ را باز کنید و یک بار وارد شوید.
- ورود مشتری با پیامک را امتحان کنید. کد ثابت دیگر نباید کار کند.