Skip to content

बिना टर्मिनल के शेयर्ड होस्टिंग पर Laravel इंस्टॉल करें ​

ज्यादातर शेयर्ड होस्टिंग प्लान में टर्मिनल खोलना या SSH इस्तेमाल करना संभव नहीं होता। इस गाइड में सिर्फ APNCloud होस्टिंग पैनल से, यानी File Manager, PHP Settings और phpMyAdmin से, Laravel ऐप इंस्टॉल करना बताया गया है। प्रोजेक्ट आप अपने कंप्यूटर पर तैयार करेंगे और सर्वर पर अपलोड करेंगे, और Laravel की निजी फाइलें वेब फोल्डर के बाहर रखेंगे।

शुरू करने से पहले ​

  • आपके कंप्यूटर पर ठीक से चल रहा Laravel प्रोजेक्ट, और उसका PHP वर्जन व जरूरी एक्सटेंशन।
  • आपके अपने कंप्यूटर पर Composer और (प्रोजेक्ट को जरूरत हो तो) Node.js। इन्हें लोकल कंप्यूटर पर चलाएं, सर्वर पर नहीं।
  • आपके होस्टिंग अकाउंट में पहले से जोड़ा हुआ डोमेन, जिस पर HTTPS चालू हो।
  • डोमेन पर पहले से कोई साइट हो, तो उसका बैकअप। जिस फोल्डर में लाइव साइट है, वहां इंस्टॉल करने से वह ओवरराइट हो सकती है।
  • इस बात की पुष्टि कि आपके Laravel वर्जन के लिए जरूरी PHP वर्जन और एक्सटेंशन आपके प्लान में सपोर्टेड हैं। पक्का न हो, तो सपोर्ट से पूछें। पैनल में आइकन दिखने का मतलब यह नहीं कि वह फीचर आपके प्लान में है।

सर्वर पर फाइलों की व्यवस्था क्यों जरूरी है

Laravel की .env फाइल में डेटाबेस का पासवर्ड और एप्लिकेशन key रहती है। 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 लगता है, उसे पहले लोकल पर कर लें। जैसे एप्लिकेशन key बनाना (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 में वह PHP वर्जन चुनें जिसे आपका Laravel वर्जन सपोर्ट करता है, और जरूरी एक्सटेंशन चालू करें।
  2. laravel_app/storage और laravel_app/bootstrap/cache को ऐप के लिए writable बनाएं। आम तौर पर फोल्डर के लिए 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 के शेड्यूलर को एक cron job चाहिए, जो हर मिनट schedule:run चलाए। आपके प्लान में हो तो इसे Cron Jobs में बनाएं। अपने अकाउंट में दिखा या सपोर्ट का बताया PHP पाथ और artisan का पूरा पाथ इस्तेमाल करें। देखें क्रॉन जॉब।
  • क्यू: शेयर्ड होस्टिंग में आम तौर पर क्यू वर्कर हमेशा चालू नहीं रखा जा सकता। हल्के काम के लिए 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 फोल्डर का writable न होना। लाइव साइट पर 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