---
title: "Fasiləsiz yeniləmə"
description: "Öz serverinizdəki Quire-i fasiləsiz yeniləyin."
image: "https://docs.quirelms.com/og.png"
---

> Documentation Index
> Fetch the complete documentation index at: https://docs.quirelms.com/az/llms.txt
> Use this file to discover all available pages before exploring further.

# Fasiləsiz yeniləmə

<span id="upgrading-without-downtime"></span>

Qaydalar `docs/architecture/23-ops.md` sənədinin 7-ci bölməsində və `docs/architecture/07-data.md` sənədinin 4.1-ci bölməsindədir. Bu, yerinə yetiriləcək prosedurdur.

## Təhlükəsizliyi təmin edən zəmanət <!--quire:the-guarantee-that-makes-it-safe-->

**R buraxılışı R sxemi və R-dən bir əvvəlki sxemlə düzgün işləyir.** Hər sxem dəyişikliyi genişləndirmə, keçid və yığışdırma mərhələlərinə bölünür:

1. **Genişləndirmə**: yeni sütun, cədvəl və ya indeks əlavə edin. Köhnə kod ona məhəl qoymur.
2. **Keçid**, ən azı bir buraxılış müddətində: yeni kod hər iki formata yazır, yenisini oxuyur; davam etdirilə bilən tapşırıq köhnə sətirləri doldurur.
3. **Yığışdırma**: köhnə formanı sonrakı, ayrıca buraxılışda silin.

Beləliklə, mərhələli yeniləmənin istənilən anında köhnə və yeni proseslər eyni verilənlər bazasını paylaşa bilir. Geriyə miqrasiya yoxdur: bir saat əvvəl sütunu silən miqrasiya həmin saatda yazılmış sətirləri qaytara bilməz.

`schema-compat` CI işi əvvəlki buraxılışın testlərini yeni sxemə qarşı işlədərək hər buraxılışda bu zəmanəti yoxlayır.

## Başlamazdan əvvəl <!--quire:before-you-start-->

1. Buraxılış qeydlərini oxuyun. Baxım pəncərəsi tələb edən buraxılış bunu təxmini müddətlə bildirir; hər buraxılışda ən çox bir belə hal olur.
2. Bərpa sınağını işlədin və ya bu buraxılış üçün uğurla keçdiyini təsdiqləyin ([backup-restore.md](/az/ops/backup-restore/)). Uğursuz sınaq yeniləməni bloklayır.
3. Əsas ehtiyat nüsxə yaradın: `docker compose -f docker/compose.yaml --profile backup
   run --rm backup`.

## Docker Compose, bir host <!--quire:docker-compose-one-host-->

```sh
export QUIRE_RELEASE=2026.10.0            # or set it in docker/.env
docker compose -f docker/compose.yaml pull   # or build
docker compose -f docker/compose.yaml run --rm migrate
docker compose -f docker/compose.yaml up -d --no-deps web content collab
docker compose -f docker/compose.yaml up -d --no-deps worker scheduler
```

Ardıcıllıq qəsdə əsaslanır:

1. **Əvvəl miqrasiya edin**, köhnə buraxılış trafikə xidmət edərkən. Genişləndirici miqrasiyalar köhnə versiyadan görünmür.
2. **Sonra veb qatı.** SIGTERM gələndə hər web prosesi `/readyz` vəziyyətini `draining` edir, davam edən sorğuları 30 saniyə ərzində tamamlayır, axınları yenidən qoşulma göstərişi ilə bağlayır və çıxır. `stop_grace_period` 40 saniyədir ki, Compose sağlam boşalmanı yarıda kəsməsin.
3. **Ən sonda worker-lər**, beləliklə, ən yeni istehlakçının gözləməsindən əvvəl ən yeni hadisə formatı yaranır. Worker-lər dərhal yeni iş götürməyi dayandırır, 120 saniyə vaxt alır; bitirə bilmədiyi tapşırıq başqa yerdə yenidən götürülür, bu təhlükəsizdir, çünki hər tapşırıq idempotentdir. Scheduler növbəti addımında liderliyi ötürür.

Bir hostda Compose hər konteyneri növbə ilə əvəz edir, buna görə hər xidmət üçün qısa fasilə olur. Heç bir fasilə istəmirsinizsə, web qatını öz proxy-niz arxasında iki konteyner kimi işlədin (ikinci web xidməti əlavə edən, port dərc etməyən override faylı ilə), hər birini ayrı-ayrılıqda yenidən yaradın və növbətiyə keçməzdən əvvəl sağlam olduğunu gözləyin.

## Bir neçə host və ya orkestrator <!--quire:several-hosts-or-an-orchestrator-->

Eyni ardıcıllıqdan istifadə edin: bir işdən miqrasiya edin, sonra web qatını bir artıq və sıfır əlçatmaz nümunə ilə mərhələli yeniləyin, ardınca worker-ləri. Hazırlıq yoxlamalarını `/readyz`, canlılıq yoxlamalarını `/healthz` ünvanına yönləndirin.

Ayrılmış tenant verilənlər bazalarında `migrate` addımı idarəetmə bazasını, sonra `ops.tenant_database` daxilində sadalanan hər bazanı ayrı-ayrılıqda, öz kilidi altında miqrasiya edir. Bir tenant bazasındakı xəta digərlərini dayandırmır. Hamısı tamamlandıqda miqrasiya jurnallarını müqayisə edir və hər bazanın idarəetmə bazası ilə eyni miqrasiyaları tətbiq etmədiyi halda sıfırdan fərqli çıxış kodu ilə çıxır, geridə və ya öndə olan hər bazanın adını bildirir. Eyni əmr hər bazada növbə cədvəllərini quraşdırır, çünki worker sabit tenantın tapşırıqlarını yazıldığı yerdə götürür.

```sh
bun apps/worker/src/migrate.ts   # what the Compose step runs
bun run db:migrate:all                            # the same, from a checkout
```
Adi miqrasiya və ilkin qurulma da `ops.platform_policy_version` cədvəlinə kanonik İngilis dili Quire operator hüquqi sənədlərini quraşdırır. Quraşdırıcı idempotentdir: yalnız itmiş İngilis dili mətnləri və miqrasiya ilə əkildə yaradılmış dəqiq placeholder mətnləri əvəzlənir. Seed-lar arxivlənir və yeni nəşr olunmuş versiya əlavə olunur; tarixi qəbul istinadları və mətnlər saxlanılır. Operatorun həqiqətən yazdığı hər hansı versiya, layihə daxil olmaqla, saxlanılır və platformanın Siyasətlər konsolundan idarə olunmalıdır. Tenant siyasət sənədləri, versiyaları və razılığı bu keçid heç vaxt dəyişdirilmir. Bu, operator mətninin nəşridir, hüquqi təsdiq və ya onun vədlərinin avtomatik icrası deyil.


Hər ayrılmış bazaya qeydiyyatda olduğu adla çatılır. `env:QUIRE_DB_NORTHWIND_URL` kimi qeydə alınmış baza üçün bunlar lazımdır:

| Dəyişən | İstifadəsi |
| --- | --- |
| `QUIRE_DB_NORTHWIND_URL` | Web qatı və worker üçün tətbiq rolu |
| `QUIRE_DB_NORTHWIND_URL_MIGRATOR` | Bu əmr və köçürmələr üçün miqrator rolu |
| `QUIRE_DB_NORTHWIND_URL_SUPERUSER` | İstəyə bağlı: miqrasiyadan əvvəl başlanğıc quruluşu (rollar, sxemlər, köməkçilər) yenidən tətbiq edir |

`_MIGRATOR` bağlantısı olmayan qeydə alınmış baza ötürülmür, xəta kimi göstərilir. İdarəetmə bazası hazır olandan sonra web qatı mərhələli yenilənə bilər. Bir saat geridə qalan tenant bazası xəbərdarlıq, bir gün geridə qalan isə səhifə bildirişi yaradır.

## pgvector <!--quire:pgvector-->

0264 miqrasiyasından etibarən serverdə genişlənmə olduqda kontekst korpusu pgvector HNSW indeksindən istifadə edir; Compose `postgres` xidməti bununla yığılır (`docker/postgres.Dockerfile`). Obrazları dəyişdikdən sonrakı ilk `migrate` superuser başlanğıc quruluşu ilə genişlənməni yaradır, sonra 0264 vektor sütunu yaradır və indeks qurur. Sütunun əlavə edilməsi `app.ai_chunk` cədvəlini eksklüziv kilid altında bir dəfə yenidən yazır, buna görə kontekst sorğuları gözləyir; həmin cədvələ başqa heç nə toxunmur.

pgvector olmayan serverdə 0264 bildiriş jurnalı yazıb heç nəyi dəyişmir, axtarış isə dəqiq qalır. 0.8-dən köhnə pgvector-da sütun və indeks qurulur, lakin genişlənmə yenilənənədək (`alter extension vector update`) axtarış dəqiq qalır, çünki süzgəcli HNSW skanları 0.8-in iterativ skanlarını tələb edir. Sonradan genişlənmə olmayan serverdə aktivləşdirmək üçün onu quraşdırın, başlanğıc quruluşunu yenidən işə salın (və ya superuser kimi `create extension vector`), sonra `quire_migrator` kimi:

```sql
set maintenance_work_mem = '1GB';  -- the HNSW build is much faster in memory
select ops.ai_chunk_enable_vector_index();
```

Əmr idempotentdir və `enabled` və ya `unavailable` qaytarır. Bunu ayrılmış hər tenant verilənlər bazasında da işlədin.

## Geri qaytarma <!--quire:rolling-back-->

**Kodu** geri qaytarmaq həmişə mümkündür: `QUIRE_RELEASE`-i əvvəlki teqə dəyişin və `up -d` işlədin. Buraxılış daxilində sxem hər iki istiqamətdə uyğun olduğundan bu işləyir.

**Sxemi** geri qaytarmaq təklif edilmir. Geri dönməyənlər və bərpa üsulları:

| Geri dönməyən | Bərpa |
| --- | --- |
| Sütunu silən yığışdırma miqrasiyası | Silinmədən əvvəlki ana bərpa nüsxəsini yeni bazaya bərpa edin, çıxarın və birləşdirin |
| Yerində edilən məlumat dəyişikliyi | Eyni üsulla, sonra dəyişiklikdən bəri yazılanları uyğunlaşdırın |
| Göndərilmiş vebhuklar və hadisələr | Silmək yox, kompensasiya hadisələri yaradın |
| Göndərilmiş e-poçt | İnsan sonrakı bildirişi yazır |
| Audit heş zənciri | Heç vaxt yenidən yazılmır; düzəliş qeydi əlavə edilir |

Buna görə yığışdırma miqrasiyası tək göndərilir: bərpanın aydın sərhədi olur.

## Yeniləməni yoxlamaq <!--quire:checking-the-upgrade-->

```sh
docker compose -f docker/compose.yaml ps           # every service healthy
curl -fsS http://localhost:8080/readyz             # ready, and what is configured
docker compose -f docker/compose.yaml logs migrate # the migrations applied
```

Source: https://docs.quirelms.com/az/ops/upgrade/index.mdx
