🚀 Production Deployment Guide

SaaS Ops Platform কীভাবে ব্যবহার ও cPanel-এ deploy করবেন

SmartShikkha, Pump360, POS এবং অন্যান্য SaaS client management, invoice, payment, wallet, SMS, WhatsApp ও Email API platform-এর জন্য ধাপে ধাপে বাংলা নির্দেশিকা।

Laravel 13PHP 8.3+Next.js 16 Node.js 20.9+PostgreSQLQueue Worker

⚡ সবচেয়ে আগে এই সিদ্ধান্ত নিন

সাধারণ cheap shared cPanel hosting এই project-এর জন্য recommended নয়।
কারণ frontend-এর জন্য Node.js process, backend-এর জন্য Laravel, PostgreSQL এবং message/email process করার জন্য queue worker দরকার। Shared hosting-এ এগুলোর কিছু feature বন্ধ থাকতে পারে।
RecommendedVPS/Cloud + cPanel/WHM

Node.js, PostgreSQL, Redis/DB queue, Supervisor/systemd ও SSL control পাওয়া যায়। Production-এর জন্য সবচেয়ে ভালো।

ConditionalAdvanced Shared cPanel

Application Manager/Node 20+, PostgreSQL, Terminal/SSH, Composer, Cron এবং background jobs চালানোর উপায় থাকলে ব্যবহার করা যাবে।

🧩 ১) Hosting Requirements

Hosting কেনার/ব্যবহারের আগে support-কে এই list পাঠিয়ে confirmation নিন।

RequirementMinimumকেন দরকার
PHP8.3+ (8.4 ভালো)Laravel 13
PHP Extensionsbcmath, ctype, curl, dom, fileinfo, mbstring, openssl, pdo, tokenizer, xml, iconv, jsonBackend + PDF + calculations
Node.js20.9+; Node 22 preferredNext.js 16 dashboard
PostgreSQLHosting-supported versionMain database
SSH / TerminalEnabledComposer, npm, artisan, migration
ComposerAvailableLaravel dependencies
npmAvailable with NodeFrontend build
Application ManagerPassenger + Node supportNext.js process
Cron1-minute cronLaravel scheduler / fallback queue
Long-running workerSupervisor/systemd preferredReal-time SMS/Email/WhatsApp processing
HTTPS/SSLRequiredAdmin token/API key security
⚠️ cPanel-এ PostgreSQL বা Application Manager menu না দেখালে সেটা project-এর bug নয়; hosting provider featureটি enable করেনি বা server-এ install নেই।

💻 ২) নিজের PC-তে Project চালানো (Docker — সহজ পদ্ধতি)

1
ZIP Extract করুন

Project folder খুলুন। Root-এ docker-compose.yml, backend, frontend থাকবে।

2
Docker Desktop install করুন

Windows হলে Docker Desktop + WSL2 ব্যবহার করুন।

3
Environment file তৈরি করুন
cp .env.docker.example .env.docker

Windows Explorer দিয়ে চাইলে .env.docker.example copy করে নাম .env.docker দিন।

4
Secret পরিবর্তন করুন

DB_PASSWORD, REDIS_PASSWORD, ADMIN_PASSWORD, SMTP এবং provider credentials বদলান। Laravel key generate:

php -r "echo 'base64:'.base64_encode(random_bytes(32)).PHP_EOL;"
5
Containers start করুন
docker compose --env-file .env.docker up -d --build
6
Database migrate + seed
docker compose --env-file .env.docker exec backend php artisan migrate --force
docker compose --env-file .env.docker exec backend php artisan db:seed --force
Open: Dashboard → http://localhost:3000
API → http://localhost:8080/api/v1
Login → ADMIN_EMAIL + ADMIN_PASSWORD

🧭 ৩) Dashboard কীভাবে ব্যবহার করবেন

📦 Products

SmartShikkha, Pump360, POS বা নতুন product add করুন। Product name click করলে সেই product-এর client filter দেখা যাবে।

👥 Clients

Client add করুন। Client profile-এ wallet, subscription, pricing, invoice/payment history, message history এবং API key manage করুন।

🎯 Leads

Interested prospect save করুন। Deal complete হলে Convert করে client বানান।

🧾 Invoices

Invoice তৈরি, PDF download, email send, full/partial payment record ও receipt email করুন।

💳 Wallet

Client টাকা দিলে profile থেকে recharge করুন। প্রতিটি credit/debit ledger-এ record হয়।

✉️ Communication

SMS, WhatsApp, Email usage, charged amount, provider cost এবং gross margin দেখুন।

Recommended Daily Flow

Lead তৈরি
Client Convert
Subscription
Invoice
Payment / Wallet
API Key

Client SaaS থেকে SMS Send Example

curl -X POST https://api.example.com/api/v1/communication/messages/sms \
  -H "X-API-Key: sk_live_..." \
  -H "Idempotency-Key: order-2026-000001-sms-1" \
  -H "Content-Type: application/json" \
  -d '{"to":"88017XXXXXXXX","message":"Your payment has been received."}'

Balance Check

curl https://api.example.com/api/v1/communication/balance \
  -H "X-API-Key: sk_live_..."

🌐 ৪) Live Server Architecture

একই domain-এর দুই subdomain ব্যবহার করলে deployment ও security সহজ হয়।

👤 User
app.example.com
Next.js Dashboard
Node / Passenger
Laravel API
api.example.com
PostgreSQL
Laravel API
DB Queue
Queue Worker
SMS / Meta / SMTP
ServiceExample
Admin Dashboardhttps://app.example.com
Backend APIhttps://api.example.com/api/v1

📤 ৫) cPanel-এ Project Upload

1
Backup নিন

আগের live app/database থাকলে full backup নিন।

2
Subdomain/Domain তৈরি করুন

api.example.com এবং app.example.com তৈরি করুন।

3
File Manager → Home directory

Project ZIP public_html-এর বাইরে upload করে extract করা ভালো। উদাহরণ:

/home/CPANEL_USER/ └── saas-ops/ ├── backend/ ├── frontend/ ├── docs/ └── tools/
Laravel project-এর পুরো root public_html-এ expose করবেন না। API domain-এর Document Root শুধুমাত্র backend/public হওয়া উচিত।

🧱 ৬) Laravel Backend Deploy

6.1 PHP Version

cPanel → MultiPHP Managerapi.example.com → PHP 8.4 (বা minimum 8.3) select করুন।

6.2 API Domain Document Root

API subdomain/document root ideally:

/home/CPANEL_USER/saas-ops/backend/public

Hosting panel যদি home directory-এর এই path document root হিসেবে নিতে না দেয়, host support-কে Laravel public document root configure করতে বলুন। Project root web-accessible করা নিরাপদ নয়।

6.3 PostgreSQL Database তৈরি

cPanel → PostgreSQL Database Wizard:

  1. Database তৈরি করুন (যেমন saasops)
  2. User তৈরি করুন
  3. User-কে database-এ add করুন
  4. Final database/user name-এ cPanel prefix থাকতে পারে, যেমন myuser_saasops

6.4 Composer Install

cd /home/CPANEL_USER/saas-ops/backend
composer install --no-dev --prefer-dist --optimize-autoloader

6.5 Production .env

cd /home/CPANEL_USER/saas-ops/backend
cp .env.example .env
php artisan key:generate

তারপর .env edit করুন:

APP_NAME="SaaS Ops Platform"
APP_ENV=production
APP_DEBUG=false
APP_URL=https://api.example.com
FRONTEND_URL=https://app.example.com
APP_TIMEZONE=Asia/Dhaka

DB_CONNECTION=pgsql
DB_HOST=localhost
DB_PORT=5432
DB_DATABASE=CPANEL_USER_saasops
DB_USERNAME=CPANEL_USER_saasuser
DB_PASSWORD=VERY_STRONG_DB_PASSWORD

# Shared cPanel-এ Redis না থাকলে:
CACHE_STORE=database
QUEUE_CONNECTION=database
SESSION_DRIVER=database

MAIL_MAILER=smtp
MAIL_HOST=smtp.example.com
MAIL_PORT=587
MAIL_USERNAME=your-user
MAIL_PASSWORD=your-password
MAIL_SCHEME=tls
MAIL_FROM_ADDRESS=billing@example.com
MAIL_FROM_NAME="SaaS Ops Platform"

ADMIN_EMAIL=admin@example.com
ADMIN_PASSWORD=USE_A_UNIQUE_16_PLUS_CHARACTER_PASSWORD

SMS_DRIVER=generic_http
SMS_HTTP_ENDPOINT=https://your-sms-provider.example/send
SMS_HTTP_TOKEN=YOUR_REAL_TOKEN
SMS_HTTP_SENDER_ID=YOUR_SENDER_ID

WHATSAPP_DRIVER=meta
WHATSAPP_GRAPH_VERSION=v26.0
WHATSAPP_PHONE_NUMBER_ID=YOUR_PHONE_NUMBER_ID
WHATSAPP_ACCESS_TOKEN=YOUR_META_ACCESS_TOKEN

DEFAULT_SMS_PRICE=0.50
DEFAULT_WHATSAPP_PRICE=0.80
DEFAULT_EMAIL_PRICE=0.20
DEFAULT_SMS_PROVIDER_COST=0.30
DEFAULT_WHATSAPP_PROVIDER_COST=0.50
DEFAULT_EMAIL_PROVIDER_COST=0.05
LOW_BALANCE_THRESHOLD=1000
SMS provider format vendor-specific. আপনার gateway যদি to, message, sender_id, client_reference এর বদলে অন্য field/signature ব্যবহার করে, GenericSmsProvider.php adapter update করতে হবে।

6.6 Database Setup

php artisan migrate --force
php artisan db:seed --force

Seed command প্রথম admin এবং SmartShikkha/Pump360/POS product তৈরি করবে। Production-এ weak/default admin password হলে seeder নিজেই reject করবে।

6.7 Storage + Cache

php artisan storage:link
chmod -R 775 storage bootstrap/cache
php artisan optimize

6.8 Basic Test

php artisan about
php artisan route:list
php artisan migrate:status

তারপর browser-এ https://api.example.com/api/v1 অথবা configured API endpoint check করুন। Root endpoint 404 হলেও API routes কাজ করলে সমস্যা নয়।

🎨 ৭) Next.js Frontend cPanel Application Manager-এ Deploy

Next.js 16 চালাতে Node.js 20.9 বা তার বেশি লাগবে। cPanel Application Manager সাধারণত Passenger ব্যবহার করে; hosting provider-কে Node 22 + Passenger/Application Manager enable করতে বলুন।

7.1 Frontend build-এর আগে API URL দিন

NEXT_PUBLIC_API_URL browser bundle-এ build time-এ ঢুকে যায়। তাই production API URL দিয়ে build করুন।

cd /home/CPANEL_USER/saas-ops/frontend
cp .env.example .env.production
echo 'NEXT_PUBLIC_API_URL=https://api.example.com/api/v1' > .env.production
npm install
npm run build

7.2 Standalone assets প্রস্তুত করুন

Project-এ output: 'standalone' already enabled। Build-এর পর:

cd /home/CPANEL_USER/saas-ops/frontend
mkdir -p .next/standalone/.next
cp -R .next/static .next/standalone/.next/static
if [ -d public ]; then cp -R public .next/standalone/public; fi

7.3 Passenger startup file

cPanel Passenger সাধারণত app.js startup file খোঁজে। Standalone folder-এর ভিতরে wrapper তৈরি করুন:

cat > /home/CPANEL_USER/saas-ops/frontend/.next/standalone/app.js <<'JS'
process.env.NODE_ENV = 'production';
require('./server.js');
JS

7.4 Application Manager

  1. cPanel → Software → Application Manager
  2. Register Application
  3. Deployment Domain: app.example.com
  4. Application Path: saas-ops/frontend/.next/standalone
  5. Environment: Production
  6. Deploy করুন
ℹ️ Hosting-এর Passenger setup ভিন্ন হলে startup file/path provider adjust করতে পারে। cPanel docs অনুযায়ী Passenger default startup filename app.js

7.5 Frontend restart

mkdir -p /home/CPANEL_USER/saas-ops/frontend/.next/standalone/tmp
touch /home/CPANEL_USER/saas-ops/frontend/.next/standalone/tmp/restart.txt

Application Manager-এ restart/redeploy button থাকলে সেটিও ব্যবহার করতে পারেন।

⏳ ৮) Queue Worker ও Cron — খুব গুরুত্বপূর্ণ

Invoice/payment mail এবং SMS/WhatsApp processing queue-তে যায়। Queue না চললে request database-এ থাকবে কিন্তু actual message/email সময়মতো যাবে না।

✅ Production Recommended: Persistent Worker

VPS হলে Supervisor/systemd দিয়ে worker সবসময় চালু রাখুন। Laravel-ও production queue worker-এর জন্য process monitor recommend করে।

php artisan queue:work database --queue=messages,default --sleep=1 --tries=1 --timeout=60

Supervisor Example (VPS/root)

[program:saas-ops-worker]
process_name=%(program_name)s_%(process_num)02d
command=/usr/bin/php /home/CPANEL_USER/saas-ops/backend/artisan queue:work database --queue=messages,default --sleep=1 --tries=1 --timeout=60
directory=/home/CPANEL_USER/saas-ops/backend
autostart=true
autorestart=true
stopasgroup=true
killasgroup=true
user=CPANEL_USER
numprocs=2
redirect_stderr=true
stdout_logfile=/home/CPANEL_USER/saas-ops/backend/storage/logs/worker.log

🟡 Shared cPanel Fallback: Cron worker

এটি low-volume fallback। SMS API-এর real-time production use-এর জন্য 1-minute cron latency এবং overlap risk থাকার কারণে persistent worker ভালো।

cPanel → Cron Jobs → প্রতি minute:

* * * * * cd /home/CPANEL_USER/saas-ops/backend && /FULL/PATH/TO/php artisan queue:work database --queue=messages,default --stop-when-empty --tries=1 --timeout=50 >> storage/logs/cron-worker.log 2>&1

/FULL/PATH/TO/php বের করতে Terminal-এ:

which php
php -v

Laravel Scheduler Cron

* * * * * cd /home/CPANEL_USER/saas-ops/backend && /FULL/PATH/TO/php artisan schedule:run >> /dev/null 2>&1

📨 ৯) SMS, WhatsApp ও Email Provider Setup

SMS

Production-এ SMS_DRIVER=generic_http এবং endpoint/token দিতে হবে। Provider API body আলাদা হলে backend adapter customise করুন। আগে staging-এ test করুন।

WhatsApp

WHATSAPP_DRIVER=meta, phone number ID এবং access token দিন। Meta account/template/category rules আপনার business account অনুযায়ী configure ও test করতে হবে।

Email

Real SMTP দিন। Billing domain-এর SPF, DKIM, DMARC সেট করুন। Invoice ও payment confirmation mail queue worker দিয়ে যাবে।

Production provider check

Project production mode-এ placeholder/log SMS বা WhatsApp driver থাকলে billable message charge করার আগে request reject করে। ফলে fake provider mode-এ client wallet silently deduct হবে না।

🔐 ১০) Security Rules

✅ APP_DEBUG=false

Production error details public করবেন না।

✅ HTTPS only

Dashboard ও API দুই subdomain-এই SSL ব্যবহার করুন।

✅ Strong secrets

DB, admin, SMTP, Meta/SMS credentials আলাদা strong password/token রাখুন।

✅ Laravel public root

.env, vendor config বা source web-accessible করবেন না।

✅ API keys

Client key leak হলে সঙ্গে সঙ্গে revoke করে নতুন key generate করুন।

✅ Backups

PostgreSQL daily backup + offsite/encrypted copy রাখুন এবং restore test করুন।

Recommended permissions

find /home/CPANEL_USER/saas-ops/backend -type d -exec chmod 755 {} \;
find /home/CPANEL_USER/saas-ops/backend -type f -exec chmod 644 {} \;
chmod -R 775 /home/CPANEL_USER/saas-ops/backend/storage
chmod -R 775 /home/CPANEL_USER/saas-ops/backend/bootstrap/cache
chmod 600 /home/CPANEL_USER/saas-ops/backend/.env

Hosting user/group policy অনুযায়ী 775/755 adjust করতে হতে পারে। World-writable 777 এড়িয়ে চলুন।

🔄 ১১) ভবিষ্যতে Project Update করার নিয়ম

Backend update

cd /home/CPANEL_USER/saas-ops/backend
php artisan down
composer install --no-dev --prefer-dist --optimize-autoloader
php artisan migrate --force
php artisan optimize
php artisan reload
php artisan up

Frontend update

cd /home/CPANEL_USER/saas-ops/frontend
npm install
npm run build
mkdir -p .next/standalone/.next
cp -R .next/static .next/standalone/.next/static
if [ -d public ]; then cp -R public .next/standalone/public; fi
printf "process.env.NODE_ENV='production';\nrequire('./server.js');\n" > .next/standalone/app.js
mkdir -p .next/standalone/tmp
touch .next/standalone/tmp/restart.txt
Update-এর আগে PostgreSQL backup নিন। Migration run করার আগে staging-এ test করা উত্তম।

🛠️ ১২) Troubleshooting

500 Internal Server Error

storage/logs/laravel.log দেখুন। APP_KEY, DB connection, permissions এবং PHP extensions check করুন।

tail -n 100 storage/logs/laravel.log
php artisan config:clear
php artisan optimize
Frontend “Failed to fetch” / API connect হচ্ছে না

NEXT_PUBLIC_API_URL production URL দিয়ে frontend rebuild হয়েছে কি না check করুন। SSL, CORS এবং API URL browser Network tab-এ দেখুন।

Invoice email / SMS যাচ্ছে না

Queue চলছে কি না check করুন:

php artisan queue:work database --queue=messages,default --stop-when-empty -v
php artisan queue:failed
Application Manager নেই

Hosting provider Application Manager/Passenger enable করেনি। Node.js hosting support চাইতে হবে অথবা VPS ব্যবহার করতে হবে।

PostgreSQL menu নেই

Server-এ PostgreSQL configure করা নেই। Hosting provider-কে enable/install করতে বলুন; না হলে compatible VPS/hosting লাগবে।

Composer command not found

Host support-কে Composer path জিজ্ঞেস করুন। বিকল্পভাবে trusted build machine-এ composer install --no-dev চালিয়ে vendorসহ upload করা যায়, তবে একই PHP platform/extensions নিশ্চিত করতে হবে।

Next.js Application Manager start হচ্ছে না

Node version ≥ 20.9, application path, app.js, Passenger logs এবং .next/standalone/server.js আছে কি না check করুন। Build-এর পর static/public copy হয়েছে কি না দেখুন।

✅ ১৩) Go-Live Checklist

Checkbox tick করলে browser localStorage-এ এই page-এর progress save থাকবে।

📚 ১৪) Official References

এই guide তৈরিতে project-এর README/PRODUCTION/VERIFICATION files এবং নিচের official documentation ব্যবহার করা হয়েছে: