Laravel geliştirme

Laravel uygulamaları: geliştirilir ve çalışır durumda tutulur.

İlk modelden kuyruk worker'larına, dağıtımlardan yıllar sonraki yükseltmeye kadar – tek bir ekip tarafından yazılır, barındırılır ve bakımı yapılır.

Üzerinde çalışır ve şununla geliştirilir
  • Laravel
  • PHP
  • Redis
  • Let's Encrypt

Sunucuda bir sürüm böyle görünür

Çalıştırdığımız her Laravel uygulaması aynı şekilde yayına çıkar: test edilir, derlenir, önbelleğe alınır ve bir saniyelik kesinti olmadan devreye alınır.

ci ~/app $ php artisan test   PASS  Tests\Feature\CheckoutTest  ✓ a paid order queues the invoice  ✓ a declined card never marks the order paid   PASS  Tests\Unit\VatTest  ✓ vat is added once, on the total app ~/releases/1400 $ composer install --no-dev --optimize-autoloaderInstalling dependencies from lock fileGenerating optimized autoload files app ~/releases/1400 $ php artisan migrate --force   INFO  Running migrations.  2026_09_27_090000_add_due_date_to_invoices ....... DONE app ~/releases/1400 $ php artisan optimize   INFO  Caching framework bootstrap, configuration, and metadata.  config ...................................... DONE  events ...................................... DONE  routes ...................................... DONE  views ....................................... DONE app ~/releases/1400 $ ln -sfn ~/releases/1400 ~/currentapp ~/releases/1400 $ php artisan horizon:terminate && php artisan octane:reload app ~/releases/1400 $ sudo supervisorctl statushorizon                 RUNNING   pid 48211, uptime 0:00:09octane                  RUNNING   pid 31877, uptime 6 days, 2:14:51 app ~/releases/1400 $ php artisan schedule:list  */5 * * * *  php artisan horizon:snapshot ... Next Due: 3 minutes from now  0   2 * * *  php artisan model:prune ........ Next Due: 9 hours from now  0   9 * * *  php artisan invoices:remind .... Next Due: 16 hours from now
Örnek bir uygulama üzerinde örnek bir oturum. Adlar, yollar ve çıktılar temsilidir.
  1. Önce testler

    Sunucuya hiçbir şey ulaşmadan önce testler çalışır. Tek bir başarısız test sürümü durdurur.

  2. Bağımlılıklar

    Yalnızca kilit dosyasından, geliştirme paketleri olmadan ve optimize edilmiş bir otomatik yükleyiciyle kurulur.

  3. Migration'lar

    Sürüm geçişi sürerken çalışan kod yeni şemayla da çalışmaya devam edecek şekilde yazılır.

  4. Önbellekler

    Yapılandırma, olaylar, rotalar ve görünümler önbelleğe alınır. Bu noktadan sonra ortam dosyası hiç okunmaz; env() bu yüzden yalnızca yapılandırma dosyalarında kullanılır.

  5. Geçiş

    Tek bir bağlantı yer değiştirir ve yeni sürüm yayına girer. Önceki sürüm geri dönüş için diskte kalır.

  6. Worker'lar

    Horizon elindeki işleri bitirir ve yeni kodla yeniden başlar; Octane da worker'larını aynı şekilde yeniden yükler.

  7. Denetim altında

    Supervisor, Horizon ve Octane'i çalışır durumda tutar; ikisinden biri durursa yeniden başlatır.

  8. Zamanlayıcı

    Tek bir cron satırı tüm zamanlanmış görevleri çalıştırır. Sıradaki çalıştıracakları bunlar.

Tek tıklamadan tamamlanmış işe

Yavaş iş, isteğin dışına çıkar. Müşteri hemen yanıt alır, geri kalanını arka planda bir worker yapar.

  1. 01 · İstek POST /checkout

    Müşteri ödeme yapar

    Controller siparişi doğrular, kaydeder ve hemen yanıt verir. Burada yavaş hiçbir şey olmaz.

  2. 02 · İş PayOrder::dispatch()

    Yavaş kısım ayrı bir işe dönüşür

    Veritabanı işlemi tamamlandıktan sonra kuyruğa gönderilir; böylece bir worker geri alınmış bir siparişi asla almaz.

  3. 03 · Kuyruk redis · payments

    Kendi kuyruğunda bekler

    Ödemelerin kendi kuyruğu vardır; böylece uzun bir dışa aktarım hiçbir ödemeyi bekletmez.

  4. 04 · Worker horizon · supervisor

    Bir worker işi alır

    Zaman aşımıyla, her seferinde daha uzun bekleyen yeniden denemelerle ve aynı anda kaç tanesinin çalışacağına dair bir sınırla.

  5. 05 · Bildirim OrderPaid → mail, database

    Herkes haberdar edilir

    Müşteri faturayı e-postayla alır, sipariş de panelinizde ödendi olarak görünür.

Başarısız olmaya devam ederse failed_jobs

Yeniden deneme hakkı biten bir iş, hatasıyla birlikte saklanır ve bize uyarı gelir. Neden giderildiğinde yeniden denenir – asla sessizce kaybolmaz.

Yalnızca sunucu değil, uygulamanın tamamı

Ekibimiz her Laravel projesine, ilk modelden yıllar sonraki yükseltmeye kadar yirmi beş yıllık PHP deneyimini getirir.

Geliştirme

Uygulamanın kendisi.

Mimari
İş mantığı controller'larda değil, action ve servis sınıflarında. Doğrulama için form request'ler, kimin neyi yapabileceği için policy'ler.
Eloquent
Bir sayfanın listelediği ilişkiler baştan yüklenir; böylece bir sayfa yüzlerce değil, birkaç sorguya mal olur. Geliştirme ortamında lazy loading hata verir, böylece sorun erkenden yakalanır.
Livewire · Inertia
Ekip PHP ve Blade yazıyorsa Livewire; ön yüz ayrı bir projeyse Vue ya da React ile Inertia.
Sanctum ile API'ler
Mobil uygulamalar ve iş ortakları için token'lar, kendi ön yüzünüz için çerez oturumları ve istemci başına istek sınırları.
Pest · PHPUnit
Para alan veya e-posta gönderen her yol için testler; her push'ta, sürüm oluşturulmadan önce çalıştırılır.

İşletme

Yanıt vermeye devam etmesini sağlayanlar.

Kuyruklar ve Horizon
Acil ve toplu işler için ayrı kuyruklar; her birinin kendi worker'ları, zaman aşımları ve yeniden denemeleri vardır ve hepsi Horizon panelinden izlenir.
Zamanlayıcı
Tek bir cron satırı tüm görevleri çalıştırır. Çakışmaması veya yalnızca tek bir sunucuda çalışması gereken görevler buna göre işaretlenir.
Octane
Swoole, RoadRunner veya FrankenPHP uygulamayı istekler arasında bellekte tutar. Bunu açmadan önce kodu, bir istekten diğerine sızan durumlara karşı kontrol ederiz.
Redis
Önbellek, oturumlar, kuyruklar ve kilitler; internetten erişilemeyen bir Redis üzerinde.
Supervisor
Kuyruk worker'ları, Horizon ve Octane denetlenen süreçler olarak çalışır; durduklarında ve her sürümden sonra yeniden başlatılır.

Bakım

Güncel kalmasını sağlayanlar.

Kesintisiz dağıtımlar
Her sürüm kendi dizininde oluşturulur ve tek bir bağlantıyla devreye alınır. Geri dönmek, aynı adımın tersidir.
Loglar ve istisnalar
Belirli bir süre saklanan günlük log dosyaları; her istisna da ona yol açan istekle birlikte bize bildirilir.
Yükseltmeler
Laravel her yıl yeni bir ana sürüm çıkarır. Bir uygulamayı her adımda testler geçerek, her seferinde bir sürüm ilerletiriz.

İlk gün kurduklarımız

İlk müşteri gelmeden önce, çalıştırdığımız her Laravel sunucusunda bunların hepsi hazırdır.

  • Üretimde hata ayıklama modu kapalı ve web'e yalnızca public dizini sunuluyorAPP_DEBUG=false
  • Kuyruk worker'ları Supervisor altında, her sürümde yeniden başlatılırsupervisord
  • Zamanlayıcı için tek bir cron satırı* * * * * php artisan schedule:run
  • Önbellek, oturumlar ve kuyruklar için RedisCACHE_STORE=redis
  • Yapılandırma, olaylar, rotalar ve görünümler her sürümde önbelleğe alınırphp artisan optimize
  • OPcache açık ve her sürümde sıfırlanıropcache.validate_timestamps=0
  • Sunucunun belleğine göre boyutlandırılmış bir PHP-FPM havuzupm.max_children
  • Kendi dizinlerinde sürümler, geri dönüşe tek adım uzaklıktacurrent → releases/…
  • Başarısız işler bir tabloda bırakılmaz, bize bildirilirfailed_jobs
  • Log rotasyonu ve istisna uyarılarıLOG_CHANNEL=daily
  • Sunucu dışına kopyalanan gecelik veritabanı yedeğibackup · offsite
  • Kendini yenileyen bir TLS sertifikasıLet's Encrypt

Diskte bir sürüm

/var/www/example-app
├── current → releases/1400
├── releases/
│   ├── 1400
│   └── 0930
└── shared/
    ├── .env
    └── storage/
Web sunucusu current dizinini gösterir. Bağlantı yer değiştirdiği anda sürüm yayındadır; bir öncekisi geri dönüş için kalır.

Bir Laravel uygulamasını sunmanın dört yolu

Aynı uygulama klasik yolla PHP-FPM üzerinde ya da Laravel Octane'in desteklediği üç sunucudan birinde çalışabilir. Neye ihtiyaç duyduklarında ve ne kattıklarında birbirlerinden ayrılırlar.

PHP-FPM
Klasik model. Uygulama her istekte yeniden başlar.
FrankenPHP
Go ile yazılmış, Caddy üzerine kurulu bir PHP uygulama sunucusu; HTTP/3, Early Hints ile Brotli ve Zstandard sıkıştırma desteği sunar.
RoadRunner
Go ile yazılmış, tek bir ikili dosyadan çalışan bir uygulama sunucusu. Octane onu indirmeyi teklif eder.
Swoole · Open Swoole
PECL ile kurulan bir PHP eklentisi. Open Swoole aynı özellikleri sunar.
Bir Laravel uygulamasını sunmanın her yolunun sunduğu olanaklar
Özellik PHP-FPMFrankenPHPRoadRunnerSwoole · Open Swoole
Uygulama bir kez başlar ve istekler arasında bellekte kalır Hayır Evet Evet Evet
Sunucu için ek bir PHP eklentisi gerektirmeden çalışır Evet Evet Evet Hayır
Her istek temiz başlar; denetlenecek paylaşılan durum yoktur Evet Hayır Hayır Hayır
Tek bir istek içinde eşzamanlı görevler Hayır Hayır Hayır Evet
Tick'ler: birkaç saniyede bir çalışan kod Hayır Hayır Hayır Evet
Octane önbelleği ve paylaşımlı bellek tabloları Hayır Hayır Hayır Evet

Onay işareti sunucuda bulunduğunu, çizgi bulunmadığını gösterir. Octane isteğe bağlıdır: Bir Laravel uygulaması PHP-FPM üzerinde olduğu gibi çalışır, Octane ise uygulamayı bellekte tutarak hız katar; bu yüzden açılmadan önce kod, bir istekten diğerine sızan durum açısından kontrol edilir. Kaynaklar: Laravel Octane belgeleri, FrankenPHP belgeleri.

Bir Laravel sürümü ne kadar süre desteklenir

Laravel yılda bir ana sürüm yayımlar ve her biri belirli bir süre desteklenir. Bu, tek bir sürümün yaşamı; yayımından itibaren ay olarak sayılır, böylece yükseltmenin ne zaman gerektiğini görebilirsiniz.

  1. 0yayımdan sonraki aylar
    Tam destek

    Yeni bir ana sürüm yayımlanır

    Ana sürümler yaklaşık yılda bir, ilk çeyrekte gelir. Aradaki küçük ve yama sürümleri hiçbir zaman uyumu bozan değişiklik içermez.

  2. 0–18yayımdan sonraki aylar
    Tam destek

    Hata düzeltmeleri ve güvenlik düzeltmeleri

    İkisi de sağlanır. Her ana sürüm bir PHP sürüm aralığını destekler; bu yüzden yükseltmek çoğu zaman PHP'yi de yükseltmek anlamına gelir.

  3. 12yayımdan sonraki aylar
    Tam destek

    Bir sonraki ana sürüm gelir

    Kullandığınız sürüm hâlâ tam destekli; geçişi planlamak için rahat zaman burasıdır.

  4. 18yayımdan sonraki aylar
    Yalnızca güvenlik düzeltmeleri

    Hata düzeltmeleri sona erer

    Buradan sonra sürüm yalnızca güvenlik düzeltmesi alır.

  5. 24yayımdan sonraki aylar
    Ömrünün sonu

    Güvenlik düzeltmeleri de sona erer

    Bu sürümde kalan bir uygulama, artık kimsenin yama yapmadığı kodla çalışır.

Laravel, ana sürüm yükseltmesinin bir gün ya da daha kısa sürmesini hedefler. Biz bir uygulamayı sürüm sürüm yükseltiriz; her adımda testler geçer. Laravel destek politikası

Teklif alın

Bize uygulamanızdan bahsedin

Yeni bir geliştirme, barındırılacak yer arayan bir uygulama ya da eski bir sürümde takılıp kalmış bir uygulama. Her proje kısa bir görüşmeden sonra fiyatlandırılır.

MickeySaniyeler içinde yanıtlar