Bu rehberde neler öğreneceksiniz?
- ✓ Laravel projenizi Skyversal'e nasıl bağlayacağınızı
- ✓ Composer bağımlılıklarının otomatik yönetimini
- ✓ Environment variables, storage link, queue worker, scheduler ve optimize komutlarını
Skyversal, Laravel projenizi algıladığı anda (composer.json + artisan + public/index.php dosyalarını tanıyarak) PHP ortamını otomatik yapılandırır, Composer bağımlılıklarını yükler ve Laravel'i çalıştırmak için gereken Nginx + PHP-FPM altyapısını sizin yerinize kurar. Hiçbir manuel sunucu ayarı gerekmez.
🔍 Ön Bilgi: Skyversal Laravel'i Nasıl Algılıyor?
Skyversal build pipeline'ı, projenizi analiz ederken şu dosyaları arar:
Not: Laravel standart dizin yapısından farklı bir proje kullanıyorsanız (ör. monorepo veya özel document root), Build & Run ayarlarından çalışma dizinini değiştirebilirsiniz.
🚀 1. Projeyi Skyversal'e Bağlayın
Laravel projenizi GitHub üzerinden bağlayabilir veya ZIP olarak yükleyebilirsiniz. Skyversal, proje kaynağını analiz eder etmez composer.json ve artisan dosyalarını tanır ve otomatik olarak Laravel ortamını hazırlar.
1. Dashboard'dan Yeni Proje Ekle'ye tıklayın.
2. Kaynak olarak GitHub'ı seçip Laravel reponuzu bağlayın.
3. Bölgeyi seçin (Türkiye veya Almanya).
4. Skyversal, composer.json dosyasını algılar ve Laravel ortamını otomatik kurar.
Skyversal build pipeline'ı, projenizdeki composer.json dosyasını okuyarak Laravel sürümünüze uygun PHP versiyonunu otomatik seçer. laravel/framework bağımlılığını tespit edince Nginx + PHP-FPM konfigürasyonunu kendiliğinden kurar.
🔑 2. Environment Variables ve APP_KEY
Laravel projenizde APP_KEY, veritabanı ayarları ve diğer hassas bilgileri Skyversal paneli üzerinden güvenle yönetebilirsiniz. Detaylı anlatım için Ortam Değişkenleri rehberine göz atabilirsiniz.
1. Proje sayfasında Settings → Environment Variables sekmesine gidin.
2. Aşağıdaki değişkenleri sırasıyla ekleyin:
APP_KEYbase64:... (yerelde php artisan key:generate ile üretin)APP_ENVproductionAPP_DEBUGfalseDB_CONNECTIONpgsql veya mysqlDB_HOST / DB_PORTSESSION_DRIVER / CACHE_STOREredis (önerilen)
Laravel'in encryption ve session işlemleri için APP_KEY zorunludur. APP_KEY hiçbir zaman deploy sırasında otomatik üretilmez. Yerel geliştirme ortamınızda php artisan key:generate ile ürettiğiniz anahtarı Skyversal panelindeki Environment Variables alanına eklemezseniz uygulamanız "No application encryption key has been specified" hatasıyla başarısız olur. .env dosyanızı asla GitHub'a göndermeyin!
🗄️ 3. Veritabanı Bağlantısı (Managed DB)
Laravel projenize Managed PostgreSQL veya MySQL eklemek için:
1. Proje sayfasında Services → Add Database'e gidin.
2. PostgreSQL veya MySQL seçin — Skyversal veritabanını saniyeler içinde ayağa kaldırır.
3. Oluşturulan bağlantı bilgilerini (host, port, username, password) Environment Variables'a ekleyin.
4. php artisan migrate komutunu çalıştırmak için bir sonraki deploy'unuzu tetikleyin.
Build & Run ayarlarından Run Command alanına php artisan migrate --force ekleyerek her deploy'da migration'ların otomatik çalışmasını sağlayabilirsiniz. Ancak seed işlemleri varsayılan olarak çalıştırılmaz.
✅ 4. Deploy ve Production Build
Tüm ayarları tamamladıktan sonra Deploy butonuna basın. Skyversal şu adımları otomatik gerçekleştirir:
- ✓ Kaynak kodunu GitHub'dan çeker
- ✓
composer install --no-dev --optimize-autoloaderçalıştırır - ✓ Ortam değişkenlerini güvenli biçimde aktarır
- ✓ Nginx + PHP-FPM konteynerini başlatır
- ✓ Sağlık kontrolü (health check) yapar
- ✓ Trafiği yeni sürüme sıfır kesintisiz yönlendirir
- ✓ Build loglarını gerçek zamanlı gösterir
Deployment pipeline'ı varsayılan olarak frontend adımlarını içermez. Laravel projeniz Vite kullanıyorsa Build Command alanına npm install && npm run build eklemeyi unutmayın. Böylece her deploy'ta asset'leriniz otomatik derlenir.
💾 5. Storage Link (php artisan storage:link)
Laravel'de kullanıcı yüklemeleri (public/storage) genellikle storage/app/public dizinine sembolik link ile bağlanır. Skyversal'de storage link'i manuel olarak Run Command alanına eklemeniz gerekir:
php artisan storage:link
Build & Run ayarlarında Run Command'i şu şekilde güncelleyin:
php artisan migrate --force && php artisan storage:link
⚙️ 6. Queue Worker & Horizon
Laravel projeniz e-posta gönderme, bildirim, rapor oluşturma gibi uzun süren işlemler için queue (kuyruk) kullanıyorsa, queue:work komutunu arka planda çalıştırmanız gerekir. Skyversal'de bunu sağlamak için iki seçeneğiniz var:
Seçenek 1: Run Command ile (Basit)
Run Command alanınıza php artisan queue:work ekleyin. Uygulamanız başladığında queue worker da otomatik başlar:
php artisan migrate --force && php artisan storage:link && php artisan queue:work
Bu yöntem basittir ancak queue worker aynı uygulama instance'ı içinde çalışır.
Seçenek 2: Laravel Horizon (Önerilen)
Horizon, queue yönetimi için gelişmiş bir panel ve izleme (monitoring) özellikleri sunar. Skyversal Horizon kurulumunu Build & Run rehberinde detaylı anlattık.
⏰ 7. Scheduler (Cron Yerine)
Laravel'in schedule komutu, geleneksel cron job'ların yerine geçer ve kod içinde tanımlanır. Eğer Scheduler kullanmıyorsanız bu adımı atlayabilirsiniz. Kullanıyorsanız, Kernel.php dosyasında tanımladığınız görevleri çalıştırmak için Run Command'ınıza ekleyin:
php artisan schedule:work
schedule:work sürekli çalışır ve her dakika schedule'ı kontrol eder. production ortamında önerilen budur. schedule:run ise tek seferliktir ve cron tarafından her dakika tetiklenmesi gerekir. Skyversal'de schedule:work kullanmanızı öneririz.
🚀 8. Optimize Komutları (Deploy Sonrası)
Laravel'in çeşitli cache komutları, uygulamanızın production'da daha hızlı çalışmasını sağlar. Bu komutları Run Command'ınıza ekleyerek her deploy'ta otomatik olarak çalıştırabilirsiniz:
Deploy sırasında bu cache komutlarını çalıştırmadan önce config dosyalarınızın production için hazır olduğundan emin olun.
php artisan migrate --force && php artisan storage:link && php artisan config:cache && php artisan route:cache && php artisan view:cache && php artisan event:cache && php artisan queue:restart
config:cache
Tüm konfigürasyon dosyalarını birleştirir ve önbelleğe alır. Config dosyalarınızda env() çağrıları varsa çalışmaz — env() yerine config() kullanmalısınız.
route:cache
Route kayıt işlemini hızlandırır. Closure tabanlı route'larınız varsa çalışmaz.
view:cache
Blade şablonlarını önceden derler. İlk istekte derleme gecikmesini ortadan kaldırır.
event:cache
Event ve listener kayıtlarını önbelleğe alır.
queue:restart
Queue worker'ları nazikçe yeniden başlatır. Yeni deploy'ta eski worker'ların hâlâ eski kodla çalışmasını engeller.
❓ Sık Karşılaşılan Hatalar
"No application encryption key has been specified"
APP_KEY eksik. Yerelde php artisan key:generate ile üretin ve Skyversal panelindeki Environment Variables alanına ekleyin.
"Target class [xxx] does not exist"
Composer autoload optimize edilmemiş. composer install --no-dev --optimize-autoloader ekleyip yeniden deploy edin.
"SQLSTATE[08006] could not connect to server"
Veritabanı bağlantı bilgileri hatalı. Managed DB bağlantı bilgilerini panelden kopyalayıp Environment Variables'ı güncelleyin, ardından yeniden deploy edin.
"Class "Redis" not found"
SESSION_DRIVER=redis kullanıyorsanız ancak projenize Redis eklemediyseniz oluşur. Proje sayfanızdan Services → Add Redis ile Redis'i etkinleştirin.
"Permission denied (storage/logs)"
Log veya cache dosyalarına yazma izni alınamadığında görülür. Skyversal ortamında tüm izinler (www-data) deploy sırasında otomatik ayarlanır, ancak manuel dosya oluşturduysanız yetki sorunu yaşanabilir.
"Vite manifest not found"
Frontend asset'leriniz (CSS/JS) henüz derlenmemiş. Build Command alanına npm install && npm run build komutunu ekleyip projeyi yeniden deploy edin veya asset'leri local'de derleyip (public/build) GitHub'a commitleyin.
📌 Sık Sorulan Sorular
Deploy rollback destekleniyor mu?
Evet. Health check aşamasında uygulamanız 500 hatası döndürürse Skyversal otomatik olarak son çalışan sürüme rollback yapar ve trafiği kesmez. Ayrıca geçmiş bir commit'e manuel olarak revert atıp pushladığınızda anında eski sürüme geçersiniz.
Skyversal Laravel 12'yi destekliyor mu?
Evet. Skyversal, Laravel 10, 11 ve 12'yi tam olarak destekler. PHP runtime'ları otomatik olarak projenizin composer.json dosyasındaki PHP require değerine göre seçilir.
Laravel Vite ile frontend build'ini nasıl çalıştırabilirim?
Build Command alanına npm install && npm run build ekleyin. Skyversal her deploy'ta bu komutu çalıştırarak asset'lerinizi derler.
Monorepo (tek repoda birden çok proje) desteği var mı?
Evet. Build & Run Komutları rehberinde monorepo ve Turborepo yapılandırmasını detaylı anlattık. Özel build komutları ile alt projelerinizi ayrı ayrı derleyebilirsiniz.
Migrations her deploy'ta otomatik çalışır mı?
Varsayılan olarak hayır. Run Command alanına php artisan migrate --force ekleyerek otomatik hale getirebilirsiniz. Migration'ların güvenliği için --force flag'i zorunludur.
Redis zorunlu mu?
Hayır. Laravel varsayılan olarak file ve database session/cache driver'larını kullanır. Session ve cache performansı için Redis öneririz ancak zorunlu değildir.
Horizon kurulumu için Supervisor gerekli mi?
Skyversal'de Horizon, platform tarafından yönetilen Queue Worker altyapısı üzerinde çalışır. Ayrıca Supervisor kurmanız gerekmez. Detaylar için Build & Run rehberine göz atın.
🎉 Laravel uygulamanız artık production ortamında çalışıyor.
Bundan sonra yapmanız gereken tek şey GitHub'a push atmak. Skyversal değişiklikleri otomatik algılar, yeni sürümü oluşturur ve trafiği kesintisiz şekilde yeni versiyona yönlendirir.
Sıradaki rehberde Laravel ortam değişkenlerini ve güvenlik ayarlarını nasıl yapacağınızı öğrenebilirsiniz.
➜ Laravel Environment Variables Rehberi