টার্মিনাল ছাড়া শেয়ার্ড হোস্টিংয়ে Laravel ইনস্টল করুন
বেশিরভাগ শেয়ার্ড হোস্টিং প্ল্যানে টার্মিনাল খোলা বা SSH ব্যবহার করা যায় না। এই গাইডে শুধু APNCloud হোস্টিং প্যানেল দিয়ে, অর্থাৎ File Manager, PHP Settings ও phpMyAdmin দিয়ে Laravel অ্যাপ ইনস্টল করার নিয়ম আছে। প্রজেক্ট আপনার কম্পিউটারে তৈরি করে সার্ভারে আপলোড করবেন, আর Laravel-এর ব্যক্তিগত ফাইল ওয়েব ফোল্ডারের বাইরে রাখবেন।
শুরু করার আগে
- আপনার কম্পিউটারে ঠিকঠাক চলছে এমন একটি Laravel প্রজেক্ট, এবং তার PHP ভার্সন ও দরকারি এক্সটেনশন।
- আপনার নিজের কম্পিউটারে Composer এবং (প্রজেক্টে লাগলে) Node.js। এগুলো লোকাল কম্পিউটারে চালাবেন, সার্ভারে নয়।
- হোস্টিং অ্যাকাউন্টে আগে থেকে যোগ করা একটি ডোমেইন, যাতে HTTPS চালু আছে।
- ডোমেইনে আগে থেকে কোনো সাইট থাকলে তার ব্যাকআপ। যে ফোল্ডারে লাইভ সাইট আছে, সেখানে ইনস্টল করলে তা ওভাররাইট হয়ে যেতে পারে।
- আপনার Laravel ভার্সনের জন্য দরকারি PHP ভার্সন ও এক্সটেনশন আপনার প্ল্যানে সাপোর্ট করে কি না, তার নিশ্চয়তা। নিশ্চিত না হলে সাপোর্টকে জিজ্ঞেস করুন। প্যানেলে আইকন দেখা গেলেই ধরে নেবেন না যে ফিচারটি প্ল্যানে আছে।
সার্ভারে ফাইল সাজানোর নিয়ম কেন গুরুত্বপূর্ণ
Laravel-এর .env ফাইলে ডেটাবেসের পাসওয়ার্ড ও অ্যাপ্লিকেশন কী থাকে। app, config, storage ও vendor ফোল্ডারে ব্যক্তিগত কোড ও লগ থাকে। ব্রাউজার থেকে শুধু Laravel-এর public ফোল্ডারের ভেতরের ফাইল পাওয়া যাওয়া উচিত। নিচের পদ্ধতি A বাকি সব কিছু ওয়েব ফোল্ডারের বাইরে রাখে। ওভাবে রাখা সম্ভব না হলেই কেবল পদ্ধতি B ব্যবহার করুন।
ফাইল কীভাবে সাজানো থাকবে (পদ্ধতি A, প্রস্তাবিত)
(the folder that contains public_html)
├── laravel_app/ <-- the whole Laravel project, private
│ ├── app/
│ ├── bootstrap/
│ ├── config/
│ ├── storage/
│ ├── vendor/
│ └── .env
└── public_html/ <-- web folder, only Laravel's "public" contents
├── .htaccess
├── index.php
├── build/
└── storage/laravel_app নামটি শুধু একটি উদাহরণ। ওয়েব ফোল্ডার হলো প্যানেলে আপনার ডোমেইনের জন্য দেখানো ডকুমেন্ট রুট। এর নাম public_html হতে পারে, এবং সেটি আপনার ডোমেইনের নামে একটি ফোল্ডারের ভেতরেও থাকতে পারে।
ধাপ
কম্পিউটারে প্রজেক্ট তৈরি করুন
সার্ভারে যে PHP ভার্সন বেছে নেবেন, নিজের কম্পিউটারেও সেই ভার্সন ব্যবহার করুন। তারপর প্রোডাকশনের ডিপেন্ডেন্সি ইনস্টল করুন এবং ফ্রন্টএন্ড ফাইল বিল্ড করুন। এখানে
config:cacheবাroute:cacheচালাবেন না, কারণ এগুলো আপনার কম্পিউটারের পাথ সেভ করে রাখে।bashcomposer install --no-dev --prefer-dist --optimize-autoloader npm ci npm run buildদেখুন, আপনার প্রজেক্টে এমন কোনো কমান্ড লাগছে কি না যা সার্ভারে চালানো যায় না। সাধারণত
php artisanলাগে এমন সব কাজ আগে লোকালে সেরে নিতে হবে। যেমন অ্যাপ্লিকেশন কী তৈরি (php artisan key:generate --show), মাইগ্রেশন চালানো ও ডেটা সিড করা।প্রজেক্টের একটি ZIP ফাইল বানান।
vendorএবং বিল্ড করাpublic/buildফোল্ডার রাখুন।.env,.git,node_modules,storage/logs/*এবং লোকাল ক্যাশ বা টেস্ট ডেটা বাদ দিন।
ডেটাবেস তৈরি করুন
- প্যানেলে একটি MySQL বা MariaDB ডেটাবেস এবং আলাদা একটি ডেটাবেস ইউজার তৈরি করুন। ডেটাবেসের পুরো নাম, ইউজারের নাম ও হোস্ট ঠিক প্যানেলে যেমন দেখাবে তেমন লিখে রাখুন। এগুলোর শুরুতে প্রায়ই একটি প্রিফিক্স থাকে। দেখুন ডেটাবেস।
- কম্পিউটারে আপনার লোকাল ডেটাবেস একটি
.sqlফাইল হিসেবে এক্সপোর্ট করুন। প্যানেল থেকে phpMyAdmin খুলে সেটি নতুন ডেটাবেসে ইমপোর্ট করুন। এটিphp artisan migrate-এর কাজ করবে। ফাইলের সাইজের কারণে ইমপোর্ট ব্যর্থ হলে আপলোডের সীমা সম্পর্কে সাপোর্টকে জিজ্ঞেস করুন, অথবা ফাইলটি ভাগ করে নিন।
ফাইল আপলোড করুন
- File Manager খুলুন।
public_htmlযে ফোল্ডারে আছে, সেখানে যান।public_html-এর বাইরে, সেখানেlaravel_appনামে একটি ফোল্ডার বানান। - আপনার ZIP ফাইলটি
laravel_app-এ আপলোড করে Extract ব্যবহার করুন। এরপর ZIP ফাইলটি মুছে দিন। দেখুন ফাইল। laravel_app/public-এর ভেতরের সব ফাইল (ফোল্ডারটি নয়)public_html-এ সরিয়ে আনুন। এর মধ্যেindex.php,.htaccessওbuildফোল্ডার থাকবে।.htaccessনা দেখা গেলে লুকানো ফাইল দেখানোর অপশন চালু করুন।- নিশ্চিত করুন,
public_html-এ প্রজেক্টের আর কোনো কপি এবং কোনো.envনেই।
এন্ট্রি ফাইলকে ব্যক্তিগত ফোল্ডার দেখিয়ে দিন
File Manager-এর এডিটর দিয়ে
public_html/index.phpখুলুন। যে পাথগুলো__DIR__.'/../দিয়ে শুরু, সেগুলোlaravel_app-এর ভেতরে যেতে হবে। Laravel 11 বা নতুন ভার্সনে ফাইলটি এমন দেখাবে। নিজের ফাইলের সঙ্গে মিলিয়ে নিন, এবং আপনার ভার্সনে বাড়তি কোনো লাইন থাকলে তা রেখে দিন।php<?php use Illuminate\Http\Request; define('LARAVEL_START', microtime(true)); if (file_exists($maintenance = __DIR__.'/../laravel_app/storage/framework/maintenance.php')) { require $maintenance; } require __DIR__.'/../laravel_app/vendor/autoload.php'; $app = require_once __DIR__.'/../laravel_app/bootstrap/app.php'; $app->usePublicPath(__DIR__); $app->handleRequest(Request::capture());Laravel 10 বা পুরোনো ভার্সনে একই তিনটি পাথ বদলান, আর
$appতৈরির লাইনের ঠিক পরে$app->usePublicPath(__DIR__);লাইনটি যোগ করুন।usePublicPathলাইনটি Laravel-কে জানায় ওয়েব ফোল্ডার আসলে কোথায়। এটি না থাকলে Vite অ্যাসেট ওpublic_path()ভুল জায়গায় খুঁজবে।
এনভায়রনমেন্ট ফাইল তৈরি করুন
laravel_app-এ File Manager দিয়ে.envনামে একটি ফাইল বানান। লোকাল কম্পিউটারের মান নয়, প্রোডাকশনের মান দিয়ে সেটি পূরণ করুন।dotenvAPP_NAME="My App" APP_ENV=production APP_KEY=base64:paste-the-key-from-your-local-project APP_DEBUG=false APP_URL=https://example.com DB_CONNECTION=mysql DB_HOST=localhost DB_DATABASE=your_database_name DB_USERNAME=your_database_user DB_PASSWORD=your_database_passwordডেটাবেস তৈরির সময় লিখে রাখা মান ব্যবহার করুন। যে লাইভ সাইটে আগে থেকে ইউজার বা এনক্রিপ্ট করা ডেটা আছে, সেখানে আগের
APP_KEY-ই ব্যবহার করুন। নতুন কী দিলে আগের সেশন ও এনক্রিপ্ট করা ডেটা পড়া যাবে না।.envকখনোpublic_html-এ রাখবেন না।
PHP ভার্সন ও পারমিশন ঠিক করুন
- PHP Settings-এ আপনার Laravel ভার্সনের সাপোর্ট করা PHP ভার্সন বেছে নিন এবং দরকারি এক্সটেনশন চালু করুন।
laravel_app/storageওlaravel_app/bootstrap/cacheঅ্যাপ্লিকেশনের লেখার উপযোগী করুন। সাধারণত ফোল্ডারের জন্য755ও ফাইলের জন্য644যথেষ্ট।777ব্যবহার করবেন না। Laravel লিখতে পারছে না বলে জানালে ফোল্ডার সবার জন্য খুলে না দিয়ে সাপোর্টকে জিজ্ঞেস করুন, আপনার সার্ভারে কোন পারমিশন লাগে।
আপলোড করা ফাইল চালু করুন
টার্মিনাল ছাড়া
php artisan storage:linkচালানো যায় না। তার বদলে Laravel-কে বলে দিন, পাবলিক ফাইল সরাসরি ওয়েব ফোল্ডারে সেভ করতে।laravel_app/config/filesystems.php-এpublicডিস্ক এভাবে সেট করুন:php'public' => [ 'driver' => 'local', 'root' => public_path('storage'), 'url' => env('APP_URL').'/storage', 'visibility' => 'public', ],আপনার কম্পিউটারের
storage/app/public-এ থাকা আগের আপলোড করা ফাইলগুলোpublic_html/storage-এ কপি করুন। এখন থেকে অ্যাপ্লিকেশন যে ফাইল সেভ করবে, তা একই জায়গায় যাবে।
সাইট পরীক্ষা করুন
- ব্রাউজারে আপনার ডোমেইন খুলুন। তারপর লগইন করুন, একটি ফর্ম জমা দিন, একটি ফাইল আপলোড করুন এবং
buildথেকে CSS ও JavaScript ব্যবহার করে এমন একটি পেজ খুলুন। - ব্যক্তিগত ফাইল ব্রাউজার থেকে পাওয়া যাচ্ছে না, তা পরীক্ষা করুন। নিচের ঠিকানাগুলোতে কোনো ফাইলের কনটেন্ট দেখা যাওয়া চলবে না। ফল হতে হবে 403, 404 বা একটি এরর পেজ:
https://example.com/.envhttps://example.com/vendor/autoload.phphttps://example.com/composer.jsonhttps://example.com/storage/logs/laravel.loghttps://example.com/laravel_app/.env
পদ্ধতি B: পুরো প্রজেক্ট ওয়েব ফোল্ডারের ভেতরে
এটি শুধু তখন ব্যবহার করুন, যখন File Manager-এ ওয়েব ফোল্ডারের বাইরে ফোল্ডার বানানো যায় না এবং সাপোর্টও ডকুমেন্ট রুট Laravel-এর public ফোল্ডারে বদলে দিতে পারছে না। এটি কম নিরাপদ। ওয়েব সার্ভার যে ফাইল আটকায় না, তা ডাউনলোড করা যেতে পারে, তাই একটি ভুলে .env ও আপনার কোড ফাঁস হয়ে যেতে পারে।
পুরো প্রজেক্ট ওয়েব ফোল্ডারে আপলোড ও এক্সট্র্যাক্ট করুন, যাতে Laravel-এর
publicফোল্ডার তার ভেতরেই থাকে।.envপ্রজেক্টের রুটে রাখুন। "এন্ট্রি ফাইলকে ব্যক্তিগত ফোল্ডার দেখিয়ে দিন" অংশেরindex.phpবদল বাদ দিন (ডিফল্ট ফাইলই কাজ করে), কিন্তু "আপলোড করা ফাইল চালু করুন" অংশেরfilesystems.phpবদল অবশ্যই করুন। Laravel-এর নিজেরpublic/.htaccessযেমন আছে তেমন থাকবে।ওয়েব ফোল্ডারে নিচের
.htaccessফাইলটি বানান। এটি সব রিকোয়েস্টpublicফোল্ডারে পাঠায় এবং ব্যক্তিগত ফাইল আটকায়।apache# Do not list folder contents Options -Indexes <IfModule mod_rewrite.c> RewriteEngine On # Block hidden files and folders, but allow .well-known (needed for SSL checks) RewriteRule (^|/)\.(?!well-known(/|$)) - [F,L] # Block private Laravel folders RewriteRule ^(app|bootstrap|config|database|resources|routes|vendor|tests)(/|$) - [F,L,NC] # Block private files in the project root RewriteRule ^(artisan|composer\.(json|lock)|package(-lock)?\.json|phpunit\.xml|vite\.config\.[^/]+|webpack\.mix\.js|server\.php)$ - [F,L,NC] # Do not allow browsers to request /public directly RewriteCond %{THE_REQUEST} "\s/+public(?:[/?\s]|$)" [NC] RewriteRule ^public(?:/|$) - [F,L,NC] # Keep the Authorization and XSRF headers RewriteCond %{HTTP:Authorization} . RewriteRule ^ - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] RewriteCond %{HTTP:X-XSRF-TOKEN} . RewriteRule ^ - [E=HTTP_X_XSRF_TOKEN:%{HTTP:X-XSRF-TOKEN}] # Send everything else to Laravel's public folder RewriteCond %{REQUEST_URI} !^/public(?:/|$) [NC] RewriteRule ^(.*)$ public/$1 [L] </IfModule> # Deny sensitive file types <FilesMatch "(?i)(^\.|\.env(\..*)?$|\.log$|\.sql$|\.sqlite$|\.bak$|\.backup$|\.old$|\.ini$|\.conf$|\.ya?ml$)"> Require all denied </FilesMatch>"সাইট পরীক্ষা করুন" অংশের মতো একই পরীক্ষা করুন। কোনো ব্যক্তিগত ঠিকানায় এখনো কনটেন্ট দেখা গেলে প্রজেক্ট ওয়েব ফোল্ডার থেকে সরিয়ে পদ্ধতি A ব্যবহার করুন। সেটি অনলাইনে ফেলে রাখবেন না।
পদ্ধতি B ওয়েব সার্ভারের ওপর নির্ভর করে
এই নিয়মগুলো কাজ করে কেবল সেখানে, যেখানে সার্ভার .htaccess ফাইল পড়ে এবং এই ডিরেক্টিভগুলোর অনুমতি দেয়। আপনার সাইটের ওয়েব সার্ভার সেটআপ .htaccess উপেক্ষা করলে নিয়মগুলো কোনো কাজ করবে না, আর ব্যক্তিগত ফাইল ফাঁস হতে পারে। পদ্ধতি B-র ওপর ভরসা করার আগে সাপোর্টের কাছ থেকে নিশ্চিত হয়ে নিন। Apache-এর rewrite নিয়ম Nginx কনফিগার করে না।
সাইট চালু হওয়ার পর
- শিডিউল করা কাজ: Laravel-এর শিডিউলারের জন্য প্রতি মিনিটে
schedule:runচালায়, এমন একটি cron job লাগে। আপনার প্ল্যানে থাকলে Cron Jobs-এ সেটি বানান। আপনার অ্যাকাউন্টে দেখানো বা সাপোর্টের দেওয়া PHP পাথ এবংartisan-এর পুরো পাথ ব্যবহার করুন। দেখুন Cron jobs। - কিউ: শেয়ার্ড হোস্টিংয়ে সাধারণত কিউ ওয়ার্কার সব সময় চালু রাখা যায় না। হালকা কাজের জন্য
syncকিউ ড্রাইভার ব্যবহার করুন। ব্যাকগ্রাউন্ড জবের জন্য আপনার প্ল্যানে সাপোর্ট আছে কি না জিজ্ঞেস করুন, অথবা VPS ব্যবহার করুন। - আপডেট: বদলানো ফাইলগুলো File Manager দিয়ে আপলোড করুন।
composer.jsonবদলালে নিজের কম্পিউটারেcomposer install --no-devচালিয়ে নতুনvendorফোল্ডার আপলোড করুন।storage/framework/views-এর ফাইল মুছে পুরোনো ক্যাশ করা ভিউ সরান। আগে ব্যাকআপ নিন। - লগ: কিছু ফেইল করলে
laravel_app/storage/logs/laravel.logডাউনলোড করে শেষ ত্রুটিটি পড়ুন। লগ প্রকাশ্যে শেয়ার করবেন না, কারণ তাতে ব্যক্তিগত তথ্য থাকতে পারে।
কিছু ভুল হলে
- ফাঁকা পেজ বা HTTP 500:
storage/logs/laravel.logখুলুন। সাধারণ কারণ: ভুল PHP ভার্সন, কোনো এক্সটেনশন না থাকা, "এন্ট্রি ফাইলকে ব্যক্তিগত ফোল্ডার দেখিয়ে দিন" অংশেরindex.php-এর পাথ,vendorফোল্ডার না থাকা, অথবা লেখার উপযোগী না হওয়া storage ফোল্ডার। লাইভ সাইটেAPP_DEBUG=falseরাখুন। .htaccessযোগ করার পরই 500 ত্রুটি: কিছু সার্ভার সব ডিরেক্টিভ অনুমতি দেয় না।Options -Indexesলাইনটি সরিয়ে আবার চেষ্টা করুন, তারপর সাপোর্টকে জিজ্ঞেস করুন।- "No application encryption key has been specified":
.env-এAPP_KEYনেই বা ফাঁকা। - ডেটাবেসের ত্রুটি: ডেটাবেসের নাম, ইউজার ও হোস্ট প্যানেলের সঙ্গে মিলিয়ে দেখুন। নামে প্রায়ই প্রিফিক্স থাকে। ইউজারের ডেটাবেসে অ্যাক্সেস আছে কি না দেখুন।
- CSS বা JavaScript আসছে না:
public_html/buildআছে কি না এবং তার ভেতরেmanifest.jsonআছে কি না দেখুন।index.php-এusePublicPathআছে কি না এবংAPP_URLhttps://দিয়ে শুরু কি না, তাও দেখুন। - হোম পেজ ছাড়া অন্য পেজে 404:
public_html/.htaccessনেই, অথবা সার্ভার সেটি পড়ছে না। সাপোর্টকে জিজ্ঞেস করুন। - আপলোড করা ছবি আসছে না:
filesystems.php-এর বদল ঠিক আছে কি না এবং ফাইলগুলোpublic_html/storage-এ আছে কি না দেখুন। - পেজে
Index of /বা ফোল্ডারের তালিকা দেখাচ্ছে: ডকুমেন্ট রুট বাindex.phpভুল। ফোল্ডার তালিকা চালু রাখবেন না।
সম্পর্কিত গাইড
সর্বশেষ পর্যালোচনা
2026-10-28
