Laravel Neden "Normal" Hosting'de Çalışmaz?
Laravel, PHP dünyasının en popüler framework'üdür — ama aynı zamanda en yanlış anlaşılanıdır. Birçok geliştirici ilk projesini bitirdikten sonra "şimdi bunu nereye koyacağım?" sorusuyla karşılaşır ve cevap olarak 50₺/ay'lık bir shared hosting paketi alır.
Sonuç: beyaz ekran, 500 hatası, "artisan not found" veya hiç çalışmayan schedule.
Bunun sebebi basit: Laravel, düz bir PHP scripti değildir. WordPress gibi bir FTP upload'la çalışmaz. Laravel'in düzgün çalışması için altyapının belirli koşulları sağlaması gerekir.
Laravel'in Çalışması İçin Gerçekten Ne Gerekir?
Bir Laravel uygulamasını production'da sorunsuz çalıştırmak için minimum gereksinimler:
| Gereksinim | Neden | Shared Hosting | PaaS |
|---|---|---|---|
| PHP 8.2+ | Laravel 11 minimum PHP 8.2 gerektirir | Genellikle eski sürüm | Otomatik algılama |
| Composer | Bağımlılık yönetimi (vendor/) | SSH yoksa çalıştırılamaz | Build aşamasında otomatik |
| Artisan CLI | Migration, seed, cache, config | Erişim yok veya kısıtlı | Deploy hook olarak çalışır |
| Queue Worker | Mail, bildirim, uzun işlemler | Mümkün değil | Ayrı worker process |
| Task Scheduler | schedule:run her dakika | cPanel cron — sorunlu | Platform scheduler |
| Writable Storage | Cache, session, log dosyaları | Permission sorunları | Otomatik yapılandırılır |
| SSL / HTTPS | Güvenlik, SEO, cookie güvenliği | Ücretli veya elle kurulum | Otomatik Let's Encrypt |
| Environment Variables | .env güvenli yönetimi | FTP'de açık dosya | Şifreli secret store |
Bu tablodan görüldüğü gibi, shared hosting'in Laravel ile çalışmaması bir "konfigürasyon hatası" değil — mimari uyumsuzluktur. Laravel modern bir framework'tür ve modern bir altyapı gerektirir.
Shared Hosting'de Karşılaşılan Gerçek Sorunlar
Eğer Laravel'i shared hosting'e deploy etmeyi denediysen, muhtemelen şu sorunlardan birini veya birkaçını yaşadın:
- "Class not found" hataları:
composer installçalıştırılamadığı için autoload dosyaları eksik. - 500 Internal Server Error:
.envdosyası doğru yerde değil veyaAPP_KEYüretilmemiş. - Public klasör sorunu: Document root
/publicolarak ayarlanamıyor;.htaccesshack'leri gerekiyor. - Permission denied:
storage/vebootstrap/cache/yazılabilir değil. - Queue çalışmıyor:
php artisan queue:workkomutu sürekli çalışan bir process gerektirir — shared hosting buna izin vermez. - Scheduler pasif: cPanel cron'u
* * * * * php artisan schedule:rundesteklese bile, path sorunları ve timeout'lar yüzünden güvenilmez çalışır. - Migration yapılamıyor: SSH yoksa
php artisan migrateçalıştırmanın yolu yok.
Bu sorunlar birer bug değil. Shared hosting, 2005 yılının statik PHP sitelerine göre tasarlanmıştır. Laravel ise 2024 yılının uygulama framework'üdür. Mimari felsefe uyuşmuyor.
VPS/VDS Yolu: Güçlü Ama Zahmetli
Shared hosting'in yetersizliğini anlayan geliştirici genellikle VPS/VDS'e yönelir. Bu doğru bir adımdır — ama kendi zorlukları vardır:
- Ubuntu/Debian kurulumu ve güncelleme politikası
- Nginx veya Apache konfigürasyonu (
try_files, PHP-FPM socket) - PHP 8.2+ kurulumu (ondrej/php PPA veya kaynak derleme)
- Composer global kurulumu
- PostgreSQL veya MySQL kurulumu, kullanıcı oluşturma, firewall
- SSL sertifikası (Certbot + cron renewal)
- Git deploy stratejisi (bare repo + post-receive hook veya CI/CD)
- Supervisor kurulumu (queue worker daemonize)
- Cron job (
schedule:runher dakika) - Log rotasyon, disk izleme, güvenlik yamaları
Bu 10 adımın her biri ayrı bir uzmanlık gerektirir. İlk kurulumu yaptın diyelim — peki güncelleme? PHP sürüm yükseltme? Disk dolduğunda ne yapacaksın? Sunucu yeniden başlarsa supervisor otomatik gelecek mi?
VPS kontrol verir ama sorumluluk da verir. Eğer sistem yönetimi senin işin değilse, bu sorumluluk ürüne ayıracağın zamanı yer.
PaaS Yolu: Kod Yaz, Push Et, Çalışsın
PaaS (Platform as a Service), Laravel'in ihtiyaç duyduğu tüm altyapıyı — PHP sürümü, Composer, queue worker, scheduler, SSL, veritabanı — otomatik olarak yapılandırır. Sen yalnızca kodunu yazarsın.
Tipik bir Laravel deploy akışı PaaS'ta şöyle çalışır:
- Git push: Kodu
mainbranch'ine push'larsın. - Framework algılama: Platform,
composer.jsonveartisandosyasını görünce Laravel olduğunu anlar. - Build:
composer install --no-dev --optimize-autoloaderçalışır. Eğerpackage.jsonvarsanpm run buildde otomatik tetiklenir. - Deploy hook:
php artisan migrate --force,php artisan config:cache,php artisan route:cacheotomatik çalıştırılır. - Worker başlatma: Queue worker ayrı bir process olarak ayağa kalkar.
- Scheduler aktif:
schedule:runplatform tarafından her dakika tetiklenir. - SSL ve domain: Otomatik Let's Encrypt sertifikası; özel domain bağlama bir DNS kaydıyla olur.
- Health check: Uygulama
200 OKdönene kadar eski sürüm canlıda kalır (zero-downtime).
Tüm bu adımlar her push'ta otomatik tekrarlanır. CI/CD pipeline'ı, Supervisor config'i veya cron düzenlemesiyle uğraşmazsın.
Laravel İçin Hosting Seçerken Bakılması Gerekenler
Hangi hosting yolunu seçersen seç, Laravel uygulaması için şu kriterleri kontrol et:
- PHP sürümü: Laravel 11 için minimum 8.2, Laravel 10 için minimum 8.1. Hosting'in PHP sürümünü kontrol edemeyen platform kullanma.
- Composer desteği: Build aşamasında
composer installçalışmalı. "Vendor klasörünü FTP ile yükle" cevabı alan yeri değiştir. - Artisan erişimi: Migration, seed, cache clear, key generate gibi komutlar çalıştırılabilmeli.
- Queue worker:
queue:workkomutu daemon olarak (sürekli) çalışmalı. "Cron ile queue:work çalıştır" öneriliyorsa o iş düzgün çalışmaz. - Scheduler:
schedule:runher dakika tetiklenmeli. Platform bunu built-in sağlıyorsa ideal. - Zero-downtime deploy: Yeni sürüm deploy edilirken eski sürüm kesintisiz çalışmaya devam etmeli.
- Environment variables:
.envdeğerleri güvenli bir şekilde (şifreli) saklanmalı, git'e commit edilmemeli. - PostgreSQL veya MySQL: Managed veritabanı (otomatik yedekleme, bağlantı havuzu) büyük avantaj.
- Log erişimi:
storage/logsveya stdout loglarına gerçek zamanlı erişim olmalı.
Skyversal'da Laravel Deploy Adımları
Somut bir örnek olarak, Skyversal'da bir Laravel projesini deploy etmek için yapman gerekenler:
- Projeyi oluştur: Panel'de "Yeni Proje" → GitHub reposunu seç.
- Framework otomatik algılansın:
composer.json+artisan→ Laravel olarak tanınır. - Environment değişkenlerini gir:
APP_KEY,DB_*,MAIL_*gibi değerleri güvenli formdan ekle. - Veritabanı bağla: Managed PostgreSQL oluştur veya mevcut bir DB'yi connection string ile bağla.
- Deploy et: İlk build başlar → Composer, npm, migrate, cache — hepsi otomatik.
- Domain bağla: DNS'te CNAME kaydı ekle → SSL otomatik üretilir.
İlk deploy'dan sonra her git push aynı pipeline'ı otomatik tetikler. Rollback gerekirse panel'den bir önceki sürüme tek tıkla dönülebilir.
Sık Sorulan Sorular
Laravel Forge veya Vapor kullanmak yerine neden PaaS?
Forge bir server provisioning aracıdır — senin adına VPS konfigüre eder ama sunucu hâlâ senin sorumluluğundadır (güncelleme, disk, güvenlik). Vapor ise AWS Lambda üzerinde serverless çalışır; farklı bir mimaridir ve cold-start sorunları olabilir. PaaS ise container-based bir yaklaşımla ikisinin ortasındadır: sunucu yönetimi yok, ama uygulamanız her zaman çalışan bir process olarak yaşar.
Queue worker restart gerektiğinde ne olur?
PaaS platformlarında her deploy otomatik olarak queue worker'ı yeniden başlatır. queue:restart komutu deploy hook'larına eklenebilir veya platform bunu otomatik yapar.
Storage dosyaları (upload) nerede saklanır?
Production'da dosya yüklemelerini yerel diske değil, object storage'a (S3-uyumlu) yönlendirmek en doğru yaklaşımdır. Laravel'in Storage facade'ı bunu FILESYSTEM_DISK=s3 ile tek satırda destekler. Container yeniden oluşturulduğunda yerel dosyalar kaybolabilir — bu PaaS'a özgü değil, container mimarisinin doğası gereğidir.
Türkiye lokasyonu Laravel performansını etkiler mi?
Evet. Veritabanı ve uygulama sunucusu Türkiye'deyse, her SQL sorgusu için 80-120ms ağ gecikmesi olmaz. Kullanıcılarınız Türkiye'deyse sayfa yüklenme süresi doğrudan düşer.
Sonuç
Laravel, modern bir framework'tür ve modern bir altyapı gerektirir. Shared hosting bunu sağlayamaz. VPS sağlar ama operasyonel yük yüksektir. PaaS ise Laravel'in ihtiyaç duyduğu her şeyi — Composer, artisan, queue, scheduler, SSL — otomatik olarak yapılandırır.
Eğer Laravel ile bir SaaS, API veya web uygulaması geliştiriyorsan ve zamanını sunucu bakımı yerine ürüne ayırmak istiyorsan, PaaS doğru tercihtir.
Skyversal'ı denemek için: İlk Laravel deploy'unu başlat. GitHub reposunu bağla, framework algılansın, birkaç dakika içinde canlıda gör.