Laravel uygulamasını hosting paketine yükleme: public klasörü ve belge kökü
Laravel gibi PHP çerçeveleri, doğrudan public_html içine konulacak basit bir site değildir. Uygulamanın kod dosyaları web'den erişilemeyecek yerde durmalı, yalnızca public adlı klasör dışarıya açılmalıdır. Aksi halde .env gibi gizli dosyalarınız indirilebilir olur. Hosting paketimizde bunu iki doğru yolla yapabilirsiniz. Ayrıca hosting hesabında terminal erişimi olmadığı için bazı hazırlıkları yerelde yapmanız gerekir.
Yerelde hazırlık
- Uygulamanızı bilgisayarınızda üretim için hazırlayın:
composer install --no-dev --optimize-autoloader. Sunucuda Composer çalıştıramayacağınız içinvendorklasörü hazır halde yüklenecek. .envdosyasını üretim değerleriyle hazırlayın:APP_ENV=production,APP_DEBUG=false, veritabanı bilgileri (hostingde oluşturduğunuz veritabanının tam adı, kullanıcısı ve parolası; sunuculocalhost),APP_URL,APP_KEY.APP_DEBUG=truebırakmayın.- Veritabanı şemasını hazırlayın: yerelde
php artisan migrateçalıştırıp veritabanını dışa aktarın ve hostingdeki veritabanına phpMyAdmin ile içe aktarın: hosting veritabanı.
Yerleşim: belge kökünü public yapın (önerilen)
- Tüm uygulamayı (vendor, app, bootstrap, config, public, ... klasörleri) FTP ile alan adı klasörünüzün içine yükleyin,
public_html'e değil, bir üst düzeye ya da kendi klasörüne (örneğinweb/ornek.com/uygulama/). Yükleme: FTP ile yükleme. - Panelde WEB bölümünden alan adını düzenleyin, Gelişmiş Seçenekler'i açın.
- Özel belge kökü seçeneğini işaretleyip dizin olarak uygulamanızın
publicklasörünü gösterin (örneğin/web/ornek.com/uygulama/publicgibi panelin gösterdiği biçimde). - Web Şablonu olarak
laravelseçin ve kaydedin. Bu şablon tüm isteklerinpublic/index.php'ye yönlendirilmesini sağlayan Nginx kurallarını içerir.
Hosting sunucumuz Nginx kullandığı için Laravel'in public/.htaccess dosyası çalışmaz; yönlendirmeyi şablon halleder: .htaccess çalışmıyor.
Klasör izinleri
Laravel'in yazabilmesi gereken iki klasör vardır: storage ve bootstrap/cache. Dosya Yöneticisi ya da FTP istemcinizde bunların sahibi sizin hesabınız olmalı ve yazılabilir olmalıdır (klasörler 755, gerekirse 775). storage/logs içine hata günlükleri yazılır; sorun olursa ilk bakacağınız yerdir.
Alternatif: public içeriğini public_html'e koymak
Belge kökünü değiştirmek yerine public klasörünün içeriğini public_html'e, geri kalan uygulamayı private ya da bir üst klasöre koyabilirsiniz; ancak bu durumda public/index.php içindeki iki yolu (vendor/autoload.php ve bootstrap/app.php) yeni konuma göre düzeltmeniz gerekir. Hata yapma payı yüksektir; belge kökü yöntemi daha temiz ve güvenlidir.
Sık sorunlar
- 500 hatası: Hata günlüğüne (
storage/logs/laravel.logve panelin hata günlüğü) bakın: hata günlüğü. En sık:APP_KEYeksik,vendoreksik ya da PHP sürümü uyumsuzluğu. - Ana sayfa açılıyor, diğer sayfalar 404: Web şablonu
laravelseçilmemiştir. - Artisan komutları çalıştıramıyorum: Hosting'de terminal yok; migrate gibi işleri yerelde yapın, kuyruk ve zamanlanmış görevler için panelin cron'unu kullanın: cron görevi.
- PHP sürümü: Hosting'de PHP sürümü sabittir (şu an 8.5). Eski bir Laravel sürümü yeni PHP'de çalışmayabilir; çerçeveyi güncelleyin. Tam kontrol için Linux VDS daha uygundur.
Sık sorulanlar
Composer'ı hosting'de çalıştırabilir miyim?
Hosting hesabında terminal erişimi olmadığı için hayır. Bağımlılıkları yerelde kurup vendor klasörünü yükleyin.
Laravel için hosting mi VDS mi?
Küçük ve basit uygulamalar hostingde çalışır. Kuyruk işçileri, zamanlayıcı, Redis, özel PHP sürümü gibi ihtiyaçlarınız varsa VDS çok daha rahattır.
Alt klasörde (ornek.com/uygulama) yayınlanır mı?
Mümkündür ama yönlendirme kuralları karmaşıktır. Alt alan adı (uygulama.ornek.com) kullanıp onu web alan adı olarak eklemek daha sağlıklıdır.
İlgili makaleler
- Hosting dosya yapısı: public_html, private, logs ve stats klasörleri ne işe yarar?
- Hosting'de .htaccess çalışmıyor: nedeni ve alternatifleri
- Hosting'de hata günlüğünü okuma: sitem neden hata veriyor?
Sorununuz çözülmediyse destek talebi açın. Hangi adımı denediğinizi ve ekranda ne gördüğünüzü yazarsanız çözüm çok daha hızlı olur.
Geri bildiriminiz için teşekkürler!