cPanel Live + পুরনো Database — Step-by-Step চেকলিস্ট
আপনার Need Update when software live.txt-এ যা আছে (PHP limits, cron, queue) সেটাও নিচে অন্তর্ভুক্ত। পুরো প্রক্রিয়া ব্যাকআপ → আপলোড → DB কানেক্ট → migration → cache → cron → টেস্ট।

পর্ব ১ — লাইভের আগে (লোকাল / PC)
১. ডাটাবেস ব্যাকআপ
cPanel phpMyAdmin বা লোকাল থেকে চলমান DB-এর full export (.sql) রাখুন।
ফাইল + storage/app/public (আপলোড ছবি) ব্যাকআপ করুন।
২. কোড প্রস্তুত
Git থাকলে: শুধু পরিবর্তিত ফাইল push; নাহলে ZIP (.env, vendor, node_modules, storage/logs বাদ দিয়ে কম্প্রেস করুন)।
৩. লোকালে একবার চালান (ঐচ্ছিক কিন্তু ভালো)
php artisan migrate --pretend
কোন migration চলবে দেখুন — live-এও একইগুলো চলবে।

পর্ব ২ — cPanel-এ ফাইল আপলোড
৪. ফোল্ডার স্ট্রাকচার
দুই ধরনের সেটআপ:

সেটআপ	বর্ণনা
A (সুপারিশ)
ডোমেইনের Document Root = .../quickpos/public
B
সব ফাইল public_html-এ, রুটে .htaccess যা public-এ redirect করে
APP_URL যেন live ডোমেইন হয়, যেমন: https://yourdomain.com (শেষে /public না থাকলে ভালো)।

৫. আপলোড করবেন / করবেন না
আপলোড করুন	আপলোড করবেন না (বা সাবধানে)
app, Modules, config, database, public, resources, routes, bootstrap
লোকাল .env (live-এর .env মুছবেন না, শুধু আপডেট)
composer.json, composer.lock, artisan
vendor (live-এ composer install করুন)
modules_statuses.json
storage/logs/* (খালি রাখুন)
৬. vendor ইনস্টল (Terminal)
cd /home/USER/public_html/quickpos
composer install --no-dev --optimize-autoloader
Terminal না থাকলে লোকালে vendor ZIP করে আপলোড করতে পারেন (ধীর, বড়)।

পর্ব ৩ — পুরনো Database-এর সাথে কানেক্ট
৭. Live .env সেট করুন
cPanel → File Manager → .env (নতুন হলে .env.example কপি করে .env বানান)।

ডাটাবেস (চলমান live DB):

DB_CONNECTION=mysql
DB_HOST=localhost
DB_PORT=3306
DB_DATABASE=আপনার_live_database_নাম
DB_USERNAME=cpanel_db_user
DB_PASSWORD=cpanel_db_password
অ্যাপ (অবশ্যই):

APP_ENV=live
APP_DEBUG=false
APP_URL=https://yourdomain.com
QUEUE_CONNECTION=database
CRON_SECRET=একটা_লম্বা_র্যান্ডম_সিক্রেট
গুরুত্বপূর্ণ:

Live-এ আগে থেকে APP_KEY থাকলে সেটাই রাখুন — বদলালে এনক্রিপ্টেড ডেটা ভাঙতে পারে।
নতুন ইনস্টল হলে: php artisan key:generate (শুধু একবার)।
মেইল / SMS / পেমেন্ট — live-এর সঠিক SMTP, API key বসান (লোকাল .env কপি করলে ভুল হোস্ট/IP যেতে পারে)।

৮. modules_statuses.json
আপলোড করুন; BulkSms: true, Superadmin: true ইত্যাদি যেন live-এ চালু থাকে।

পর্ব ৪ — Database migration (সব আপডেট DB-তে)
৯. Migration চালান
cd /home/USER/public_html/quickpos
php artisan migrate --force
এটা শুধু যেগুলো এখনো চালেনি সেগুলো চালাবে (migrations টেবিল দেখে)। পুরনো ডেটা মুছবে না।

নতুন/আপডেট হওয়া জিনিসের উদাহরণ (আপনার প্রজেক্টে):

Communicator টেবিল (superadmin_communicators, details)
Bulk SMS API টেবিল (bulk_sms_default_api_settings, individual, assignments, campaigns, logs…)
Superadmin notification templates
jobs, failed_jobs (queue)
notification_templates-এ SMS owner কলাম
business/footer সংশ্লিষ্ট কলাম
ত্রুটি হলে:

php artisan migrate:status
কোন migration fail — লগ দেখে ঠিক করুন; একই migration দুবার ম্যানুয়াল SQL চালাবেন না।

১০. Storage লিংক ও পারমিশন
php artisan storage:link
chmod -R 775 storage bootstrap/cache
cPanel File Manager দিয়েও storage ও bootstrap/cache → 775 (owner = আপনার user)।

পর্ব ৫ — Cache ও PHP
১১. Cache কমান্ড
php artisan config:clear
php artisan cache:clear
php artisan view:clear
php artisan route:clear
php artisan config:cache
php artisan route:cache
php artisan view:cache
.env বদলানোর পর আবার config:clear + config:cache।

১২. PHP সেটিং (আপনার নোট অনুযায়ী)
cPanel → MultiPHP INI বা php.ini:

max_input_vars = 20000
post_max_size = 64M
memory_limit = 512M
max_execution_time = 300
PHP 8.0+ (Laravel 9) নিশ্চিত করুন।

পর্ব ৬ — Cron (Bulk SMS, Communicator, Backup)
১৩. PHP path
which php
যেমন: /opt/cpanel/ea-php81/root/usr/bin/php

১৪. Cron — প্রতি মিনিট (একটাই যথেষ্ট)
cPanel → Cron Jobs → * * * * *:

cd /home/USER/public_html/quickpos && /opt/cpanel/ea-php81/root/usr/bin/php artisan schedule:run >> /dev/null 2>&1
Terminal না থাকলে URL:

curl -s "https://yourdomain.com/run-scheduler-cron?key=YOUR_CRON_SECRET"
এতে চলবে:

Bulk SMS scheduled + queue (queue:work)
Communicator email batch (communicator:send)
Backup (live Kernel-এ যা আছে)
পর্ব ৭ — Live-এর পর ম্যানুয়াল সেটিং
১৫. Bulk SMS Default API
Superadmin → Bulk SMS → Default API — Send URL, API key, customer_id live-এ ঠিক আছে কিনা দেখুন।

১৬. SMS প্রোভাইডার IP Whitelist
cPanel সাইটের Public IP Amar SMS BD (বা আপনার gateway)-তে whitelist করুন — নাহলে send fail (IP not whitelisted)।

১৭. Superadmin সেটিং
Communicator / Template SMS — এখন Default/Individual API দিয়ে যায় (আপনার সাম্প্রতিক কোড)
bulksms_route_all_sms চালু থাকলে POS/Repair SMS Bulk API দিয়ে যাবে
১৮. .htaccess / SSL
Force HTTPS (cPanel AutoSSL)
APP_URL https হতে হবে
পর্ব ৮ — যাচাই (টেস্ট চেকলিস্ট)
#	টেস্ট	প্রত্যাশিত
1
লগইন (superadmin + এক business)
ঠিক
2
php artisan migrate:status
সব Ran
3
Bulk SMS → Default API → Test SMS
Success (IP whitelist থাকলে)
4
Send Message ছোট ক্যাম্পেইন (১–২ নম্বর)
sent
5
Communicator (email + SMS যদি দেন)
queue/cron-এ প্রসেস
6
POS sale + notification SMS (যদি চালু)
যায় / log
7
storage/logs — error নেই
—
সাধারণ ভুল — এড়িয়ে চলুন
Live .env-এ APP_ENV=local রাখা → cron/schedule কাজ করবে না
পুরনো storage/uploads মুছে ফেলা → ছবি/ফাইল হারাবে
APP_KEY বদলানো → session/encrypt সমস্যা
Migration ছাড়া শুধু ফাইল আপলোড → নতুন টেবিল/কলাম নেই, error
QUEUE_CONNECTION=sync → বড় Bulk SMS queued থেকে যায়
Cron না দেওয়া → scheduled SMS, communicator email, queue আটকে থাকে


সংক্ষিপ্ত ক্রম (এক লাইনে)
ব্যাকআপ → কোড আপলোড → live .env (DB + APP_ENV=live) → composer install → migrate --force → storage:link → permission → config:cache → cron প্রতি মিনিট → SMS IP whitelist → টেস্ট

আপনার cPanel username, ডোমেইন, এবং DB public_html-এর ঠিক পাথ (যেমন /home/user/domains/site.com/public_html) দিলে cron লাইন ও .env উদাহরণ আপনার নামে লিখে দিতে পারি।