Duyuru CPalius CMF 1.1.0 "Liman" yayınlandı

slaweally 14.09.2026 21:24 1 replies 23 views

Merhabalar efenim, Liman sürümümüz olan 1.1.0 yayınladık, bu sürümde geliştirmeler yaptık. detayları aşağıdaki gibidir;

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ı

Spoiler

Sign in, like this post, or reply in the topic to reveal this.

Forever CPalius **
Edited by slaweally — 21.09.2026 20:38

Bug Fix sürümü hemen arkasından gönderdik, ufak hatalar canlıda gözlemlendi ve çözüm sağlandı.

1.1.0'ın panelden güncellenmesi canlı bir kurulumda yarıda kaldı. Bu sürüm o hatayı düzeltiyor ve aynı şey bir daha olursa çıkış yolu bırakıyor.

Ne olmuştu

Sebep egzotik değildi: CoreUpdater PHP'nin zaman sınırını kaldırmıyordu, bu yüzden birkaç bin dosya yazılırken max_execution_time'a takıldı.

Zaman aşımı fatal'i yakalanamaz. Dolayısıyla catch bloğundaki geri alma da çalışmadı, ondan sonraki önbellek temizleme de. Geriye yeni dosyalar, eski dosyalar ve ikisini de tarif etmeyen derlenmiş bir konteyner kaldı. Görünen belirti bir constructor imzası hakkında 500 hatasıydı — ki operatöre güncelleme hakkında hiçbir şey söylemez.

Düzeltmeler

  • set_time_limit(0) ve ignore_user_abort(true). İlki işin bitmesini sağlar. İkincisi daha az belli ama aynı derecede önemli: birçok hosting PHP'nin önüne 60 saniyelik bir gateway zaman aşımı koyar; tarayıcı 504 alır ama süreç çalışmaya devam edip işi bitirir.
  • Yarım kalan güncelleme artık kendini tanıtıyor. İlk dosya üzerine yazılmadan önce bir işaret dosyası bırakılıyor: hangi sürüm, hazırlanan dosyalar nerede, yedek nerede, kaç dosya kapsamda. Yarım kalmış bir ağaç dışarıdan teşhis edilebilecek bir şey değildir; güncelleyicinin ne yapmakta olduğunu yazılı bırakması gerekir.
  • Kapanış kancası. Zaman aşımı fatal'inde bile çalışır. İşaret hâlâ duruyorsa kurulum bitmemiştir ve derlenmiş konteyner artık var olmayan bir ağacı tarif eder; onu temizlemek siteyi en azından kurtarma ekranını gösterebilecek kadar açılabilir tutar.
  • Devam et / Geri al. Panel yarım kalan güncellemeyi en üstte, kırmızı kartta gösterir. Devam et hazırlanmış dosyaları yeniden kopyalar — kopyalama tekrarlanabilir bir iş, ve hangi dosyanın indiğini tahmin etmeye çalışan bir devam, düzeltmek için çağrıldığı tutarsızlığı aynen bırakırdı. Geri al yedekteki dosyaları yerine koyar; sürümün eklediği dosyalar ise silinir.
  • Yarım kalan güncelleme, yeni güncellemeyi engeller. Üstüne ikinci bir güncelleme başlatmak, geri dönüşün tek yolu olan yedeği üzerine yazardı.

Yükseltme notları

  • 1.1.0'dan yükseltiyorsanız bu bir yamadır. AACP → Güncellemeler → Dosya yamaları. Altı dosya değişiyor, şema değişikliği yok.
  • Güncellemesi yarıda kalmış bir kurulumdaysanız önce siteyi ayağa kaldırın: 1.1.1 paketini FTP ile üzerine yükleyin, sonra cp-core/var/cache/prod/ klasörünün içini boşaltın (klasör kalsın). Panel açıldığında kurtarma kartı varsa Devam et deyin.
  • Panelden güncellerseniz önbellek temizleme sizin için yapılır.

 

 

Github: https://github.com/CPalius/version/blob/main/releases/1.1.1.md

Forever CPalius **