Laravel/PHP geliştiricisiyseniz ve spatie/browsershot ile çalışıyorsanız, yaşadığınız zorlukları hissediyorsunuzdur. 7.000+ GitHub yıldızı. 2021’den beri hiçbir güncelleme yok. Her dağıtımda, her yeni sunucuda, her paylaşımlı hosting ortamında aynı problemle karşılaşıyorsunuz: izin olmadan headless Chrome kurmak.
Paylaşımlı hosting mi? Unutun gitsin.
AWS Lambda mı? Sadece bir ekran görüntüsü almak için fonksiyon boyutunu 500MB artırıyorsunuz.
Heroku veya Platform.sh gibi PaaS platformlarında mı? Sistem ikili bağımlılıkları bir kabus.
Daha basit bir yolu var.
Problem: Neden Browsershot Üretimde Çalışmıyor
Problem: Neden Browsershot Üretimde Çalışmıyor
Browsershot, bir headless Chrome ikili dosyası gerektiren Puppeteer etrafında bir PHP sarıcısıdır. Bu ne demektir:
Paylaşımlı Hosting (en acı senaryo):
# Sunucunuzda Chrome yüklü değil
# Root erişimi talep ediyorsunuz... reddedildi
# Kaynaktan derlemeye çalışıyorsunuz... izin reddedildi
# Pes ediyorsunuz ve bozuk bir özellik gönderiyorsunuz
Serverless (AWS Lambda, Google Cloud Functions):
# Chrome için Lambda katmanı = 500MB+
# Soğuk başlatma süresini önemli ölçüde artırır
# Daha büyük paket boyutu nedeniyle maliyet artar
# Yine de kırılgan — Chrome belleği kısıtlı ortamda çökebilir
Docker/Konteynerleştirilmiş:
# Docker imajı Chrome ile 1GB+ oluyor
# CI/CD yapıları daha uzun sürüyor
# Kayıt alanı maliyetleri artıyor
# Bellek ayak izi ağır
Browsershot paketi 2021’den beri güncellenmedi. Güvenlik güncellemeleri gecikiyor. Ve ana sorun devam ediyor: sistem düzeyindeki bağımlılıkları uygulama kodunda yönetiyorsunuz.
Önce/Sonra: Kod Karşılaştırması
Önce/Sonra: Kod Karşılaştırması
Önce — Browsershot (bağımlılık cehennemi ile):
use Spatie\Browsershot\Browsershot;
// Öncelikle sisteminize Chrome'u kurmanız gerekiyor (bu zor bir iş)
// $ apt-get install chromium-browser # sudo ile yapıyorsanız
// $ brew install chromium # Mac kullanıyorsanız
// vb...
// SONRA bunu kullanabilirsiniz:
Browsershot::url('https://example.com')
->screenshot()
->save($pathToImage);
// Başlık eklemek mi istiyorsunuz? Başka bir bağımlılık.
// JS beklemek mi istiyorsunuz? Başka bir yapılandırma.
// Yetkilendirme çerezleri mi istiyorsunuz? Başka bir çözüm.
// Ölçek mi yapmak istiyorsunuz? Chrome yüklü daha fazla sunucu dağıtmanız gerekiyor.
Problemler:
- Her sunucuda 500MB+ Chrome ikili dosyası gerekmekte
- Kısıtlı ortamda kurulum başarısız oluyor
- 2021’den beri güncelleme yok
- Bellek açısından ağır bir işlem
- Chrome bloat ile maliyetler artıyor
Sonra — PageBolt API (sıfır bağımlılık):
use GuzzleHttp\Client;
$client = new Client([
'headers' => [=> ]
]);
$response = $client->post(, [
=> [=> ]
]);
$data = json_decode($response->getBody(), true);
$imageUrl = $data[];
// Görüntüyü kaydet veya yayınla
file_put_contents(, ());
Ya da saf curl ile (bağımlılık yok):
$ch = curl_init();
curl_setopt_array($ch, [
CURLOPT_URL => ,
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => [,],
CURLOPT_POSTFIELDS => ([=> ]),
CURLOPT_RETURNTRANSFER => true
]);
$response = ();
$data = (, true);
echo []; // Ekran görüntünüzün URL'si
();
Faydalar:
- Sıfır sistem bağımlılığı
- Herhangi bir PHP ortamında (paylaşımlı hosting, serverless, konteynerler) çalışır
- Chrome kurulumu gerekmiyor
- Hızlı, hafif HTTP istekleri
- Altyapı yönetmeden anında ölçeklenir
Özellik Karşılaştırması: Ne Gerçekten Çalışıyor
Özellik Karşılaştırması: Ne Gerçekten Çalışıyor
| Özellik | Browsershot | PageBolt API |
|---|---|---|
| Sistem Bağımlılıkları | ❌ Headless Chrome ikili dosyası gerektirir (500MB+) | ✅ Yok — yalnızca HTTP istekleri |
| Paylaşımlı Hosting | ❌ Genellikle izinlerle engellenir | ✅ Her yerde çalışır |
| Serverless (Lambda) | ⚠️ Ağır katman (500MB+), yavaş soğuk başlatmalar | ✅ Hafif, hızlı istekler |
| Bakım Durumu | 🚨 Terk edilmiş (2021) | ✅ Aktif geliştirme |
| CSS/JS Desteği | ⚠️ Eski Chrome motoru | ✅ Modern Chromium renderleme |
| Yetkilendirme | ⚠️ Çerezler, ağır çözümler | ✅ Yerleşik yetkilendirme desteği |
| Viewport Kontrolü | ✅ Destekleniyor | ✅ Tam kontrol |
| Özel Başlıklar | ⚠️ Karmaşık kurulum | ✅ Basit JSON parametresi |
| Ölçekleme | ❌ Chrome ile daha fazla sunucu gerektirir | ✅ Anında ölçeklenir, altyapı yok |
| Maliyet (100 ekran görüntüsü/ay) | $50-200 (sunucu üstü maliyet) | $1 (istek başına ödeme) |
Gerçek Dünya Maliyet Analizi
Gerçek Dünya Maliyet Analizi
Senaryo: Bir SaaS uygulaması için ayda 5,000 ekran görüntüsü oluşturma
Seçenek 1: Kendinden Barındırılan Browsershot
- Paylaşımlı hosting: Çalıştıramazsınız. Minimum VPS’ye ($50/ay) terfi edin.
- VPS ($50/ay) + Chrome bloat + bellek aşırı yükü
- Sistem yöneticisi bağımlılıkları yönetmek için zaman: Aylık 3 saat
- Emek maliyeti: Aylık $300 (3 saat × $100/saat)
- Toplam: $350/ay
Seçenek 2: Browsershot Layer ile AWS Lambda
- Lambda katmanı (500MB Chrome): Fonksiyon boyutunu artırır
- Soğuk başlatmalar: 5-10 saniye
- Başlatma süresi aşırı yükü
- Katman sürüm yönetimi karmaşıklığı
- Tahmin edilen maliyet: Aylık $100 (depolama + hesaplama aşırı yükü)
Seçenek 3: PageBolt API
- 5,000 istek × $0.01 = $50/ay
- Sıfır altyapı yönetimi
- Anında ölçekleme
- Sistem bağımlılığı yok
- Toplam: $50/ay
PageBolt ile tasarruf: Aylık en az $300. Ayrıca 3 saat mühendislik süresi de kurtarıldı.
Geçiş: 15 Dakikada Takılma Yerine Geçirme
Geçiş: 15 Dakikada Takılma Yerine Geçirme
Adım 1: Bir yardımcı sınıf oluşturun
namespace App\Services;
use GuzzleHttp\Client;
class ScreenshotService
{
protected $client;
protected $apiKey;
public function __construct()
{
$this->apiKey = config();
$this->client = new Client([
=> ,
=> [=> {->apiKey""]
]);
}
public function takeScreenshot($url, array [])
{
$payload = ([=> ],
= ->->(, [=> ]);
return (->(), )[];
}
}
Adım 2: Browsershot çağrılarını değiştirin
// Önce
// Browsershot::url($url)->screenshot()->save($path);
// Sonra
// $url = app(ScreenshotService::class)->takeScreenshot($url);
// file_put_contents($path, file_get_contents($url));
Adım 3: .env dosyanızı güncelleyin
PAGEBOLT_API_KEY=your_key_here
Hepsi bu. Sistem ikilisi yok. Dağıtım ağrısı yok. Ölçeklendirme sorunları yok.
Ne Zaman Ne Kullanılmalı
Ne Zaman Ne Kullanılmalı
PageBolt kullanın eğer:
- Paylaşımlı hosting veya serverless kullanıyorsanız
- Ayda 100+ ekran görüntüsü oluşturuyorsanız
- Sıfır altyapı yönetimi istiyorsanız
- Modern CSS/JS renderlama gerekiyor
- Bakım ve güvenilirliğe önem veriyorsanız
Browsershot kullanın eğer:
- Eski bağımlılıklarla bir monolitin içindeyseniz
- Sistem yöneticisi kontrolünüz var ve Chrome’u yönetmek için zaman ayırabiliyorsanız
- Ayda fazla ekran görüntüsü oluşturuyorsanız
(Spoiler: PageBolt, her gerçek üretim senaryosunda kazanır.)
Sonraki Adımlar
Sonraki Adımlar
- PageBolt’u ücretsiz deneyin — Aylık 100 istek, kredi kartı yok. Gerçek URL’lerinizle test edin.
- Yukarıdaki yardımcı sınıfı kopyalayın — Laravel, düz PHP, herhangi bir çerçeve ile çalışır.
- Bir özellik geçirin — Öncelikle bir ekran görüntüsü oluşturmayı değiştirin. Farkı ölçün.
PHP/Laravel uygulamanız 2021 bağımlılığından daha iyisini hak ediyor. Chrome ikilileri ile savaşmayı bırakın. Her yerde gerçekten çalışan ekran görüntüleri üretmeye başlayın.
PageBolt, ekran görüntüsü oluşturmayı basit, ölçeklenebilir ve bağımlılıksız hale getirir. Ücretsiz başlayın →
Kaynak: Orijinal Makale


