İçeriğe geç

PHP 8.3 ile XDebug, gRPC, Protobuf, PostgreSQL, Redis, Kafka, MongoDB, Swoole Barındıran Docker Image Nasıl Hazırlanır?

Herkese selam, uzun zamandır PHP projelerimde kullanmak için hazırladığım bir Dockerfile dosyam vardı. PHP 8.3 için bazı güncellemeler ve eklemeler yaparak paylaşmaya karar verdim. İçinde hem API projelerinizde ihtiyacınız olabilecekler hem de UI barındıran projeler geliştirmek için ihtiyacınız olabilecek uygulamalar mevcut.

PostgreSQL, Redis, Kafka, MongoDB, Swoole / OpenSwoole ve XDebug olmak üzere ihtiyacımız olan temel diğer tüm yazılımlar mevcut. Ek olarak gRPC, Protobuf ve Apache SkyWalking ekledim ve Locale ayarlarını Türkçe ile uyumlu hale getirdim.

Ortam olarak PHP-FPM kullandığım için FPM ayarlarını özellikle kendime göre değiştirdim. Eğer sadece API olarak kullanacaksanız php-fpm.conf dosyasında gerekli değişikliği yaparak gereksiz izinleri kaldırmanızda fayda var. 

Image oluştuğu zaman 900MB civarında oluyor ve tamamlanma süresi bilgisayarınızın hızına göre ~10dk veya üzerine çıkabiliyor.

Sadece Dockerfile değil birkaç ek dosya daha paylaşacağım için şimdiden bir klasör düzeni oluşturmakta fayda var. Bu klasör yapısını oluşturursanız kolaylıkla build alabilirsiniz.

Dosyalarınızı aynı bu düzende kaydetmeye çalışın.

Dockerfile ile başlayalım. Bu içeriği dosya uzantısı olmadan sadece Dockerfile ismiyle oluşturduğunuz klasörün içine kaydedin.

Bu Dockerfile dosyasının yanına build.sh adında bir dosya daha oluşturun ve içeriğine aşağıdakileri ekleyin.

Bu dosyada build almak istediğiniz platforma özel değişiklikler yapabilmeniz için bazı örnekler de ekledim. 

Aynı klasörde test.sh adında bir dosya daha oluşturun ve içeriğini ekleyin.

Özellikle bu dosya beni biraz fazla uğraştırmıştı. PHP-FPM kullandığım için böyle bir test dosyası yazmak zorunda kaldım. Kaynak olarak kullandığım adresi de dosya içinde bulabilirsiniz. İlgili içeriği takip ederek daha farklı testler de oluşturabilirsiniz.

Sıra geldi diğer dosyalarımıza. Şimdi config adında bir klasör oluşturun ve bundan sonraki dosyaları bu klasör içinde oluşturarak devam edin.

İlk olarak php-fpm.conf dosyamızı oluşturalım.

Gördüğünüz gibi bir hayli kalabalık görünüyor. Burada kendi ihtiyaçlarınıza göre security.limit_extensions içeriğini değiştirmenizde fayda var. Diğer ayarlar da tamamen sizin ihtiyacınıza göre değiştirilebilir ama test için eklediğim kısımları değiştirmemenizi tavsiye ederim. Eğer bir değişiklik yapacak olursanız test dosyasında da gerekli değişiklikleri yapmayı unutmayınız.

php-fpm.ini adında dosya oluşturun ve içeriğini aşağıdaki gibi düzenleyin. Mümkün olduğunca üzerinde değişiklik yapmamaya özen gösterdim. Siz kendi ihtiyaçlarınıza göre değiştirebilirsiniz.

Apache SkyWalking kurulumundan sonra ayarlarını da değiştirebilmemiz için skywalking.ini dosyasına ihtiyacımız var. Bu içeriği kendi ihtiyacınıza göre değiştirerek kullanabilirsiniz.

CA sertifika yolunu verebilmemiz için cacert.ini dosyamızı oluşturmayı unutmayalım.

Eğer dikkatli baktıysanız Dockerfile dosyamızda bu dosya image içine koyulmuyor. Siz ihtiyacınıza uygun şekilde değişiklik yaparak işleme devam edebilirsiniz.

Son olarak 999-extra.ini adında bir dosya oluşturun ve içeriğini ekleyin.

Burada da gördüğünüz gibi en çok ihtiyacımız olan değişiklikleri yapıyoruz. Bu dosya da Dockerfile içinde kapalı olarak duruyor ve image içine eklenmiyor. Siz kendi ihtiyacınıza uygun bir şekilde değiştirerek Dockerfile içindeki ilgili satırları aktif ederseniz bu dosyalar da image içine gidecektir.

Önemli Uyarı ! Zamanla bu Dockerfile çalışmaz duruma gelebilir. Dockerfile içinde kullandığımız paketlerin repolardaki ömrü bitebilir, güncel sürümlerde hata çıkabilir, repolar artık kullanımdan kalkabilir veya başına başka sorunlar gelebilir. Bu nedenle alacağınız hatalarla biraz uğraşıp güncelliğini devam ettirebilirsiniz. Ayrıca hem ben güncel tutmaya çalışacağım hem de siz hata aldığınızda yorum kısmından ulaşırsanız birlikte de güncelleyebiliriz.

Tüm bunlara ek olarak benim aklımda bazı geliştirmeler daha var. Zamanla geliştirmeleri buraya da eklemeye çalışacağım. Her ne kadar Dockerfile içeriğini “best practices” olarak bilinen bazı kurallara uygun şekilde geliştirsem de şimdilik image boyutu biraz büyük ve bu beni rahatsız ediyor. Mümkün olduğunca bunu da düşürmeye çalışacağım. 

 

Faydalı olması dileğiyle..

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

Kategori:DevOpsPHPWeb Programlama

İlk Yorumu Siz Yapın

Bir yanıt yazın

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

nine − 3 =