Laravel ve Go uygulamalarının birlikte çalışabilmesi için gereken temel adımları ve yapılandırmaları ele alacağız. Bu yazıda, Laravel’in DDEV konteynerinde çalıştığı ve Go hizmetinin API görevini üstlendiği bir senaryo üzerinden ilerleyeceğiz.
Problemin Tanımı
Problemin Tanımı
- Laravel, DDEV web konteynerinde çalışıyor.
- Go ya host üzerinde ya da kendi Docker Compose ortamında yer alıyor.
- Konteyner içinden,
localhost:8090ifadesi, konteynerin kendisine işaret ediyor, host’a değil. host.docker.internal:8090kullanımı, zaman aşımına neden oldu (routing/WSL2) veya Go uygulamasının0.0.0.0üzerinde dinlemesini gerektirdi.- Cevap alabildiğimizde bile sık sık 401 Unauthorized hatasıyla karşılaştık: Laravel ve Go arasında imzalı istekler için ortak gizli anahtar eşleşmiyordu.
Tek bir öngörülebilir kurulum istiyorduk: Laravel ve Go’nun aynı ağda bulunması ve ortak gizli anahtarı yapılandırmak için tek bir yer.
Çözüm: Go’yu DDEV Sidecar Olarak Kullanmak
Çözüm: Go’yu DDEV Sidecar Olarak Kullanmak
Go hizmetini (ve Postgres’ini) DDEV içinde özel Docker Compose hizmetleri olarak ekledik, böylece web konteyneriyle aynı Docker ağını paylaşıyor ve servis adıyla iletişim kurabiliyorlar.
Özel Compose Dosyası
Şu yapılandırmayı içeren bir
.ddev/docker-compose.go-api.yamldosyası ekleyin:- go-api-db: Go uygulaması için Postgres (veriler adlandırılmış bir depolama alanında).
- go-api: Go reposundan derlenir (ör. kardeş bir dizin),
airgibi bir araç kullanıyorsanız canlı yükleme için monte edilir.go-api-db‘ye bağlıdır veAPP_HOST=0.0.0.0kullanarak ağda erişilebilir hale gelir. - web: Web hizmetini genişleterek API URL’nizi ayarlayın, örneğin
API_URL=http://go-api:8090, böylece Laravel her zaman sidecar’ı hedef alır.
Yollar
Compose yolları, compose dosyasına göre görelidir. Dosya
.ddev/içinde bulunuyorsa ve Go reposu Laravel projesinin kardeşi ise,../../your-go-projectifadesini build context ve volume mount için kullanın.Ortak Gizli Anahtar
Her iki taraf da imzalı istekler için aynı değeri kullanmalıdır (ör.
X-Signature). Go hizmetinde şu şekilde ayarlayın:SHARED_SECRET: ${SHARED_SECRET:-ddev-sidecar-secret}, böylece konteyner her zaman boş olmayan bir varsayılan değere sahiptir. Laravel’in.envdosyasında da aynı değeri ayarlayın (ör.SHARED_SECRET=ddev-sidecar-secret), böylece Laravel aynı anahtarla imza atar.Healthcheck
Go hizmetine,
/healthgibi bir URL’yi kontrol eden bir healthcheck verin ve DDEV’in ilk derlemeyi bekleyip yığın hazır olmadan önce uzun birstart_periodayarlayın.
Sonuç
Sonuç
- Laravel, sidecar’ı servis adıyla çağırır (örneğin
http://go-api:8090); herhangi bir host ağı veyahost.docker.internalkullanımına gerek yoktur. - Tek bir
.env(Laravel’in) hem API URL’sini hem de DDEV için ortak gizli anahtarı kontrol eder. ddev restartkomutu, web, db ve sidecar hizmetlerinizi birlikte başlatır.- Herhangi bir “Laravel in DDEV + içsel Go (veya diğer) hizmet” için aynı yöntem geçerlidir: özel bir compose dosyası ekleyin, hizmeti varsayılan ağa koyun ve Laravel’i servis adıyla yönlendirin.
401 hatası ile karşılaşırsanız, ortak gizli anahtar ortam değişkeninin Laravel’in .env dosyası ile Go konteynerinde aynı olduğundan emin olun.
Kaynak: Orijinal Makale


