# TGHR को cPanel पर डालना (gibf.in) — हिंदी गाइड

एक ही Node.js Application से तीनों चलेंगे:

| URL | कौन सा हिस्सा |
| --- | --- |
| `https://gibf.in/` | Website (`tghr-frontend`) |
| `https://gibf.in/api/...` | Backend API (`tghr-backend`) |
| `https://gibf.in/admin` | Admin panel (`tghr-admin`) |

यह कैसे काम करता है: प्रोजेक्ट के root में `server.js` है। cPanel सिर्फ़ यही एक फ़ाइल चलाता है।
`server.js` अंदर से तीनों apps को चलाता है और रास्ते (path) के हिसाब से request आगे भेज देता है
(`/api` → backend, `/admin` → admin, बाकी सब → website)।

> **ज़रूरी:** ज़िप में **build पहले से किया हुआ** है (`.next` और `dist`) और उसमें `https://gibf.in`
> डला हुआ है। इसलिए server पर `npm run build` नहीं करना पड़ेगा (shared hosting पर build अक्सर
> memory limit से फेल होता है)।

---

## 0. शुरू करने से पहले

- cPanel में **Setup Node.js App** का option होना चाहिए (न दिखे तो hosting वालों से enable करवाएँ)।
- Node.js version **22** चुनें (कम से कम **20.9** — admin panel को यही चाहिए)।
- Domain `gibf.in` पर **SSL** चालू करें: cPanel → *SSL/TLS Status* → AutoSSL → *Run AutoSSL*।
  फिर *Domains* में **Force HTTPS Redirect** ON करें।
- `public_html` में पुरानी वेबसाइट की फ़ाइलें हैं तो **पहले backup** लें, और `index.html`, `index.php`
  जैसी फ़ाइलें हटा/rename करें — वरना वही पुरानी साइट दिखेगी।
- MongoDB Atlas इस्तेमाल कर रहे हैं तो Atlas → *Network Access* में अपने cPanel server का IP जोड़ें
  (cPanel के दाएँ side में *Shared IP Address* दिखता है)।

---

## 1. ज़िप upload और extract

1. cPanel → **File Manager** → अपनी **home directory** (`/home/USERNAME/`) खोलें
   (`public_html` के अंदर **नहीं**)।
2. **Upload** → `TGHR_gibf_cpanel.zip`।
3. ज़िप पर right-click → **Extract**। इससे `/home/USERNAME/tghr/` बन जाएगा।

## 2. Backend की `.env` बनाएँ

1. File Manager → *Settings* → **Show Hidden Files (dotfiles)** ON।
2. `tghr/tghr-backend/.env.production.example` को **Copy** करके नाम रखें `.env`।
3. `.env` को **Edit** करें और ये भरें: `MONGO_URI`, `JWT_SECRET`, `EMAIL_USER`, `EMAIL_PASS`,
   `ADMIN_EMAIL`, `R2_*` — अपनी localhost वाली `.env` से वही values कॉपी कर दें।
4. ये तीन लाइनें जैसी हैं वैसी ही रहने दें:
   ```
   CLIENT_URL=https://gibf.in
   ADMIN_FRONTEND_URL=https://gibf.in/admin
   WHATSAPP_ENABLED=false
   ```

> `WHATSAPP_ENABLED=false` इसलिए कि shared hosting पर WhatsApp (Chrome) नहीं चलता। बिना इसके हर
> enquiry में लगभग 20 सेकंड की देरी होती। Email वाले alerts पहले की तरह चलते रहेंगे।

## 3. Node.js App बनाएँ (सिर्फ़ एक)

cPanel → **Setup Node.js App** → **Create Application**:

| Field | Value |
| --- | --- |
| Node.js version | `22` |
| Application mode | `Production` |
| Application root | `tghr` |
| Application URL | `gibf.in` (आगे path खाली छोड़ें) |
| Application startup file | `server.js` |

**Create** दबाएँ। (Environment variables यहाँ जोड़ने की ज़रूरत नहीं — सब `tghr-backend/.env` में है।)

## 4. Packages install करें

Node.js App के पेज पर सबसे ऊपर एक command दिखता है (`source /home/USERNAME/nodevenv/tghr/22/bin/activate && cd /home/USERNAME/tghr`)।
उसे cPanel **Terminal** (या SSH) में चलाएँ, फिर:

```bash
export PUPPETEER_SKIP_DOWNLOAD=1
npm run install:all
```

इसमें कुछ मिनट लगते हैं। अंत में कोई `ERR!` नहीं आना चाहिए (warnings चलेंगी)।
अगर *"Resource temporarily unavailable"* आए तो कुछ देर बाद वही command दोबारा चलाएँ।

## 5. Start / Restart

Node.js App के पेज पर **Restart** दबाएँ (या Terminal में `touch ~/tghr/tmp/restart.txt`)।

## 6. जाँचें

| Link | क्या दिखना चाहिए |
| --- | --- |
| `https://gibf.in` | Website |
| `https://gibf.in/api/health` | `{"success":true,"status":"ok"}` |
| `https://gibf.in/admin` | Admin login page |
| `https://gibf.in/__tghr/health` | तीनों (`backend`, `frontend`, `admin`) में `"ready": true` |

पहली बार खोलने पर 10–20 सेकंड लग सकते हैं (तीनों apps चालू होते हैं)।

## 7. Admin user

- अगर आप **वही MongoDB** इस्तेमाल कर रहे हैं जो localhost पर था, तो आपके admin users पहले से मौजूद हैं —
  सीधे `https://gibf.in/admin` पर login करें।
- नया database है तो Terminal में (step 4 वाले environment में) चलाएँ: `npm run create-admin`।
  ⚠️ यह script एक **fixed email और password** (`Admin@1234`) से admin बनाती है। Login के बाद
  **तुरंत password बदलें**, या चलाने से पहले `tghr-backend/src/utils/createAdmin.ts` में अपना email/password लिख दें।

---

## अगर कुछ बदलना पड़े

- **Code बदला या domain बदला:** `NEXT_PUBLIC_BACKEND_URL` build के समय code में बैठ जाता है, इसलिए दोबारा build चाहिए:
  `tghr-frontend/.env.production.local` और `tghr-admin/.env.production.local` में URL बदलें, फिर
  Terminal में `npm run build` और उसके बाद **Restart**। (Build भारी होता है — memory कम हो तो अपने
  computer पर build करके `.next` / `dist` folders upload करें।)
- **`www.gibf.in` भी चलाना है:** backend `.env` में `CORS_ORIGINS=https://www.gibf.in` जोड़ें (या cPanel में
  www → non-www redirect लगाएँ, यह बेहतर है)।
- **`.env` बदली:** सिर्फ़ **Restart** काफ़ी है।

## दिक्कतें और हल

| दिखता क्या है | कारण / हल |
| --- | --- |
| पुरानी साइट / cPanel का default पेज | `public_html` में पुरानी `index.html` / `index.php` हटाएँ। |
| *"Setup incomplete … Run: npm install"* | Step 4 नहीं हुआ (या build folders upload नहीं हुए)। |
| Website चलती है पर `/api` में 503 | Backend चालू नहीं हुआ — आम तौर पर `MONGO_URI` गलत है या Atlas में server IP allow नहीं है। `/__tghr/health` में `backend` का status देखें। |
| Admin में login नहीं होता, console में CORS error | backend `.env` में `CLIENT_URL` / `ADMIN_FRONTEND_URL` जाँचें, फिर Restart। |
| Password reset mail का link गलत खुलता है | `ADMIN_FRONTEND_URL=https://gibf.in/admin` होना चाहिए। |
| Site बार-बार बंद होती है / 502 | Hosting की memory/process limit। टेस्ट में तीनों apps मिलाकर हल्के traffic पर लगभग 470 MB RAM लेते हैं, इसलिए कम से कम 1 GB RAM वाला plan रखें। Limit कम हो तो plan बढ़ाएँ या VPS लें। |

## Local (localhost) पर कुछ नहीं बदला

`npm run dev` पहले की तरह चलता है — website `:3000`, admin `http://localhost:3001/login`, backend `:5000`।
सिर्फ़ production build में admin `/admin` के नीचे चलता है।
