Leum dhan t-susbaint

Cùl-taic, ath-nuadhachadh gu àm sònraichte agus deuchainn ath-nuadhachaidh

Dèan cùl-taic de Quire, ath-nuadhaich e gu àm sònraichte agus dearbh e le deuchainn ath-nuadhachaidh.

Seall mar Markdown

Tha an dealbhadh ann an earrann 8 de docs/architecture/23-ops.md. Seo stiùireadh obrachaidh airson bathar Docker Compose. Tha e sgrìobhte airson neach nach do sgrìobh e a leantainn; mas e ceum sam bith doilleir a th’ ann, ’s e uireasbhaidh san sgrìobhainn seo a th’ ann.

Na tha air a dhìon agus ciamar

Maoin Ciamar Càite
Stòr-dàta WAL air a thasgadh gu leantainneach, aig a’ char as fhaide gach 60 diog, on chiad tòiseachadh Leabhar pgwal
Stòr-dàta Cùl-taicean bunaiteach le pg_basebackup, làitheil mar bhun-roghainn (backup-scheduler) Leabhar pgbackup
Stòr-dàta Lethbhreacan crioptaichte de na cùl-taicean bunaiteach is WAL gach còig mionaidean (backup-offsite) Stòr air leth a dh’ainmicheas tu
Faidhlichean An leabhar files. Dèan lethbhreac dheth le inneal cùl-taice an aoigh agad no cleachd stòradh nithean le tionndaidhean Leabhar files
Dìomhaireachdan docker/.env, os cionn gach nì QUIRE_MASTER_KEY (agus QUIRE_MASTER_KEY_RETIRED sam bith a tha fhathast ga chleachdadh), QUIRE_BACKUP_ENCRYPTION_KEY agus docker/secrets/audit-signing-key.pem Cùm lethbhreac far an aoigh seo
Clàran-amais lorg, tasgadan, tionndaidhean Cha tèid cùl-taic a dhèanamh dhiubh; thèid an ath-thogail

Targaidean: puing ath-bheothachaidh taobh a-staigh 60 diog bhon fhàilligeadh agus ath-nuadhachadh taobh a-staigh 60 mionaid airson stòr-dàta 500 GB.

Tha dà mhearachd cumanta ann. Bheir stòr-dàta air ath-nuadhachadh gun na faidhlichean aige duilleagan briste. Chan urrainn do stòr-dàta air ath-nuadhachadh gun QUIRE_MASTER_KEY teisteanasan SSO, webhook agus amalachaidh a tha ann a dhì-chrioptachadh; gus an tig cuairteachadh iuchrach-mhaighstir gu crìch gun dad gun fhuasgladh (key-rotation.md), tha na seann iuchraichean a tha air an leigeil dhith nam measg cuideachd. Buinidh an dà chuid don chùl-taic.

Dèan cùl-taicean

Cùl-taic bunasach a’ bhuidhinn gu lèir:

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

Cumaidh e na cùl-taicean bunaiteach as ùire, suas ri QUIRE_BACKUP_KEEP dhiubh (5 mar bhun-roghainn), agus glanaidh e WAL nach eil feumach tuilleadh air an tè as sine gus nach fhàs an tasglann gun chrìoch. Clàraich e gach latha le cron no timer systemd air an aoigh:

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

No leig leis a’ chàrn a chlàradh: ruithidh am pròifil backup backup-scheduler, a nì cùl-taic bunasach gach QUIRE_BACKUP_INTERVAL_HOURS uair a thìde (24 mar bhun-roghainn), agus backup-offsite a tha air a mhìneachadh an ath rud.

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

Lethbhreacan crioptaichte taobh a-muigh an aoigh

Tha an dà leabhar air an aon aoigh ris an stòr-dàta, agus chan e cùl-taic a th’ ann an cùl-taic air inneal a dh’fhàillig. Cuiridh backup-offsite gach cùl-taic bunasach agus gach earrann WAL a chaidh a thasgadh gu stòr eile tro phort an stòraidh, crioptaichte, agus cumaidh e an sin iad fo chumhachan gleidhidh:

  • Crioptachadh. AES-256-GCM le QUIRE_BACKUP_ENCRYPTION_KEY (no faidhle air ainmeachadh le QUIRE_BACKUP_ENCRYPTION_KEY_FILE): 32 baidht, bho openssl rand -hex 32. Tha nonce agus taga dearbhaidh fhèin aig gach faidhle; mar sin chan urrainnear lethbhreac a leughadh gun iuchair, agus thèid atharrachadh sam bith a lorg. Cùm an iuchair còmhla ri QUIRE_MASTER_KEY, fada on aoigh seo agus bhon stòr cùl-taice. Chan urrainnear ath-nuadhachadh às aonais na h-iuchrach.
  • Àite. Tha QUIRE_BACKUP_STORAGE_DRIVER s3, azure no local (diosg iomallach air a chur suas aig QUIRE_BACKUP_STORAGE_ROOT). Is iad roghainnean stòraidh nam faidhlichean le ro-leasachan QUIRE_BACKUP_ na roghainnean aige: QUIRE_BACKUP_S3_ENDPOINT, QUIRE_BACKUP_S3_BUCKET, QUIRE_BACKUP_S3_ACCESS_KEY_ID agus mar sin air adhart. Cleachd bucaid eadar-dhealaichte agus, mas urrainn dhut, cunntas eadar-dhealaichte bho na faidhlichean; bu chòir do theisteanasan sgrìobhadh a cheadachadh ach sguabadh às a bhacadh ma cheadaicheas an solaraiche e.
  • Gleidheadh. Cumaidh e na cùl-taicean bunaiteach as ùire suas ri QUIRE_BACKUP_OFFSITE_KEEP (mar bhun-roghainn QUIRE_BACKUP_KEEP, no 7), agus an WAL a tha a dhìth air an fhear as sine; thèid seataichean is earrannan nas sine a sguabadh às an stòr.
  • Cuin. Gach QUIRE_BACKUP_SHIP_INTERVAL_SECONDS diog (300 mar bhun-roghainn). Tha cur air adhart idempotent: thèid na tha san stòr mar-thà a sheachnadh, agus cha bhi cùl-taic bunasach air a mheas ann gus an tèid a mhanaifest a sgrìobhadh mu dheireadh.

Faodar an aon àithne a ruith le làimh:

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

Gus ath-nuadhachadh air aoigh ùr, thoir seata air ais an toiseach, agus lean na ceuman gu h-ìosal leis an eòlaire a chaidh fhaighinn an àite leabhar pgbackup, agus wal-archive a chaidh fhaighinn an àite pgwal:

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

Ath-nuadhachadh gu àm sònraichte

Cleachd seo an dèidh call dàta: droch ion-phortadh, cùrsa a chaidh a sguabadh às no imrich cùmhnaint a dh’fheumas tu a chur dheth. Cuiridh e an àite an stòr-dàta beò, mar sin cleachd an deuchainn gu h-ìosal ro làimh.

  1. Tagh an t-àm targaid, ann an UTC, dìreach mus do thachair am milleadh: 2026-09-24 09:30:00+00. Mar as trice seallaidh log an sgrùdaidh (/admin/audit) an t-àm.
  2. Cuir stad air a h-uile càil a sgrìobhas: docker compose -f docker/compose.yaml stop web content worker scheduler collab.
  3. Cùm a’ bhuidheann mhillte gus an dearbhar an t-ath-nuadhachadh:
    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. Dì-phacaich an cùl-taic bunasach as ùire ron targaid dhan leabhar dàta agus iarr ath-bheothachadh cuimsichte:
    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. Dèan ath-bheothachadh: tòisich PostgreSQL aon turas leis na roghainnean ath-bheothachaidh, ann an tar-àithne Compose gus am bi am faidhle àbhaisteach gun atharrachadh:
    # 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]
    Cuiridh an tar-àithne an àite na h-àithne air fad, agus mar sin tha i a’ toirt a-steach an dà roghainn air a bheil ath-bheothachadh an urra: max_connections co-dhiù cho àrd ris a’ phrìomh stòr-dàta (air neo thig ath-bheothachadh gu crìch le “insufficient parameter settings”) agus an pg_hba.conf a chaidh a chur suas.
    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. Thoir sùil air mus leig thu le duine clàradh a-steach: sreath an sgrùdaidh le docker compose -f docker/compose.yaml run --rm worker bun tooling/audit-verify/run.ts, agus dèan cinnteach gu bheil an dàta a chaidh a chall air ais.
  7. Till gu àbhaisteas: docker compose -f docker/compose.yaml up -d. Tòisichidh seo PostgreSQL le tasgadh air agus tòisichidh loidhne-ama WAL ùr. Dèan cùl-taic bunasach ùr sa bhad.

Tha ainm a’ phròiseict quire air thoiseach air gach leabhar; seallaidh docker volume ls na dearbh ainmean.

Deuchainn dearbhaidh chlàraichte

Bidh backup-offsite a’ ruith deuchainn gach QUIRE_BACKUP_DRILL_INTERVAL_HOURS (168, gach seachdain mar bhun-roghainn), agus a-rithist aig an ath chuairt an dèidh fàilligeadh. Gheibh e an cùl-taic bunasach as ùire far an aoigh agus gach earrann WAL às a dhèidh, dì-chrioptaichidh e iad (a dhearbhas gun fosgail an iuchair iad fhathast agus nach deach dad atharrachadh), nì e coimeas eadar gach faidhle agus am manifest, sgrùdaidh e gur e pasgan dàta Postgres a th’ anns an tasglann agus dearbhaidh e nach eil beàrn anns an WAL on chùl-taic air adhart. Thèid an aithisg a sgrìobhadh don stòr mar reports/drill-<time>.json agus gu log na seirbheise; ainmichidh deuchainn a dh’fhàilligeas am faidhle no a’ chiad earrann a tha a dhìth.

Deuchainn ath-nuadhachaidh

Chan e cùl-taic a th’ ann an cùl-taic nach deach ath-nuadhachadh a-riamh. Ath-nuadhaichidh an deuchainn an cùl-taic bunasach iomlan as ùire a chaidh a thogail ron targaid, còmhla ri tasglann WAL, ann am pròiseas Postgres sealach nach eil a’ roinn dad ris an fhear bheò, agus dearbhaidh i an toradh:

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

Feumaidh an targaid a bhith ann an UTC anns an dearbh chruth sin. Tha feum air cùl-taic bunasach nas sine agus WAL tasgaichte às a dhèidh: air stàladh ùr, dèan cùl-taic bunasach agus feith ris an ath earrann thasgaidh (mionaid aig a’ char as motha nuair a tha sgrìobhaidhean ann) mus tagh thu targaid an dèidh a’ chùl-taic. Feumaidh an deuchainn Docker agus bash air an aoigh, agus chan eil dad eile.

Fàilligidh an deuchainn aig gach ceum:

  1. Ath-bheothachadh: ath-chluichidh am buidheann sealach chun targaid agus fosglaidh e.
  2. Coileantachd: àireamh shreathan gach clàr an aghaidh an stòr-dàta bheò (tooling/restore-drill). Tha an stòr-dàta beò air gluasad air adhart on targaid; mar sin faodaidh àireamh clàir a bhith eadar-dhealaichte anns an dà rathad leis an luach as motha eadar 500 sreath agus an deicheamh cuid dhen mheud aige (cuiridh sgrìobhaidhean dàil air; cumaidh sguabadh às barrachd san ath-nuadhachadh). Chan e clàr caillte a th’ ann am pàirt a chaidh a chruthachadh an dèidh an targaid. Leudaich an cuibhreann air stàladh nas trainge le QUIRE_DRILL_MAX_BEHIND agus QUIRE_DRILL_MAX_DRIFT_RATIO. Fàilligidh clàr a tha a dhìth no falamh.
  3. Ionracas: thèid sreath-hais an sgrùdaidh a dhearbhadh air an lethbhreac ath-nuadhaichte.
  4. Comas-cleachdaidh: leughaidh dreuchd na h-aplacaid tro thèarainteachd ìre-shreathan.
  5. Ùine: eadar tòiseachadh agus deisealachd, an aghaidh QUIRE_DRILL_RTO_SECONDS (3600 mar bhun-roghainn).

Cha sgrìobh e a-riamh dhan stòr-dàta bheò no dha na leabhraichean aige: tha leabhraichean cùl-taice is WAL air an cur suas le leughadh a-mhàin agus thèid am buidheann sealach a thoirt air falbh aig an deireadh, ge b’ e soirbheachadh no fàilligeadh.

Suidhich QUIRE_DRILL_REPORT gu slighe gus aithisg JSON a sgrìobhadh, soirbheachail no nach eil, agus ruith e a rèir clàr-ama bhon aoigh Docker:

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

Ruith e gach mìos agus mus dèanar gach ùrachadh. Cuiridh deuchainn a dh’fhàillig stad air ùrachadh. Aon turas gach cairteal, iarr air cuideigin nach do sgrìobh an stiùireadh seo ath-nuadhachadh fìor gu àm sònraichte a dhèanamh air aoigh taice, a’ cleachdadh dìreach na sgrìobhainn seo.

Faidhlichean

Tha faidhlichean ionadail anns an leabhar files. Dèan cùl-taic dhiubh còmhla ris an stòr-dàta aig an aon àm, agus ath-nuadhaich an dà chuid còmhla:

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 .

Le stòradh nithean, cuir tionndadh bucaid air agus cùm 35 latha de thionndaidhean nach eil làithreach; ’s e am bucaid fhèin a bheir ath-bheothachadh faidhlichean gu àm sònraichte an uair sin.

Seòladh

Sgrìobh airson lorg…

↑↓ gluais↵ taghEsc dùin