İçeriğe geç

Yedekleme ve bakım

Yedekleme

AACP → Bakım → Yedekleme ekranından (yetki: system.backup.manage) ya da komut satırından yedek alınır:

php cp-core/bin/console cp:backup:create db       # yalnız veritabanı (gzip'li SQL dökümü)
php cp-core/bin/console cp:backup:create files    # dosyalar (zip)
php cp-core/bin/console cp:backup:create full     # veritabanı + dosyalar

Yedekler cp-core/var/backups/ altında saklanır. Dosya adı türü ve zamanı taşır.

Yedeğe girmeyenler

Dosya yedeği bilerek şunları dışarıda bırakır: eski yedekler (cp-core/var/backups/), yeniden üretilebilir önbellek (cp-core/var/cache/), oturum dosyaları, Tailwind derleme klasörü, sayfa önbelleği (public/page-cache/), .git, node_modules ve kullanıcı ev dizini artıkları (.ssh, .config…). Vendor ve public/ dahildir, yani yedekten geri dönüş için ek kurulum adımı gerekmez. Gizli bilgi taşıyabilecek dosyalar da elenir.

Yedek aynı sunucuda ise yedek değildir

Yedeğin sunucuyla aynı diskte durması, kötü bir dağıtıma ve silinmiş bir tabloya karşı koruma sağlar; ama insanların yedeği gerçekte aldığı olaya, yani sunucuyu kaybetmeye karşı değil. Bu yüzden CPalius yedeği sunucudan çıkaran bir gönderici (BackupShipper) sunar. Hedefler medya ile aynıdır: S3 uyumlu, Cloudflare R2 ve FTP; bkz. Medya ve depolama.

Ayar Varsayılan
storage.backup.target off Yedeklerin gönderileceği hedef
storage.backup.prefix cpalius-backups Uzak klasör/ön ek
storage.backup.keep_local açık Gönderimden sonra yerel kopyayı sakla
storage.backup.remote_retention 10 Uzakta en yeni kaç yedek kalsın

İki tasarım kararı bilinmeli:

Hata gürültülüdür. Medya kopyalamada başarısız uzak kopya bir uyarıdır. Yedekte ise istisna olarak operatörün ekranına çıkar. Özelliğin tüm değeri, operatörün çalıştığına inanmasıdır; sessizce on bir ay önce çalışmayı bırakmış bir uzak yedek, hiç olmamasından kötüdür, çünkü bir yıl boyunca bakmamayı satın almıştır.

Yerel kopya en son ve yalnızca kanıtla silinir. 5 GB'lık paylaşımlı barındırmada keep_local = false meşru bir seçimdir, ama "yükle sonra sil" ancak yükleme doğrulanmışsa güvenlidir. Bu yüzden nesne geri okunup doğrulandıktan sonra yerel dosya silinir; 200 dönen ama eksik yazılmış bir PUT tek sağlam kopyayı yok edemez. Ayrıca bir hedef, canlı yazma testinden geçmeden yedek hedefi olarak kullanılmaz.

Gönderilenlerin kaydı bir ayar satırında tutulur (ek tablo/migration gerekmez); dosyaları güncel ama şeması henüz güncellenmemiş bir kurulumda da çalışır.

Geri yükleme

Geri yükleme otomatik bir "tek tık" değildir, bilinçli bir operatör işlemidir:

  1. Bakım moduna alın (core.maintenance_mode).
  2. db yedeğini gunzip ile açıp veritabanına yükleyin (mysql ... < yedek.sql).
  3. files / full yedeğinde dosyaları proje köküne açın.
  4. cp-core/var/cache/prod/ içini boşaltın, cp:doctor çalıştırın.

Güncelleme sırasında alınan otomatik anlık görüntü ve otomatik geri alma için bkz. Güncelleme sistemi.

Sağlık denetimi

cp:doctor (ayrıntı Kurulum sayfasında) bir yedeğin yerini tutmaz ama sessiz bozulmayı yakalar: modül migration'ının oluşturduğunu söylediği tablo gerçekten var mı, rollerde tanımsız yetenek kaldı mı, çeviri anahtarları eşit mi. Düzenli (örneğin her dağıtımdan sonra) çalıştırın.

cp:security:audit güvenlik duruşunu puanlar; bkz. Güvenlik.

Günlükler

AACP → Bakım → Günlükler (system.logs.manage):

Günlük Ne
Uygulama günlüğü Monolog; logging.min_level (varsayılan warning) üstü, logging.retention_days (30) kadar saklanır
Modül karantina günlüğü cp-core/var/log/module_quarantine.log: hata veren hook'lar, modüller
E-posta günlüğü cp_mail_logs; yeniden gönderim, mail.log_retention_days (90)
Denetim kaydı Yönetici eylemleri; audit.retention_days (365)
Güvenlik telemetrisi WAF/giriş olayları; ciddiyete göre 3–90 gün

Eski satırlar zamanlanmış görevlerle (logging.purge, audit.purge) temizlenir. Kalıcı silme system.logs.purge yeteneği ister.

Çöp kutusu

Silinen kayıtlar kalıcı silinmeden önce çöp kutusuna düşer; geri yüklenebilir. Tür başına açma/kapama ve saklama süresi (varsayılan 30 gün) AACP → Bakım → Çöp kutusu'ndan ayarlanır. Ayrıntı: İçerik modeli.

Kurtarma konsolu

Çekirdek asla ölmez ilkesinin son sığınağı: /aacp/recovery. .env içinde bir kurtarma token'ı tanımlıysa (boşsa kapı kapalıdır) çalışır ve veritabanı olmadan açılır. Buradan:

  • Hatalı bir modülü devre dışı bırakabilir,
  • Önbelleği temizleyebilirsiniz.

Hiçbir modüle ya da temaya bağımlı değildir. WAF ve IP yasağı da bu adresi bilerek muaf tutar: kendini yasaklamış operatörün geri dönüş yolu burasıdır.

Token'ı koruyun

Kurtarma token'ı güçlü bir yetkidir: uzun ve rastgele üretin (php -r "echo bin2hex(random_bytes(32));"), paylaşmayın, kullanmadığınız ortamlarda boş bırakın.

Düzenli bakım listesi

Sıklık İş
Her dağıtım sonrası cp:doctor; AACP → Karantina boş mu
Haftalık Yedeğin uzak hedefe gittiğini kontrol edin (son yedek tarihine bakın)
Aylık cp:security:audit; kullanılmayan yönetici hesapları; güncellemeleri uygulayın
Yılda bir Geri yükleme provası: yedekten ayrı bir ortamda siteyi gerçekten ayağa kaldırın

Geri yüklenmemiş bir yedek, yedeklenmiş sayılmaz.

Son güncelleme: 13.10.2026