Hosting

Laravel Hosting Türkiye: Uygulamanı Dakikalar İçinde Deploy Et

Shared hosting'de artisan çalışmıyor, queue yok, scheduler kurulmuyor. Laravel'in gerçekten neye ihtiyacı var ve doğru hosting nasıl seçilir — teknik detaylarıyla anlattık.

Yazar: Skyversal Ekibi

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:

GereksinimNedenShared HostingPaaS
PHP 8.2+Laravel 11 minimum PHP 8.2 gerektirirGenellikle eski sürümOtomatik algılama
ComposerBağımlılık yönetimi (vendor/)SSH yoksa çalıştırılamazBuild aşamasında otomatik
Artisan CLIMigration, seed, cache, configErişim yok veya kısıtlıDeploy hook olarak çalışır
Queue WorkerMail, bildirim, uzun işlemlerMümkün değilAyrı worker process
Task Schedulerschedule:run her dakikacPanel cron — sorunluPlatform scheduler
Writable StorageCache, session, log dosyalarıPermission sorunlarıOtomatik yapılandırılır
SSL / HTTPSGüvenlik, SEO, cookie güvenliğiÜcretli veya elle kurulumOtomatik Let's Encrypt
Environment Variables.env güvenli yönetimiFTP'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: .env dosyası doğru yerde değil veya APP_KEY üretilmemiş.
  • Public klasör sorunu: Document root /public olarak ayarlanamıyor; .htaccess hack'leri gerekiyor.
  • Permission denied: storage/ ve bootstrap/cache/ yazılabilir değil.
  • Queue çalışmıyor: php artisan queue:work komutu sürekli çalışan bir process gerektirir — shared hosting buna izin vermez.
  • Scheduler pasif: cPanel cron'u * * * * * php artisan schedule:run desteklese 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:

  1. Ubuntu/Debian kurulumu ve güncelleme politikası
  2. Nginx veya Apache konfigürasyonu (try_files, PHP-FPM socket)
  3. PHP 8.2+ kurulumu (ondrej/php PPA veya kaynak derleme)
  4. Composer global kurulumu
  5. PostgreSQL veya MySQL kurulumu, kullanıcı oluşturma, firewall
  6. SSL sertifikası (Certbot + cron renewal)
  7. Git deploy stratejisi (bare repo + post-receive hook veya CI/CD)
  8. Supervisor kurulumu (queue worker daemonize)
  9. Cron job (schedule:run her dakika)
  10. 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:

  1. Git push: Kodu main branch'ine push'larsın.
  2. Framework algılama: Platform, composer.json ve artisan dosyasını görünce Laravel olduğunu anlar.
  3. Build: composer install --no-dev --optimize-autoloader çalışır. Eğer package.json varsa npm run build de otomatik tetiklenir.
  4. Deploy hook: php artisan migrate --force, php artisan config:cache, php artisan route:cache otomatik çalıştırılır.
  5. Worker başlatma: Queue worker ayrı bir process olarak ayağa kalkar.
  6. Scheduler aktif: schedule:run platform tarafından her dakika tetiklenir.
  7. SSL ve domain: Otomatik Let's Encrypt sertifikası; özel domain bağlama bir DNS kaydıyla olur.
  8. Health check: Uygulama 200 OK dö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:work komutu daemon olarak (sürekli) çalışmalı. "Cron ile queue:work çalıştır" öneriliyorsa o iş düzgün çalışmaz.
  • Scheduler: schedule:run her 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: .env değ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/logs veya 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:

  1. Projeyi oluştur: Panel'de "Yeni Proje" → GitHub reposunu seç.
  2. Framework otomatik algılansın: composer.json + artisan → Laravel olarak tanınır.
  3. Environment değişkenlerini gir: APP_KEY, DB_*, MAIL_* gibi değerleri güvenli formdan ekle.
  4. Veritabanı bağla: Managed PostgreSQL oluştur veya mevcut bir DB'yi connection string ile bağla.
  5. Deploy et: İlk build başlar → Composer, npm, migrate, cache — hepsi otomatik.
  6. 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.

Son güncelleme: 29 Temmuz 2026