Giriş
Giriş
Laravel uygulamaları için çoğu Docker kurulumu… yeterli.
Yerel olarak çalışıyorlar, php artisan serve komutu ile çalıştırılıyorlar ve bu kadar.
Ancak gerçek dünya Laravel ve Filament uygulamaları inşa etmeye başladığınızda, bu kurulumlar hızlı bir şekilde sorun haline gelebilir:
- yavaş derlemeler
- şişkin imajlar
- güvenlik sorunları
- geliştirme ve üretim arasındaki zayıf ayrım
Kendi deneyimimde, bu sorunlarla sıkça karşılaştım ve bu kurulumu revize ettim.
👉 Bu makale, temel fikirler ve mimari üzerine odaklanacaktır.
Tam üretim hazır uygulamalara yönelik yapı (tam Dockerfile, kenar durumları ve CI/CD entegrasyonu ile) Filament Mastery‘de mevcuttur.
Makalede Neler Ele Alınıyor
Makalede Neler Ele Alınıyor
Bu makalede, üretimde kullandığım Docker kurulumunun temel kavramlarını inceleyeceğim.
Bu, aşağıdakileri içerir:
- çok aşamalı derlemeler
- optimize edilmiş bağımlılık kurulumu
- frontend varlık derleme
- daha iyi güvenlik için root olmayan çalışma
- çevreye özgü yapılandırma (geliştirme vs. üretim)
Temel Docker Kurulumlarının Problemi
Temel Docker Kurulumlarının Problemi
Tipik bir Dockerfile genellikle şöyle görünür:
FROM php:8.4-fpm
COPY . .
RUN composer install
RUN npm install
Basit… ama sorunlu.
Ana sorunlar:
- üretimde geliştirme bağımlılıklarını kurar
- varlık derleme stratejisi yoktur
- root olarak çalışır
- büyük ve yavaş imajlar
- sorumlulukların ayrımı yok
👉 Bu öğrenme için yeterlidir, ancak üretim için uygun değildir.
Daha İyi Bir Yaklaşım
Daha İyi Bir Yaklaşım
Her şeyi yapan tek bir konteyner yerine, çok aşamalı derlemeleri ve sorumlulukların net ayrımını kullanıyorum.
Tipik yapı:
- PHP bağımlılıklarını yüklemek için bir Composer aşaması
- frontend varlıklarını oluşturmak için bir Node aşaması
- sadece runtime’a odaklanan son bir PHP-FPM imajı
👉 Amaç basit: runtime imajını mümkün olduğunca küçük, güvenli ve öngörülebilir tutmak.
Ana Fikir: Derleme Zamanı ve Çalışma Zamanı
Ana Fikir: Derleme Zamanı ve Çalışma Zamanı
En büyük iyileşmelerden biri, mümkün olduğunca çok işin derleme zamanına kaydırılmasıdır.
Tecrübelerime göre, bu şunları ifade eder:
- bağımlılıkları derleme sırasında kurmak (runtime’da değil)
- varlıkları bir kez derlemek
- sadece nihai artefaktları göndermek
👉 Konteyner, değişmez hale gelir ve anlaşılması daha kolaydır.
Örnek (Basitleştirilmiş)
Örnek (Basitleştirilmiş)
Tek aşamalı bir Dockerfile yerine, sorumlulukları ayırmak gerekiyor:
# Composer aşaması (bağımlılıklar)
RUN composer install --no-dev
# Node aşaması (varlıklar)
RUN npm ci && npm run build
# Son imaj
COPY oluşturulan varlıklar + vendor sadece
👉 Bu kasıtlı olarak basitleştirilmiştir, ancak temel fikri yansıtmaktadır.
Neden Bu Önemli
Neden Bu Önemli
Bu yaklaşımla:
- derlemeler önbellekleme sayesinde daha hızlıdır
- imajlar önemli ölçüde daha küçüktür
- saldırı yüzeyi azaltılmıştır
- geliştirme ve üretim endişeleri net bir şekilde ayrılmıştır
Üretim ortamlarında, bu farklılıklar hızla kritik hale gelir.
İleri Gitmek
İleri Gitmek
Bu makale yalnızca Docker imajını ele alıyor.
Gerçek bir üretim kurulumunda, ayrıca şunlara ihtiyacınız var:
- uygun bir Docker Compose mimarisi
- imajları inşa etmek ve doğrulamak için bir CI/CD boru hattı
- dağıtım stratejileri
👉 Bu üretim kurulumu (Docker, Compose, CI/CD ve daha fazlası) hakkında belgeleri progresif olarak buradan yayımlıyorum:
https://filamentmastery.com/articles/production-ready-docker-setup-for-laravel-filament/
Docker kurulumları genellikle Laravel projelerinde hafife alınmaktadır.
Ancak kendi tecrübemde, temiz ve üretim hazır bir kuruluşa erken yatırım yapmak, zaman kazandırır, özellikle uygulamanız ölçeklenmeye başladığında.
Kaynak: Orijinal Makale


