बिना टर्मिनल के शेयर्ड होस्टिंग पर 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, सुझाया गया)
(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लगता है, उसे पहले लोकल पर कर लें। जैसे एप्लिकेशन key बनाना (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 में वह PHP वर्जन चुनें जिसे आपका Laravel वर्जन सपोर्ट करता है, और जरूरी एक्सटेंशन चालू करें।
laravel_app/storageऔरlaravel_app/bootstrap/cacheको ऐप के लिए writable बनाएं। आम तौर पर फोल्डर के लिए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 के शेड्यूलर को एक 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_URLhttps://से शुरू होता है। - होम पेज के अलावा बाकी पेज पर 404:
public_html/.htaccessनहीं है, या सर्वर उसे पढ़ नहीं रहा। सपोर्ट से पूछें। - अपलोड की गई इमेज नहीं दिख रहीं:
filesystems.phpका बदलाव सही है या नहीं, और फाइलेंpublic_html/storageमें हैं या नहीं, यह जांचें। - पेज पर
Index of /या फोल्डर की सूची दिख रही है: डॉक्यूमेंट रूट याindex.phpगलत है। फोल्डर लिस्टिंग चालू न रहने दें।
संबंधित गाइड
अंतिम समीक्षा
2026-10-28
