İçeriğe geç

PHP 8.3 Docker Image İçine Apache SkyWalking Nasıl Eklenir?

Herkese selam, 2-3 hafta hafta kadar önce Apache SkyWalking’e bakmam gerekti. Apache vakfının gayet güzel ürünlerinden bir tanesiyle daha tanışmış oldum.

Dokümanını ve GitHub reposunu görünce güzel bir başlangıç olacağını düşündüm ama PHP ile uyumlu bir Docker image hazırlamak bir hayli eziyetli oldu.

İlk aşamada PECL olmadan kaynak kodunu derleyip oluşan .so dosyasını almak istedim ama birçok kez hata aldım. Bu süreç içinde neredeyse her gün derlemeler için ortalama 5-6 saat harcadım. Bazı günler mesai saatlerinde şirket bilgisayarında çalışırken benim bilgisayarda build almaya devam ediyordum. Tüm günü harcadığı da oldu. Her ne kadar Docker kendi içinde cache kullanıyor olsa da dosyaların derlenme işlemi öyle hemen bitmiyor. En küçük hatada yeniden başladıkça süre sürekli uzuyor. Süreci en çok etkileyenlerden biri internet hızı. Tek başıma 35 Mbit kullanmama rağmen abartısız 100’den fazla kez sadece internet bağlantı hatasından dolayı yarım kaldı.

Rust ! Dışardan bakınca güzel görünen ama bu derlemeler sırasında Cargo adlı paket yöneticisini tanıyınca yazmadığıma şükrettiğim belalı dil! Cargo’nun geliştiricisine de geliştirilmesinde emeği geçenlere de bugüne kadar bu lanet şeyi yok etmek için savaş açmamış yazılımcılara da diyecek bir şey bulamıyorum. Bu lanet şey en ufak derleme işlemi için bile tüm interneti indirmeye çalışıyor ve sürekli bağlantıyı koparıyor. Varsayılan olarak kaldığı yerden devam etme özelliği de yok. 10 mb’lık Docker image oluşturacak olursanız bile gigabyte’larca veri indiriyor. Daha doğrusu indirmeyi bile beceremiyor. Bu lanet şeyin işi bir türlü bitmediği için bir süre sonra bağlantı hatası verip kapanıyor. Bu yarım kalmaları engellemek için Git ile ilgili Dockerfile içine bazı eklemeler yapmak zorunda kaldım.

Kaynak koddan yaptığım defalarca denemeden sonra 1-2 kez başarılı build alabildim. İşin kötü tarafı tüm sürecin üstünden bir daha geçeyim dediğinizde Dockerfile üzerinde hiçbir değişiklik olmamasına rağmen tekrar build alınamıyor. Özetle bozuk araba gibi gittiği yere kadar ilerletip hata verdikten sonra tekrar arkadan ittirip devam ediyorsunuz. Böyle böyle bir önceki denemezinde oluşan cache okunarak son adıma kadar ilerliyor ve şansınız varsa build tamamlanıyor. Çoğunlukla o da olmuyor. Sonra diyorsunuz ki cache temizliği yapayım, şunu tek seferde bir daha çalıştırayım ama yine çalışmıyor. Özetle içimden geçenleri anlamış olmalısınız. Şeyini Şey Yaptığımın Şeyi bir türlü sonuçlanmıyor özetle. Resmen canı sıkıldıkça build hatası veriyor, küfür etmemiz için elinden geleni yapıyor. Cargo’nun yayınında ve yapımında emeği geçen herkesi yazılım dünyasının emektar çalışanları adına saygıyla anmaktan başka elinizden bir şey gelmiyor.

Bunca sözün ardından çalışma ortamıma laf edeceklere şimdiden cevabı vereyim. Sorun ne internet hızımda ne de bilgisayarımın zayıflığında. MacBook 16 GB M1 Pro cihazda bu işlem böyle sürüyorsa diğer cihazlarda ne kadar süreceğini siz tahmin edin artık.

Sonunda sıkılıp PECL ile devam etmeye karar verdim. Bu kez ortalama 20 dk içinde her şey tamamlandı. Gerekli düzenlemeleri de yaptıktan sonra 10 dk içinde build alınabilir hale geldi.

Bu son halini aşağıdaki komut ile build edebilirsiniz.

Ardından aşağıdaki komutları test.sh adında dosya oluşturarak içine ekleyin ve çalıştırın.

Terminalde sh dosyasını aşağıdaki gibi çalıştırın.

Çıktı olarak aşağıdaki gibi olumlu veya olumsuz sonuç göreceksiniz.

Tarayıcıda görüntülemek istiyorsanız NGINX, Apache veya başka bir yazılım kullanarak PHP-FPM için host oluşturmanız gerekiyor. Container çalıştığı zaman anasayfada phpinfo() çıktısını göreceksiniz.

 

Faydalı olması dileğiyle..

Bir sonraki yazıda görüşmek üzere.

Kategori:DevOpsPHP

İlk Yorumu Siz Yapın

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

5 + 7 =