İçeriğe geç

Güncelleme sistemi

Güncelleme sistemi, bir sitenin kendini yok edebileceği tek parçadır; bu yüzden diğer sistemlerin yaklaşımlarıyla karşılaştırılarak tasarlandı.

Karşılaştırma

Güncelleme nasıl yapılıyor? Dikkat çeken
WordPress Panelden tek tık; çekirdek, eklenti ve tema ayrı Kısmi paket (küçük indirme) var; imza doğrulaması çekirdeğin kendi paketiyle sınırlı
Drupal 11 Kod ve şema ayrı adımlar; değişiklik bir kopyada yapılıp denetimlerden geçer İmza desteği var ama varsayılan olarak atlanır; otomatik veritabanı yedeği yok
Sulu 3 Panel güncelleyicisi yok; composer update ve CI Web süreci kod yazamaz, saldırı yüzeyi en küçük; Composer, CI ve SSH şart
CPalius Panelden tek tık İmzalı manifest, bakım modu, atomik yazma, DB yedeği, otomatik geri alma

CPalius akışı

  1. Sürüm bilgisi doğrulanır: latest.json Ed25519 imzası, süre sonu (30 gün) ve geri düşürme denetimi. Başarısızsa hiçbir şey indirilmez.
  2. Kilit ve bakım modu: iki güncelleme çakışmaz; ziyaretçiler kısa bir 503 sayfası görür.
  3. Veritabanı anlık görüntüsü (db-<sürüm>.sql.gz) alınır.
  4. Dosyalar iki adımda yazılır: önce her biri hedefinin yanına hazırlanır (.cpnew), sonra hepsi kısa bir döngüde rename ile yerine geçer. Hazırlıkta hata olursa canlı dosyalara dokunulmamış olur.
  5. Hata olursa: dosyalar ve veritabanı birlikte geri yüklenir. Süreç ortada ölürse bir sonraki istek public/index.php içinde, çerçeve yüklenmeden önce dosyaları geri alır; veritabanı geri yüklemesi ilk açılan istekte biter.

Sınırlar

  • Geri alma, anlık görüntü ile hata arasında veritabanına yazılan her şeyi siler.
  • Güncelleme sürerken kısa bir 503 sayfası gösterilir.
  • İmzanın 30 günlük süresi vardır; yeni sürüm çıkmazsa elle tazelenir.

Kanallar ve imza yenileme: Kanallar ve imza.

Dosyalardan sonra: cp:update

Yeni sürümün dosyaları yerine geçtiğinde sitenin geri kalanını yeni koda uydurmak UpdateRunner işidir (cp:update komutu ya da panel). Sıra işin kendisidir:

  1. Migration'lar: önce şema; sonrasındaki her şey yeni bir sütuna dayanabilir.
  2. Güncelleme kancaları (update hook): şemanın ima ettiği veri düzeltmeleri.
  3. Modül yükseltmeleri: sürümü ilerleyen her modülün kendi upgrade() işlemi ve yeni numaralı SQL migration dosyaları. Çekirdek artık günceldir.
  4. Yapılandırma içe aktarımı: bildirimsel durum, onu anlayan koddan sonra gelir.
  5. Önbellek yeniden kurulumu: derlenmiş konteyner silinir, AssetMapper özetleri yeniden yazılır. (Paket bir Git anlık görüntüsüdür; public/assets Git'e girmez, bu adım olmazsa yeni içe aktarma girişleri 404 verir.)

Yeniden çalıştırılabilirlik

Her aşama kendi ilerlemesini kaydeder (migration tablosu, kancalar defteri, modül sürüm ayarı). Yarıda kalan bir çalıştırma tekrar çalıştırılabilir: biten iş atlanır, tekrarlanmaz. Bu yüzden güncelleyici güvenle devam edebildiği yerde hataları toplar ve işlemi bırakmaz; kimsenin adını bilmediği bir ara durumda bırakmaktan kaçınır.

Güncelleme kancası yazmak

Migration şemayı değiştirir; kanca veriyi değiştirir ya da DDL'in ifade edemediği her şeyi yapar: bir alan türü değişince düz indeksi yeniden kurmak, bir ayar değerini yeniden yazmak, yeni eklenen sütunu geri doldurmak.

final class BackfillSummaryHook implements UpdateHookInterface
{
    public function id(): string { return 'portal.backfill_summary'; }   // asla değişmez
    public function version(): string { return '2.2.51'; }                 // hangi sürüme ait
    public function description(): string { return 'Fill summary from body'; }
    public function run(): ?string { /* idempotent iş */ return null; }
}

Sözleşme:

  • Kimlik değişmez. "Yapıldı" bilgisi kimliktir; yeniden adlandırmak kancayı ikinci kez çalıştırır.
  • Sürüme bağlıdır. Birkaç sürüm atlansa bile kancalar sürüm sırasıyla uygulanır.
  • Yine de idempotent olmalı. Defter kanca döndükten sonra yazılır; kanca ortasında ölürse bir sonraki denemede tekrar çalışır.

Güncelleme bildirimleri

Çekirdek, modül ve tema güncellemelerini yöneticiler beklemeden görür: core.release_check cron işi 6 saatte bir çekirdek yayın bilgisini, yama bildirimini ve imzalı eklenti kataloğunu yeniler, ardından yeni bir sürüm varsa her yöneticinin bildirim kutusuna (AACP ve Studio'daki çan) "{ad} için yeni sürüm yayınlandı" notunu bırakır. Bildirime tıklayınca ilgili ekran açılır (çekirdek için Güncellemeler, modül ve tema için mağaza).

Aynı sürüm için bildirim bir kez düşer (öğe + sürüm anahtarıyla tekilleştirilir); aynı öğenin daha yeni bir sürümü çıkarsa yeni bildirim gelir. Çekirdekle uyumsuz bir eklenti sürümü bildirilmez. Cron çalışmıyorsa mağaza ve Güncellemeler ekranları eskisi gibi ziyaret anında yeniler; yani bildirim, cron'un düzenli çalıştığı sitelerin bonusudur.

Operatör için

İş Yol
Güncelleme var mı bak AACP → Sistem → Güncellemeler
Komut satırından uygula php cp-core/bin/console cp:update
Önce ne olacağını gör cp:update --dry-run (makine okunur çıktı için --json)
Sorun çıkarsa Önceki dosyalar cp-core/var/update/backup-<sürüm>/ altındadır
Son güncelleme: 13.10.2026