# راهنمای راه‌اندازی زهورا روی سرور (برای نیروی فنی)

فروشگاه زهورا با Next.js 16، Prisma 7 و PostgreSQL ساخته شده است. این بسته فقط **کد** است؛
هیچ کلید، دیتابیس یا فایل `.env` واقعی داخلش نیست و همه را شما روی سرور می‌سازید.

## ۱) پیش‌نیازها

- Node.js نسخه 20.9 یا بالاتر (پیشنهاد: 22)
- PostgreSQL نسخه 14 یا بالاتر (یک دیتابیس خالی؛ افزونه `pg_trgm` را migration خودش فعال می‌کند)
- دامنه با SSL (https)
- جای ذخیره عکس محصولات: یا یک دیسک ماندگار روی سرور، یا فضای ابری S3 (مثل ابرآروان)

روی لیارا: یک برنامه Node.js (یا Docker با همین Dockerfile) + یک دیتابیس PostgreSQL + یک دیسک برای `/app/.data/uploads`.
روی VPS: Node یا Docker، پشت Nginx یا Caddy برای https.

## ۲) متغیرهای محیطی

فایل `.env.example` را به `.env` کپی کنید (یا در پنل هاست وارد کنید). مهم‌ترین‌ها:

| متغیر | مقدار |
|---|---|
| `NEXT_PUBLIC_SITE_URL` | آدرس نهایی با https، مثل `https://zahora.ir` (بدون / آخر) |
| `DATABASE_URL` | آدرس PostgreSQL |
| `SESSION_SECRET` | کلید تصادفی جدید (دستور پایین) |
| `DATA_ENCRYPTION_KEY` | کلید تصادفی جدید؛ **بعداً عوضش نکنید** (کلید هوش مصنوعی با آن رمز شده) |
| `CRON_SECRET` | کلید تصادفی جدید (برای بروزرسانی خودکار نرخ دلار) |
| `PRELAUNCH` | فعلاً `true` (پایین توضیح داده شده) |
| `PAYMENT_GATEWAY` | فعلاً `mock`؛ بعد از گرفتن کد درگاه: `zarinpal` و `ZARINPAL_MERCHANT_ID` و `ZARINPAL_SANDBOX=false` |
| `SMS_PROVIDER` | فعلاً `console`؛ بعد: `kavenegar` و `KAVENEGAR_API_KEY` و `KAVENEGAR_OTP_TEMPLATE` |
| `STORAGE_DRIVER` | `local` (با دیسک ماندگار و `UPLOAD_DIR`) یا `s3` (با متغیرهای `S3_*`) |

ساخت کلیدهای تصادفی (هر کدام یک بار جدا اجرا شود):

```bash
node -e "console.log(require('crypto').randomBytes(32).toString('base64'))"
```

کلیدهای سیستم توسعه را استفاده نکنید؛ برای سرور همه را تازه بسازید.

## ۳) نصب و اجرا (بدون Docker)

```bash
npm ci                 # نصب پکیج‌ها (خودش prisma generate را هم اجرا می‌کند)
npm run db:deploy      # ساخت جدول‌ها در دیتابیس
npm run db:setup       # دسته‌بندی‌ها، انواع پوست و روش‌های ارسال (بدون محصول نمونه؛ تکرارش بی‌خطر است)
npm run build          # هنگام build باید دیتابیس در دسترس و .env پر باشد
npm start              # پورت پیش‌فرض 3000 (با PORT عوض می‌شود)
```

`npm run db:seed` را روی سرور اجرا **نکنید**؛ آن محصولات و کاربران نمونه می‌سازد و فقط برای توسعه است.

برای ماندن برنامه بعد از ری‌استارت سرور از pm2 یا systemd استفاده کنید، مثلاً:
`pm2 start npm --name zahora -- start`

## ۳-ب) با Docker

```bash
docker build --build-arg DATABASE_URL="postgresql://..." --build-arg NEXT_PUBLIC_SITE_URL="https://zahora.ir" -t zahora .
docker run -d --restart unless-stopped --env-file .env -p 3000:3000 -v zahora-uploads:/app/.data/uploads zahora
```

ایمیج در هر شروع، migrationها و `db:setup` را خودش اجرا می‌کند. اگر `STORAGE_DRIVER=s3` است،
`--build-arg STORAGE_DRIVER=s3 --build-arg S3_PUBLIC_URL=...` را هم به build بدهید.

## ۴) ساخت حساب مدیر عامل

بعد از اولین اجرا، با شماره موبایل مدیر عامل:

```bash
npm run admin:grant -- 09xxxxxxxxx OWNER
```

یک رمز تصادفی چاپ می‌شود؛ آن را فقط به خود مدیر عامل بدهید. ورود پنل: `https://دامنه/admin/login`.
مدیر عامل بعد از ورود از «حساب من» رمز را عوض می‌کند و از بخش «تیم» برای بقیه دسترسی می‌سازد.

## ۵) حالت پیش‌افتتاح (PRELAUNCH)

با `PRELAUNCH=true`:
- سایت، محصولات، مجله و پنل مدیریت کامل کار می‌کنند و گوگل می‌تواند سایت را ببیند.
- خرید و ثبت‌نام مشتری بسته است و پیام «به‌زودی» نشان داده می‌شود.
- در این حالت درگاه `mock` و پیامک `console` روی سرور مجازند (بدون آن، برنامه در production با این دو اجرا نمی‌شود).

این زمان مناسبی است تا مدیر عامل محصولات، عکس‌ها، بنرها و تنظیمات را از پنل وارد کند.

**افتتاح واقعی:** کد درگاه زرین‌پال و کلید کاوه‌نگار را در `.env` بگذارید، `PAYMENT_GATEWAY=zarinpal`،
`SMS_PROVIDER=kavenegar` و `PRELAUNCH=false`، بعد برنامه را ری‌استارت کنید. یک خرید آزمایشی واقعی انجام دهید.
آدرس برگشت درگاه خودکار از `NEXT_PUBLIC_SITE_URL` ساخته می‌شود.

## ۶) کارهای بعد از راه‌اندازی

- **نرخ دلار:** با تنظیم `CRON_SECRET`، خود برنامه هر دقیقه بررسی می‌کند و طبق تنظیمات پنل «نرخ دلار» قیمت محصولات «اورجینال» را بروز می‌کند. اگر چند نسخه از برنامه اجرا می‌شود، در همه جز یکی `CURRENCY_SCHEDULER=off` بگذارید.
- **پشتیبان‌گیری:** روزانه از دیتابیس (`pg_dump`) و از پوشه عکس‌ها (یا سطل S3) نسخه پشتیبان بگیرید.
- **گوگل:** سایت را در Google Search Console ثبت کنید و `https://دامنه/sitemap.xml` را معرفی کنید.
- **شبکه‌های اجتماعی:** آدرس اینستاگرام، یوتیوب و تیک‌تاک در `src/lib/site.ts` (بخش `social`) فعلاً نمونه است؛ آدرس واقعی را جایگزین کنید و دوباره build بگیرید.
- **هوش مصنوعی:** کلید API از پنل مدیریت ← «هوش مصنوعی» وارد می‌شود (رمزشده در دیتابیس ذخیره می‌شود).

## ۷) امنیت

- فایل `.env` را هرگز در گیت یا جای عمومی قرار ندهید.
- پنل مدیریت با رمز و قفل موقت بعد از ۵ تلاش اشتباه محافظت می‌شود؛ هدرهای امنیتی (CSP، HSTS) در `next.config.ts` تنظیم شده‌اند.
- سایت را فقط با https باز کنید (کوکی‌ها در production فقط روی https کار می‌کنند).
