---
title: "Uppfærsla án niðritíma"
description: "Uppfærðu sjálfhýsta Quire án niðritíma."
image: "https://docs.quirelms.com/og.png"
---

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

# Uppfærsla án niðritíma

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

Reglurnar eru í `docs/architecture/23-ops.md` kafla 7 og
`docs/architecture/07-data.md` kafla 4.1. Þetta er verklagið.

## Ábyrgðin sem gerir þetta öruggt <!--quire:the-guarantee-that-makes-it-safe-->

**Útgáfa R keyrir rétt gagnvart skema R og skema R mínus eitt.** Hverri
skemabreytingu er skipt í útvíkkun, umbreytingu og samdrátt:

1. **Útvíkkun**: bættu við nýjum dálki, töflu eða vísitölu. Gamli kóðinn hunsar hana.
2. **Umbreyting**, í að minnsta kosti eina útgáfu: nýi kóðinn skrifar bæði formin og
   les það nýja; verk sem hægt er að halda áfram fyllir á gamlar raðir.
3. **Samdráttur**: felldu gamla formið brott, í síðari útgáfu, eitt og sér.

Svo á hverju augnabliki veltandi uppfærslu geta gömul og ný ferli deilt einum
gagnagrunni. Engir niðurflutningar eru til: flutningur sem felldi dálk fyrir
klukkutíma getur ekki skilað aftur röðunum sem skrifaðar voru á þeim tíma.

`schema-compat` CI-verkið athugar ábyrgðina við hverja útgáfu með því að keyra
prófanir fyrri útgáfu gagnvart nýja skemanu.

## Áður en þú byrjar <!--quire:before-you-start-->

1. Lestu útgáfuupplýsingarnar. Útgáfa sem þarf viðhaldsglugga segir það,
   með áætlun; að hámarki einn á hverja útgáfu.
2. Keyrðu endurheimtaræfinguna, eða staðfestu að hún hafi keyrt græn fyrir þessa útgáfu
   ([backup-restore.md](/is/ops/backup-restore/)). Misheppnuð æfing stöðvar
   uppfærsluna.
3. Taktu grunnöryggisafrit: `docker compose -f docker/compose.yaml --profile backup
   run --rm backup`.

## Docker Compose, einn hýsill <!--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öðin er vísvitandi:

1. **Flyttu fyrst**, meðan gamla útgáfan þjónar umferð. Útvíkkunarflutningar
   eru ósýnilegir henni.
2. **Vefþrepið næst.** Við SIGTERM snýr hvert vefferli `/readyz` í
   `draining`, klárar ferli beiðnir innan 30 sekúndna, lokar straumum
   með endurtengingarvísbendingu og hættir. `stop_grace_period` er 40 sekúndur svo
   Compose sker aldrei heilbrigða tæmingu.
3. **Vinnsluvélarnar síðast**, svo nýjasta atburðaformið sé framleitt áður en nýjasti
   neytandinn býst við því. Vinnsluvélar hætta að sækja þegar í stað og fá 120 sekúndur;
   verk sem nær ekki að klára er sótt aftur annars staðar, sem er öruggt því
   hvert verk er samtaka (idempotent). Stýringin afhendir forystuna við næsta
   takt.

Á einum hýsil skiptir Compose út hverjum gámi í einu, svo stutt bil verður
á hverri þjónustu. Fyrir ekkert bil alls skaltu keyra vefþrepið sem tvo gáma bak við
eiginn milliþjón (yfirlýsingarskrá sem bætir við annarri vefþjónustu án
útgefins gáttar), og endurskapa þá einn í einu og bíða þar til hver melder
heilbrigðan áður en sá næsti kemur.

## Flerri hýslar eða stjórntæki <!--quire:several-hosts-or-an-orchestrator-->

Notaðu sömu röð: flyttu einu sinni frá einu verki, veltu síðan vefþrepinu
með einum auka og núll ótiltækum, síðan vinnsluvélunum. Beindu viðbúnaðarkönnunum
að `/readyz` og lífsmörkum að `/healthz`.

Með sérstökum leigjendagagnagrunnum gerir `migrate`-skrefið bæði: það flytur
stjórngagnagrunninn fyrst, síðan hvern gagnagrunn sem talinn er í
`ops.tenant_database`, einn í einu, hvern undir eigin læsingu. Bilun í
einum leigjendagagrunni stöðvar ekki hina. Þegar hver gagnagrunnur er búinn
ber það saman flutningabækurnar og hættir með núll ef ekki að hver gagnagrunnur hefur
beitt nákvæmlega þeim flutningum sem stjórngagnagrunnurinn hefur, og nefnir hvern sem er
á eftir eða á undan. Sama skipun setur upp biðraðartöflurnar í hverjum
gagnagrunni, því vinnsluvélin neytir verka fests leigjanda þar sem þau voru
skrifuð.

```sh
bun apps/worker/src/migrate.ts   # what the Compose step runs
bun run db:migrate:all                            # the same, from a checkout
```
Venjuleg flutningur og fyrsta uppsetning setja einnig upp kanónísk ensk skjöl rekstraraðila Quire í `ops.platform_policy_version`. Uppsetningarforritið er idempotent: aðeins vantandi enskir textar og nákvæmlega þeir tímabundnu textar sem flutningurinn bjó til eru endurnýjaðir. Fræjum er safnað í skjalasafn og ný útgefin útgáfa er sett inn; sögulegar samþykktartilvísanir og textar eru varðveittir. Sérhver ekta útgáfa sem rekstraraðilinn skrifaði, þar með talið drög, er varðveitt og verður að stjórna henni í gegnum Stillingar-stjórnborð vettvangsins. Skjöl, útgáfur og samþykki stefnu leigjanda breytast aldrei við þessi umskipti. Þetta er útgáfa texta rekstraraðilans, ekki lagaleg vottun né sjálfvirk efnd loforða hans.


Hver sérstakur gagnagrunnur er náð í gegnum nafnið sem hann er skráður undir.
Gagnagrunnur skráður sem `env:QUIRE_DB_NORTHWIND_URL` þarf:

| Breyta | Notuð fyrir |
| --- | --- |
| `QUIRE_DB_NORTHWIND_URL` | Forritshlutverkið, fyrir vefþrepið og vinnsluvélina |
| `QUIRE_DB_NORTHWIND_URL_MIGRATOR` | Flutningshlutverkið, fyrir þessa skipun og fyrir færslur |
| `QUIRE_DB_NORTHWIND_URL_SUPERUSER` | Valfrjálst: beitir grunnuppsetningunni aftur (hlutverkum, skemum, hjálparföllum) fyrir flutning |

Skráður gagnagrunnur án `_MIGRATOR`-tengingar er meldur sem bilun,
aldrei sleppt. Vefþrepið getur velt þegar stjórngagnagrunnurinn er búinn.
Leigjendagagnagrunnur sem er klukkutíma á eftir varar; sem er dag á eftir kallar.

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

Frá flutningi 0264 notar jarðtengingarbody (grounding corpus) pgvector HNSW-vísitölu þar
sem þjónninn hefur viðbótina; `postgres`-þjónusta Compose er byggð með
henni (`docker/postgres.Dockerfile`). Fyrsti `migrate` eftir skiptingu
mynda býr til viðbótina í gegnum ofurnotanda-grunnuppsetninguna, og 0264 bætir síðan
við mynduðum vigurdálki og byggir vísitöluna. Það að bæta dálkinum við
endurskrifar `app.ai_chunk` einu sinni undir útilokandi læsingu, svo jarðtengingarbeiðnir
bíða eftir henni; ekkert annað snertir þá töflu.

Á þjóni án pgvector skráir 0264 tilkynningu og breytir engu, og
heimt helst nákvæm. Með pgvector eldri en 0.8 eru dálkurinn og vísitalan
byggð en heimt helst nákvæm þar til viðbótin er uppfærð
(`alter extension vector update`), því síaðar HNSW-leitir þurfa 0.8
ítrekaðar leitir. Til að kveikja á henni síðar á þjóni án hennar skaltu setja upp
viðbótina, keyra grunnuppsetninguna aftur (eða `create extension vector` sem
ofurnotandi), síðan sem `quire_migrator`:

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

Hún er samtaka og skilar `enabled` eða `unavailable`. Keyrðu hana á hverjum
sérstökum leigjendagagrunni líka.

## Bakfærsla <!--quire:rolling-back-->

Bakfærsla **kóða** er alltaf í boði: stilltu `QUIRE_RELEASE` á
fyrra merki og `up -d` aftur. Það virkar því skemað er samhæft
í báðar áttir innan útgáfu.

Bakfærsla **skema** er ekki í boði. Það sem ekki er hægt að afturkalla, og hvernig á að
jafna sig á því:

| Ekki afturkræft | Bati |
| --- | --- |
| Samdráttarflutningur sem felldi dálk | Endurheimtu til tíma fyrir brottfellingu í nýjan gagnagrunn, dragðu út, sameinaðu |
| Gagnabreyting á staðnum | Sama, sameinaðu síðan skrif síðan |
| Sendir vefkrókar og atburðir | Bæturatburðir, aldrei eyðing |
| Sendur tölvupóstur | Manneskja skrifar framhaldið |
| Úttektar-hashkeðjan | Aldrei endurskrifuð; bættu við leiðréttingarfærslu |

Þess vegna kemur samdráttarflutningur einn og sér: endurheimt fær þá hrein
mörk.

## Athuga uppfærsluna <!--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/is/ops/upgrade/index.mdx
