0.4.0 sürümüne yükseltme
Bir cihazı veya Docker Compose kurulumunu 0.3.x'ten 0.4.0'a taşıyın, ilk açılışın şemaya ne yaptığını bilin ve geri almanın neyi geri getirip getirmediğini anlayın.
- Sürüm: 0.4
- Rol: admin_user
- Tür: görev
Her 0.3.x kurulumu 0.4.0'a tek adımda geçer — sürüm, yükseltmenin başlayabileceği en düşük bir sürüm bildirmez. Farklı olan şey, güncellemeyi kimin uyguladığıdır: bir cihaz panelden, bir Docker Compose kurulumu ise kendi ana makinesindeki bir kabuktan güncellenir.
Neye ihtiyacım var?
- Lisans
- Herhangi biri
- Rol
admin_user
Ön koşullar
- İki kurulumdan hangisine sahip olduğunuzu biliyorsunuz: bir cihaz, Ayarlar → System Updates ekranını ve ana makinesinde ayrıcalıklı bir güncelleyiciyi taşır; bir Compose kurulumu ise işletmecinin baktığı bir git çalışma kopyasıdır.
- Cihazın kendi diskinde bulunmayan güncel bir yedek. Bkz. Yedekleme ve geri yükleme.
- Bir bakım penceresi. Geçişler yeni konteynerler başlamadan önce çalışır; bu yüzden hâlâ hizmet veren eski sürüm bunların kilitlerine takılır ve yazma işlemleri bloke olabilir.
- Çevrimiçi yoldaki bir cihaz için: sürüm kanalına HTTPS üzerinden erişebiliyor olması.
- Hava boşluklu bir cihaz için: 0.4.0'ın imzalı .cidupd paketi, tarayıcısı cihaza erişebilen bir makinede.
- Bir Compose kurulumu için: Docker çalıştırma izni olan kabuk erişimi ve temiz bir git çalışma ağacı — update.sh kirli bir ağaçta çalışmayı reddeder.
İlk 0.4 açılışının veritabanınıza yaptığı
DB_SYNCHRONIZE artık varsayılan olarak false değerindedir ve konteyner, bu değer
true olmadığı sürece açılışta geçiş zincirini uygular. Bir cihazda bu sıradan bir
durumdur — şemanın sahibi her zaman sürüm zinciri olmuştur. Bu değişkeni hiç ayarlamamış bir
Compose makinesinde ise bu, ilk 0.4 açılışının şemayı her yeniden başlatmada kendiliğinden yeniden
biçimlendirmeye son vermesi, bunun yerine temeli damgalayıp tüm zinciri çalıştırması demektir —
böyle makinelerin çoğu için bu, yaptıkları ilk geçiş çalıştırmasıdır.
Oradaki bir arıza bilerek ölümcüldür: konteyner, geçiremediği bir şemaya karşı hizmet vermek yerine açılmayı reddeder.
Warning
Otomatik eşitleme, geçişlerin oluşturduğu her dizini ve tetikleyiciyi düşürür; çünkü bunları
hiçbir varlık bildirmez. Eski davranışı DB_SYNCHRONIZE=true ile sürdürmek mümkündür ve bundan
sonrası için desteklenmez.
Yükseltme
Cihazın üzerinde olmayan bir yedek alın
Sanal makineyi kapalıyken anlık görüntüleyin ya da yedekleme ve geri yükleme sayfasında anlatılan dosya düzeyindeki kopyayı alın.
Güncelleyici, bir sürümü uygulamadan hemen önce kendi veritabanı yedeklerini alır —
sıkıştırılmış mantıksal bir döküm ve veri dizininin fiziksel bir anlık görüntüsü; ikisi de
/var/lib/cid/backups altında ve son 14 döküm saklanarak. Bunlar cihazın kendi diskinde
durur ve yalnızca veritabanını kapsar; dolayısıyla bu adımın istediği yedek değil, bir
güncelleme emniyet ağıdır.
Sürümü uygulayın
Çevrimiçi yoldan ya da imzalı paketten cihazı güncelleme sayfasını izleyin.
Sayfa, güncelleyicinin ilerlemesini akıtır ve veritabanınızın boyutu ile gerçekten bekleyen geçiş sayısından türetilmiş bir süre tahmini gösterir.
Ana makine onarımının bitmesini bekleyin
Host repair (ana makine onarımı) kutucuğu geçişlerini uygulanmış olarak bildirene kadar Ayarlar → System Updates (sistem güncellemeleri) ekranında kalın.
0.4.0 ana makine tarafında onarımı getirir: imzalı bir sürüm artık güncelleyicinin yerine geçebilir, systemd birimleri kurabilir ve daha eski bir imajdan kurulmuş bir makinede dağıtım kipini düzeltebilir. 0.3.x'ten gelen bir makinede çalıştırılacak onarımlar vardır ve bunların bazıları uygulanmadan önce güncelleyicinin boşa çıkmasını bekler.
Geri alma neyi geri getirir, neyi getirmez
Geri alma iki kurulumda farklı davranır ve ikisi de bir şema geçişini geri almaz.
| Cihaz | Docker Compose | |
|---|---|---|
| Neyle tetiklenir | Siz, Ayarlar → System Updates (sistem güncellemeleri) ekranından; ya da yeni sürüm sağlık denetimini geçemediğinde kendiliğinden | Sağlık beklemesi zaman aşımına uğradığında update.sh tarafından kendiliğinden |
| Veritabanını geri yükler | Evet, sürüm uygulanmadan önce alınan anlık görüntüden | Evet, çalıştırmanın başında alınan pg_dump dökümünden |
| Önceki imajları geri yükler | Evet | Hayır — günlükleri kalsın diye yeni konteynerler çalışır bırakılır |
| Güncellemeden sonra yazılan veri | Kaybolur | Kaybolur |
Danger
Geri alma, veritabanını güncelleme öncesindeki hâline döndürür. O tarihten sonra kaydedilen oturumlar, tespitler, olay günlüğü kayıtları ve yapılandırma değişiklikleri gider. Geri almayı bozuk bir güncellemeden kurtulmak için yapın; bir yapılandırma hatasını düzeltmek için asla.
Bir Compose kurulumunda kendiliğinden çalışan yol yalnızca veritabanını geri alır; bu yüzden
başarısız bir güncelleme, 0.3.x veritabanına karşı çalışan 0.4.0 imajları bırakır. update.sh
komutunun verdiği 5 çıkış kodunu, elle bitirilmesi gereken bir olay olarak değerlendirin: yazdırdığı
günlükleri okuyun ve ya ileriye doğru düzeltin ya da 1. adımda aldığınız yedekten makinenin tamamını
geri yükleyin.
Doğrulama
- Ayarlar → System Updates (sistem güncellemeleri) ekranı Installed version (kurulu sürüm)
altında 0.4.0'ı gösterir ve Last update (son güncelleme) çalıştırmayı başarılı olarak
bildirir. Bir Compose makinesinde
curl localhost:3000/health200yanıtı verir. - Bekleyen geçiş yoktur. Bir Compose makinesinde
make migration-statushiçbirini listelemez; cihazda ise Host repair (ana makine onarımı) kutucuğu bekleyen ya da başarısız hiçbir geçiş göstermez. docker compose psher konteyneri sağlıklı gösterir ve bunların arasında birhallucination-guardkonteyneri vardır.- Ayarlar → License (lisans) hâlâ katmanınızı ve süre dolumunuzu gösterir. Bir yükseltme lisanslı paketi asla değiştirmez.
- İçinde bir test kişisel verisi bulunan tek bir sohbet isteği gönderin. Filtrelerinize göre maskelenir ya da reddedilir ve tespit Tüm Tespitler ekranında görünür.
Başarısız olursa
Ağ geçidi açılmıyor ve günlük bir geçişin adını veriyor:
Bekleyen geçişler var ve yeni sütunları okuyan sayfalar hata veriyor
Şunları görebilirsiniz: compiled migration(s) have never been applied to this database (derlenmiş geçişler bu veritabanına hiç uygulanmamış) · ürünün geri kalanı çalışırken tek bir sayfa 500 döndürüyor · column does not exist (sütun yok) · relation does not exist (tablo ya da görünüm yok)
Başlamadan önce
Denetimler
- 1
Veritabanına kaydedilmemiş derlenmiş geçişlerin listesini okuyun
tanılama · datastores.postgres.migrationsPending
- 2
Otomatik eşitlemenin kapalı olduğunu doğrulayın; açıkken uygulanmamış bir zinciri doğru görünen bir şemanın arkasına gizler
tanılama · posture.dbSynchronize = false
- 3
Ağ geçidinin yeniden başlamadığını doğrulayın; başarısız olan bir açılış geçişinin olağan sonucu budur
tanılama · containers[nestjs-core].restarts = 3
Nedenler ve düzeltmeler
| Ne zaman ulaşılır | Neden | Açıklama, düzeltme ve doğrulama |
|---|---|---|
| denetim 1 başarısız olduğunda | boot-migration-failed (kritik) | Otomatik eşitleme kapalıyken kapsayıcı giriş noktası, derlenmiş geçiş zincirini her açılışta uygular. Açılmış bir cihazda boş olmayan bir bekleyenler listesi bu nedenle zincirin hiç çalışmadığı değil, o çalışmanın başarısız olduğu anlamına gelir. Ürün ayakta kalır: yalnızca yeni sütunları seçen uçlar 500 döndürür — tek bir sayfanın bozulup geri kalanın sağlıklı görünmesinin nedeni budur. Düzeltme: Başarısız açılışa ait ağ geçidi günlüğünü okuyun ve geçişin uygulanamama nedenini giderin: başka bir bağlantının tuttuğu bir kilit, geçişin yok saydığı bir nesne ya da veritabanı rolündeki bir yetki. Ardından zincirin yeniden çalışması için ağ geçidini yeniden başlatın. Geçişleri uygulanmış göstermek için geçiş geçmişi tablosunu elle düzenlemeyin; sütunlar yine de eksik kalır. Doğrulama: tanılama · datastores.postgres.migrationsPending Bu geçerli değilse: Destek paketini ve başarısız açılışı kapsayan ağ geçidi günlüğünü ekleyin. |
| denetim 2 başarısız olduğunda | synchronize-masking-the-chain (kritik) | Otomatik eşitleme şemayı varlık bildirimlerinden kurar; dolayısıyla tablolar doğru görünürken geçiş geçmişi boş kalır. Sonra her açılış, varlıkların bildirmediği her şeyi düşürür ve bekleyenler listesi hiçbir zaman temizlenmez. Düzeltme: Otomatik eşitlemeyi kapatın ve zincirin uygulanmasına izin verin. Bkz. Veritabanı şeması her açılışta otomatik eşitleniyor. Doğrulama: tanılama · posture.dbSynchronize = false |
| denetim 3 başarısız olduğunda | migration-crashloop (kritik) | Açılış sırasında hata fırlatan bir geçiş ağ geçidini de beraberinde götürür; kapsayıcı yeniden başlar, aynı geçişi dener ve yine başarısız olur. Başka hiçbir şey değişmezken yeniden başlatma sayısı tırmanır. Düzeltme: Kapsayıcıyı durdurun, başarısız olan tek bir açılışın günlüğünü baştan sona okuyun ve yeniden başlatmadan önce hatanın kendisini giderin. Aynı arızanın içine yeniden başlatmak yeni bilgi üretmez. Doğrulama: tanılama · containers[nestjs-core].restarts = 3 Bu geçerli değilse: Destek paketini ve başarısız olan geçişin adını ekleyin. |
Şema dizinlerini kaybetti ya da makine otomatik eşitlemeyle çalışıyordu:
Veritabanı şeması her açılışta otomatik eşitleniyor
Şunları görebilirsiniz: DB_SYNCHRONIZE=true (otomatik şema eşitlemesi açık) · yeniden başlatmadan sonra indeksler kayboluyor · her yeniden açılıştan sonra arama yine yavaşlıyor · şema, hiçbir geçiş olmadan değişiyor
Başlamadan önce
Denetimler
- 1
Etkin otomatik eşitleme ayarını okuyun
tanılama · posture.dbSynchronize = false
- 2
Geçiş zincirinin tümüyle uygulandığını doğrulayın; otomatik eşitleme, uygulanmamış bir zinciri gizler
tanılama · datastores.postgres.migrationsPending
Nedenler ve düzeltmeler
| Ne zaman ulaşılır | Neden | Açıklama, düzeltme ve doğrulama |
|---|---|---|
| denetim 1 başarısız olduğunda | synchronize-enabled (kritik) | Otomatik eşitleme, şemayı her açılışta varlık tanımlarına uydurur; yani varlıkların tanımlamadığı her nesneyi düşürür — geçişlerin oluşturduğu indeksler dahil. Ürün çalışmaya devam eder ve her yeniden başlatmadan sonra yavaşlar; hiçbir şey hata vermediği için kayıp sessizdir. Şemanın sahibi her dağıtımda geçişlerdir; eşitlemeyi yalnızca geliştirici katmanı açar. Düzeltme: Cihazın ortam dosyasında DB_SYNCHRONIZE değerini false yapın ve ağ geçidi kapsayıcısını yeniden başlatın. Bunun üzerine giriş noktası, derlenmiş geçiş zincirini açılışta uygular ve otomatik eşitlemenin kaldırdığı nesneler geri gelir. Sonrasında bekleyen geçiş kalmadığını doğrulayın.Doğrulama: tanılama · posture.dbSynchronize = false |
| denetim 2 başarısız olduğunda | chain-never-applied (kritik) | Otomatik eşitleme açıkken geçiş zinciri hiç çalışmamış olabilir; dolayısıyla kayıtlı geçiş geçmişi, önündeki şemayla örtüşmez. Zinciri uygulamadan eşitlemeyi kapatmak, sahibi hiçbir mekanizma olmayan bir veritabanı bırakır. Düzeltme: Bekleyen geçişleri uygulayın, sonra yeniden başlatın. Geçiş zincirinden eski bir veritabanında, ilk geçiş yeniden çalıştırılmak yerine kaydedilsin diye önce taban alın. Bkz. Bekleyen geçişler var. Doğrulama: tanılama · datastores.postgres.migrationsPending Bu geçerli değilse: Destek paketini ve geçiş durumu komutunun çıktısını ekleyin. |
Cihazın güncelleme sayfası bir arıza ya da 0.0.0 sürümü bildiriyor:
Sistem Güncellemeleri sayfası 0.0.0 gösteriyor ya da güncelleme düğmeleri 500 döndürüyor
Şunları görebilirsiniz: **Sistem Güncellemeleri** sayfası sürümü 0.0.0 olarak gösteriyor · current version 0.0.0 (kurulu sürüm 0.0.0 görünüyor) · güncelleme denetimi 500 döndürüyor · install update → 500 (güncellemeyi kurma eylemi 500 döndürüyor)
Başlamadan önce
Denetimler
- 1
Cihazın bildirdiği ürün sürümünü okuyun
tanılama · appliance.version = "0.0.0"
- 2
Bir güncelleme kanalının yapılandırıldığını doğrulayın
tanılama · appliance.channel
- 3
Sürüm kanalının son denemede yanıt verdiğini doğrulayın
tanılama · appliance.update.channelReachable = true
- 4
Bir güncelleme ya da ana makine onarımı isteğinin ana makine güncelleyicisini beklerken takılı kalıp kalmadığını denetleyin
tanılama · appliance.update.pendingIntent
- 5
Sayfanın sürümün yanında gösterdiği ana makine onarım durumunu okuyun
GET /admin/system-update/host-repair
Nedenler ve düzeltmeler
| Ne zaman ulaşılır | Neden | Açıklama, düzeltme ve doğrulama |
|---|---|---|
| denetim 1 başarısız olduğunda | version-file-missing (uyarı) | Cihaz, kurulu sürümünü imaj derlemesinin yazdığı bir dosyadan okur. Bu dosya yoksa ya da okunamıyorsa sürüm 0.0.0'a geri düşer ve kanal manifestiyle yapılan her karşılaştırma bir sürüm düşürme gibi görünür — sayfanın aynı anda hem 0.0.0 göstermesi hem de güncelleme sunmayı reddetmesi bu yüzdendir. Düzeltme: Ayarlar → Sistem Güncellemeleri üzerinden ana makine onarımını çalıştırın; bu, cihazın sürüm dosyasını yeniden yazar. Ardından sayfayı yenileyin. Ana makine onarımı kullanılamıyorsa sürüm, kurulum programının sonlandırma adımı yeniden çalıştırılarak da geri getirilebilir; bkz. Güncellemeler. Doğrulama: tanılama · appliance.version = "0.0.0" Bu geçerli değilse: Destek paketini ekleyin. Ana makine onarımından sonra da süren bir 0.0.0, imajın sürüm damgası olmadan derlendiği anlamına gelir. |
| denetim 2 başarısız olduğunda | manifest-url-unset (uyarı) | Yapılandırılmış bir sürüm kanalı yoktur, dolayısıyla güncelleme denetiminin getireceği bir manifest de yoktur. API çağrıyı, eksik manifest URL'sinin adını veren bir 400 ile reddeder; sayfa bunu bir yapılandırma uyarısı olarak değil, başarısız bir düğme olarak gösterir. Düzeltme: Güncelleme kanalını Ayarlar → Sistem Güncellemeleri altında ayarlayın. Ağdan yalıtılmış bir cihazda bir URL göstermek yerine çevrimdışı kanalı seçin ve güncelleme paketini yükleyin. Doğrulama: tanılama · appliance.channel |
| denetim 3 başarısız olduğunda | channel-unreachable (uyarı) | Kanal yapılandırılmıştır ama manifest getirilemedi — ad çözümleme yok, dışarı çıkış yok ya da zorunlu olduğu hâlde yapılandırılmamış bir dış vekil var. Getirme hatası, güncelleme uç noktasından 500 olarak görünür. Düzeltme: Kanal ana makinesine dışarıya erişimi düzeltin, ya da cihazı çevrimdışı güncellemeye geçirin. Tanılama anlık görüntüsündeki DNS ve dışarı çıkış yoklamalarını ayrı ayrı okuyun: çözümlemenin başarılı olması HTTPS getirmesinin de başarılı olduğu anlamına gelmez ve yalnızca vekil üzerinden çıkan bir ağ, vekilin açıkça yapılandırılmasını ister. Doğrulama: tanılama · appliance.update.channelReachable = true |
| denetim 4 başarısız olduğunda | updater-daemon-not-running (kritik) | Kuyruğa bir istek alınmış ama onu çalıştıran hiçbir şey yok. Ağ geçidi yalnızca isteği kaydeder; işi ana makinedeki ayrıcalıklı güncelleyici arka plan süreci yapar. Bu süreç çalışmadığında istekler birikir ve sonraki her eylem takılmış ya da başarısız olmuş gibi görünür. Düzeltme: Cihazın ana makinesinde güncelleyici arka plan sürecini başlatın ve kuyruktaki isteğin kuyruk durumundan çıktığını doğrulayın. Çıkana kadar yeni istek eklemeyin; biriken kuyruk arızayı okumayı zorlaştırır. Doğrulama: tanılama · appliance.update.pendingIntent Bu geçerli değilse: Destek paketine ek olarak ana makinedeki güncelleyici arka plan sürecinin kendi günlüğünü ekleyin. |
| denetim 5 başarısız olduğunda | host-agent-absent (uyarı) | Ana makine onarımı uç noktası yanıt veremiyor, çünkü ana makine ajanı envanterini hiç yazmamış. Sayfanın o zaman sürümün yanında gösterecek ana makine tarafı verisi olmaz ve bu birleşim bozuk bir sayfa gibi okunur. Düzeltme: Cihazda ana makine ajanının envanter işini çalıştırın ve sayfayı yenileyin. Cihaz olmayan bir dağıtımda bu beklenen durumdur: orada hiç ana makine ajanı yoktur ve güncelleme sayfası desteklenen yükseltme yolu değildir. Doğrulama: GET /admin/system-update/host-repair |
Cihaz sürüm kanalına erişemiyor:
Güncelleme kanalına cihazdan erişilemiyor
Şunları görebilirsiniz: The update channel host is not reachable from inside the gateway (güncelleme kanalı sunucusuna ağ geçidinin içinden erişilemiyor) · **Check for updates** (güncellemeleri denetle) hiçbir şey yapmıyor · güncelleme denetimi 500 döndürüyor · cihaz hiçbir zaman yeni bir sürüm bulmuyor
Başlamadan önce
Denetimler
- 1
Herhangi bir güncelleme kanalının yapılandırılmış olduğunu doğrulayın
tanılama · appliance.channel
- 2
Kanalın son denemede yanıt verip vermediğini okuyun
tanılama · appliance.update.channelReachable = true
- 3
Cihazın erişmesi gereken sunucular için ad çözümleme sonuçlarını okuyun
tanılama · appliance.dns
- 4
Vekil zorunlu olan bir ağda, giden bir vekilin yapılandırılmış olup olmadığını okuyun
tanılama · appliance.proxy.configured = true
Nedenler ve düzeltmeler
| Ne zaman ulaşılır | Neden | Açıklama, düzeltme ve doğrulama |
|---|---|---|
| denetim 1 başarısız olduğunda | channel-unset (uyarı) | Yapılandırılmış bir sürüm kanalı yoktur; dolayısıyla güncelleme denetiminin alacağı bir manifest de yoktur. API çağrıyı reddeder ve sayfa, bir şey yapılandırmanızı isteyen bir uyarı yerine başarısız olan bir düğme gösterir. Düzeltme: Güncelleme kanalını Ayarlar → Sistem Güncellemeleri altında ayarlayın. Ağdan yalıtılmış bir cihazda bir URL göstermek yerine çevrimdışı kanalı seçin ve imzalı bir paket yükleyin. Doğrulama: tanılama · appliance.channel |
| denetim 2 başarısız olduğunda | channel-blocked (uyarı) | Kanal yapılandırılmıştır ve alma işlemi başarısız olmuştur. Bilinçli olarak ağdan yalıtılmış bir cihazda bu beklenen durumdur ve hiçbir işlem gerektirmez; bağlantılı bir cihazda ise kanal sunucusuna giden HTTPS yolunun engellendiği, denetlendiği ya da cihazda olmayan bir vekili gerektirdiği anlamına gelir. Düzeltme: Tanılama anlık görüntüsündeki dışarı çıkış sonuçlarını okuyun ve başarısız olduğunu varsaydığınız testi değil, gerçekten başarısız olan testi düzeltin. Bkz. Cihaz dışarı çıkamıyor. Cihazın çevrimdışı kalması amaçlanıyorsa, bu hata bir arıza olarak bildirilmeyi bıraksın diye onu çevrimdışı kanala geçirin. Doğrulama: tanılama · appliance.update.channelReachable = true |
| denetim 3 başarısız olduğunda | dns-cannot-resolve-channel (uyarı) | Cihaz kanal sunucusunun adını çözemez; dolayısıyla alma işlemi ağa hiç ulaşmaz. Ad çözümlemenin başka yerde çalışması hiçbir şeyi kanıtlamaz: cihaz tarayıcının değil, bu ağın çözümleyicisini kullanır. Düzeltme: Kanal sunucusu için yanıt veren bir çözümleyici ayarlayın ve denetimi yeniden çalıştırın. Bkz. Ağ ön koşulları. Doğrulama: tanılama · appliance.dns |
| denetim 4 başarısız olduğunda | proxy-missing (uyarı) | Bu sahada her şey bir vekilden geçer ve cihazda yapılandırılmış vekil yoktur; bu nedenle alma işlemi doğrudan denenir ve zaman aşımına uğrar. Zaman aşımı da eksik bir ayar gibi değil, ölü bir kanal gibi görünür. Düzeltme: Cihazda giden vekili yapılandırın ve ayarı yeniden okuması için ağ geçidi kapsayıcısını yeniden başlatın. Doğrulama: tanılama · appliance.proxy.configured = true |
Sonraki adımlar
- 0.4.0'da neler değişti — hiçbir işlem gerektirmeyen davranış değişiklikleri dâhil tam liste.
- Yedekleme ve geri yükleme — bu sayfanın aldığınızı varsaydığı yedek.
- Sıkılaştırma kontrol listesi — büyük bir yükseltmeden sonra işletmeci ayarlarını yeniden gözden geçirin.
Son güncelleme