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 backupbackup-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_DRIVERs3, 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 shipdocker 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.
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.
Cuir stad air a h-uile càil a sgrìobhas: docker compose -f docker/compose.yaml stop web content worker scheduler collab.
Cùm a’ bhuidheann mhillte gus an dearbhar an t-ath-nuadhachadh:
docker compose -f docker/compose.yaml stop postgresdocker run --rm -v quire_postgres18-data:/from -v quire_postgres-damaged:/to alpine cp -a /from/. /to/
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'
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:
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 postgresdocker compose -f docker/compose.yaml logs -f postgres # wait for "database system is ready"
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.
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 agodocker/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:
Ath-bheothachadh: ath-chluichidh am buidheann sealach chun targaid agus fosglaidh e.
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.
Ionracas: thèid sreath-hais an sgrùdaidh a dhearbhadh air an lethbhreac ath-nuadhaichte.
Comas-cleachdaidh: leughaidh dreuchd na h-aplacaid tro thèarainteachd ìre-shreathan.
Ù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:
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.