# راه‌اندازی و انتشار سیستم (Setup & Deployment) این بخش نحوه اجرای سامانه در محیط توسعه (Local) و فرآیند پابلیش کردن آن روی سرورهای Production را توضیح می‌دهد. ## ۱. محیط توسعه (Development Mode) برای توسعه بر روی کامپیوتر شخصی، مراحل زیر را طی کنید: ### پیش‌نیازها - **Node.js** (نسخه ۲۰ به بالا) - **PostgreSQL** نصب شده و در حال اجرا بر روی سیستم شما. ### اجرای بک‌اند 1. وارد پوشه بک‌اند شوید: `cd backend` 2. پکیج‌ها را نصب کنید: `npm install` 3. فایل `.env` را ایجاد کنید و متغیر دیتابیس را به شکل زیر تنظیم کنید: `DATABASE_URL="postgresql://user:password@localhost:5432/caninadb?schema=public"` 4. جداول را ایجاد کنید: `npx prisma db push` و سپس `npx prisma generate` 5. پروژه را در حالت توسعه اجرا کنید: `npm run start:dev` 6. بک‌اند شما اکنون روی پورت پیش‌فرض (معمولاً `3001` یا `3005`) در حال اجراست. ### اجرای فرانت‌اند 1. یک تب جدید در ترمینال باز کنید و وارد پوشه اپلیکیشن شوید: `cd frontend/application` 2. نصب پیش‌نیازها: `npm install` 3. ایجاد متغیرهای محیطی در فایل `.env.local`: `NEXT_PUBLIC_API_URL=http://localhost:3001/api` 4. اجرای پروژه در حالت دولوپ: `npm run dev` 5. وب‌سایت در آدرس `http://localhost:3000` در دسترس است. --- ## ۲. محیط پروداکشن و انتشار (Production Deployment) نحوه استقرار سامانه بر روی سرورهای اصلی به شرح زیر است. معمولاً این فرآیند بر روی سیستم‌عامل لینوکس (Ubuntu) انجام می‌گیرد. ### بیلد کردن پروژه (Building) برای بک‌اند: ```bash cd backend npm run build ``` برای فرانت‌اند (تولید خروجی بسیار بهینه برای سرعت بالا و سئو): ```bash cd frontend/application npm run build ``` ### اجرای پروژه در سرور با PM2 از ابزار [PM2](https://pm2.keymetrics.io/) برای اجرای مداوم (Daemon) و لودبالانسینگ پروسه‌ها استفاده می‌کنیم. پس از نصب سراسری `npm install -g pm2`، دستورات زیر را در سرور اجرا کنید: #### برای راه‌اندازی بک‌اند: ```bash cd backend pm2 start dist/main.js --name "canina-api" ``` #### برای راه‌اندازی فرانت‌اند Next.js: ```bash cd frontend/application pm2 start npm --name "canina-web" -- start ``` ### ذخیره پروسه‌ها تا پس از ری‌استارت سرور قطع نشوند: ```bash pm2 save pm2 startup ``` --- ## ۳. تنظیمات Nginx (Reverse Proxy) سرور Nginx مسئول دریافت ترافیک عمومی و هدایت آن‌ها به پورت‌های صحیح لوکال است. - ترافیک‌های دامنه `canina-iran.com` به پورت فرانت‌اند (`3000`) هدایت می‌شوند. - ترافیک‌هایی که دارای آدرس `/api/` در مسیر خود هستند مستقیماً به پورت بک‌اند (`3001`) هدایت می‌شوند. ### نمونه فایل کانفیگ Nginx ```nginx server { listen 80; server_name canina-iran.com www.canina-iran.com; # ارسال ترافیک /api به Backend location /api/ { proxy_pass http://localhost:3001; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } # ارسال مابقی ترافیک به Frontend location / { proxy_pass http://localhost:3000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } } ```