Skip to content

টার্মিনাল ছাড়া শেয়ার্ড হোস্টিংয়ে 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, প্রস্তাবিত) ​

text
(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 হতে পারে, এবং সেটি আপনার ডোমেইনের নামে একটি ফোল্ডারের ভেতরেও থাকতে পারে।

ধাপ ​

কম্পিউটারে প্রজেক্ট তৈরি করুন ​

  1. সার্ভারে যে PHP ভার্সন বেছে নেবেন, নিজের কম্পিউটারেও সেই ভার্সন ব্যবহার করুন। তারপর প্রোডাকশনের ডিপেন্ডেন্সি ইনস্টল করুন এবং ফ্রন্টএন্ড ফাইল বিল্ড করুন। এখানে config:cache বা route:cache চালাবেন না, কারণ এগুলো আপনার কম্পিউটারের পাথ সেভ করে রাখে।

    bash
    composer install --no-dev --prefer-dist --optimize-autoloader
    npm ci
    npm run build
  2. দেখুন, আপনার প্রজেক্টে এমন কোনো কমান্ড লাগছে কি না যা সার্ভারে চালানো যায় না। সাধারণত php artisan লাগে এমন সব কাজ আগে লোকালে সেরে নিতে হবে। যেমন অ্যাপ্লিকেশন কী তৈরি (php artisan key:generate --show), মাইগ্রেশন চালানো ও ডেটা সিড করা।

  3. প্রজেক্টের একটি ZIP ফাইল বানান। vendor এবং বিল্ড করা public/build ফোল্ডার রাখুন। .env, .git, node_modules, storage/logs/* এবং লোকাল ক্যাশ বা টেস্ট ডেটা বাদ দিন।

ডেটাবেস তৈরি করুন ​

  1. প্যানেলে একটি MySQL বা MariaDB ডেটাবেস এবং আলাদা একটি ডেটাবেস ইউজার তৈরি করুন। ডেটাবেসের পুরো নাম, ইউজারের নাম ও হোস্ট ঠিক প্যানেলে যেমন দেখাবে তেমন লিখে রাখুন। এগুলোর শুরুতে প্রায়ই একটি প্রিফিক্স থাকে। দেখুন ডেটাবেস।
  2. কম্পিউটারে আপনার লোকাল ডেটাবেস একটি .sql ফাইল হিসেবে এক্সপোর্ট করুন। প্যানেল থেকে phpMyAdmin খুলে সেটি নতুন ডেটাবেসে ইমপোর্ট করুন। এটি php artisan migrate-এর কাজ করবে। ফাইলের সাইজের কারণে ইমপোর্ট ব্যর্থ হলে আপলোডের সীমা সম্পর্কে সাপোর্টকে জিজ্ঞেস করুন, অথবা ফাইলটি ভাগ করে নিন।

ফাইল আপলোড করুন ​

  1. File Manager খুলুন। public_html যে ফোল্ডারে আছে, সেখানে যান। public_html-এর বাইরে, সেখানে laravel_app নামে একটি ফোল্ডার বানান।
  2. আপনার ZIP ফাইলটি laravel_app-এ আপলোড করে Extract ব্যবহার করুন। এরপর ZIP ফাইলটি মুছে দিন। দেখুন ফাইল।
  3. laravel_app/public-এর ভেতরের সব ফাইল (ফোল্ডারটি নয়) public_html-এ সরিয়ে আনুন। এর মধ্যে index.php, .htaccess ও build ফোল্ডার থাকবে। .htaccess না দেখা গেলে লুকানো ফাইল দেখানোর অপশন চালু করুন।
  4. নিশ্চিত করুন, public_html-এ প্রজেক্টের আর কোনো কপি এবং কোনো .env নেই।

এন্ট্রি ফাইলকে ব্যক্তিগত ফোল্ডার দেখিয়ে দিন ​

  1. 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() ভুল জায়গায় খুঁজবে।

এনভায়রনমেন্ট ফাইল তৈরি করুন ​

  1. laravel_app-এ File Manager দিয়ে .env নামে একটি ফাইল বানান। লোকাল কম্পিউটারের মান নয়, প্রোডাকশনের মান দিয়ে সেটি পূরণ করুন।

    dotenv
    APP_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 ভার্সন ও পারমিশন ঠিক করুন ​

  1. PHP Settings-এ আপনার Laravel ভার্সনের সাপোর্ট করা PHP ভার্সন বেছে নিন এবং দরকারি এক্সটেনশন চালু করুন।
  2. laravel_app/storage ও laravel_app/bootstrap/cache অ্যাপ্লিকেশনের লেখার উপযোগী করুন। সাধারণত ফোল্ডারের জন্য 755 ও ফাইলের জন্য 644 যথেষ্ট। 777 ব্যবহার করবেন না। Laravel লিখতে পারছে না বলে জানালে ফোল্ডার সবার জন্য খুলে না দিয়ে সাপোর্টকে জিজ্ঞেস করুন, আপনার সার্ভারে কোন পারমিশন লাগে।

আপলোড করা ফাইল চালু করুন ​

  1. টার্মিনাল ছাড়া 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-এ কপি করুন। এখন থেকে অ্যাপ্লিকেশন যে ফাইল সেভ করবে, তা একই জায়গায় যাবে।

সাইট পরীক্ষা করুন ​

  1. ব্রাউজারে আপনার ডোমেইন খুলুন। তারপর লগইন করুন, একটি ফর্ম জমা দিন, একটি ফাইল আপলোড করুন এবং build থেকে CSS ও JavaScript ব্যবহার করে এমন একটি পেজ খুলুন।
  2. ব্যক্তিগত ফাইল ব্রাউজার থেকে পাওয়া যাচ্ছে না, তা পরীক্ষা করুন। নিচের ঠিকানাগুলোতে কোনো ফাইলের কনটেন্ট দেখা যাওয়া চলবে না। ফল হতে হবে 403, 404 বা একটি এরর পেজ:
    • https://example.com/.env
    • https://example.com/vendor/autoload.php
    • https://example.com/composer.json
    • https://example.com/storage/logs/laravel.log
    • https://example.com/laravel_app/.env

পদ্ধতি B: পুরো প্রজেক্ট ওয়েব ফোল্ডারের ভেতরে ​

এটি শুধু তখন ব্যবহার করুন, যখন File Manager-এ ওয়েব ফোল্ডারের বাইরে ফোল্ডার বানানো যায় না এবং সাপোর্টও ডকুমেন্ট রুট Laravel-এর public ফোল্ডারে বদলে দিতে পারছে না। এটি কম নিরাপদ। ওয়েব সার্ভার যে ফাইল আটকায় না, তা ডাউনলোড করা যেতে পারে, তাই একটি ভুলে .env ও আপনার কোড ফাঁস হয়ে যেতে পারে।

  1. পুরো প্রজেক্ট ওয়েব ফোল্ডারে আপলোড ও এক্সট্র্যাক্ট করুন, যাতে Laravel-এর public ফোল্ডার তার ভেতরেই থাকে। .env প্রজেক্টের রুটে রাখুন। "এন্ট্রি ফাইলকে ব্যক্তিগত ফোল্ডার দেখিয়ে দিন" অংশের index.php বদল বাদ দিন (ডিফল্ট ফাইলই কাজ করে), কিন্তু "আপলোড করা ফাইল চালু করুন" অংশের filesystems.php বদল অবশ্যই করুন। Laravel-এর নিজের public/.htaccess যেমন আছে তেমন থাকবে।

  2. ওয়েব ফোল্ডারে নিচের .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>
  3. "সাইট পরীক্ষা করুন" অংশের মতো একই পরীক্ষা করুন। কোনো ব্যক্তিগত ঠিকানায় এখনো কনটেন্ট দেখা গেলে প্রজেক্ট ওয়েব ফোল্ডার থেকে সরিয়ে পদ্ধতি 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_URL https:// দিয়ে শুরু কি না, তাও দেখুন।
  • হোম পেজ ছাড়া অন্য পেজে 404: public_html/.htaccess নেই, অথবা সার্ভার সেটি পড়ছে না। সাপোর্টকে জিজ্ঞেস করুন।
  • আপলোড করা ছবি আসছে না: filesystems.php-এর বদল ঠিক আছে কি না এবং ফাইলগুলো public_html/storage-এ আছে কি না দেখুন।
  • পেজে Index of / বা ফোল্ডারের তালিকা দেখাচ্ছে: ডকুমেন্ট রুট বা index.php ভুল। ফোল্ডার তালিকা চালু রাখবেন না।

সম্পর্কিত গাইড ​

সর্বশেষ পর্যালোচনা ​

2026-10-28

APNCloud-এর অফিসিয়াল সহায়তা। মূল ওয়েবসাইট: apncloud.com · ক্লায়েন্ট এরিয়া: account.apncloud.com