Laravel Uygulamasını VDS'te Yayınlama Rehberi
Laravel uygulaması sunucuda nasıl yayınlanır? PHP-FPM, Composer, .env, veritabanı, dosya izinleri, Nginx, kuyruk işçisi, zamanlayıcı, SSL ve güncelleme.

İçindekiler
Bir Laravel uygulamasını sunucuda yayınlamak, kodu sunucuya almaktan fazlasıdır: PHP-FPM'in, Composer bağımlılıklarının, .env ayarlarının, veritabanının, dosya izinlerinin, Nginx'in, kuyruk işçilerinin ve zamanlayıcının doğru yapılandırılması gerekir. Bu rehberdeki adımları bir kez uyguladığınızda, sonraki projelerinizi aynı düzenle dakikalar içinde yayına alabilirsiniz.
Bu rehberde temiz bir Ubuntu sunucuda bir Laravel uygulamasını baştan sona yayınlamayı, kuyruk ve zamanlayıcıyı ayarlamayı, SSL'i ve sonraki güncellemeleri anlatıyoruz.
Gereksinimler
- Sunucu: Root erişimli bir Ubuntu sunucu. Bu rehberde Ubuntu 24.04 kullanıyoruz.
- PHP: Laravel sürümünüzün istediği PHP sürümü ve eklentileri. Projenizin
composer.jsondosyasındakiphpsatırı gereken en düşük sürümü gösterir. - Veritabanı: MariaDB, MySQL ya da PostgreSQL. Kurulum için MySQL ve MariaDB kurulumu ya da PostgreSQL kurulumu rehberlerimize bakın.
- Alan adı: Sunucunuzun IP adresini gösteren bir A kaydı.
1. Adım: PHP, Composer ve Nginx
Sunucunuza SSH ile bağlandıktan sonra:
sudo apt update
sudo apt install nginx git unzip \
php8.3-fpm php8.3-cli php8.3-mysql php8.3-mbstring php8.3-xml \
php8.3-curl php8.3-zip php8.3-bcmath php8.3-intl php8.3-redis
curl -sS https://getcomposer.org/installer | php
sudo mv composer.phar /usr/local/bin/composer
Projeniz farklı bir PHP sürümü istiyorsa paket adlarındaki 8.3'ü değiştirin; birden fazla sürüm çalıştırmayı PHP sürümü değiştirme rehberimizde anlattık. PostgreSQL kullanıyorsanız php8.3-mysql yerine php8.3-pgsql kurun.
2. Adım: Kodu sunucuya alın
Uygulamanın klasörünü oluşturup kodu Git deposundan çekin:
sudo mkdir -p /var/www/uygulama
sudo chown $USER:www-data /var/www/uygulama
git clone git@github.com:kullanici/uygulama.git /var/www/uygulama
cd /var/www/uygulama
composer install --no-dev --optimize-autoloader
Sunucuya yalnızca o depoyu okuyabilen bir deploy anahtarı eklemeyi ve yayınları otomatikleştirmeyi Git ile deploy rehberimizde anlattık. Ön yüz dosyalarınızı Vite ile derliyorsanız npm ci && npm run build adımını da ekleyin.
3. Adım: .env ayarları
cp .env.example .env
php artisan key:generate
nano .env
Canlı ortam için en önemli ayarlar:
APP_ENV=production
APP_DEBUG=false
APP_URL=https://alanadiniz.com
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=uygulama
DB_USERNAME=uygulama
DB_PASSWORD=guclu-bir-sifre
APP_DEBUG=false: Canlı ortamda mutlaka kapalı olmalıdır. Açık bırakılırsa hata sayfaları şifreler dahil yapılandırma bilgilerini ziyaretçilere gösterebilir.APP_KEY:key:generateile oluşturulur. Bu anahtarı kaybederseniz şifrelenmiş veriler ve oturumlar okunamaz; güvenli bir yerde yedekleyin.- Redis kullanıyorsanız
CACHE_STORE,SESSION_DRIVERveQUEUE_CONNECTIONdeğerleriniredisyapın; ayrıntılar Redis nedir? yazımızda.
.env dosyasını asla Git deposuna eklemeyin.
4. Adım: Veritabanı, izinler ve önbellek
php artisan migrate --force
php artisan storage:link
sudo chown -R $USER:www-data storage bootstrap/cache
sudo chmod -R 775 storage bootstrap/cache
php artisan optimize
migrate --force: Canlı ortamda veritabanı tablolarını oluşturur;--forceonay sorusunu atlar.storage:link: Yüklenen dosyaların web'den erişilebilmesi içinpublic/storagebağlantısını oluşturur.- İzinler: Web sunucusunun
storagevebootstrap/cacheklasörlerine yazabilmesi gerekir. Bütün projeye777vermeyin. optimize: Yapılandırma, rota ve görünüm önbelleklerini oluşturarak uygulamayı hızlandırır..envdosyasını değiştirdikten sonra bu komutu tekrar çalıştırın.
5. Adım: Nginx yapılandırması
/etc/nginx/sites-available/uygulama dosyasını oluşturun. Web kökünün projenin kendisi değil, public klasörü olduğuna dikkat edin:
server {
listen 80;
listen [::]:80;
server_name alanadiniz.com;
root /var/www/uygulama/public;
index index.php;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
}
location ~ /\.(?!well-known).* {
deny all;
}
}
Siteyi etkinleştirin:
sudo ln -s /etc/nginx/sites-available/uygulama /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
Web kökünü public yerine proje klasörü yapmak, .env dosyanızın internetten okunabilmesine yol açabilir. Nginx'in temellerini Nginx kurulumu rehberimizde anlattık.
6. Adım: SSL
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d alanadiniz.com
Certbot sertifikayı alır, Nginx yapılandırmasını HTTPS için günceller ve otomatik yenilemeyi kurar. Ayrıntılar SSL sertifikası nedir? yazımızda.
7. Adım: Kuyruk işçisi ve zamanlayıcı
Kuyruk işçisi: E-posta gönderme ve dosya işleme gibi işleri arka planda çalıştırır. /etc/systemd/system/uygulama-queue.service dosyasını oluşturun:
[Unit]
Description=Laravel Queue Worker
After=network.target
[Service]
User=www-data
Group=www-data
Restart=always
WorkingDirectory=/var/www/uygulama
ExecStart=/usr/bin/php artisan queue:work --sleep=3 --tries=3 --max-time=3600
[Install]
WantedBy=multi-user.target
sudo systemctl enable --now uygulama-queue
Zamanlayıcı: Laravel'in zamanlanmış görevleri için her dakika çalışan tek bir cron satırı yeterlidir. sudo crontab -u www-data -e ile ekleyin:
* * * * * cd /var/www/uygulama && php artisan schedule:run >> /dev/null 2>&1
Cron'un nasıl çalıştığını Cron nedir? yazımızda anlattık.
Güncellemeleri yayınlamak
Yeni bir sürümü yayınlarken şu adımları izleyin:
cd /var/www/uygulama
php artisan down
git pull
composer install --no-dev --optimize-autoloader
php artisan migrate --force
php artisan optimize
php artisan queue:restart
php artisan up
queue:restart, kuyruk işçilerinin yeni kodu kullanmasını sağlar. Bu adımları bir betikte toplayıp GitHub Actions ile otomatikleştirmeyi Git ile deploy rehberimizde anlattık. Veritabanı değişikliği içeren yayınlardan önce veritabanının yedeğini almayı unutmayın.
Laravel için Nodesty sunucuları
Nodesty AMD Ryzen 9 9950X VDS paketleri yüksek tek çekirdek hızıyla PHP isteklerine düşük cevap süresi sağlar; AMD EPYC 7763 VDS paketleri ise uygulama, veritabanı, Redis ve kuyruk işçilerini aynı sunucuda çalıştırmak için bol RAM sunar. Tam root erişimi, NVMe disk, nShield DDoS koruması ve 7 gün saklanan ücretsiz günlük yedeklemeyle Laravel projelerinizi güvenle yayına alabilirsiniz.
Sıkça Sorulan Sorular
Laravel'i paylaşımlı hostingde çalıştırabilir miyim?
Küçük projelerde mümkündür, ama kuyruk işçileri, zamanlayıcı ve Composer gibi araçlar için SSH erişimi ve sunucu üzerinde kontrol gerekir. Kuyruk ve arka plan işleri kullanan uygulamalar için tam root erişimli bir VDS çok daha uygundur.
500 hatası alıyorum ama hata mesajı görünmüyor, neden?
Canlı ortamda APP_DEBUG false olduğu için ayrıntılı hata gösterilmez. Hatanın ayrıntısı storage/logs/laravel.log dosyasındadır. En sık sebepler eksik APP_KEY, yanlış veritabanı bilgileri ve storage klasörünün yazılabilir olmamasıdır.
.env dosyasını değiştirdim ama değişiklik uygulanmadı, neden?
Yapılandırma önbelleğe alındıysa Laravel .env dosyasını yeniden okumaz. php artisan config:cache komutunu tekrar çalıştırarak önbelleği yenileyin; kuyruk işçileri çalışıyorsa php artisan queue:restart ile onları da yeniden başlatın.
Kuyruk işçisi neden yeni kodu çalıştırmıyor?
Kuyruk işçileri uzun süre çalışan süreçlerdir ve başlatıldıkları andaki kodu bellekte tutar. Her yayından sonra php artisan queue:restart çalıştırın; systemd ya da Supervisor işçileri otomatik olarak yeniden başlatır.
Uygulamayı yayın sırasında bakım moduna alabilir miyim?
Evet. php artisan down komutu uygulamayı bakım moduna alır ve ziyaretçilere bir bakım sayfası gösterir; yayın bittikten sonra php artisan up ile tekrar açarsınız. Kısa süren yayınlarda bunun yerine kesintisiz bir yayın düzeni kurmak da mümkündür.
Laravel için hangi veritabanını kullanmalıyım?
Laravel MariaDB, MySQL ve PostgreSQL'i destekler. Hangisini seçeceğiniz projenizin ihtiyaçlarına ve ekibinizin deneyimine bağlıdır. Kuyruk, önbellek ve oturumlar için ek olarak Redis kullanmak performansı artırır.
Yazar hakkında
Nodesty Ekibi · Altyapı ve Destek
Nodesty ekibi sunucularımızı, ağımızı ve DDoS korumamızı her gün işletir ve müşteri destek taleplerini 7/24 yanıtlar. Bu rehberler o deneyimden yazılır.
İlgili yazılar

Load Balancer (Yük Dengeleyici) Nedir? Nasıl Çalışır?
Load balancer nedir, ne işe yarar? Yük dengeleme yöntemleri, sağlık kontrolleri, oturum yönetimi, Nginx ile yük dengeleme, HAProxy ve ne zaman gerekir.

Ubuntu Sürüm Yükseltme: Sunucuyu Yeni LTS Sürümüne Taşıma
Ubuntu sunucu yeni LTS sürümüne nasıl yükseltilir? Yedek, hazırlık, do-release-upgrade adımları, SSH bağlantısı, sonrası kontroller ve temiz kurulum.

IPv6 Nedir? IPv4'ten Farkı ve Sunucuda Kullanımı
IPv6 nedir, IPv4'ten farkı ne? IPv6 adres biçimi, /64 blok, AAAA kaydı, Linux sunucuda IPv6 ayarı, güvenlik duvarı, bağlantı testi ve oyun sunucuları.