Laravel Expose Kullanımı (2026): Ngrok Alternatifi ile Modern Tünelleme ve Webhook Mimarisi

2026-03-26
Laravel Expose Kullanımı

Blog İçeriği

TL;DR: Yerel geliştirme ortamınızı (localhost) dış dünyaya açmak için Ngrok’un kısıtlamalarıyla vakit kaybetmeyin. macOS üzerinde Laravel Valet kullanıyorsanız, PHP tabanlı Laravel Expose kullanımı ile saniyeler içinde içinde SSL destekli tüneller oluşturabilirsiniz. Üstelik Vite HMR (Hot Module Replacement) sorunlarını kaynak koda sabit IP gömmeden, .env tabanlı dinamik bir mimariyle nasıl çözeceğinizi bu rehberde bulabilirsiniz.

Geçmişte yerelde geliştirdiğim web projelerini harici bir cihazda test etmek veya dış API’lerle konuşturmak istediğimde sektörün de facto standardı olan Ngrok’u kullanıyordum. Ancak son yıllarda ücretsiz planlara getirilen sabit domain zorunlukları, kısa oturum süreleri ve bağlantı limitleri, Geliştirici Deneyimini (DX) ciddi şekilde baltalamaya başladı.

Bir Sistem Mimarı ve Full Stack Geliştirici olarak, özellikle Laravel 13 ve PHP 8.5 standartlarında inşa ettiğim SaaS projelerinde bu hantal yapıyı tamamen terk ettim. Mimari kararlarımda her zaman “İhtiyacın Olmayan Kodu Yazma” (YAGNI) prensibini savunurum. Eğer macOS ekosisteminde Laravel Valet kullanıyorsanız, dışa bağımlılığı ortadan kaldıran çok daha esnek, nativ ve PHP ile yazılmış bir alternatifimiz var: Expose.

Neden Expose? Sadece Bir “Mobil Test” Aracı Değil

Pek çok geliştirici Expose’u sadece “yerel projeye cep telefonundan girmek” için kullanılabilecek basit bir araç sanır. Bu büyük bir yanılgıdır. Gerçek bir Özel Yazılım Mimarisi kurguluyorsanız, Expose size şu devasa avantajları sunar:

  1. Webhook Testleri: Iyzico, Stripe veya GitHub Actions gibi dış servislerden gelen anlık bildirimleri (webhook) doğrudan yerel bilgisayarınıza düşürebilirsiniz.
  2. Sıfır Kesinti (Zero-Downtime) Sunum: Geliştirme aşamasındaki bir modülü, canlı sunucuya atmadan doğrudan müşterinizin ekranına SSL sertifikalı (HTTPS) bir linkle yansıtabilirsiniz.
  3. Ekosistem Uyumu: Valet ile %100 entegredir; ek bir konfigürasyon dosyası cehennemi yaratmaz.

1. Adım Adım Laravel Expose Kullanımı ve Valet Entegrasyonu

Beyond Code tarafından geliştirilen açık kaynaklı Expose aracını, sistemimize global bir Composer paketi olarak dahil edeceğiz. Terminalinizi açın ve sırasıyla şu komutları çalıştırın:

Bash

composer global require beyondcode/expose
valet share-tool expose

Bu iki basit adımla Valet’in arka planda kullandığı varsayılan paylaşım aracını (Ngrok) güncelledim. Artık projeyi dış dünyaya açmak için proje dizininde alttaki komutu yazmam yeterli:

Bash

valet share

Bu komutu çalıştırdığınızda terminalde size https://rastgele-isim.sharedwithexpose.com formatında güvenli bir link üretilir. Tüneliniz artık açık!

2. Vite Asset Sorunu: “Hardcoded IP” Zafiyeti ve Çözümü

Projeyi Expose linkinden açtınız ancak sayfanın tasarımı bozuk, CSS ve JS dosyaları yüklenmedi mi? Bu, modern Laravel ekosistemine geçenlerin yaşadığı en yaygın sorundur. Sebebi framework değil, Vite’ın derlediği dosyaları varsayılan olarak sadece localhost (127.0.0.1) üzerinden sunmasıdır.

Birçok kaynak bu sorunu çözmek için vite.config.js dosyasına yerel IP’nizi (örn: 192.168.1.50) sabit (hardcoded) olarak yazmanızı önerir. Bir sistem mimarı olarak uyarıyorum: Bu ciddi bir teknik borçtur (Technical Debt). Modeminizi yeniden başlattığınızda IP’niz değişirse veya projeyi ofisteki başka bir ağda açarsanız sisteminiz çöker.

Bunun yerine, IP adresini dinamik olarak .env dosyasından okuyan “Fail-Safe” (Hata Korumalı) bir mimari kurmalıyız:

Adım 1: Yerel .env dosyanıza şu satırı ekleyin:

Kod snippet’i

VITE_HMR_HOST=192.168.1.50

(Yerel IP adresinizi macOS terminalinde ipconfig getifaddr en0 yazarak bulabilirsiniz.)

Adım 2: vite.config.js dosyanızı aşağıdaki gibi revize edin:

JavaScript

import { defineConfig, loadEnv } from 'vite';
import laravel from 'laravel-vite-plugin';

export default defineConfig(({ mode }) => {
    // .env dosyasındaki değişkenleri içeri aktarıyoruz
    const env = loadEnv(mode, process.cwd(), '');
    
    return {
        plugins: [
            laravel({
                input: ['resources/css/app.css', 'resources/js/app.js'],
                refresh: true,
            }),
        ],
        server: {
            host: '0.0.0.0',
            hmr: {
                // Eğer .env içinde tanımlıysa onu kullan, yoksa localhost'a dön
                host: env.VITE_HMR_HOST || 'localhost',
            },
        },
    };
});

Bu savunmacı yaklaşım sayesinde, kodunuzu GitHub’a gönderdiğinizde (commit) ekip arkadaşlarınızın bilgisayarlarında Vite ayarlarını bozmamış olursunuz. Herkes kendi .env dosyasından kendi yerel IP’sini yönetir.

3. Sistem Mimarisi ve DevOps Güvenliği

Ngrok yerine optimize bir Laravel Expose kullanımı, özellikle DevOps ve CI/CD süreçlerini yönetirken geliştirme hızınızı olağanüstü artırır. Ancak projeyi internete açmak, sorumluluk gerektirir.

Test işleminizi tamamladığınızda terminalde <code>Ctrl+C</code> yaparak tüneli mutlaka kapatın. Projenizi dışarıya açtığınız süre boyunca, hassas veritabanı bilgilerinizin bulunduğu <code>.env</code> dosyanızın yetkisiz erişime kapalı olduğundan ve Laravel Gate / Policy yetki kontrollerinizin aktif olduğundan kesinlikle emin olun.

Ölçeklenebilir yazılım mimarileri, sunucu güvenliği ve modern PHP ekosistemi hakkında daha fazla teknik derinlik için projelerimi inceleyebilir veya sistem danışmanlığı için benimle iletişime geçebilirsiniz.