 ╔═══════════════════════════════════════════════════════════════════╗
 ║          راهنمای نصب «محمدی بوتیک استور» روی هاست cPanel          ║
 ║                   نسخه Production-ready  —  v1.0                   ║
 ╚═══════════════════════════════════════════════════════════════════╝

═══════════════════════════════════════════════════════════════════════
بخش ۰  —  قبل از شروع (بسیار مهم)
═══════════════════════════════════════════════════════════════════════

این وب‌سایت یک اپلیکیشن Node.js کامل است (Next.js 16) که دارای:
  • پنل مدیریت و فروشگاه
  • دیتابیس SQLite
  • سیستم احراز هویت (ورود/ثبت‌نام)
  • API های سمت سرور

بنابراین **فایل HTML استاتیک نیست** و برای اجرا به Node.js نیاز دارد.

✅ هاست cPanel شما باید قابلیت «Setup Node.js App» را داشته باشد.
   این قابلیت در اکثر هاست‌های اشتراکی ایرانی (مثل میهن‌وب، پارس‌پک،
   ایران‌هاست، هاستIBC و...) موجود است.

❌ اگر هاست شما فقط PHP/HTML پشتیبانی می‌کند، این پروژه روی آن اجرا
   نمی‌شود. باید یا هاست Node.js بگیرید، یا از پلتفرم‌های رایگانی مثل
   Vercel استفاده کنید (پیشنهاد دوم ساده‌تر و رایگان است — ته این فایل
   توضیح داده شده).

نسخه Node.js مورد نیاز: 18.18 یا بالاتر (پیشنهادی: 20.x)


═══════════════════════════════════════════════════════════════════════
بخش ۱  —  محتوای فایل ZIP
═══════════════════════════════════════════════════════════════════════

وقتی فایل mohammadi-boutique-cpanel.zip را از حالت فشرده خارج کنید،
این فایل‌ها را می‌بینید:

  app/                          ← کل اپلیکیشن آماده اجرا
    ├── server.js               ← فایل اصلی اجرا (entry point)
    ├── package.json            ← اطلاعات اپلیکیشن
    ├── .env                    ← متغیرهای محیطی (باید ویرایش کنید!)
    ├── .next/                  ← خروجی بیلد (کامپایل شده)
    ├── node_modules/           ← کتابخانه‌های مورد نیاز (آماده)
    ├── public/                 ← فایل‌های استاتیک (لوگو، آپلودها)
    ├── prisma/                 ← اسکیمای دیتابیس + فایل‌های seed
    └── db/
        └── custom.db           ← دیتابیس SQLite (با داده‌های اولیه)

  package-deploy.json           ← package.json کمکی (فقط برای seed)
  DEPLOYMENT-GUIDE-FA.txt       ← همین راهنما
  README.md                     ← خلاصه پروژه


═══════════════════════════════════════════════════════════════════════
بخش ۲  —  آپلود فایل‌ها روی cPanel  (گام به گام)
═══════════════════════════════════════════════════════════════════════

گام ۲-۱) وارد cPanel شوید
  • آدرس cPanel معمولاً:  https://yourdomain.com:2083
    یا:  https://yourdomain.com/cpanel
  • با نام کاربری و رمز عبور هاست وارد شوید.

گام ۲-۲) فایل ZIP را آپلود کنید
  • در cPanel به بخش «Files» → «File Manager» بروید.
  • وارد پوشه «public_html» شوید (یا یک ساب‌دامین ایجاد کنید).
  • روی «Upload» کلیک کنید و فایل mohammadi-boutique-cpanel.zip را
    آپلود کنید.
  • بعد از اتمام آپلود، به File Manager برگردید.
  • روی فایل ZIP راست‌کلیک کنید → «Extract» را بزنید.
  • محتوای پوشه «app» را به داخل public_html (یا پوشه ساب‌دامین) منتقل
    کنید. یعنی این فایل‌ها باید مستقیماً در public_html باشند:
       server.js, package.json, .env, .next/, node_modules/, public/,
       prisma/, db/

  ⚠️ نکته مهم: اگر می‌خواهید سایت در ساب‌دامین (مثل shop.yourdomain.com)
     باشد، اول ساب‌دامین را در cPanel بسازید، سپس فایل‌ها را در پوشه‌ی
     آن ساب‌دامین (مثل public_html/shop) بریزید.

گام ۲-۳) ویرایش فایل .env  (بسیار مهم)
  • در File Manager روی فایل «.env» راست‌کلیک کنید → «Edit» را بزنید.
  • محتوای آن را به این شکل تغییر دهید:

      DATABASE_URL=file:./db/custom.db
      NEXTAUTH_SECRET=یک-رشته-تصادفی-طولانی-اینجا-بگذارید
      NEXTAUTH_URL=https://yourdomain.com
      HOSTNAME=0.0.0.0
      PORT=3000

  • NEXTAUTH_URL: آدرس دقیک دامنه شما (با https).
      مثال: https://shop.mohammadi.ir
  • NEXTAUTH_SECRET: یک رشته تصادفی ۳۲ کاراکتری. می‌توانید از
      https://generate-secret.now.sh/32 تولید کنید، یا همین مقدار پیش‌فرض
      را نگه دارید (برای محیط تستی مشکلی ندارد).
  • ذخیره کنید (Save).


═══════════════════════════════════════════════════════════════════════
بخش ۳  —  تنظیم Node.js App در cPanel  (گام به گام)
═══════════════════════════════════════════════════════════════════════

گام ۳-۱) ایجاد اپلیکیشن Node.js
  • در cPanel به بخش «Software» → «Setup Node.js App» بروید.
  • روی دکمه «Create Application» کلیک کنید.

گام ۳-۲) تنظیمات اپلیکیشن
  این فیلدها را پر کنید:

    Node.js version:     20.x  (یا بالاترین نسخه موجود)
    Application mode:    Production
    Application root:    public_html  (یا مسیر پوشه‌ای که فایل‌ها را
                          در آن ریختید)
    Application URL:     yourdomain.com  (یا ساب‌دامین)
    Application startup file:  server.js
    Passenger log file:  log.txt  (پیش‌فرض را نگه دارید)

  • روی «Create» کلیک کنید.

گام ۳-۳) تنظیم Environment Variables  (درون cPanel)
  در همان صفحه Setup Node.js App، پایین بخش تنظیمات، یک فیلد به نام
  «Environment variables» هست. این متغیرها را اضافه کنید:

    DATABASE_URL       =  file:./db/custom.db
    NEXTAUTH_SECRET    =  mahammadi-boutique-secret-key-1404-very-long
    NEXTAUTH_URL       =  https://yourdomain.com
    NODE_ENV           =  production

  • روی «Save» کلیک کنید.

گام ۳-۴) راه‌اندازی مجدد (Restart)
  • در همان صفحه، روی دکمه «Restart» کلیک کنید تا اپلیکیشن با تنظیمات
    جدید اجرا شود.


═══════════════════════════════════════════════════════════════════════
بخش ۴  —  تست وب‌سایت
═══════════════════════════════════════════════════════════════════════

گام ۴-۱) آدرس دامنه خود را در مرورگر باز کنید:
    https://yourdomain.com

  • صفحه اصلی فروشگاه باید باز شود (با هدر، اسلایدر، محصولات و...).

گام ۴-۲) ورود به پنل مدیریت:
    https://yourdomain.com/admin
  یا:  https://yourdomain.com/login

  اطلاعات ورود مدیر (پیش‌فرض):
    نام کاربری:  admin
    رمز عبور:    admin123

  ⚠️ مهم: بعد از اولین ورود، حتماً رمز عبور ادمین را از پنل «Users»
     تغییر دهید!

گام ۴-۳) حساب مشتری تستی:
    نام کاربری:  customer
    رمز عبور:    customer123


═══════════════════════════════════════════════════════════════════════
بخش ۵  —  تنظیمات SSL (HTTPS)
═══════════════════════════════════════════════════════════════════════

برای اینکه سایت با https باز شود و NextAuth درست کار کند:

  • در cPanel به «Security» → «SSL/TLS Status» بروید.
  • روی «Run AutoSSL» کلیک کنید تا برای دامنه شما گواهی رایگان
    نصب شود.
  • در فایل .env مطمئن شوید NEXTAUTH_URL با https شروع می‌شود.

  برای اجبار به HTTPS:
  • در cPanel به «Domains» → «Domains» بروید.
  • گزینه «Force HTTPS Redirect» را برای دامنه خود فعال کنید.


═══════════════════════════════════════════════════════════════════════
بخش ۶  —  اگر دیتابیس کار نکرد  (Troubleshooting)
═══════════════════════════════════════════════════════════════════════

مشکل احتمالی: باینری Prisma با سرور شما سازگار نیست
  (پیام خطا شامل «libquery_engine» یا «Error opening shared library»)

راه‌حل: باید Prisma client را روی سرور خودتان regenerate کنید:

  ۱. در cPanel به «Terminal» بروید (یا از SSH استفاده کنید).
  ۲. به پوشه اپلیکیشن بروید:
       cd public_html
  ۳. نصب prisma CLI:
       npm install prisma@6.11.1 --save
  ۴. بازتولید client:
       npx prisma generate
  ۵. بازگشت به Setup Node.js App → Restart.

مشکل احتمالی: دیتابیس خالی است یا خطای «no such table» می‌دهد

راه‌حل: دیتابیس را از نو بسازید:

  ۱. در Terminal:
       cd public_html
       npx prisma db push
       npx tsx prisma/seed-admin.ts
       npx tsx prisma/seed.ts
  ۲. اگر tsx نصب نیست:
       npm install -g tsx
  ۳. Restart اپلیکیشن.

مشکل احتمالی: پوشه db/ قابل نوشتن نیست
  • در File Manager روی پوشه «db» راست‌کلیک → «Change Permissions».
  • روی 755 یا 775 تنظیم کنید.
  • همین کار را برای فایل db/custom.db انجام دهید (644 یا 666).

مشکل احتمالی: سایت 500 Internal Server Error می‌دهد
  • در cPanel به Setup Node.js App بروید.
  • فایل log.txt را ببینید (لینک «View Log» کنار اپلیکیشن).
  • خطاهای رایج:
      - PORT اشتباه → در .env مقدار PORT=3000 را نگه دارید (cPanel
        خودش پورت را مدیریت می‌کند).
      - NEXTAUTH_URL اشتباه → آدرس دقیق دامنه با https.


═══════════════════════════════════════════════════════════════════════
بخش ۷  —  آپلود عکس محصولات و مدیریت فایل‌ها
═══════════════════════════════════════════════════════════════════════

وقتی از پنل مدیریت محصول جدید اضافه می‌کنید، عکس‌ها در پوشه:
    public/uploads/
ذخیره می‌شوند. این پوشه باید قابل نوشتن باشد (permissions 755 یا 775).

در File Manager این پوشه را پیدا کرده و دسترسی آن را تنظیم کنید.


═══════════════════════════════════════════════════════════════════════
بخش ۸  —  جایگزین ساده‌تر: دیپلوی روی Vercel  (رایگان)
═══════════════════════════════════════════════════════════════════════

اگر cPanel شما Node.js پشتیبانی نمی‌کند یا سخت بود، Vercel را پیشنهاد
می‌کنم (همان شرکتی که Next.js را ساخته):

  ۱. در https://vercel.com ثبت‌نام کنید (با گیت‌هاب).
  ۲. کد پروژه را روی GitHub آپلود کنید.
  ۳. در Vercel «New Project» → مخزن گیت‌هاب را انتخاب کنید.
  ۴. Environment variables را اضافه کنید:
       DATABASE_URL     =  file:./db/custom.db
       NEXTAUTH_SECRET  =  (یک رشته تصادفی)
       NEXTAUTH_URL     =  https://your-project.vercel.app
  ۵. Deploy را بزنید.

نکته: Vercel دیتابیس SQLite را به‌خاطر ماهیت serverless پشتیبانی
دائمی نمی‌کند. برای دیتابیس دائمی، از Neon، Supabase یا Turso
(همگی سطح رایگان دارند) استفاده کنید و فقط URL دیتابیس را در
DATABASE_URL قرار دهید.


═══════════════════════════════════════════════════════════════════════
بخش ۹  —  اطلاعات تماس و پشتیبانی
═══════════════════════════════════════════════════════════════════════

اگر در هنگام نصب با مشکلی مواجه شدید:

  ۱. ابتدا log.txt را در cPanel چک کنید.
  ۲. مطمئن شوید Node.js نسخه 18.18+ استفاده می‌شود.
  ۳. مطمئن شوید .env درست تنظیم شده.
  ۴. مطمئن شوید پوشه db/ و public/uploads/ قابل نوشتن هستند.

اعتبار پروژه:
  • محمدی بوتیک استور — Next.js 16 + Prisma + SQLite + NextAuth
  • ۱۸ محصول نمونه، ۳ دسته‌بندی، ۴ کد تخفیف، ۳ بنر
  • پنل مدیریت کامل (محصولات، سفارش‌ها، نظرات، کدهای تخفیف، بنرها، کاربران)
  • فروشگاه کامل (کاتالوگ، جستجو، سبد خرید، تسویه حساب، لیست علاقه‌مندی)


═══════════════════════════════════════════════════════════════════════
                             پایان راهنما
═══════════════════════════════════════════════════════════════════════
