---
title: "Nûvekirin bê dawiya benda"
description: "Quireyê ji aliyê xwe ve bê dawiya benda nûve bike."
image: "https://docs.quirelms.com/og.png"
---

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

# Nûvekirin bê dawiya benda

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

Riyên di `docs/architecture/23-ops.md` beş 7 û `docs/architecture/07-data.md` beş 4.1 de ne. Ev procedûr e.

## Peşdengiya ku ew belaş dike <!--quire:the-guarantee-that-makes-it-safe-->

**Wêşana R bi mîgarê R û mîgara R mînus yekem biçe rast.** Her guhertina mîgarê tê dabeşkirin bi berdezandin, valabin û kêmkirin:

1. **Berdezandin**: ûstûn, tablo an indekseke nû zêde bike. Koda kevn wê nadi ser.
2. **Valabin**, ji kêmtirî ji bo wêşanek: kodê nû herdu şîlê dinivîse û yê nû dixwîne; erengek ku diceribîne rizên kevn tîne paş.
3. **Kêmkirin**: şîla kevn rake, di wêşanekî din ve, bi tenê.

Ji ber vê di her demê nûvekirina bilind de, prosesên kevn û nû dikarin danegirşekî parve bikin. Guhertinên vegerandin tune: guherdinek ku saetekê berê ûstûnek rakiye nikare rizên ku di wê saetê de hatine nivîsandin vegerîne.

Erenga CI ya `schema-compat` peşdengiyê di her wêşanê de bi xebitandina ceribandinên wêşana berê li ser mîgarê nû çawas dike.

## Berî dest pêkê <!--quire:before-you-start-->

1. Tomarkên wêşanê bixwîne. Wêşanekê ku pencereyeke parastinê pêwîst e wê dibêje, bi nirxandinek; bi kêmtirî yek ji bo her wêşanê.
2. Ceribandina sererastkirinê bixebitîne, an piştrîne ku ji bo vê wêşanê bi rengê sabit qedandîye ([backup-restore.md](/ku/ops/backup-restore/)). Ceribandeke serket nûvekirinê digire.
3. Veparîstineke bingehî bike: `docker compose -f docker/compose.yaml --profile backup
   run --rm backup`.

## Docker Compose, serverekî <!--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
```

Rêz qet bikûtî ye:

1. **Berê biguhere**, di gava wêşana kevn trafîk dipeşîne. Guhertinên berdezandin ji wê nedîtin.
2. **Navûpa web paşî.** Bi SIGTERM her proseseke web `/readyz` veke `draining`, daxwazên di nava de di 30 deqîqe de temam dike, streamek bi tîpa girêdanê dide û derdike. `stop_grace_period` 40 deqîqe ye ji ber vê Compose her dem daxistineke sag nakete.
3. **Worker herî dawî**, ta şîla roodûyê ya herî nû berî ku kişîbûya herî nû pêwîst bike bê avakirin. Worker bi tenê bandor dikin û 120 deqîqe digirin; erengek ku nayê temamkirin di cîgeke din de diceribînin, ku belaş e ji ber ku her erengek idempotent e. Planer bi dema xwe pêşvebirî veşîne.

Li serverekê, Compose her konteynerek bi niştekirî veşarî dike, ji ber vê ji bo her xizmetek dergekî kurt heye. Ji bo bêdergebûnî, navûpa web wek du konteyner li paş proxea xwe bixebitîne (doseyeke override ku xizmeta weba duyem bi portekî belavkirî nake zêde dike), û wan carekê veşarî bike, li bendê wê her yek raporkirina sag bisekinîne ber yekê.

## Pir server an orchestrateke <!--quire:several-hosts-or-an-orchestrator-->

Heman rêz bikar bîne: carekê ji erengekî cuda biguherîne, paş navûpa web bi surge yek û unavailable sifir biçe ser, paş worker. Sondên amadebûnê biçe `/readyz` û sondên zindîyê biçe `/healthz`.

Bi danegirşên tenantê yên taybet, gava `migrate` herduyan dike: berê danegirşa kontrolê biguherîne, paş her danegirşek li `ops.tenant_database` vedihîlîne, carekê, her yek bi kilîta xwe. Sernekatek di danegirşek tenantê de neyan nayê rawestîn. Gava her danegirş temam bibe, defterên guhertinê veñave û neadil derdike ger her danegirş bi qet guhertinên ku danegirşa kontrolê biye nebîne, bi navdan her yek ku pêş an paş e. Heman ferman qadên kuyê di her danegirşê de saz dike, ji ber ku worker erengên tenantekî veşartî di kêyê ku hatine nivîsandin bikare.

```sh
bun apps/worker/src/migrate.ts   # what the Compose step runs
bun run db:migrate:all                            # the same, from a checkout
```

Her danegirşê taybet bi navê ku qeyd kirîye tê gihiştin. Danegirşek ku wek `env:QUIRE_DB_NORTHWIND_URL` qeyd kirîye pêwîst e:

| Guhertoy | Ji bo |
| --- | --- |
| `QUIRE_DB_NORTHWIND_URL` | Rolê nivîsbariyê, ji bo navûpa web û worker |
| `QUIRE_DB_NORTHWIND_URL_MIGRATOR` | Rolê migrator, ji bo vê fermanê û ji bo veşartîn |
| `QUIRE_DB_NORTHWIND_URL_SUPERUSER` | Ikhtîyarî: bootstrap (rol, şema, alîkar) dîsa biye berî guhertinê |

Danegirşek qeydkirî bê girêtiya `_MIGRATOR` wek serneket raport dibe, her tim neyê derxistin. Navûpa web dikare biçe ser gava danegirşa kontrolê temam bibe. Danegirşek tenant ku saetekî paş e hişyar dike; bi rojek tê peyam.

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

Ji guhertinê 0264 korpusa bingehî indekseke pgvector HNSW bikar tîne li kêyê ku server ezkê heye; xizmeta `postgres` a Compose bi wê hatiye biafirîn (`docker/postgres.Dockerfile`). `migrate` ya yekem dûpiştî biguherîna wêneyan ezke bi rêkî bootstrap a superuser eszkê çêdike, û 0264 paş ûstûnekî vektoryal ku tê avakirin zêde dike û indekês biafirîne. Zêdekirina ûstûlê `app.ai_chunk` carekê bi kilîtekî tenepêş nûve dike, ji ber vê daxwazên bingehî li bendê wan dîsikînin; tiştî din ê vî tabloyê ne tînin.

Li serverek bê pgvector, 0264 tiştekî tê nivîsandin û tiştek nayê biguherîn, û vegertin rast nîvdeke. Bi pgveyekî kevntr ji 0.8 ûstûl û indekês tên biafirîn lê vegertin heta nûvekirina ezke rast nîvdeke (`alter extension vector update`), ji ber ku lîska HNSW a sûzkirî li lîskên 0.8ê dihêjin. Ji bo çalakirina wê paşî li serverek bê wê, ezke saz bike, bootstrap ji nû ve bixebitîne (an `create extension vector` wek superuser), paş wek `quire_migrator`:

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

Idempotent e û `enabled` an `unavailable` dide vegere. Wê li her danegirşî tenantê taybet jî bixebitîne.

## Vegerandin <!--quire:rolling-back-->

Vegerandina **kodê** her tim berdest e: `QUIRE_RELEASE` bi taga berêtî saz bike û `up -d` ji nû ve bixebitîne. Ew karekî dike ji ber ku mîgar di nava wêşanekê de bi her du alîyan hevpeyman e.

Vegerandina **mîgarê** pêşkêş nake. Çi nikare vegere, û çawa ji wê ve tê sererastkirin:

| Ne vegerandî | Sererastkirin |
| --- | --- |
| Guherdineke contract ku ûstûnek rakiye | Sererastkirina bi dema bi nokte bo berî daxistinê bo danegirşekî nû, hiştartin, hevkêşin |
| Guhertineke datayê li shûn | Heman tişt, paş renskirina nivîsandinên ji wê ve |
| Webhook û roodûyên hatiye şandin | Roodûyên derfetan, her tim ne rakirin |
| E-poşta hatiye şandin | Mirovek dibivîse |
| Zencîra heşa denetinê | Her tim nayê nûvekirin; tiştekî rastîrkirîl tê zêdekirin |

Ji ber vê guhertineke contract bi tenê tê berdan: sererastkirin lewra sînorê pak heye.

## Çawaskirina nûvekirinê <!--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/ku/ops/upgrade/index.mdx
