# Laravel uygulamasını hosting paketine yükleme: public klasörü ve belge kökü

https://kervanhosting.com/bilgi-bankasi/makale/laravel-uygulamasini-hosting-paketine-yukleme-public-klasoru

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

1. 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çin `vendor` klasörü hazır halde yüklenecek.
2. `.env` dosyası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ı; sunucu `localhost`), `APP_URL`, `APP_KEY`. `APP_DEBUG=true` bırakmayın.
3. 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ı](https://kervanhosting.com/bilgi-bankasi/makale/hosting-paketimde-veritabani-mysql-ve-phpmyadmin).

## Yerleşim: belge kökünü public yapın (önerilen)

1. 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ğin `web/ornek.com/uygulama/`). Yükleme: [FTP ile yükleme](https://kervanhosting.com/bilgi-bankasi/makale/hosting-paketime-dosya-yukleme-ftp).
2. Panelde **WEB** bölümünden alan adını düzenleyin, **Gelişmiş Seçenekler**'i açın.
3. **Özel belge kökü** seçeneğini işaretleyip dizin olarak uygulamanızın `public` klasörünü gösterin (örneğin `/web/ornek.com/uygulama/public` gibi panelin gösterdiği biçimde).
4. **Web Şablonu** olarak `laravel` seçin ve kaydedin. Bu şablon tüm isteklerin `public/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](https://kervanhosting.com/bilgi-bankasi/makale/hosting-de-htaccess-calismiyor-nginx-ve-alternatifleri).

## 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.log` ve panelin hata günlüğü) bakın: [hata günlüğü](https://kervanhosting.com/bilgi-bankasi/makale/hosting-hata-gunlugunu-okuma-site-neden-hata-veriyor). En sık: `APP_KEY` eksik, `vendor` eksik ya da PHP sürümü uyumsuzluğu.
- **Ana sayfa açılıyor, diğer sayfalar 404:** Web şablonu `laravel` seç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](https://kervanhosting.com/bilgi-bankasi/makale/hosting-cron-gorevi-ekleme-php-betigi-zamanlama).
- **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](https://kervanhosting.com/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?](https://kervanhosting.com/bilgi-bankasi/makale/hosting-dosya-yapisi-public-html-nedir-hangi-klasore-ne-yuklenir)
- [Hosting'de .htaccess çalışmıyor: nedeni ve alternatifleri](https://kervanhosting.com/bilgi-bankasi/makale/hosting-de-htaccess-calismiyor-nginx-ve-alternatifleri)
- [Hosting'de hata günlüğünü okuma: sitem neden hata veriyor?](https://kervanhosting.com/bilgi-bankasi/makale/hosting-hata-gunlugunu-okuma-site-neden-hata-veriyor)

*Sorununuz çözülmediyse [destek talebi açın](https://kervanhosting.com/destek-taleplerim). Hangi adımı denediğinizi ve ekranda ne gördüğünüzü yazarsanız çözüm çok daha hızlı olur.*
