"Laravel projesini sunucuya nasıl yüklerim" sorusunun üç gerçek cevabı var — ve üçünü de yapmış insanlar olarak aralarındaki farkı marketing diliyle değil, komutlarıyla göstereceğiz. Seçiminiz iki şeye bağlı: ne kadar kontrol istediğinize ve geceleri telefonun kimin çalmasını istediğinize.
Yol 1: cPanel / Shared Hosting — "Dosyaları Attım, Site Açıldı" Yalanı
Klasik yol: php artisan serve'de çalışan projeyi FTP ile public_html'ye atmak. Site teknik olarak açılır — ama sonra gerçekler başlar:
composer installkoşamazsınız (SSH yok) → vendor'ı elle atarsınız, ilk paket güncellemesinde patlarphp artisan migrate→ SSH'sız panelde yok; phpMyAdmin'den SQL import çile işiqueue:work→ kalıcı süreç yok; kuyruk hiç çalışmazschedule:run→ tek "cron" olarak dakikada bir URL çağrısı — fragilAPP_ENV=production→ .htaccess'te saklanır, yanlışlıkla commit'lenir
Sonuç: görünürde "çalışan" ama gerçekte queue'suz, cron'suz, yarım bir Laravel. Laravel shared hosting rehberimizde bu duvarın tam haritası var — hâlâ bu yolda kalmak zorundaysanız oradan başlayın, ama bu yazıdaki diğer iki yol daha doğru.
Yol 2: VPS + Manuel Kurulum — Gerçek Komutlar
Temiz bir Ubuntu VPS'te Laravel production kurulumu şu parçaları ister — hepsi doğru yapılmalı:
1) Stack kurulumu
apt update && apt install -y nginx php8.3-fpm php8.3-cli php8.3-mysql \\
php8.3-mbstring php8.3-xml php8.3-curl php8.3-zip composer nodejs npm
2) Kod ve bağımlılıklar
cd /var/www/uygulama && git pull origin main
composer install --no-dev --optimize-autoloader
npm ci && npm run build
php artisan migrate --force
php artisan config:cache && php artisan route:cache && php artisan view:cache
3) Nginx vhost (kritik satır: public/ kökü)
server {
listen 80;
server_name site.com;
root /var/www/uygulama/public; # KOK public/, proje koku degil!
index index.php;
location / { try_files $uri $uri/ /index.php?$query_string; }
location ~ \.php$ {
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include fastcgi_params;
}
}
4) Queue worker — Supervisor ile kalıcı
# /etc/supervisor/conf.d/uygulama-worker.conf
[program:uygulama-worker]
command=php /var/www/uygulama/artisan queue:work --sleep=3 --tries=3
autostart=true
autorestart=true
numprocs=2
user=www-data
5) Scheduler — tek cron satırı
* * * * * cd /var/www/uygulama && php artisan schedule:run >> /dev/null 2>&1
6) SSL + izleme + yedek
Certbot ile SSL; log rotate; uptime monitörü; pg_dump cron'u; bunların hepsi ayrı ayrı sizin sorumluluğunuz. Toplam ilk kurulum: yarım gün. Aylık bakım: birkaç saat. Gece 3'te supervisor düşerse: siz.
Yol 3: PaaS — Git Push, Gerisi Platformda
git push origin main
Bu kadar. Platform repo'dan framework'ü tanır, build alır, composer install --optimize'ı koşturur, migrate eder, konteyneri başlatır, SSL'i takar. Queue worker ve scheduler aynı projenin süreçleri olarak panelde tanımlanır — supervisor conf yazmazsınız. Zero-downtime deploy: eski süreç yenisine sağlıklı geçene kadar ayakta kalır.
Üç Yolun Dürüst Tablosu
| cPanel/FTP | VPS + Manuel | PaaS | |
|---|---|---|---|
| Kurulum süresi | 1 saat (+yıllarca hack) | Yarım-1 gün | 10 dakika |
| Queue/cron | Yok | Supervisor + cron — siz kurarsınız | Dahili |
| Deploy hızı | FTP ile dakikalar, yarım dosya riski | SSH script — yazdıysanız | git push → 2 dk |
| Rollback | Eski dosyaları geri at | git revert + elle | Tek tık |
| SSL | Panelde tık | Certbot — siz | Otomatik |
| Ops yükü | Düşük ama tavanlı | Yüksek — tam sysadmin | Sıfır |
| Kontrol | Düşük | Tam (root) | Platform sınırında |
VPS'in kazandığı tek yer kontrol — kernel, özel servis, özel network. Her şeyi kendiniz kurabilirsiniz; soru şu: istemiyor musunuz? VPS vs PaaS analizimiz bu kararın maliyet tarafını açar.
Karar Formülü
- WordPress/statik değil, gerçek Laravel uygulaması → cPanel'i eleyin.
- Linux opsiyonu işiniz/sevdanız mı? Evet → VPS. Hayır → PaaS.
- Gece 3'te supervisor düşünce kimin uyanmasını istersiniz? Cevap yol gösterir.
Skyversal'da aynı proje içinde web + worker + cron + DB birlikte yürür — üç ayrı fatura/dyno modeli yok. Ortam değişkenleri rehberi ve hosting rehberi geçişin detaylarını verir; fiyatlar TL'dir.
Sık Sorulanlar
cPanel'de Laravel "çalışır" — neden taşınayım?
Açılan site ≠ çalışan uygulama. Queue, scheduler ve composer olmadan Laravel'in yarısı devre dışı; her deploy'da yarım dosya riski taşırsınız.
VPS'te en çok ne unutulur?
Nginx root'unun public/ olması (proje kökü değil!), storage/ ve bootstrap/cache izinleri, supervisor'un www-data kullanıcısı ve schedule:run cron satırı — dördü de "site açıldı ama X çalışmıyor" şikâyetlerinin klasik kaynağı.
PaaS'ta kuyruk ve cron nasıl tanımlanır?
Proje içinde süreç olarak: queue:work bir worker süreci, schedule:run zamanlanmış görev olarak panelde. Supervisor conf, crontab düzenleme yok.
Laravel 12 için fark var mı?
Kurulum akışı aynı; sadece PHP 8.2+ ve güncel composer şart. Laravel 12 upgrade rehberimizde sürüm notları var.