---
title: "Backup, famerenana amin'ny fotoana voafaritra ary ny fandinihan'ny famerenana"
description: "Manao backup ny Quire, mamerina azy amin'ny fotoana voafaritra, ary manambara izany amin'ny fandinihan'ny famerenana."
image: "https://docs.quirelms.com/og.png"
---

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

# Backup, famerenana amin'ny fotoana voafaritra ary ny fandinihan'ny famerenana

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

Ny drafitra dia ao amin'ny `docs/architecture/23-ops.md` singa 8. Ity ny toro-dalana ho an'ny rindrina Docker Compose. Natao ho arahina olona tsy nanao izy; raha misy dingana tsy mazava, izany dia fahadisoan'ity dokumenty ity.

## Inona no miaro, ary ahoana <!--quire:what-is-protected-and-how-->

| Zava-tahiry | Ahoana | Ahoana toerana |
| --- | --- | --- |
| Ny data-by | Arsivin'ny WAL mandritra ny fotoana, farany 60 sekondra, avy amin'ny fiaingana voalohany | Tompon'ny `pgwal` |
| Ny data-by | Backup fototra amin'ny `pg_basebackup`, isan'andro amin'ny toe-javatra fototra (`backup-scheduler`) | Tompon'ny `pgbackup` |
| Ny data-by | Sary mampiasa ny backup fototra sy ny WAL, isaky ny dimy minitra (`backup-offsite`) | Tahiry manokana nosoratanao |
| Rakitra | Ny volume `files`. Akatri azy amin'ny fitaovana backup an'ny mpandray anjarao, na ampiasao tahirin-entana misy version | Tompon'ny `files` |
| Teny miafina | `docker/.env`, lehibe indrindra `QUIRE_MASTER_KEY` (sy `QUIRE_MASTER_KEY_RETIRED` mbola ampiasaina), `QUIRE_BACKUP_ENCRYPTION_KEY`, ary `docker/secrets/audit-signing-key.pem` | Tazomina kalitao etsy amin'io mpandray anjara io |
| Index fitadiavana, cache, endrika | Tsy backup; averina amoronina | |

Tetibola: toeram-pamerenana ao anatin'ny 60 sekondra aorian'ny fahadisoana, ary famerenana ao anatin'ny 60 minitra ho an'ny data-by 500 GB.

Misy fahadisoan-kasokajy roa. Ny data-by mamerina **tsy misy ny rakitriny** dia manao pejy simba. Ny data-by mamerina **tsy misy `QUIRE_MASTER_KEY`** dia tsy afaka manala mombamomba alefa SSO, webhook sy fampifandraisana misy azy; mandraaka vita ny fanavaozana kiteny lehibe tsy misy tsy voavaha ([key-rotation.md](/mg/ops/key-rotation/)), dia ao anatiny koa ny kiteny voavelana. Roa ireo ao anatin'ny backup.

## Fanatahana backup <!--quire:taking-backups-->

Backup fototra an'ny cluster manontolo:

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

Mitazona ny backup fototra vaovao indrindra `QUIRE_BACKUP_KEEP` (5 amin'ny toe-javatra fototra) ary manala ny WAL tsy ilain'ny taloha intsony, ka tsy afaka mitombo ampy ny arsiny. Atao isan'andro amin'ny cron na timer systemd ao amin'ny mpandray anjara:

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

Na avelao ny stack no mametraka azy: ny `backup` profile dia miasa amin'ny `backup-scheduler`, izay manao backup fototra isaky ny `QUIRE_BACKUP_INTERVAL_HOURS` (24 amin'ny fototra), ary ny `backup-offsite`, lazaina ambany.

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

## Sary mampiasa avy any ivelany amin'ny mpandray anjara <!--quire:encrypted-off-host-copies-->

Misy ao amin'ny mpandray anjara mitovy amin'ny data-by ny volume roa, ary tsy backup ny ao amin'ny solosaina nisy ny fahadisoana. Ny `backup-offsite` dia manakatra ny backup fototra tsirairay sy ny segmentin'ny WAL arsivina tsirairay mankany amin'ny tahiry manokana amin'ny alàlan'ny akanjon'ny tahirina, mampiasa, ary mitazona azy ireo eo amin'ny fotoana tahirizana:

- **Fampiasana.** AES-256-GCM amin'ny `QUIRE_BACKUP_ENCRYPTION_KEY` (na ny rakitra nosoratan'ny `QUIRE_BACKUP_ENCRYPTION_KEY_FILE`): 32 octet, avy amin'ny `openssl rand -hex 32`. Misy nonce manokana sy etiketa fanamarinana isaky ny rakitra, ka tsy azo vakiana sary raha tsy misy ny kiteny ary hita ny fanovana azy rehetra. Tazomina amin'ny `QUIRE_MASTER_KEY` ny kiteny, lavitra an'io mpandray anjara io sy lavitra an'ny tahiry backup. Tsy misy famerenana raha tsy misy ny kiteny.
- **Ahoana.** Ny `QUIRE_BACKUP_STORAGE_DRIVER` dia `s3`, `azure` na `local` (karatra lavitra voarakitra ao amin'ny `QUIRE_BACKUP_STORAGE_ROOT`). Ny filàlana dia ny filàlana tahirin-rakitra misy rambe `QUIRE_BACKUP_`: `QUIRE_BACKUP_S3_ENDPOINT`, `QUIRE_BACKUP_S3_BUCKET`, `QUIRE_BACKUP_S3_ACCESS_KEY_ID`, sns. Ampiasao bucket hafa ary, raha azo atao, kaonty hafa amin'ny rakitra, amin'ny mombamomba alefa afaka manoratra fa tsy manala raha mamerina izany ny mpanome.
- **Fotoana tahirizana.** Ny `QUIRE_BACKUP_OFFSITE_KEEP` vaovao indrindra (aorian'ny `QUIRE_BACKUP_KEEP`, na 7 raha tsy misy) ary ny WAL ilain'ny taloha indrindra aminy; esorina ao amin'ny tahiry ny vondrona sy segmentin'ny taloha.
- **Ahoana.** Isaky ny `QUIRE_BACKUP_SHIP_INTERVAL_SECONDS` (300 amin'ny fototra). Idempotenty ny fandefasana: tsy atehirizina ny efa tahirizina, ary tsy hita ho tahirizina ny backup fototra raha tsy voasoratra farany ny manifestiny.

Fehezanteny mitovy no alefa tanteraka:

```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
```

Hanamora amin'ny mpandray anjara vaovao, alaina voalohany ny vondrona, avy eo arahao ny dingana ambany amin'ny rakitra alefan'ny toeran'ny volume `pgbackup` ary ny `wal-archive` alefan'ny toeran'ny `pgwal`:

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

## Famerenana amin'ny fotoana voafaritra <!--quire:restoring-to-a-point-in-time-->

Ampiasao izany aorian'ny fahantran-karena: fampidirana diso, fampianarana nofoana, fiovana fanaprahana tokony ho afoana. Manolo ny data-by miasa izany, ka jereo aloha amin'ny fandinihana ambany.

1. **Safidio fotoana fototra**, amin'ny UTC, tsy very alohan'ny fahadisoana: `2026-09-24 09:30:00+00`. Matetika mampiseho ny fotoana ny lakon'ny fitsarana (`/admin/audit`).
2. **Ajeno ny rehetra manoratra**: `docker compose -f docker/compose.yaml stop web content worker scheduler collab`
3. **Tazomina ny cluster simba** mandraaka fanamarinana ny famerenana:
   ```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. **Sokafy ny backup fototra vaovao talohan'ny fotoana fototra** ao amin'ny volume data, ary angataho famerenana voafaritra:
   ```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. **Mamerena**: manomboka ny Postgres iray amin'ny filàlana famerenana, avy amin'ny override Compose ka tsy voanova ny rakitra fototra:
   ```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]
   ```
   Manolo ny fehezanteny manontolo ny override, ka mamerina ny filàlana roa iainan'ny famerenana: `max_connections` tsy ambany kokoa no an'ny voalohany (raha tsy izany, dia misakana ny famerenana amin'ny "insufficient parameter settings") ary ny `pg_hba.conf` voarakitra.
   ```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. **Jereo aloha** alohan'ny handefasana olona: ny rindrin'ny fitsarana (`docker compose -f docker/compose.yaml run --rm worker bun tooling/audit-verify/run.ts`), ary ny data very dia miverina.
7. **Miverina amin'ny fomban'ny fahazotana**: `docker compose -f docker/compose.yaml up -d`. Izany dia manomboka indray ny Postgres misy ny arsivana, ary manomboka daty vaovao ny filan'ny WAL. Manao backup fototra vaovao haingana.

Ny anaran'ny tetikasa `quire` eo ambonin'ny volume tsirairay; ny `docker volume ls` dia mampiseho ny anarana marina.

## Ny fandinihana famaritana mirakina <!--quire:the-scheduled-verification-drill-->

Ny `backup-offsite` dia alefa koa fandinihana isaky ny `QUIRE_BACKUP_DRILL_INTERVAL_HOURS` (168 amin'ny fototra, isan-kerinandro), ary indray amin'ny fandehana manaraka raha diso iray. Maka ny backup fototra vaovao avy any etsy sy ny segmentin'ny WAL rehetra manaraky azy, manala fampiasana ny tsirairay (izay manambara fa mbola misokafa azy ny kiteny ary tsy niova na inona na inona), mampitaho ny rakitra tsirairay amin'ny manifestiny, mijery raha directory data Postgres ny arsiny, ary mijery raha misy fijanonana ny WAL avy amin'ny backup mankany. Aseho ao amin'ny tahiry ny tatitra ho `reports/drill-<time>.json` ary ao amin'ny log an'ny serivisy; ny fandinihana diso dia manambara ny rakitra na ny segmentin'ny voalohany very.

## Ny fandinihan'ny famerenana <!--quire:the-restore-drill-->

Tsy backup ny backup tsy mody namerena mihitsy. Mamerina ny backup fototra feno vaovao indrindra natao alohan'ny fotoana fototra, miaraka amin'ny arsin'ny WAL, ao amin'ny Postgres fandinihana tsy mizara na inona na inona amin'ny miasa, ary manamara ny vokany:

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

UTC amin'ny endrika izy io mihitsy ny fotoana fototra. Mila backup fototra taloha kokoa azy ary WAL arsivina manaraky azy: amin'ny fampidirana vaovao, manao backup fototra ary miandry ny segmentin'ny arsivina manaraka (farany minitra iray raha misy fanoratana) alohan'ny famintinana fotoana fototra manaraky ny backup. Mila Docker sy bash ao amin'ny mpandray anjara ny fandinihana, tsy misy hafa.

Isaky ny dingana no afaka manakana ny fandinihana:

1. **Fahafahana mamerena**: mamerena amin'ny fotoana fototra ary misokatra ny cluster fandinihana.
2. **Fahatanterahana**: isakin-taratry ny takelaka tsirairay amin'ny data-by miasa (`tooling/restore-drill`). Niova ny data-by miasa avy eo amin'ny fotoana fototra, ka mety misy sampana 500 toerana na fahatelon'ny habeny, eo amin'ny felana roa (ny fanoratana dia manakana azy, ny fanalana dia mahatonga ny famerenana hisy be kokoa); ny seza namorona aorian'ny fotoana fototra dia tsy takelaka very. Ampitombo ny fahalemena amin'ny fampandrafiana be kokaka amin'ny `QUIRE_DRILL_MAX_BEHIND` sy `QUIRE_DRILL_MAX_DRIFT_RATIO`. Manakana ny takelaka very na foana.
3. **Fahamarinana**: marinina ny rindrin'ny hash an'ny fitsarana amin'ny sary mamerina.
4. **Fahafahana ampiasaina**: mamaky amin'ny alàlan'ny fiarovana isakin-tseza ny andraikin'ny fampiharana.
5. **Fotoana**: avy amin'ny fanombohana ka hatramin'ny tsara, amin'ny `QUIRE_DRILL_RTO_SECONDS` (3600 amin'ny fototra).

Tsy manoratra mihitsy ao amin'ny data-by miasa na ny volume any: mamaritra famakarana ihany ny volume backup sy WAL ary esorina ny cluster fandinihana a farany, na vita na tsy vita.

Metrahana `QUIRE_DRILL_REPORT` amin'ny laza hanoratana tatitra JSON, na vita na tsy vita, ary alefa azy mirakina avy amin'ny mpandray anjara Docker:

```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
```

Alefa isan-velona ary alohan'ny fanavaozana tsirairay. Manakana ny fanavaozana ny fandinihana diso. Isaky ny efatra volana, angataho olona tsy nanao ity toro-dalana ity hanaovana famerenana tena fotoana voafaritra amin'ny mpandray anjara feno, ampiasaina ity dokumenty ity ihany.

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

Misy ao amin'ny volume `files` ny rakitra anaty. Backup azy miaraka amin'ny data-by, amin'ny fotoana mitovy, ary mamerena roa amin'ny telo:

```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 .
```

Amin'ny tahirin-entana, apetraho ny version an'ny bucket ary tazomina 35 andro ny version tsy ankehitriny; ny famerenana amin'ny fotoana voafaritra ho an'ny rakitra dia ny an'ny bucket avy eo.

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