İçeriğe geç

CPalius CMF 1.1.0 "Liman"

Yayın: 2026-09-14 · Kanal: kararlı · Kritik: hayır

Bu sürüm dosyaların nerede durduğu ve nasıl yolculuk ettiğiyle ilgili: yüklenen dosyaların uzak bir hedefe kopyalanması, yedeklerin sunucu dışına çıkarılması, görsellerin bir CDN üzerinden servis edilmesi, ve tek bir dosyanın tam paket indirmeden güncellenebilmesi. Adı buradan geliyor — liman, yükün durduğu ve sevk edildiği yerdir.

Yenilikler

  • Depolama hedefleri (AACP → Bakım → Depolama ve CDN). Amazon S3, Cloudflare R2 ve FTP/FTPS. S3 uyumlu her servis aynı sürücüyle çalışır: MinIO, DigitalOcean Spaces, Backblaze B2. AWS SDK kurulmaz — istekler SigV4 ile doğrudan imzalanır, çünkü üç HTTP fiili için ~90 MB servis tanımı, paylaşımlı hostinge FTP ile yüklenen bir pakette her kurulumda hissedilirdi.

  • Kaydet ve sına, tek düğme. Bir hedef, o anda kayıtlı yapılandırmayla canlı bir yazma denemesini geçmeden kullanılmaz: deneme gerçek bir dosya yazar, geri okur ve siler. Yalnızca listelemeye izin verip yazmayı reddeden bir bucket politikası ya da salt-okunur bir FTP hesabı, bundan daha hafif hiçbir kontrolden geçmez.

  • Medya offload. Yükleme her zaman public/uploads içine yazılır ve sonra seçilen hedefe kopyalanır. Dosyanın aslı bu sunucuda kalır — küçük görseller GD ile diskten üretilir, public/uploads/.htaccess sertleştirmesi baytlarla birlikte bucket'a gitmez, ve dosya yedeği sitenin medyasını içermeye devam eder. Uzak hedef erişilemezse site görselleri kendi diskinden verir.

  • Gece taraması. Yükleme anında gidememiş dosyaları ve küçük görselleri toplar. İmleçle çalışır: her koşu kaldığı yerden devam eder, sona ulaşınca başa döner. Mevcut bir siteyi ilk kez taşırken açılacak ayar budur. Varsayılan kapalı.

  • Site dışı yedekler. Arşiv üretildikten sonra seçilen hedefe yüklenir ve karşıdan geri okunarak doğrulanır. Yerel kopyayı koru kapatıldığında yerel arşiv ancak bu doğrulamadan sonra silinir. Uzakta tutulacak yedek sayısı ayarlanabilir; yerel ve uzak silme iki ayrı düğmedir.

  • Görseller için CDN. Tek ayar, iki kurulumu birden karşılar: adres /uploads bölümünün yerine geçer. Origin'in önündeki bir pull-zone için https://cdn.siteniz.com/uploads, herkese açık bir bucket için https://pub-xxxx.r2.dev. CDN offload'dan bağımsızdır — pull-zone hiçbir yükleme gerektirmez.

  • Dosya bazlı güncelleme (yamalar). Tek bir dosya değiştiğinde, sahadaki kurulumlar kırk megabaytlık bir arşiv indirmeden yalnızca o dosyayı alabilir. Panel, değişecek her dosyayı ve SHA-256 özetini uygulamadan önce listeler.

  • cp:patch komutu. Bekleyen yamayı ve dosya listesini basar; hiçbir şey yazmaz. Uygulamak --apply gerektirir ve etkileşimli oturumda ayrıca onay sorar.

Güvenlik

  • Yama gövdeleri yalnızca CPalius'a ait adreslerden çekilir ve her dosya yazılmadan önce SHA-256 doğrulanır. Biri tutmazsa proje ağacına tek bayt yazılmaz — yarısı uygulanmış bir yama, kimsenin test etmediği bir sürüm karışımı demektir.

  • Bir yama cp-includes/vendor, public/uploads, cp-core/var ve .env dosyalarına yazamaz. Kural, tam güncelleyiciyle paylaşılan tek bir yerde duruyor; iki kopya hâlinde tutulan bir kural er geç ayrışır.

  • Yama, CpVersion.php taşımak zorundadır ve indirilen dosyanın sabiti manifestteki sürümü söylemelidir. Bu olmasaydı 1.1.1 ilan edip 1.1.0 kodu gönderen bir manifest uygulanır, çalışan sürüm yerinde kalır ve aynı yama sonsuza kadar yeniden teklif edilirdi.

  • Hiçbir yama kendiliğinden uygulanmaz. Cron kontrolünden kuruluma giden bir kod yolu yoktur; CSRF korumalı bir form ya da bilinçli bir komut gerekir. Otomatik uygulamak, CPalius GitHub organizasyonunu ele geçirenin sahadaki her kurulumu operatör olmadan ele geçirmesi demek olurdu.

  • Depolama kimlik bilgileri cp_settings içinde şifreli durur (SettingSecretCodec). Ekran sırları geri basmaz; boş bırakılan parola alanı "kayıtlı değeri değiştirme" anlamına gelir.

Düzeltmeler

  • Yüklenen dosyaların URL'i artık tek bir yerde üretiliyor. Önce altı ayrı noktada '/uploads/'.$key yazılıydı; bir CDN, bu cevabın her yerde aynı olmadığı ilk durumdur.

  • cp:backup:create site dışı kopya başarısız olduğunda sıfırdan farklı çıkış kodu döndürüyor. Crontab'dan çalışan bir komutun, yedek hiç ayrılmamışken başarı bildirmesi, operatöre bakmadan geçen bir yıl satar.

Kırılmalar

Yok. Hiçbir ayarın varsayılanı davranış değiştirmez: depolama hedefleri, gece taraması ve CDN kapalı gelir. Bu sürümü kurup hiçbir şeye dokunmazsanız site 1.0.0'daki gibi çalışır.

Yükseltme notları

  • 1.0.0'dan yükseltiliyorsa ek bir adım yok. Şema değişikliği yoktur; yeni ayarlar ilk yazıldıklarında oluşur.
  • Canlıda cp-core/var/cache/prod/ içi boşaltılmalıdır. Symfony prod'da konteyneri kendiliğinden yeniden derlemez; yeni servisler ve yeni cron görevi önbellek temizlenmeden görünmez.
  • Panelden güncellerseniz bu adım sizin için yapılır.

Bilinen kısıtlar

  • FTP hedefi ext-ftp gerektirir. Eklenti yoksa kart bunu peşinen söyler.
  • Bir yama cp-includes/vendor içine yazamaz. Yeni bir bağımlılık gerektiren değişiklik tam sürüm ister.
  • Yamalar zincir hâlinde uygulanır: panel yalnızca çalışan sürümden yükselten yamayı teklif eder. Ara sürümler atlanamaz.
  • Uzak-birincil depolama (dosyanın aslının yalnızca bucket'ta durması) bu sürümde yok; uzak hedef her zaman bir kopyadır.
Son güncelleme: 13.10.2026