Çok fazla WordPress web sitesi açma ihtiyacımız oluyor. WordPress için Docker Container (Konteyner) kullanmaya başladım. Eskiden yaşadığımız bazı problemler ve zorluklar bu şekilde ortadan kalktı.
Kubernetes, konteyner çalıştırmak için güzel bir çözüm ama daha kompleks ve daha büyük yatırım gerektiriyor. Ben basit bir çözüm olarak podman kullanıyorum. podman’i Oracle Linux üzerinde çalıştırıyorum. Güvenliğe önem verdiğim için podman komutlarını root yetkisi ile çalıştırmıyorum. rootless podman çözümünü tercih ediyorum. Her bir WordPress sitesi için ayrı bir Linux kullanıcı hesabı açıp WordPress ve MariaDB konteynerlerini bu hesapların içinden çalıştırıyorum.
WordPress ve MariaDB konteynerlerinin birbirine ağ üzerinden ulaşabilmesi gerekiyor. podman networkBackend olarak netavark kullanıyorum. Konteynerlerin isim ile birbirini tanıması için de aardvark-dns paketini kullanıyorum. Bu çözümün güzel tarafı WordPress konteyneri MariaDB konteynerine isim ile bağlanabiliyor. IP adres aramak zorunda kalmıyorum.
Kullanıcı hesabının içinde MariaDB ve WordPress konteynerleri için ayrı ayrı dizinler açıp, konteyner çalışmaya başladığında bu dizinlerin konteyner içinde ilgili yerlere bağlanmasını (mounting) sağlattırıyorum. Böylece konteyner kapanıp yeniden açıldığında veritabanı verileri ve WordPress dosyaları kaybolmuyor.
Dışarıdan web sitesine bağlanılmak istendiğinde gelen paketleri Linux üzerindeki HAProxy karşılıyor. HAProxy aynı zamanda sınırlamalar da getiriyor. Gelen pakete izin verilecekse, paket arkada çalışan konteyner içindeki web sunucuya iletiliyor.
Linux sistem kapatılıp açılırsa konteynerlerin otomatik olarak başlaması için systemd’nin kullanıcıya özel servis çalıştırma özelliğinden faydalanıyorum. Bu sayede her bir kullanıcı root yetkisine ihtiyaç duymadan servislerini başlatıp durdurabiliyor ve sistem açılırken başlamasını sağlattırıyor. Sistem açılırken konteynerlerin başlatılması için lingering özelliği gerekiyor. Lingering sayesinde kullanıcı sisteme giriş yapmamış olsa bile servis başlatılabiliyor.
WordPress’i konteyner olarak çalıştırınca farklı PHP versiyonlarını denemek çok kolay oluyor. İlgili konteyneri indirdikten sonra diğer konteyner durdurulup aynı podman seçenekleri kullanılarak yenisi başlatılabiliyor.
Konteyner kullanırken tag olarak latest ifadesi bana kullanışsız geliyor. Onun yerine ben tag kısmında versiyon yazılı olarak kullanmayı tercih ediyorum. Bazı ayarlarda değişiklik gerekebildiği için ayarları değiştirerek yeni konteyneri oluşturunca bunu tekrar kolayca kullanabilmek için kendi oluşturduğum container registry içine koyuyorum. Kullanmam gerektiğinde kendi registry’imden çekip çalıştırıyorum.
Konteyner olarak WordPress çalıştırmanın en güzel tarafı aynı Linux sistemi üzerindeki web siteleri farklı PHP versiyonlarını kolaylıkla kullanabiliyor. Sistem kaynak kullanımı yine minimum oluyor ama siteler birbirinden yalıtılmış bir şekilde çalışıyorlar.