---
title: "Veparîstin, sererastkirina bi nokte û ceribandina sererastkirinê"
description: "Quireyê veparîste, bi demekî diyarî ve bide sererastkirinê, û bi ceribandina sererastkirinê piştrîn 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.

# Veparîstin, sererastkirina bi nokte û ceribandina sererastkirinê

<span id="backup-point-in-time-recovery-and-the-restore-drill"></span>

Rêşebeciya `docs/architecture/23-ops.md` beş 8 e. Ev runbooka berhevoka Docker Compose ye. Ji bo ku bi qasî were bikaranîn ji aliyê kesekî ve hatiye nivîsandin ku ne wê nivîsiye; ger gavek neçawaş e, ew eybê vê belgeyê ye.

## Çi tê parastin, û çawa <!--quire:what-is-protected-and-how-->

| Sarvek | Çawa | Li kêyê |
| --- | --- | --- |
| Danegirş | WAL bi tevahiye tê arşîvkirin, bi kêmtirî her 60 deqîqeyek, ji yekem boot ve | volume `pgwal` |
| Danegirş | Veparîstinên bingehî bi `pg_basebackup`, bi veberî rojanek ( `backup-scheduler`) | volume `pgbackup` |
| Danegirş | Kopîyên şifrakirî yên veparîstinên bingehî û WAL, her pênc deqîqeyek (`backup-offsite`) | Danekeke cuda ku tu navdide |
| Dosye | volume `files`. Wê bi amûra veparîstina servera te kopî bike, an hilanîneyeke tiştên nûşeyê bikar bîne | volume `files` |
| Nepûr | `docker/.env`, bi baştir `QUIRE_MASTER_KEY` (û her `QUIRE_MASTER_KEY_RETIRED` ku hê tê bikaranîn), `QUIRE_BACKUP_ENCRYPTION_KEY`, û `docker/secrets/audit-signing-key.pem` | Kopîyeke ji vê serverê derxe biparîzê |
| Indeksên lêgerdinê, cach, rendît | Ne tên veparîstin; tên nûveçêkirin | |

Armanc: nîşaneyekî sererastkirin di 60 deqîqe de ji serneketê, û sererastkirinek di 60 deqîqe de ji bo danegirşekî 500 GB.

Du xeletî hênarin. Danegirşek ku **bê dosyeyan** tê sererastkirin rûpelekî şîştî nîşan dide. Danegirşek ku **bê `QUIRE_MASTER_KEY`** tê sererastkirin nikare têketnaverên SSO, webhook û yekkêşin ku dihêle şifra; heta ku gurîştineke kilîta sereke bê tiştî neçareser temam bibe ([key-rotation.md](/ku/ops/key-rotation/)), ew di qeyda kilîtên bêjestî de tê. Herdu beşeka veparîstinê ne.

## Veparîstinên girtîn <!--quire:taking-backups-->

Veparîstineke bingehî ya tevahî klûterê:

```sh
docker compose -f docker/compose.yaml --profile backup run --rm backup
```

Ew `QUIRE_BACKUP_KEEP` veparîstinên bingehî ya herî nû parastî dike (veberî 5) û WALya ku veparîstina herî kevn naxwaze tê paqijin, ji ber vê arşîv nikare bi beqeya bêdawî mezin bibe. Wê bi cron an timekekî systemd li ser serverê rojanek bide navêrerî:

```cron
15 2 * * * cd /srv/quire && docker compose -f docker/compose.yaml --profile backup run --rm backup >> /var/log/quire-backup.log 2>&1
```

An bila stack wê rabeşîne: profîla `backup` `backup-scheduler` bixebitîne, ku her `QUIRE_BACKUP_INTERVAL_HOURS` (veberî 24) veparîstineke bingehî digire, û `backup-offsite`, ku di peş ve şîrokirî ye.

```sh
docker compose -f docker/compose.yaml --profile backup up -d
```

## Kopîyên şifrakirî ji serverê derve <!--quire:encrypted-off-host-copies-->

Herdu volume li ser heman serverê ya danegirşê ne, û veparîstinek li ser makîneya ku serket veparîstin nîn e. `backup-offsite` her veparîstineke bingehî û her parçaya WAL ya arşîvkirî bi rêkî porta hilanînê biçe danekeke cuda, bi şifrakirin, û wê li wir bi retênsiyonê parastî dike:

- **Şifrakirin.** AES-256-GCM bi `QUIRE_BACKUP_ENCRYPTION_KEY` (an dosye ku `QUIRE_BACKUP_ENCRYPTION_KEY_FILE` navdide): 32 hejmara, ji `openssl rand -hex 32`. Her dosye nonce û etîketa rastînkirinê ya xwe heye, ji ber vê kopîyeke bê kilît nehat dîtin û her guhertin tê şayenkirin. Kilît bi `QUIRE_MASTER_KEY` re biparîzê, derxûn ji vê serverê û derxûn ji daneke veparîstinê. Bê kilît sererastkirin tune.
- **Li kêyê.** `QUIRE_BACKUP_STORAGE_DRIVER` `s3`, `azure` an `local` ye (dîskekî dûr ku di `QUIRE_BACKUP_STORAGE_ROOT` de girêdayî ye). Mîhaz mîhazên hilanîna dosye ne bi pêşgota `QUIRE_BACKUP_`: `QUIRE_BACKUP_S3_ENDPOINT`, `QUIRE_BACKUP_S3_BUCKET`, `QUIRE_BACKUP_S3_ACCESS_KEY_ID`, û wisa. Bucketekî cuda an, ji bo çêt, qeydeke cuda ji dosyan bikar bîne, bi têketnaverên ku dikarin nivîsin lê ne rakin ger dabînker destûr dike.
- **Retênsiyon.** `QUIRE_BACKUP_OFFSITE_KEEP` veparîstinên bingehî ya herî nû (veberî `QUIRE_BACKUP_KEEP`, paş 7) û WALya ku herî kevn wan pêwîst e; kome û parçeyên kevn ji daneke tê rakirin.
- **Dîmeke.** Her `QUIRE_BACKUP_SHIP_INTERVAL_SECONDS` (veberî 300). Şandn bi bixwe ye: ew ku hê hatiye hilanîn tê derxistin, û veparîstineke bingehî tenê gava manifesta wê hatiye nivîsandin, di dawî de, tê hezkirin ji bo hatiye hilanîn.

Heman ferman bi dest bixebite:

```sh
docker compose -f docker/compose.yaml run --rm backup-offsite bun apps/worker/src/backups/main.ts ship
docker compose -f docker/compose.yaml run --rm backup-offsite bun apps/worker/src/backups/main.ts verify
```

Ji bo sererastkirinê li serverekî nû, berê komekî vegerîne, paş gavên jêrîn bişopîne bi pôçika hatiye barkirin di cihê volume `pgbackup` û `wal-archive` ya hatiye barkirin di cihê `pgwal` re:

```sh
bun apps/worker/src/backups/main.ts fetch base-20260924T021500Z /srv/restore
```

## Sererastkirin bi demekî diyarî <!--quire:restoring-to-a-point-in-time-->

Wê ji bo datayên ku kulîlîn bikar bîne: barkevekî nebes, kursek rakekirî, guherdineke contract ku te pêwîst e biguherîne. Wê danegirşa zindî veşarî dike, ji ber vê berê bi ceribandina jêrîn rerast bike.

1. **Dîmeya armancê hilbijêre**, bi UTC, pêş ji zararê: `2026-09-24 09:30:00+00`. Loga denetinê (`/admin/audit`) bi giştî wê demê nîşan dide.
2. **Her tiştî ku nivîsiye rawestîne**: `docker compose -f docker/compose.yaml stop web content worker scheduler collab`
3. **Klûtera zararkirî biparîzê** heta sererastkirinê çawas bibe:
   ```sh
   docker compose -f docker/compose.yaml stop postgres
   docker run --rm -v quire_postgres18-data:/from -v quire_postgres-damaged:/to alpine cp -a /from/. /to/
   ```
4. **Veparîstineke bingehî ya herî nû ku ji armancê kevntr e** vekişîne bo volumeya danayan, û sererastkirineke nîşankirî bixwaze:
   ```sh
   docker run --rm -v quire_pgbackup:/backups:ro -v quire_postgres18-data:/var/lib/postgresql postgres:18-alpine sh -euc '
     base="$(ls -1d /backups/base-* | sort | tail -n 1)"   # or the one before the target
     rm -rf /var/lib/postgresql/18/docker && mkdir -p /var/lib/postgresql/18/docker
     tar -xzf "$base/base.tar.gz" -C /var/lib/postgresql/18/docker
     touch /var/lib/postgresql/18/docker/recovery.signal
     chown -R postgres:postgres /var/lib/postgresql/18/docker && chmod 700 /var/lib/postgresql/18/docker'
   ```
5. **Sererast bike**: Postgres carekê bi mîhazên sererastkirinê bide dest pê, ji overrideyekî Compose ta dosyeke normal neyê derxe:
   ```yaml
   # docker/compose.recover.yaml
   services:
     postgres:
       command: [postgres, -c, "restore_command=cp /var/lib/postgresql/wal-archive/%f %p",
                 -c, "recovery_target_time=2026-09-24 09:30:00+00",
                 -c, recovery_target_action=promote, -c, archive_mode=off,
                 -c, max_connections=200, -c, hba_file=/etc/postgresql/pg_hba.conf]
   ```
   Override fermana tevahî veşarî dike, ji ber vê du mîhazên ku sererastkirin piştgirî dike dixerîne: `max_connections` ne kêmtir ji ya sereke (nebû sererastkirin bi "insufficient parameter settings" tê rakirin) û `pg_hba.conf` ya hatiye girêdan.
   ```sh
   docker compose -f docker/compose.yaml -f docker/compose.recover.yaml up -d postgres
   docker compose -f docker/compose.yaml logs -f postgres   # wait for "database system is ready"
   ```
6. **Çawas bike** berî ku kesek veke: zencîra denetinê (`docker compose -f docker/compose.yaml run --rm worker bun tooling/audit-verify/run.ts`), û ew ku datayên kulîlîn vegerin.
7. **Vegere bi hêsanî**: `docker compose -f docker/compose.yaml up -d`. Ev Postgres bi arşîvkirinê ve dest pê dike, û nûşeyeka WALya nû dest pê dike. Bi tenê veparîstineke bingehî ya nû bibîne.

Navê proyeletê `quire` pêşgota her volume ye; `docker volume ls` navên rast nîşan dide.

## Ceribandiya çawaskirinê ya rabeşkirî <!--quire:the-scheduled-verification-drill-->

`backup-offsite` jî ceribandeke her `QUIRE_BACKUP_DRILL_INTERVAL_HOURS` (veberî 168, hefteyî) bixebitîne, û dîsa di gava piştî yek serket de. Wê veparîstineke bingehî ya herî nû ji serverê derve û her parçaya WAL ji piştî wê vekişîne, her yek şifra dake (ku piştrîn dike ku kilît hê wê veke û tiştek nehatiye biguherîn), her dosye bi manifesta wê veñavîne, çawas dike ku arşîv danegirşekî Postgres e, û çawas dike ku WAL ji veparîstinê ve bêdergebeşî ye. Rapor di daneke de bi navê `reports/drill-<time>.json` û di loga xizmetê de tê nivîsandin; ceribandeke serket dosye an parçaya yekem ku kêm e navdide.

## Ceribandiya sererastkirinê <!--quire:the-restore-drill-->

Veparîstinek ku hê sererast nake veparîstin nîn e. Ceribandin veparîstineke bingehî ya herî nû ya temam ku berî armancê hatiye girîn, bi WAL arşîv re, di Postgreskeke şîno de sererast dike ku bi yê zindî tiştekî tune, û encamê piştrîn dike:

```sh
docker/scripts/restore-drill.sh                                  # to ninety minutes ago
docker/scripts/restore-drill.sh --target "2026-09-24 09:30:00+00"
```

Armanc UTC ye bi heman şîle. Wê veparîstineke bingehî ku ji wê kevntr e û WALya arşîvkirî ku ji wê derdeker pêwîst e: li sazkirinekî nû, veparîstineke bingehî bigire û li bendê parçaya piştîn a arşîvkirî (bi kêmtirî deqîqeyek bi nivîsandin) bisekinîne berî ku ji bo dîmeyekî piştî veparîstinê hilbijêre. Ceribandin Docker û bash ji bo serverê pêwîst dike, tiştî din nî.

Her gav ceribandinê serket dike:

1. **Sererastkarî**: klûtera şîno biçe armancê û veke.
2. **Temamiyê**: hejmara rizên her tabloyê li danegirşa zindî (`tooling/restore-drill`). Danegirşa zindî ji armancê ve çûye, ji ber vê tablek dikare bi mezinahî yekê 500 riz an dehî tejîr xuya bide, bi herdu alîyan (nivîsandin wan dişopînin, rakirin dide wêjîn ku sererastkirin bêtir dihêle); partîsyonek ku piştî armancê hatiye çêkirin tabelekê kulîlî nîn e. Toleransa li sazkirinekî masûl bi `QUIRE_DRILL_MAX_BEHIND` û `QUIRE_DRILL_MAX_DRIFT_RATIO` biguherîne. Tabelekek ku kêm e an vala bûye serket dike.
3. **Rastiyê**: zencîra heşa denetinê di kopîya hatiye sererastkirinê de tê çawaskirin.
4. **Bikaranîn**: rolê nivîsbariyê bi parastina rizê dixwîne.
5. **Dem**: ji destpêkê heta rengê, li gorî `QUIRE_DRILL_RTO_SECONDS` (veberî 3600).

Her tim di danegirşa zindî an di volumeyan wê de nivîsî nake: volume veparîstin û WAL bi xwendiya tenê girêdayî ne û klûtera şîno di qediya de tê rakirin, bi serketin an biserketin.

`QUIRE_DRILL_REPORT` biçe dosyeke ku raporek JSON were nivîsandin, bi serketin an biserketin, û wê ji servera Docker bi rabeşînê bixebitîne:

```cron
30 3 1 * * cd /srv/quire && QUIRE_DRILL_REPORT=/var/log/quire-drill.json docker/scripts/restore-drill.sh >> /var/log/quire-drill.log 2>&1
```

Wê mehekê bixebitîne û berî her nûvekirinê. Ceribandeke serket nûvekirinê digire. Careke her çar meh, bila kesek ku ne wê runbooka nivîsiye sererastkirineke rastîn bi nokte li serverekî vala bide xebitandin, bi tenê bi vê belgeyê re.

## Dosye <!--quire:files-->

Dosyên nexweş di volume `files` de ne. Wê bi danegirşê re, di heman demê, veparîste û herduyan bi hev re sererast bike:

```sh
docker run --rm -v quire_files:/files:ro -v "$PWD":/out alpine tar -czf /out/files-$(date -u +%Y%m%d).tar.gz -C /files .
```

Bi hilanîneyeke tiştên, vêdabeşkirina bucket veke û 35 rojên nûşeyên neçalak biparîzê; sererastkirina bi nokte ji bo dosyan lewra xwe ya bucket e.

Source: https://docs.quirelms.com/ku/ops/backup-restore/index.mdx
