.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:
- Webhook Testleri: Iyzico, Stripe veya GitHub Actions gibi dış servislerden gelen anlık bildirimleri (webhook) doğrudan yerel bilgisayarınıza düşürebilirsiniz.
- 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.
- 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.
Ö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.
