Ugrás a fő tartalomra

Helyreállítási felkészültség

A Libre WebUI csak olvasható helyreállítási leltárt biztosít a mentés és visszaállítás első biztonsági kapujaként. Jelenti az ismert állapotot és a pillanatképet blokkoló feltételeket, de nem szerez maintenance lockot, és nem másol, titkosít, tölt fel, töröl, javít vagy állít vissza adatokat.

libre-webui recovery-check --json > recovery-inventory.json

Forrás-checkoutból egyszer futtassa az npm run build:backend parancsot, és a libre-webui recovery-check helyett használja az npm run recovery:check -- parancsot. Az npx- és Homebrew-telepítések alapértelmezés szerint a ~/.libre-webui helyet vizsgálják; a DATA_DIR és a kifejezett útvonalopciók felülírják.

A recovery-check ellenőrzi a felkészültséget; a teljes mentéshez használja a libre-webui backup parancsot.

A 0 állapot azt jelenti, hogy nincs blokkoló feltétel, az 1 teljes jelentést jelent blokkolókkal, a 2 pedig érvénytelen argumentumot vagy váratlan gyűjtési hibát. Más hely vizsgálatához használja a --data-dir PATH vagy --database PATH értéket. Az alapértelmezett leltár csak a DATA_DIR/data.sqlite fájlt fogadja el, és elutasítja a hardlinkeket, symlinkeket és nem szabályos database/WAL/SHM fájlokat. Egy kifejezett --database a DATA_DIR területén kívül is lehet, de szabályos, nem symlink fájlnak kell lennie; --data-dir nélkül a szülőkönyvtár lesz az adatgyökér.

A runtime a backend plugins mappájából, valamint relatív PLUGINS_DIR esetén a régi, backendhez viszonyított helyről is beolvassa a korábbi definíciókat. Az ott lévő egyéni definíciók blokkolják a csak kötetre kiterjedő mentést. Csomagolt telepítés többször is megadhatja a --legacy-plugins-dir PATH opciót.

Privát Compose-telepítésnél futtassa a konténerben:

docker exec libre-webui \
libre-webui recovery-check --json --data-dir /app/backend/data

Mit ellenőriz a leltár?

A verziózott JSON-jelentés rögzíti:

  • az alkalmazás és a Node.js verzióját, az operációs rendszert és az architektúrát;
  • az SQLite/WAL/SHM méreteket, quick_check eredményt, foreign keys állapotot, schema fingerprintet, user versiont, hiányzó táblákat és no-follow ellenőrzést;
  • az adatkönyvtár olvashatóságát/írhatóságát, a fájlok számát és a bájtokat;
  • a kulcs forrását, a 16 karakteres visszafordíthatatlan ujjlenyomatot és a .encryption_key ellenőrzését;
  • az egyéni bővítményeket, titkosított helyi blobokat, médiafájlokat, hangreferenciákat, dokumentumszöveget és ACL-lel rendelkező legacy/platform vektorokat;
  • a kanonikus blobok, vektor-envelope-ok, chunkok és checksumok teljes, korlátozott tanúsítását az elérhető kulcsokkal;
  • a felismerhető legacy AES-GCM envelope-ok tanúsítását a beszélgetésekben, jegyzetekben, dokumentumokban, beállításokban, bővítménytitkokban, médiában, e-mailben és AAD-hez kötött hangmezőkben;
  • a Work-feladatokat/futásokat/előnézeteket és a várt Docker-köteteket, Kubernetes PVC-ket vagy hash-elt hostútvonalakat a helyes tulajdonossal;
  • a médiafeladatokat, tartós feladatokat/próbálkozásokat, eseményfolyamokat és globális kurzort;
  • a titkosított payloadok tanúsítását és az átlátszatlan hivatkozások szintaktikai ellenőrzését; valamint
  • a kifejezett blokkolókat, figyelmeztetéseket és az adatkönyvtáron kívüli adatokat.

A jelentés nem tartalmaz kulcsokat, JWT-/munkamenettitkokat, hitelesítő adatokat, bővítmény-/felhasználói tartalmat vagy tényleges hostútvonalakat. A csak olvasható mount figyelmeztetést, nem blokkolást okoz, de ne indítsa az alkalmazást a pillanatképen.

Blokkoló feltételek

Bármely blokkoló lezárja a kaput. Gyakori ok a hiányzó vagy sérült adatbázis, hiányos séma, hiányzó vagy ütköző kulcs, sérült ciphertext, túllépett korlát, olvashatatlan könyvtár, linkelt SQLite, aktív Work-/média-/tartós feladat, hiányzó vagy helytelenül címkézett terület, esemény-head eltérés vagy szekvenciahiány, adatkönyvtáron kívüli egyéni bővítmény, illetve külső területeket nem ellenőrző control plane. Állítsa le a munkát és javítsa a függőségeket; ne módosítsa a jelentést.

A titkosított payloadokat a feladat-/eseményazonosítóval és korlátozott, kanonikus JSON-nal tanúsítja. Az átlátszatlan hivatkozásoknál csak a méretet és a szintaxist ellenőrzi, mert nincs irányadó repository. A referenceTargetsVerified false lesz, és figyelmeztetés jelenik meg payloadértékek nélkül.

A legacy szövegmezők az envelope-jelölés előtt léteztek, ezért a valódi régi, nyílt szöveg olvasható marad, és nem számít hitelesített ciphertextnek. A kanonikus envelope-okat mindig tanúsítja; a hibás háromrészes értékek biztonságosan lezárják a hozzáférést. A hangmezők egyértelmű bináris envelope-ot használnak, amely a profilhoz, tulajdonoshoz és mezőhöz kötődik. Az encryption.legacyCiphertext darabszámot és bájtokat jelent, nyílt szöveget nem.

A v4 sémával és users.email_lookup mezővel minden e-mail-címet tanúsít, és újraszámítja a tartomány szerint elkülönített keyed tokent. A hiányzó vagy hibás token, illetve null e-mail mellett jelen lévő token blokkol; a mező nélküli régi adatbázisok kompatibilisek maradnak.

A mentés jelenlegi határa

A privát telepítés segédprogramja szükség esetén leállítja az alkalmazást, majd integrált solo archívumot készít a pontos image-ből, kötetből és környezetből. A manifest Ed25519-aláírást kap, a payload pedig az üzemeltető kulcsával AES-256-GCM-titkosítást. Tartalmazza az SQLite-ot, a helyi blobokat, a beágyazott vektorokat, a runtime-választókat és a védett konfigurációt. Közzététel előtt ellenőrzi az aláírást, a ciphertext checksumját és a visszafejtett payloadot. A libre-webui-restore csak új Docker-kötetet fogad, és a konfigurációt privát fájlokként írja egy új könyvtárba.

A védett konfiguráció tartalmazza a PostgreSQL poolt és timeoutokat, a Redis-timeoutot, a blobkvótákat, a platformválasztókat, valamint az S3-prefixet és címzési módot. Az aláírt és titkosított payload része, és 0600 jogosultsággal kerül kiírásra.

A solo archívum nem tartalmaz Work-köteteket, Kubernetes PVC-ket, hostmappákat, Ollama-modelleket vagy külső szolgáltatói állapotot. Ezekről külön készítsen mentést. A team folyamat lezárja a PostgreSQL-exportot, a pontos verziózott S3-objektumokat, a PGVector-leltárt, a runtime-konfigurációt és a kulcsazonosságot, és tiszta célokat ellenőriz. A Redis gyorsítótára, jelenléte, ébresztései és lease-ei SQL-ből újraépülnek.

A team mentés minden korlátozott, titkosított feladat-/eseménypayloadot tanúsít. Minden folyamnak 1..last_sequence tartományt kell tartalmaznia, a globális kurzor pedig nem maradhat le. A visszaállítás a teljes eredményt összeveti az aláírt forrásleltárral. A globális kurzorok közötti hézagok megengedettek, mert a PostgreSQL identity kiosztása nem tranzakciós; a folyamonkénti folytonosság a szerződés.

Ha a PLUGINS_DIR a DATA_DIR területén kívül van, kizártként jelöli, a definíciók pedig a megfelelő pillanatkép meglétéig blokkolják a kötetmentést. A symlink, nem szabályos vagy olvashatatlan JSON blokkoló. A tartós feladatok/események mindkét profilban aktívak; a helyreállítás blokkolja az aktív próbálkozásokat és a Worköt, ellenőrzi a payloadot/szekvenciát, és megőrzi az SQL-t. A solo beágyazott, a team külső workert használ, a Redis pedig csak ébresztésre és fan-outra szolgál.

Éles környezetben a titkosítási/JWT-titkokat secret managerben, a titkosított archívumokat a hoston kívül tartsa, és tiszta, kompatibilis környezetben tesztelje a visszaállítást. A leltár előellenőrzési pillanatkép, nem zárolás vagy a külső erőforrások teljes bizonyítéka.

Aláírt és titkosított mentési parancsok

Használja a telepített libre-webui parancsot; globális telepítés nélkül a npx --yes libre-webui@latest, forrásból az npm run recovery:backup -- használható. Az éles image tartalmazza a /usr/local/bin/libre-webui fájlt. A team a PostgreSQL 16 pg_dump és pg_restore parancsát igényli.

Hozza létre a kulcsokat privát könyvtárban:

install -d -m 0700 /absolute/private/libre-backup-keys
libre-webui backup keygen \
--directory /absolute/private/libre-backup-keys

Solo archívum létrehozása és ellenőrzése:

libre-webui backup create \
--offline \
--data-dir /absolute/path/to/libre-data \
--output /absolute/backups/libre-solo.lwbackup \
--encryption-key /absolute/private/libre-backup-keys/backup-encryption.key \
--signing-private-key /absolute/private/libre-backup-keys/backup-signing-private.pem

libre-webui backup verify \
--archive /absolute/backups/libre-solo.lwbackup \
--encryption-key /absolute/private/libre-backup-keys/backup-encryption.key \
--signing-public-key /absolute/private/libre-backup-keys/backup-signing-public.pem

Az előellenőrzést és alkalmazást csak új, üres könyvtárban futtassa:

libre-webui backup restore-preflight \
--archive /absolute/backups/libre-solo.lwbackup \
--target /absolute/restore/libre-data \
--encryption-key /absolute/private/libre-backup-keys/backup-encryption.key \
--signing-public-key /absolute/private/libre-backup-keys/backup-signing-public.pem

libre-webui backup restore-apply \
--archive /absolute/backups/libre-solo.lwbackup \
--target /absolute/restore/libre-data \
--encryption-key /absolute/private/libre-backup-keys/backup-encryption.key \
--signing-public-key /absolute/private/libre-backup-keys/backup-signing-public.pem

libre-webui backup restore-verify \
--target /absolute/restore/libre-data

Team esetén állítsa le a replikákat és workereket:

libre-webui backup create-team \
--offline \
--output /absolute/backups/libre-team.lwbackup \
--encryption-key /absolute/private/libre-backup-keys/backup-encryption.key \
--signing-private-key /absolute/private/libre-backup-keys/backup-signing-private.pem

Töltse be a környezetet egy különálló, üres PostgreSQL és egy verziózott S3-bucket számára. Az előellenőrzés közzététel nélkül bizonyítja, hogy a célok üresek; az alkalmazás visszaállítja és ellenőrzi a sémát, a pontos S3-objektumokat és a PGVectort, majd kiírja a védett konfigurációt:

libre-webui backup restore-team-preflight \
--archive /absolute/backups/libre-team.lwbackup \
--encryption-key /absolute/private/libre-backup-keys/backup-encryption.key \
--signing-public-key /absolute/private/libre-backup-keys/backup-signing-public.pem

libre-webui backup restore-team-apply \
--archive /absolute/backups/libre-team.lwbackup \
--configuration-output /absolute/restore/libre-team-config \
--encryption-key /absolute/private/libre-backup-keys/backup-encryption.key \
--signing-public-key /absolute/private/libre-backup-keys/backup-signing-public.pem

Ne állítson vissza a forrásadatbázisba/-bucketbe vagy meglévő adat-/konfigurációs könyvtárba. A nyilvános aláírókulcs önmagában nem elég a visszafejtéshez. Ha a team rollback hiányos, mindkét célt tekintse szennyezettnek: tisztítsa meg a PostgreSQL-t és az összes S3-verziót/törlési jelölőt a pontos prefix alatt, majd futtassa újra a restore-team-preflight parancsot.

Ütemezett, ellenőrzött helyreállítási gyakorlatok

A vissza nem állított mentés csak remény, nem helyreállítás. Egy gyakorlat:

  1. Nyugalmi SQLite-pillanatképet készít az online backup API-val, és lemásolja a blobokat/fájlokat; aktív tartós feladat esetén megtagadja a műveletet.
  2. Ideiglenes kulcsokkal és teljes leltárral aláírt, AES-256-GCM-titkosított archívumot készít.
  3. Ellenőrzi, elszigetelten visszaállítja, majd újra ellenőrzi.
  4. Az időtartamot RTO-ként, a sikerek közötti időt RPO-ként rögzíti, majd törli az artefaktumokat/kulcsokat.

Engedélyezze a RECOVERY_DRILL_INTERVAL_HOURS változóval (például 24). Egy koordinációs lease megakadályozza a dupla futást. A System megjeleníti az előzményeket és a „Run drill now” lehetőséget a GET /api/recovery/drills és POST /api/recovery/drills/run útvonalakon. A felügyelet nélküli hiba értesíti a rendszergazdákat; a RECOVERY_DRILL_HISTORY korlátozza az előzményt (60).

A gyakorlatok a solo/SQLite profilt fedik le. A team továbbra is a backup create-team parancsot és az üzemeltetői runbookot használja.