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
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:
- Genişləndirmə: yeni sütun, cədvəl və ya indeks əlavə edin. Köhnə kod ona məhəl qoymur.
- 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.
- 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
- 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.
- Bərpa sınağını işlədin və ya bu buraxılış üçün uğurla keçdiyini təsdiqləyin (backup-restore.md). Uğursuz sınaq yeniləməni bloklayır.
- Əsas ehtiyat nüsxə yaradın:
docker compose -f docker/compose.yaml --profile backup run --rm backup.
Docker Compose, bir host
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 schedulerArdıcıllıq qəsdə əsaslanır:
- Ə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.
- Sonra veb qatı. SIGTERM gələndə hər web prosesi
/readyzvəziyyətinidrainingedir, 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_period40 saniyədir ki, Compose sağlam boşalmanı yarıda kəsməsin. - Ə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
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.
bun apps/worker/src/migrate.ts # what the Compose step runs
bun run db:migrate:all # the same, from a checkoutAdi 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
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:
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
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
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