Преминете към основното съдържание

Архивиране и възстановяване

LOSPOR Hospital 1.2 създава удостоверен обект за възстановяване на PostgreSQL на всеки четири часа. Завършеният обект е частна папка с име backups/lospor-YYYYMMDDTHHMMSSZ-RANDOM.backup, която съдържа архива на базата и манифест, публикуван последен. Манифестът свързва хеша на архива с болницата, системата, версията на Hospital, версиите на обменния договор и речника, основната версия на PostgreSQL, миграциите, схемата и отпечатъците на клиничните ключове, точната стойност на OMOP_PSEUDONYM_SALT и ключа за запечатване на външния ИИ. Той не съдържа тайни или данни за пациенти и се удостоверява с отделен HMAC ключ.

Пазят се всички проверени обекти за 48 часа, а след това по един проверен обект за всеки UTC ден в продължение на 14 дни. Копията преди обновяване, преди възстановяване и изрично неизменяемите копия не се изтриват от обичайното почистване. Почистване има само след ново проверено или безопасно повторно използвано копие; неуспешен архив никога не изтрива по-стара точка за възстановяване. Свободното място се проверява преди pg_dump, а манифестът се публикува едва след успешна проверка на каталога, контролната сума, схемата и миграциите.

Целевата загуба на данни при бедствие е до четири часа. Архивиране на WAL и възстановяване до произволна транзакция (PITR) не са част от appliance.

Език на операторските съобщения​

backup-now.sh, ensure-backup-configuration.sh и restore-backup.sh показват указанията и грешките на езика на системата, избран чрез LOSPOR_DEFAULT_LOCALE (по подразбиране български). Външен техник може да избере английски само за една команда, без да променя настройката на системата, например:

sudo env LOSPOR_DEFAULT_LOCALE=en sh /opt/lospor-hospital/current/scripts/backup-now.sh

Превежда се само обяснителният текст. Устойчивите резултати и означения за възстановяване като BACKUP_BUSY, BACKUP_MAINTENANCE_BUSY, RESTORE_PREFLIGHT_OK, NEEDS_OPERATOR, точните потвърждения TEMPORARY RESTORE / EMERGENCY RESTORE, имената на променливите, етапите на журнала, пътищата и командите остават еднакви на двата езика.

Копие извън сървъра и защитено съхранение на ключовете​

Локалното копие не е достатъчно при бедствие. Файлът secrets/backup/offhost-copy е неутрален към доставчика изпълним механизъм, който получава пътя до всеки проверен обект. Първоначалният файл завършва с код 75 („отложено“) и никога не твърди невярно, че има външно копие. Болничният ИТ екип може да го замени със свой механизъм за шифровано прехвърляне. Код 0 означава, че точно този обект е трайно потвърден; 75 го отлага; всеки друг код означава грешка. LOSPOR записва само безопасни данни: име на обекта, време на потвърждението и хеш на манифеста в .last-offhost-verified.v1.

Шифровани копия извън сървъра​

Системата може сама да прави тези копия в мрежова папка, монтирана на сървъра (SMB или NFS), или на SFTP сървър. Таймер проверява на всеки 15 минути. Всеки нов проверен архив се шифрова на сървъра (AES-256, с HMAC-SHA256 върху името на обекта, хеша на манифеста и шифрования текст) и се копира на мястото. След това се прочита обратно и се сравнява, и едва тогава се записва в .last-offhost-verified.v1. Настройва се от Поддръжка в Status или от конзолата.

За споделена папка болничният ИТ екип първо я монтира в /mnt, /media или /srv. Адаптерът отказва път, който е само обикновена локална папка. Пример за SMB в /etc/fstab, с паролата във файл с данни за достъп, достъпен само за root (редове username=, password=, domain=, права 0600, инсталиран пакет cifs-utils):

//fileserver.hospital.local/lospor-backups /mnt/lospor-backups cifs credentials=/etc/lospor-backups.cred,uid=0,gid=0,file_mode=0600,dir_mode=0700,nofail,_netdev 0 0

За SFTP настройката създава SSH ключ на системата и закрепва ключовете на сървъра. Инсталирайте показания публичен ключ за SFTP потребителя и проверете показаните отпечатъци на ключовете с администратора на сървъра. Вход с парола не се поддържа.

sudo losporctl backup offhost configure mount /mnt/lospor-backups
sudo losporctl backup offhost configure sftp backup.hospital.local 22 lospor lospor-backups
sudo losporctl backup offhost test
sudo losporctl backup offhost run
sudo losporctl backup offhost drill
sudo losporctl backup offhost state

test записва пробен файл, прочита го обратно и го изтрива. drill изтегля най-новото потвърдено копие, проверява удостоверяването му, дешифрова го и го възстановява във временна база данни, след което го премахва. Това е тримесечното възстановяване от действителния външен носител, описано по-долу. Ключът за шифроване е secrets/backup/offhost-encryption.key. Той се създава веднъж и никога не се сменя, защото е нужен за всяко копие. След първата настройка съхранете отново secrets/ в сейфа: дотогава Status отчита потвърждението за съхранение като неактуално. Задържането на копията на мястото се определя от болничния ИТ екип.

Болницата трябва да съхранява защитено site.env, .env (включително точния OMOP_PSEUDONYM_SALT на инсталацията), цялата папка secrets/ (включително secrets/backup/manifest-hmac-key и secrets/api/external-ai-seal-key) и проверените архиви в отделна шифрована система извън виртуалната машина и нейното хранилище. Следете отделно възрастта на локалното и външно потвърденото копие и поне веднъж на тримесечие правете документирано възстановяване от действителния външен носител.

Съхранение на тайните от Status​

Поддръжка → Съхранение на тайните → Създайте копие за съхранение. Status иска администраторската парола и код от приложението за удостоверяване, след което показва парола за файла веднъж: запишете я, преди да напуснете страницата. Сървърът записва същия шифрован файл, който записва командата за конзолата по-долу, дешифрира го и изисква той да съвпада с използваните файлове, и го предлага 30 минути на администратора, който го е поискал. Изтеглете го на USB памет на своя компютър. Изтеглянето се съобщава на сървъра, който записва потвърждението, проверявано от „Готовност“, и премахва копието от сървъра.

Тъй като файлът заедно с паролата му отваря всяка тайна на инсталацията, Status предлага това само докато собственият му мрежов списък е ограничен до мрежите за ИТ управление, позволява най-много три копия за 24 часа (броени от сървъра), записва всяка заявка и всяко изтегляне и показва изтеглянето в прегледа една седмица. Аварийна сесия от конзолата не може да го използва.

Съхранение на тайните в конзолата​

Поставете USB памет или монтирайте споделена папка извън този сървър и изпълнете:

sudo losporctl secrets escrow /media/usb

Командата записва site.env, .env, advanced.env (ако има) и цялата secrets/ като един шифрован файл (lospor-hospital-secrets-<време>.tar.gz.enc, AES-256 с ключ, изведен чрез PBKDF2) с .sha256 до него, дешифрира копието и изисква то да съвпада с използваните файлове и едва тогава записва потвърждението, което проверява „Готовност“. Отказва директория на собствения диск на сървъра. Паролата се генерира и показва веднъж: пазете я в хранилището за пароли на ИТ, отделно от USB паметта. Болница, която управлява собствена парола, може да я подаде с --passphrase-file ФАЙЛ. Изпълнете отново след всяка промяна на тайните: смяна на данни за достъп или ключа за външните копия, създаден при първата им настройка.

За възстановяване на нов сървър, като root в /opt/lospor-hospital:

openssl enc -d -aes-256-cbc -pbkdf2 -iter 600000 -md sha256 -in lospor-hospital-secrets-<време>.tar.gz.enc | tar -xz

Тайни, съхранени по друг начин, се отбелязват с sudo sh /opt/lospor-hospital/current/scripts/acknowledge-secrets-escrow.sh. Нито потвърждението, нито Status съдържат ключ: само еднопосочни отпечатъци, така че по-късна смяна на ключовете показва съхранението като остаряло.

Създаване на точка за възстановяване​

sudo sh /opt/lospor-hospital/current/scripts/backup-now.sh

За защитените работни процеси:

sudo sh /opt/lospor-hospital/current/scripts/backup-now.sh --kind pre-update
sudo sh /opt/lospor-hospital/current/scripts/backup-now.sh --kind pre-restore
sudo sh /opt/lospor-hospital/current/scripts/backup-now.sh --kind immutable

Едновременните планови, ръчни и преди-обновяване заявки споделят ключалката за архивиране и могат да използват една и съща току-що проверена точка. BACKUP_BUSY е стабилният резултат при заетост и не заменя Status сигнала на активния архив. Архивирането използва и същата постоянна системна ключалка като миграциите и подмяната на услуги. Ако тя е заета от поддръжка, архивирането се отлага преди достъп до PostgreSQL с код 75 и BACKUP_MAINTENANCE_BUSY; архив и обновяване никога не се изпълняват едновременно.

Безопасно възстановяване​

По подразбиране възстановяването е в изолирана временна база, без промяна на работещата клинична база и услуги:

sudo sh /opt/lospor-hospital/current/scripts/restore-backup.sh --temporary \
backups/lospor-YYYYMMDDTHHMMSSZ-RANDOM.backup

Пробното възстановяване доказва, че архивът може да бъде възстановен, без да пази копието. То изпълнява същите проверки, възстановяване, миграции и валидиране като временното възстановяване, след което премахва временната база данни. Не се въвежда потвърждение, защото нищо, което клиницистите използват, не се променя. losporctl backup drill проверява най-новия архив, а Поддръжка в Status изпълнява същата проверка и пази резултатите ѝ:

sudo sh /opt/lospor-hospital/current/scripts/restore-backup.sh --drill \
backups/lospor-YYYYMMDDTHHMMSSZ-RANDOM.backup
sudo losporctl backup drill

Преди да създаде нещо, процедурата удостоверява затворената схема на манифеста, проверява каталога и мястото и сравнява болница, система, версии, PostgreSQL, миграции, схема и всички ключови отпечатъци. Отпечатъкът за външния ИИ е SHA-256 върху декодираните 32 байта на ключа за запечатване, а не върху base64 текста. Липсващ или различен ключ връща RESTORE_EXTERNAL_AI_SEAL_KEY_MISMATCH преди каквато и да е промяна на базата, защото иначе възстановените данни за достъп до доставчика не могат да бъдат отворени. Отпечатъкът на солта за OMOP псевдоними е SHA-256 върху точната канонична стойност от 64 малки шестнадесетични знака в .env, без нов ред. Различна стойност в защитеното копие връща RESTORE_OMOP_PSEUDONYM_SALT_MISMATCH преди каквато и да е промяна на базата, защото иначе възстановената OMOP проекция би извела различни числови изходни идентификатори. Чужд, повреден, неподдържан или по-нов архив се отказва преди прекъсване. Временната база се мигрира и валидира; при грешка се премахва само тя.

Подмяна на работещата база е аварийна операция:

sudo sh /opt/lospor-hospital/current/scripts/restore-backup.sh --in-place \
backups/lospor-YYYYMMDDTHHMMSSZ-RANDOM.backup

Тя изисква точното показано потвърждение с болница и време, ново удостоверено предаварийно копие и второ потвърждение на разрушителната граница. Предишната база се пази под безопасно име, докато подмяната бъде доказана. Caddy може да отвори достъпа едва след като doctor.sh --restore-preopen провери PostgreSQL, схемата и миграциите, API, Web, PWA, Browser, Status, оператора и терминологията и изведе RESTORE_PREOPEN_OK.

SQLite базата на Status е оперативно състояние и не е част от клиничния архив. Запазете нейния том. Ако той е загубен, но клиничната база още съдържа оператора, използвайте ./scripts/appliance-operator.sh repair-status. Автоматичните тестове не заменят тримесечното възстановяване от реалното външно копие на болницата.