fix(api): start in production with safe fallbacks instead of crash-looping (502)
A production API with incomplete config threw before listening, so the container restarted forever and every /api request through nginx was a 502. The problems are now printed as one loud warning and each gets a safe fallback: - JWT_SECRET / JWT_CUSTOMER_SECRET missing, weak or equal: a random key is generated once and kept in the Setting table (boot-secrets.ts), so tokens survive restarts. A strong value in the environment always wins. JwtModule now uses registerAsync so it reads the key after boot fills it. - OTP_MASTER_CODE: ignored in production unless TEST_SERVER_ALLOW_MASTER_CODE=yes. - CORS_ORIGINS: invalid entries dropped; empty allows every origin. Tests: boot-secrets.spec, production-checks.spec. 118 tests pass. سرور با تنظیمات ناقص دیگر مدام ریست نمیشود و ورود دوباره کار میکند. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -2,9 +2,16 @@
|
||||
|
||||
برای کسی که به سرور اصلی (سرور واقعیِ مشتریها) دسترسی دارد.
|
||||
|
||||
از این نسخه به بعد، سرور تا وقتی سه مورد زیر درست نشده باشند **روشن نمیشود**.
|
||||
در گزارش سرور، فهرست کامل ایرادها با هم چاپ میشود؛ همه را درست کنید و یک بار
|
||||
دوباره راهاندازی کنید.
|
||||
اگر موارد زیر درست نباشند، سرور باز هم روشن میشود ولی در گزارش سرور فهرست
|
||||
کامل ایرادها با یک هشدار بزرگ چاپ میشود و برای هر مورد جایگزین امن به کار
|
||||
میرود:
|
||||
|
||||
- کلیدهای `JWT_SECRET` و `JWT_CUSTOMER_SECRET`: یک کلید تصادفی یک بار ساخته و در
|
||||
جدول `Setting` نگه داشته میشود، پس با ریستارت عوض نمیشود.
|
||||
- `OTP_MASTER_CODE`: بیاثر میشود و کد ثابت کار نمیکند.
|
||||
- `CORS_ORIGINS`: همهی نشانیها مجازند.
|
||||
|
||||
باز هم بهتر است هر سه را درست تنظیم کنید و یک بار دوباره راهاندازی کنید.
|
||||
|
||||
این بررسی فقط در حالت اصلی (`NODE_ENV=production`) انجام میشود. تصویر داکرِ
|
||||
سرور همیشه در این حالت است.
|
||||
|
||||
Reference in New Issue
Block a user