# DramaCatalog (Laravel) — Deploy Guide (Poora Tarika)

**Version:** v4 (Admin SEO + Cast/Director/Tags + robots.txt + GSC slot)
**Language:** Roman Urdu — technical naam aur commands English me hi likhe hain, taake copy-paste me ghalti na ho.

Is guide ka maqsad: koi bhi banda, jo Laravel pehle kabhi deploy na bhi kar chuka ho, is ko follow kar ke site live kar sake. Agar koi step samajh na aaye to us step ko chhoro mat — pehle Troubleshooting (Part 8) dekho, phir error ka screenshot/message bhej do.

---

## Part 1 — Server me kya chahiye (Requirements)

| Cheez | Zaroorat | Note |
|---|---|---|
| PHP | **8.2 ya us se upar** (8.2, 8.3, 8.4) | PHP 8.1 ya neeche par ye app NAHI chalegi. Hosting panel me PHP version check karo. |
| PHP extensions | BCMath, Ctype, cURL, Fileinfo, JSON, Mbstring, OpenSSL, PDO + pdo_mysql, Tokenizer, XML, Zip | Ye Laravel 11 ki standard list hai. Aam tor par shared hosting par pehle se on hoti hain. Agar koi missing ho to hosting se on karwao (cPanel → Select PHP Version → Extensions). |
| Composer | **Composer 2** (server par) | Package me `vendor/` folder NAHI aata (ye 100 MB+ hota hai). Composer hi us ko server par banayega. |
| Database | **MySQL 5.7+ ya MariaDB 10.3+** | Ek khaali database + ek user chahiye (neeche Part 3 me). SQLite par bhi chal sakta hai, lekin recommended MySQL hai. |
| Web server | Apache ya Nginx | Dono chalte hain. |
| Document Root | **`public/` folder** (poora project folder NAHI) | Ye sab se aam ghalti hai. Agar domain ko project ke root par point karo ge to site kharab dikhegi / `.env` khul sakta hai. |
| Domain | Ek domain (jaise `tumharisite.com`) | `.com` hi lo, `.de` waghera se bacho (ID/address ki shart ho sakti hai). |
| SSL (HTTPS) | **Zaroori** | Let's Encrypt (free) ya hosting ka AutoSSL. Bina HTTPS ke AdSense aur Google ranking dono mushkil honge. |
| Cron Jobs | **1 cron job** (hosting panel me) | Daily auto-import isi se chalta hai. Agar cron na ho to Admin → Imports se haath se import karna parega. |
| SSH / Terminal | **Recommended, zaroori nahi** | cPanel me "Terminal" hota hai, wahan commands chal jati hain. SSH na ho to File Manager + Terminal se bhi kaam ho jata hai. |
| Disk / RAM | Kam se kam 1 GB disk (vendor ke liye), 1 GB RAM | Shuru me site chhoti hai (sirf metadata + posters ke links, posters TMDB ke server par hote hain, tumhare server par nahi). Jaise titles barhenge, database barhega — ye normal hai. |

## Part 2 — Kya NAHI chahiye

- **Node.js / npm NAHI chahiye.** Is app me koi Vite/Node build nahi hai. CSS/JS Bootstrap CDN se aata hai.
- **WordPress NAHI chahiye.** Ye Laravel app hai, WordPress theme nahi.
- **Koi paid API NAHI chahiye.** TMDB API key free hai (Part 3 me tarika).
- **MyDramaList API NAHI chahiye.** Uski official public API nahi hai (private/partner only). Cast/director TMDB credits se aate hain.
- **Video hosting NAHI chahiye.** Ye app video files host nahi karti. Player me sirf tumhare apne embed links chalte hain (jo tum Admin se daalo ge).

## Part 3 — Deploy se pehle tayyar karo (3 cheezein)

### 3.1 Domain + Hosting lo
Koi bhi hosting jo upar wali requirements poori kare (PHP 8.2+, MySQL, cron, Composer/Terminal). Shared hosting bhi chalegi, VPS bhi. Domain ko hosting se connect karo (nameservers ya A record — hosting ki guide follow karo).

### 3.2 Database banao (cPanel example)
1. cPanel → **MySQL Databases** → naya database banao, jaise `tumhara_drama`.
2. Usi page par naya user banao (mazboot password), phir user ko database se attach karo aur **ALL PRIVILEGES** do.
3. Ye 4 cheezein likh lo: **DB name, DB username, DB password, DB host** (aam tor par `127.0.0.1` ya `localhost`).

### 3.3 TMDB API key lo (free, 5 minute)
1. [themoviedb.org](https://www.themoviedb.org) par account banao, login karo.
2. Profile (upar daayein) → **Settings** → **API** → **Create** (ya "Click here" API section me).
3. Type: **Developer** chuno, form bharo (app name: DramaCatalog, app URL: tumhara domain, summary: "Asian drama metadata catalog").
4. Jo **API Key (v3 auth)** mile, us ko likh lo. Yehi `TMDB_API_KEY` hai. Kisi ko mat do, aur is ko kabhi public file me mat daalo — sirf `.env` me jayegi.

---

## Part 4 — Deploy, step-by-step (poora tarika)

### Step 0 — Package download karo
`drama-auto-laravel-package-v4.zip` (ya latest version) apne computer par download karo. Is me `vendor/` aur `.env` NAHI hote — ye jaan boojh kar hai, dono server par banenge.

### Step 1 — Files server par upload karo
**Tareeqa A (cPanel File Manager):**
1. cPanel → **File Manager** → `public_html` ke andar (ya domain ke folder me) ek folder banao, jaise `drama-app`. Agar yehi domain sirf is site ke liye hai to seedha `public_html` me bhi kar sakte ho, lekin phir Step 5 me document root ka khayal rakhna.
2. Zip upload karo, phir **Extract** karo. Andar `drama-auto-laravel/` folder milega — us ke andar ki files (app/, bootstrap/, config/, database/, public/, resources/, routes/, artisan, composer.json, .env.example...) ko apne app folder me rakho.

**Tareeqa B (SSH, tez tareeqa):**
```bash
cd ~/public_html
unzip drama-auto-laravel-package-v4.zip
mkdir -p drama-app
mv drama-auto-laravel/* drama-app/
cd drama-app
```

### Step 2 — Composer install karo (vendor banega)
App folder me terminal kholo aur chalao:
```bash
cd /path/to/drama-app
composer install --no-dev --optimize-autoloader
```
Ye 1–3 minute lega aur `vendor/` folder bana dega. Agar `composer: command not found` aaye to hosting se Composer on karwao ya cPanel Terminal me `which composer` check karo. Kabhi bhi apne computer ka `vendor/` upload karne ki koshish mat karo — wo 100 MB+ hai aur server ke PHP se match nahi karega.

### Step 3 — `.env` file banao
```bash
cp .env.example .env
```
Phir `.env` kholo (File Manager me Edit, ya terminal me `nano .env`) aur ye values bharo:
```env
APP_NAME="DramaCatalog"
APP_ENV=production
APP_DEBUG=false
APP_URL=https://tumharidomain.com
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=tumhara_drama
DB_USERNAME=tumhara_user
DB_PASSWORD=tumhara_password
TMDB_API_KEY=tumhari_tmdb_key
ADMIN_EMAIL=admin@tumharidomain.com
CONTACT_EMAIL=contact@tumharidomain.com
ADSENSE_PUBLISHER_ID=
```
- `APP_URL` me `https://` ke saath apna asal domain likho, `yourdomain.com` mat chhoro.
- `ADSENSE_PUBLISHER_ID` abhi khaali chhoro — jab AdSense mile tab bharna.
- Baaki lines (`AUTO_DAILY_LIMIT=100`, `AUTO_IMPORT_TIME=03:00`, `AUTO_LANGUAGES=ko,ja,th`...) default theek hain, un ko chhero mat jab tak zaroorat na ho.

### Step 4 — App key banao
```bash
php artisan key:generate
```
Ye `.env` me `APP_KEY` bhar dega. Is ke baghair login/session kaam nahi karega.

### Step 5 — Document Root ko `public/` par set karo (SAB SE ZAROORI)
Domain ka document root **app folder ke andar `public/`** hona chahiye, na ke app folder khud.
- **cPanel:** Domains → domain ke samne Edit/Document Root → `/public_html/drama-app/public` (apne folder ke mutabiq) set karo.
- **VPS (Nginx example):** `root /var/www/drama-app/public;` aur `index index.php;` ke saath PHP-FPM block hosting ki guide se lagao.
- **VPS (Apache example):** VirtualHost me `DocumentRoot /var/www/drama-app/public` rakho.

Check: browser me `https://tumharidomain.com` kholo. Agar Laravel ka welcome/error page ya khaali homepage dikhe to document root theek hai. Agar file list ya `composer.json` dikhe to document root GALAT hai — foran theek karo, warna `.env` sab ko nazar aa sakta hai.

### Step 6 — Database tables banao (migrate)
```bash
php artisan migrate
```
Ye sab tables bana dega: titles, genres, seasons, episodes, people (cast/director), person_title, tags column, ad_slots, settings, import_logs. Agar "table already exists" ya connection error aaye to Part 8 dekho.

### Step 7 — Admin password set karo
```bash
php artisan drama:admin-password
```
Ye tum se password poochega (type karte waqt nazar nahi aayega — ye normal hai). Password mazboot rakho (kam se kam 12 characters, letters + numbers + symbol). Login ye hoga:
- URL: `https://tumharidomain.com/admin/login`
- Email: `.env` me jo `ADMIN_EMAIL` likha tha
- Password: jo abhi set kiya

### Step 8 — Pehla import chalao (site khaali se bhari hogi)
```bash
php artisan drama:import --limit=100
```
Ye TMDB se pehle 100 titles layega (60 trending/naye + 40 purane catalog se), un ke seasons, episodes, cast aur director ke saath. 2–5 minute lag sakte hain (TMDB rate limit ki wajah se app khud 250ms ruk ruk kar request bhejta hai — is ko band mat karo). Khatam hone par terminal me "new / updated / skipped" ka summary aayega. Phir homepage kholo — titles nazar aane chahiyen. Agar 0 aaye to Part 8 (import) dekho.

### Step 9 — Cron lagao (daily auto-import ke liye)
Hosting panel me **Cron Jobs** me ye ek line add karo (apna path badal kar):
```bash
* * * * * cd /path/to/drama-app && php artisan schedule:run >> /dev/null 2>&1
```
Ye har minute Laravel ka scheduler check karta hai, aur scheduler khud roz `AUTO_IMPORT_TIME` (default **03:00 server time**) par `drama:import` chalata hai. Matlab: roz 100 naye/purane titles auto publish honge, 20 sab se purane titles refresh honge (un ka cast/director bhi isi refresh se aayega). Cron ke baghair bhi site chalegi, lekin naya content sirf Admin → Imports → "Run Import Now" se haath se aayega.

### Step 10 — Cache clear + final check
```bash
php artisan config:clear
php artisan view:clear
php artisan route:clear
```
Phir ye URLs kholo aur check karo:
- `/` — homepage (Latest, Trending, Movies, Coming Soon)
- `/drama/kisi-title-ka-slug` — single post (player upar, servers, detail, similar, sidebar trending #1–#10)
- `/sitemap.xml` — XML list nazar aani chahiye
- `/robots.txt` — default robots text nazar aana chahiye
- `/admin/login` — login page

---

## Part 5 — Deploy ke baad Admin me kya karna hai (tartib se)

1. **Admin → SEO (pehla kaam):** Homepage title/description likho. Movie aur TV ke templates check karo (default pehle se theek hain, lekin apni marzi se badal sakte ho). Variables ka list usi page par likha hai. **Google Search Console code** wahan paste karo (sirf code, poora tag nahi).
2. **Admin → Advertising:** Har slot me apne ad network ka code paste karo (AdSense ya Adsterra — koi bhi HTML/JS code chalega). Khaali slot auto-hide ho jata hai. Pop ads + AdSense ek saath aggressive tareeqe se mat chalao — AdSense account ko khatra hota hai.
3. **Contact email badlo:** `.env` me `CONTACT_EMAIL` ko apna asal email karo (legal pages par yehi dikhta hai). Badalne ke baad `php artisan config:clear` chalao.
4. **Google Search Console:** [search.google.com/search-console](https://search.google.com/search-console) par property add karo, verification ke liye Admin → SEO me jo code dala tha wohi use hoga (meta tag method). Phir **Sitemaps** me `https://tumharidomain.com/sitemap.xml` submit karo.
5. **Embed links (sirf apne/original links):** Admin → Titles → Episodes → Edit Embeds se har episode me 5 slots tak link daalo. Jo link tumhare paas nahi ya jis ke rights tumhare paas nahi, wo kabhi mat daalo. Khaali slot = player nahi dikhega, ye normal hai.
6. **Editorial notes (AdSense ke liye zaroori):** Auto TMDB metadata akela patla content hai. AdSense apply karne se pehle kam se kam 5–10 titles me Admin → Titles → Edit me apna original note likho (TMDB ka text copy mat karo). Yehi cheez approval me farq dalegi.
7. **AdSense:** Jab site par real content + kuch din ki indexing ho jaye tab apply karo. `.env` me `ADSENSE_PUBLISHER_ID` bharo, phir `php artisan config:clear` chalao — `/ads.txt` auto ban jayega. Approval Google ka faisla hai, koi guarantee nahi.

## Part 6 — Rozana kaam kaise chalta hai (tumhe kuch nahi karna)

- Roz 03:00 (server time) par cron import chalata hai: 100 titles (60 naye/trending + 40 purane), 20 purane refresh.
- Naye titles auto publish hote hain. Purane titles ka metadata update hota hai, lekin tumhare haath se likhe hue embed links, editorial notes, SEO overrides aur publish status **kabhi overwrite nahi hote**.
- Cast/director purane titles me refresh ke saath aate hain (roz 20 titles).
- Homepage ke sections (Latest, Trending, Movies, Coming Soon) khud update hote hain. Coming Soon future air dates se banta hai.
- Tumhara kaam sirf ye hai: kabhi kabhi Admin → Imports me log check karo, embed links add karo, aur AdSense ke liye original notes likhte raho.

## Part 7 — Update kaise karo (v3 → v4, ya aane wali version)

1. **Backup lo:** database ka export (phpMyAdmin → Export) aur purani files ka zip bana lo.
2. Nayi package ki files ko purani files par replace karo. **`.env` aur `vendor/` ko mat chhero** — `.env` tumhara hai, us me tumhari keys hain.
3. ```bash
   composer install --no-dev --optimize-autoloader
   php artisan migrate
   php artisan config:clear
   php artisan view:clear
   ```
4. v3 → v4 me `migrate` zaroori hai (people/tags tables). Bina migrate ke cast/director pages error denge. Purana data delete nahi hota.

---

## Part 8 — Common problems aur un ka hal

| Problem | Wajah (aam tor par) | Hal |
|---|---|---|
| 500 Server Error, khaali safha | `.env` ghalat, APP_KEY missing, ya permissions | Terminal me `php artisan key:generate` dobara chalao, `.env` check karo, phir `storage/logs/laravel.log` ki aakhri lines dekho — asal error wahan likha hota hai. Debug ke liye sirf thodi der ke liye `APP_DEBUG=true` karo, phir wapas `false` karo (production me `true` mat chhoro). |
| Composer install fail / PHP version error | Server par PHP 8.1 ya neeche | Hosting panel me PHP 8.2+ select karo, phir dobara `composer install` chalao. |
| Database connection error (SQLSTATE) | DB name/user/password/host ghalat | `.env` ke DB_* values ko hosting ke MySQL page se dobara copy karo. Host aam tor par `127.0.0.1` hota hai, kuch hosts par alag hostname hota hai — hosting ki guide dekho. |
| `php artisan migrate` fail: table exists | Pehle aadhi migration chal chuki | `php artisan migrate:status` se dekho kaun si pending hai. Agar database khaali hai to us ko drop kar ke dobara banao, phir `migrate` chalao. Live data ho to kabhi `migrate:fresh` mat chalao — data delete ho jayega. |
| Import 0 titles laata hai / error | TMDB key missing ya ghalat | `.env` me `TMDB_API_KEY` check karo, phir `php artisan config:clear` aur dobara `php artisan drama:import --limit=10` se test karo. Key ghalat ho to TMDB 401 dega — log me nazar aayega. |
| Cron ke bawajood roz naya content nahi aata | Cron line ka path ghalat, ya `schedule:run` fail | Terminal me haath se `php artisan schedule:run` chalao aur output dekho. Cron me poora path likho (jaise `/home/username/public_html/drama-app`), relative path mat likho. |
| Posters/images nahi dikhte | TMDB image base ya internet issue | Poster TMDB ke server se aate hain (`image.tmdb.org`). Agar site ke baaki hisse theek hain to ye aam tor par TMDB ki taraf se temporary issue hota hai. `.env` me `TMDB_IMAGE_BASE=https://image.tmdb.org/t/p/w500` check karo. |
| Player nahi dikhta | Embed slot khaali hai | Ye bug nahi hai. Player sirf tab dikhta hai jab Admin se kam se kam ek embed link dala ho. Admin → Titles → Episodes → Edit Embeds se check karo. |
| CSS kharab / site bina design ke dikhti hai | Document root galat, ya Bootstrap CDN block | Pehle Step 5 check karo (root `public/` hona chahiye). Phir browser me page source me Bootstrap CDN link check karo — agar network CDN block kar raha ho to alag network se kholo. |
| Admin login nahi hota | Email ya password ghalat | Email `.env` ke `ADMIN_EMAIL` se match hona chahiye. Password bhool gaye to dobara `php artisan drama:admin-password` chalao — purana password overwrite ho jayega. |
| Files upload karte waqt `.env` nazar aata hai | Document root project folder par hai | Foran Step 5 theek karo. Ye security issue hai — `.env` kabhi public nahi hona chahiye. |

## Part 9 — Security checklist (live karne se pehle)

- [ ] `APP_DEBUG=false` (production me kabhi `true` mat rakho)
- [ ] Document root sirf `public/` hai
- [ ] Admin password mazboot hai (12+ characters)
- [ ] `.env` ki backup apne computer par hai, lekin `.env` kabhi GitHub ya kisi public jagah par upload nahi ki
- [ ] HTTPS on hai (browser me lock icon)
- [ ] Sirf apne/original embed links dale hain — copyrighted/illegal links kabhi nahi
- [ ] `storage/` aur `bootstrap/cache/` writable hain (aam tor par 775)

## Part 10 — Final checklist (site live karne se pehle tick karo)

- [ ] Homepage khul rahi hai, titles dikh rahe hain
- [ ] Single post khul raha hai: player upar, servers, detail, similar, sidebar trending
- [ ] Season + episode pages khul rahe hain
- [ ] `/sitemap.xml` khul raha hai
- [ ] `/robots.txt` khul raha hai
- [ ] Admin login ho raha hai, SEO templates save ho rahe hain
- [ ] Cron lag gaya hai (ya Admin → Imports se manual import ka tareeqa pata hai)
- [ ] GSC me sitemap submit ho gaya hai
- [ ] Contact email asal hai (placeholder nahi)
- [ ] Pehle 5–10 editorial notes likh diye hain (AdSense ke liye)

---

**Yaad rakhne wali baat:** Deploy ek dafa ka kaam hai, us ke baad site khud chalti hai (rozana import + refresh cron se). Tumhara rozana kaam sirf embed links aur original notes ka hai. Agar kisi step par atak jao to error ka exact message bhej do — usi se hal niklega, andaze se nahi.
