# cPanel Update Guide (ZIP Upload)
## Master Ecommerce BD — IT Square BD

> **প্রথমবার install?** → [`CPANEL-INSTALL-GUIDE.md`](CPANEL-INSTALL-GUIDE.md) — ZIP upload-এর পর **`/install`** wizard ব্যবহার করুন।  
> **Update (existing store)?** — নিচের গাইড follow করুন + **`/upgrade`**

এই গাইড follow করলে **local-এ build করা ZIP** cPanel-এ upload করে site update হবে।

---

## Part A: Local PC (Windows) — ZIP তৈরি

Project root: `E:\projects\ecomnew`

```powershell
cd E:\projects\ecomnew
powershell -ExecutionPolicy Bypass -File scripts\build-cpanel-release.ps1
```

**Output:**
| File | Location |
|------|----------|
| ZIP (upload করবেন) | `E:\projects\ecomnew\release\cpanel-upload.zip` |
| Folder (optional) | `E:\projects\ecomnew\release\cpanel-upload\` |

> Script automatically: `composer install --no-dev`, `npm run build`, vendor + assets copy, cache clean.

---

## Part B: cPanel — Upload আগে Backup

| # | Backup | কোথায় |
|---|--------|--------|
| 1 | **Database** | cPanel → phpMyAdmin → Export |
| 2 | **`.env` file** | Download copy রাখুন |
| 3 | **Uploads/images** | `storage/app/public/` folder backup |

---

## Part C: cPanel — ZIP Upload & Extract

1. cPanel → **File Manager**
2. Project folder-এ যান (যেমন: `/home/username/ecommerce/`)
3. `cpanel-upload.zip` **Upload** করুন
4. ZIP select → **Extract**
5. Extract location: **same folder** (`ecommerce/`)
6. **Overwrite existing files** → Yes

### ⚠️ Overwrite করবেন না / protect করুন

| Item | Action |
|------|--------|
| `.env` | Extract-এর **আগে** backup; replace হলে পুরনো `.env` ফিরিয়ে দিন |
| `storage/app/public/` | Product images — backup রাখুন; overwrite হলে restore |
| `public/uploads/` (if any) | Custom media — backup; ZIP merge করলে same filename ছাড়া পুরনো file থাকবে |

> **Release ZIP** user uploads (`storage/app/public/*`) include করে না — extract করলে server-এর পুরনো product images **delete হয় না**, শুধু নতুন code/files add/overwrite হয়।

Extract-এর পর `.env` আছে কিনা check করুন — `APP_KEY`, `DB_*`, `APP_URL` ঠিক আছে কিনা।

### Permission (ZIP extract-এর পর auto)

cPanel ZIP extract করলে **`vendor/` permission ভুল** হয়ে 500 error খুব common।  
`post-deploy-cpanel.sh` / `setup.sh` চালালে **automatic fix** হয়:

| Folder | Permission |
|--------|------------|
| `vendor/` | folders **755**, files **644**, `vendor/bin/` **755** |
| `packages/` | folders **755**, files **644** |
| `storage/` | **775** (writable) |
| `bootstrap/cache/` | **775** (writable) |
| `app/`, `config/`, `public/` | **755/644** |
| `artisan` | **755** |
| `.env` | **640** (others read নয়) |

Extract-এর **ঠিক পর** শুধু permission fix (migrate ছাড়া):

```bash
cd ~/ecommerce
bash fix-permissions.sh
```

---

## Part D: cPanel Terminal — Unzip-এর পর Commands

cPanel → **Terminal** → project folder-এ যান:

```bash
cd ~/ecommerce
```

> `ecommerce` = আপনার actual folder name

### Option 1 — One command (recommended)

```bash
bash post-deploy-cpanel.sh
```

এতে **auto হয়:** vendor/storage permission fix → cache clear → storage link → migrate → optimize → permission fix again

অথবা:

```bash
bash setup.sh
```

### Option 1c — Web Updater (Terminal নেই? browser থেকে)

`.env`-এ set করুন:

```env
APP_UPGRADE=true
```

Browser-এ open করুন:

```
https://yourdomain.com/upgrade
```

**Run Upgrade Now** click করলে auto হয়:
- cache clear → storage link → migrate → config/route/view cache → optimize

**Security:** upgrade শেষে `.env`-এ `APP_UPGRADE=false` set করুন।

> `APP_UPGRADE_KEY` **optional** — extra security চাইলে set করুন; না দিলে শুধু `/upgrade` যথেষ্ট (অন্য script-এর মতো)।

### Option 1b — শুধু permission fix (500 error হলে প্রথমে এটা)

```bash
bash fix-permissions.sh
```

### Option 2 — Manual step-by-step

```bash
cd ~/ecommerce

# 1) Permissions (vendor + storage + bootstrap/cache)
bash fix-permissions.sh

# 2) Clear old cache
php artisan optimize:clear

# 3) Storage link (images)
php artisan storage:link --force

# 4) Database migrations (নতুন columns/tables)
php artisan migrate --force

# 5) Production cache
php artisan config:cache
php artisan route:cache
php artisan view:cache
php artisan optimize
```

---

## Part E: Verify Site

| Test | URL |
|------|-----|
| Homepage | `https://yourdomain.com` |
| Admin | `https://yourdomain.com/admin/login` |
| Sitemap | `https://yourdomain.com/sitemap.xml` |
| Robots | `https://yourdomain.com/robots.txt` |
| Product image | যেকোনো product page |

Error হলে log দেখুন:

```bash
tail -50 ~/ecommerce/storage/logs/laravel.log
```

---

## Part E2: Cron Job (Auto Sync — Required)

CRM reminder promotion, CarryBee status sync, activity log purge — এগুলো **automatic** চালাতে cPanel cron লাগবে।

cPanel → **Cron Jobs** → Add:

| Field | Value |
|-------|-------|
| Minute | `*` |
| Hour | `*` |
| Day | `*` |
| Month | `*` |
| Weekday | `*` |
| Command | `cd /home/USERNAME/ecommerce && php artisan schedule:run >> /dev/null 2>&1` |

> `USERNAME` ও `ecommerce` আপনার actual cPanel path দিয়ে replace করুন।

**এই cron ছাড়া কাজ করবে না:**

| Schedule | Command | Purpose |
|----------|---------|---------|
| Every 15 min | `courier:sync-status` | API courier status poll (CarryBee, Steadfast, Pathao, RedX) |
| Daily 09:00 | `crm:send-intelligence-alerts` | CRM birthday SMS + churn admin digest |
| Daily 01:00 | `crm:promote-reminders` | CRM Active → Reminder (30 days) |
| Daily 02:00 | `activity-log:purge` | Old admin activity logs delete |

Verify cron কাজ করছে:

```bash
cd ~/ecommerce
php artisan schedule:list
php artisan crm:promote-reminders
```

---

## Part F: এই Update-এ নতুন যা এসেছে

Setup/migrate-এর পর কাজ করবে:

- Ad Management (Pixel, CAPI, GA4, GTM, TikTok, Pinterest + Test)
- Analytics Overview reports
- Sitemap auto-generate (`/sitemap.xml`)
- Dynamic robots.txt (`/robots.txt`)
- GA/GTM/FB pixel — সব theme + landing
- Optional order confirmation email (SMTP settings)
- Customer Support → Channels (Messenger/WhatsApp)

Admin-এ manually configure করতে হতে পারে:
- **Ad Management → Integrations** — Pixel/GA IDs
- **Integrations & Services → Email** — SMTP + order email toggle
- **Customer Support → Channels** — Meta tokens

---

## Quick Copy-Paste (Terminal)

```bash
cd ~/ecommerce
bash post-deploy-cpanel.sh
```

যদি `post-deploy-cpanel.sh` না থাকে:

```bash
cd ~/ecommerce
bash fix-permissions.sh
php artisan optimize:clear
php artisan storage:link --force
php artisan migrate --force
php artisan config:cache
php artisan route:cache
php artisan view:cache
php artisan optimize
bash fix-permissions.sh
```

---

## Troubleshooting

| Problem | Fix |
|---------|-----|
| 500 Error (vendor) | `bash fix-permissions.sh` then `php artisan optimize:clear` |
| Permission denied / storage | `bash fix-permissions.sh` |
| 500 Error (general) | `bash post-deploy-cpanel.sh` |
| CSS missing | Local-এ `npm run build` → re-upload `public/build` |
| Images 404 | `php artisan storage:link --force` |
| Migration error | phpMyAdmin backup → fix → `migrate --force` |
| `.env` lost | Backup `.env` restore |
| White page | `php artisan optimize:clear` |
| `post-deploy-cpanel.sh: syntax error` | Windows CRLF — run: `sed -i 's/\r$//' post-deploy-cpanel.sh setup.sh fix-permissions.sh scripts/fix-cpanel-permissions.sh` then retry |

---

**ZIP location:** `release/cpanel-upload.zip`  
**Full guide:** `CPANEL-DEPLOYMENT.md`
