SaaS Ops Platform কীভাবে ব্যবহার ও cPanel-এ deploy করবেন
SmartShikkha, Pump360, POS এবং অন্যান্য SaaS client management, invoice, payment, wallet, SMS, WhatsApp ও Email API platform-এর জন্য ধাপে ধাপে বাংলা নির্দেশিকা।
⚡ সবচেয়ে আগে এই সিদ্ধান্ত নিন
কারণ frontend-এর জন্য Node.js process, backend-এর জন্য Laravel, PostgreSQL এবং message/email process করার জন্য queue worker দরকার। Shared hosting-এ এগুলোর কিছু feature বন্ধ থাকতে পারে।
Node.js, PostgreSQL, Redis/DB queue, Supervisor/systemd ও SSL control পাওয়া যায়। Production-এর জন্য সবচেয়ে ভালো।
Application Manager/Node 20+, PostgreSQL, Terminal/SSH, Composer, Cron এবং background jobs চালানোর উপায় থাকলে ব্যবহার করা যাবে।
🧩 ১) Hosting Requirements
Hosting কেনার/ব্যবহারের আগে support-কে এই list পাঠিয়ে confirmation নিন।
| Requirement | Minimum | কেন দরকার |
|---|---|---|
| PHP | 8.3+ (8.4 ভালো) | Laravel 13 |
| PHP Extensions | bcmath, ctype, curl, dom, fileinfo, mbstring, openssl, pdo, tokenizer, xml, iconv, json | Backend + PDF + calculations |
| Node.js | 20.9+; Node 22 preferred | Next.js 16 dashboard |
| PostgreSQL | Hosting-supported version | Main database |
| SSH / Terminal | Enabled | Composer, npm, artisan, migration |
| Composer | Available | Laravel dependencies |
| npm | Available with Node | Frontend build |
| Application Manager | Passenger + Node support | Next.js process |
| Cron | 1-minute cron | Laravel scheduler / fallback queue |
| Long-running worker | Supervisor/systemd preferred | Real-time SMS/Email/WhatsApp processing |
| HTTPS/SSL | Required | Admin token/API key security |
💻 ২) নিজের PC-তে Project চালানো (Docker — সহজ পদ্ধতি)
Project folder খুলুন। Root-এ docker-compose.yml, backend, frontend থাকবে।
Windows হলে Docker Desktop + WSL2 ব্যবহার করুন।
cp .env.docker.example .env.docker
Windows Explorer দিয়ে চাইলে .env.docker.example copy করে নাম .env.docker দিন।
DB_PASSWORD, REDIS_PASSWORD, ADMIN_PASSWORD, SMTP এবং provider credentials বদলান। Laravel key generate:
php -r "echo 'base64:'.base64_encode(random_bytes(32)).PHP_EOL;"
docker compose --env-file .env.docker up -d --build
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
http://localhost:3000API →
http://localhost:8080/api/v1Login →
ADMIN_EMAIL + ADMIN_PASSWORD🧭 ৩) Dashboard কীভাবে ব্যবহার করবেন
SmartShikkha, Pump360, POS বা নতুন product add করুন। Product name click করলে সেই product-এর client filter দেখা যাবে।
Client add করুন। Client profile-এ wallet, subscription, pricing, invoice/payment history, message history এবং API key manage করুন।
Interested prospect save করুন। Deal complete হলে Convert করে client বানান।
Invoice তৈরি, PDF download, email send, full/partial payment record ও receipt email করুন।
Client টাকা দিলে profile থেকে recharge করুন। প্রতিটি credit/debit ledger-এ record হয়।
SMS, WhatsApp, Email usage, charged amount, provider cost এবং gross margin দেখুন।
Recommended Daily Flow
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 সহজ হয়।
app.example.com
Node / Passenger
api.example.com
| Service | Example |
|---|---|
| Admin Dashboard | https://app.example.com |
| Backend API | https://api.example.com/api/v1 |
📤 ৫) cPanel-এ Project Upload
আগের live app/database থাকলে full backup নিন।
api.example.com এবং app.example.com তৈরি করুন।
Project ZIP public_html-এর বাইরে upload করে extract করা ভালো। উদাহরণ:
backend/public হওয়া উচিত।🧱 ৬) Laravel Backend Deploy
6.1 PHP Version
cPanel → MultiPHP Manager → api.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:
- Database তৈরি করুন (যেমন
saasops) - User তৈরি করুন
- User-কে database-এ add করুন
- 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
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
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
- cPanel → Software → Application Manager
- Register Application
- Deployment Domain:
app.example.com - Application Path:
saas-ops/frontend/.next/standalone - Environment: Production
- Deploy করুন
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
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_DRIVER=meta, phone number ID এবং access token দিন। Meta account/template/category rules আপনার business account অনুযায়ী configure ও test করতে হবে।
Real SMTP দিন। Billing domain-এর SPF, DKIM, DMARC সেট করুন। Invoice ও payment confirmation mail queue worker দিয়ে যাবে।
Production provider check
🔐 ১০) Security Rules
Production error details public করবেন না।
Dashboard ও API দুই subdomain-এই SSL ব্যবহার করুন।
DB, admin, SMTP, Meta/SMS credentials আলাদা strong password/token রাখুন।
.env, vendor config বা source web-accessible করবেন না।
Client key leak হলে সঙ্গে সঙ্গে revoke করে নতুন key generate করুন।
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
🛠️ ১২) 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 ব্যবহার করা হয়েছে:
- Laravel 13 — Deployment / Server Requirements
- Laravel 13 — Queues / Supervisor
- Laravel 13 — Task Scheduling
- Next.js — Installation / Node requirements
- Next.js — Self Hosting
- cPanel — Application Manager
- cPanel — Install Node.js Application
- cPanel — PostgreSQL Databases
- cPanel — Terminal
- cPanel — Cron Jobs