Plesk sunucumda bulunan yaklaşık 850 adet WordPress tabanlı haber sitesine ortak bir link kodu eklemek istiyorum. Sitelerde farklı WordPress temaları ve eklentiler bulunuyor.
Sunucu erişim bilgileri
- Sunucu IP: [SUNUCU_IP]
- SSH portu: [SSH_PORTU - genellikle 22]
- SSH kullanıcı adı: [SSH_KULLANICI_ADI]
- Kimlik doğrulama: [SSH ANAHTARI / GEÇİCİ ŞİFRE]
- Plesk panel adresi: [PLESK_ADRESİ]
- Sitelerin genel dizini: /var/www/vhosts/
- İşletim sistemi: [Ubuntu / Debian / AlmaLinux vb.]
Eklenecek kod
<a href="[HEDEF_LINK]" title="[LINK_BASLIGI]" target="_blank" rel="noopener">[GORUNECEK_METIN]</a>
Kodu şu konuma ekle:
[FOOTER / BODY KAPANMADAN ÖNCE / HEADER / YAZI İÇERİĞİ SONU / BELİRLİ BİR ALAN]
Temel hedef
Sunucudaki aktif WordPress kurulumlarını otomatik olarak tespit et ve link kodunu bütün sitelere, kullanılan temadan bağımsız olacak şekilde güvenli biçimde ekle.
Tema dosyalarını doğrudan değiştirme. Çünkü tema güncellemelerinde değişiklikler silinebilir ve 850 farklı sitede farklı temalar kullanılmaktadır.
Tercih sırası:
- Her WordPress sitesine ortak bir mu-plugin oluşturmak.
- Gerekirse standart bir özel eklenti kullanmak.
- Tema dosyalarına müdahaleyi yalnızca başka yöntem mümkün değilse değerlendirmek.
Uygulama yöntemi
Her WordPress kurulumunda aşağıdaki dosyayı oluştur:
wp-content/mu-plugins/guvenli-ortak-link.php
mu-plugins klasörü yoksa oluştur.
Eklenti:
- WordPress standartlarına uygun olmalı.
- Kodun ekleneceği konuma göre uygun hook kullanmalı.
- Aynı kodun ikinci kez eklenmesini engellemeli.
- Yönetim panelini etkilememeli.
- AJAX, REST API, cron, RSS ve giriş sayfalarında gereksiz çıktı üretmemeli.
- İstenirse belirli sayfalarda gösterilmemesi için ayarlanabilir olmalı.
- HTML çıktısını merkezi ve kolay değiştirilebilir bir değişkende tutmalı.
- PHP sözdizimi hatası oluşturmamalı.
- WordPress multisite ve normal WordPress kurulumlarını ayırt etmeli.
- Dosya sahipliği ve izinlerini ilgili Plesk aboneliğinin kullanıcısına göre ayarlamalı.
Örneğin kod footer bölümünde gösterilecekse wp_footer hook’unu kullan. Ancak kodun gerçek eklenme konumunu yukarıdaki talebime göre belirle.
Güvenli çalışma kuralları
İlk aşamada hiçbir dosyayı değiştirme.
Önce sunucuyu analiz ederek şu bilgileri raporla:
- Tespit edilen domain sayısı
- Tespit edilen WordPress kurulumlarının sayısı
- WordPress olmayan domainler
- Erişilemeyen veya bozuk WordPress kurulumları
- Multisite kurulumları
- Yazma izni bulunmayan dizinler
- Hangi PHP sürümlerinin kullanıldığı
- Kullanılması planlanan yöntem
- Değiştirilecek veya oluşturulacak dosyalar
Ardından önce sadece 3 test sitesinde uygulama yap:
- [TEST_DOMAIN_1]
- [TEST_DOMAIN_2]
- [TEST_DOMAIN_3]
Test siteleri belirtilmemişse düşük trafik alan 3 site seçme; yalnızca test domainlerinin tanımlanmadığını raporla.
Yedekleme
Her değişiklikten önce:
- Değiştirilecek dosyanın yedeğini al.
- Yedeği tarih ve saat içeren ayrı bir klasörde sakla.
- İşlem günlüğü oluştur.
- Her domain için başarılı veya başarısız durumunu kaydet.
- Geri alma betiği hazırla.
Örnek çalışma dizini:
/root/wp-bulk-link-deployment/
Bu dizinde şunlar bulunsun:
- install.sh
- rollback.sh
- scan-report.txt
- success.log
- failed.log
- backups/
- plugin-template.php
WordPress tespiti
Yalnızca aşağıdaki koşulları sağlayan dizinleri WordPress olarak kabul et:
- wp-config.php mevcut
- wp-content dizini mevcut
- wp-includes/version.php mevcut
Yedek, staging, cache, eski site ve geçici dizinleri yanlışlıkla işleme alma.
Şu tür dizinleri varsayılan olarak hariç tut:
- backup
- backups
- old
- cache
- tmp
- logs
- .trash
- staging
Bir domain altında birden fazla WordPress kurulumu bulunursa hepsini listele fakat ana kurulum olduğu doğrulanmadan değişiklik yapma.
WP-CLI kullanımı
WP-CLI mevcutsa kurulumların doğrulanması ve kontroller için kullan:
wp core is-installed --path="[WORDPRESS_PATH]" --allow-root
Ancak WordPress dosyalarını ilgili abonelik kullanıcısı sahipleniyorsa WP-CLI komutlarını mümkün olduğunca o kullanıcıyla çalıştır.
WP-CLI yoksa yalnızca bu görev için kontrolsüz biçimde sistem geneline paket yükleme. Önce durumu raporla.
Test ve doğrulama
Her test sitesinde işlemden sonra:
- Ana sayfanın HTTP durum kodunu kontrol et.
- Link kodunun HTML kaynakta yalnızca bir kez bulunduğunu doğrula.
- WordPress yönetim panelinin açıldığını kontrol et.
- PHP error loglarını kontrol et.
- Fatal error, warning veya syntax error olmadığını doğrula.
- Masaüstü ve mobil görünümün bozulmadığını kontrol et.
- Cache kullanılıyorsa güvenli şekilde ilgili sitenin önbelleğini temizle.
- Cloudflare veya harici CDN ayarlarını izinsiz değiştirme.
Kod sayfada görünür olacaksa mevcut tasarımı bozmayan minimum CSS kullan. Sabit konumlandırma, popup veya kapatma düğmesi talep edilmediyse ekleme.
Toplu dağıtım
3 test sitesinin sonuçları başarılı olmadan 850 sitenin tamamına geçme.
Toplu işlem betiği:
- Tekrar çalıştırılabilir, yani idempotent olmalı.
- Daha önce kurulan dosyaları algılamalı.
- Aynı linki tekrar tekrar eklememeli.
- Her domaini ayrı ayrı işlemeli.
- Bir sitedeki hata nedeniyle tüm işlemi durdurmamalı.
- Başarısız siteleri ayrı bir log dosyasına yazmalı.
- --dry-run seçeneği sunmalı.
- --domain=example.com ile tek siteye uygulanabilmeli.
- --all parametresi olmadan bütün sitelerde işlem başlatmamalı.
- --rollback veya ayrı bir rollback betiğiyle yapılan değişiklikleri geri alabilmeli.
Örnek kullanım:
bash install.sh --dry-run bash install.sh --domain=example.com bash install.sh --all bash rollback.sh --domain=example.com bash rollback.sh --all
Güvenlik
- WordPress çekirdek dosyalarını değiştirme.
- Aktif tema ve child theme dosyalarını değiştirme.
- Veritabanına gereksiz kayıt ekleme.
- SSH, Plesk veya WordPress parolalarını dosyalara/loglara yazma.
- Mevcut dosya izinlerini toplu şekilde 777 yapma.
- Sunucu güvenlik duvarını değiştirme.
- Plesk servislerini yeniden başlatma.
- Nginx, Apache, PHP-FPM veya MariaDB yapılandırmalarını değiştirme.
- Başka eklentileri devre dışı bırakma.
- Kullanıcı onayı olmadan tüm sitelere dağıtım yapma.
- Sunucuda bulduğun erişim bilgilerini, API anahtarlarını veya parolaları çıktıda gösterme.
Beklenen çıktı
Önce analiz ve dry-run işlemini tamamla. Sonuçta aşağıdaki formatta rapor hazırla:
Toplam domain: Tespit edilen WordPress: WordPress olmayan: Multisite: İşlenebilir site: İzin problemi olan: Test edilen site: Başarılı: Başarısız: Oluşturulacak dosya: Kullanılacak WordPress hook’u: Yedekleme dizini: Rollback yöntemi:
Ayrıca kullanacağın PHP eklenti kodunu ve Bash dağıtım betiğini tam olarak göster. Kodları çalıştırmadan önce PHP ve Bash açısından kontrol et.
Önce yalnızca tarama, planlama, betik hazırlama ve dry-run yap. Açıkça toplu dağıtım talimatı verilmeden 850 sitenin tamamında değişiklik yapma.