मुख्य कंटेंट तक स्किप करें

पुनर्प्राप्ति तैयारी

Libre WebUI पहली बैकअप और पुनर्प्राप्ति सुरक्षा जाँच के रूप में केवल-पठन सूची देता है। यह ज्ञात स्थिति और स्नैपशॉट रोकने वाली दशाएँ बताता है। यह रखरखाव लॉक नहीं लेता और डेटा कॉपी, एन्क्रिप्ट, अपलोड, हटाना, सुधारना या पुनर्प्राप्त नहीं करता।

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

स्रोत से एक बार npm run build:backend चलाकर libre-webui recovery-check की जगह npm run recovery:check -- उपयोग करें। npx और Homebrew डिफ़ॉल्ट रूप से ~/.libre-webui देखते हैं; DATA_DIR और स्पष्ट पथ विकल्प इसे बदलते हैं।

बाधा न हो तो कमांड 0, पूरी रिपोर्ट में बाधा हो तो 1, गलत तर्क या अप्रत्याशित विफलता पर 2 लौटाती है। अन्य जगह के लिए --data-dir PATH या --database PATH उपयोग करें। सामान्य या --data-dir सूची केवल DATA_DIR/data.sqlite स्वीकार करती और कठोर/सांकेतिक लिंक तथा अनियमित डेटाबेस/WAL/SHM अस्वीकार करती है। स्पष्ट --database बाहर हो सकता है पर सभी फ़ाइल सामान्य और लिंक-रहित हों। --data-dir बिना डेटाबेस का मूल फ़ोल्डर डेटा जड़ मानकर कुंजी, ब्लॉब और प्लगइन साथ गिने जाते हैं।

रनटाइम बैकएंड पैकेज के नियत plugins फ़ोल्डर और सापेक्ष PLUGINS_DIR के पुराने पथ को भी पढ़ता है। सक्रिय पुराने पथ में विशेष परिभाषा हो तो केवल-वॉल्यूम स्नैपशॉट रुकता है। पैकेज परिनियोजन स्थानांतरित पथों के लिए --legacy-plugins-dir PATH कई बार दे सकता है।

निजी Compose परिनियोजन में कंटेनर के भीतर चलाएँ:

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

सूची क्या जाँचती है

संस्करणित JSON में:

  • ऐप, Node.js, OS और वास्तुकला संस्करण;
  • SQLite और WAL/SHM आकार, quick_check, बाहरी कुंजी, शिमा छाप, उपयोगकर्ता संस्करण, अनुपस्थित तालिका और निजी जाँच स्नैपशॉट से पहले लिंक-रहित स्रोत जाँच;
  • डेटा फ़ोल्डर पढ़ना, लिखना, फ़ाइल और बाइट संख्या;
  • कुंजी स्रोत और एकतरफ़ा 16-अक्षर छाप;
  • स्थायी .encryption_key की लिंक-रहित एक-कड़ी जाँच;
  • विशेष प्लगइन, स्थानीय एन्क्रिप्टेड ब्लॉब, मीडिया, आवाज़, दस्तावेज़ टेक्स्ट, पुराने/प्लेटफ़ॉर्म वेक्टर और ACL/फ़िल्टर का अस्तित्व, संख्या, आकार और जड़ में स्थान;
  • हर स्थानीय ब्लॉब और वेक्टर आवरण की सीमित केवल-पठन प्रमाणीकरण, पूर्ण भाग/चेकसम और कुंजी उपलब्धता;
  • चैट, नोट, दस्तावेज़, पसंद, प्लगइन गुप्त, गैलरी, ईमेल और AAD-बद्ध आवाज़ नाम/रिकॉर्ड/प्रतिलेख में पुराने AES-GCM आवरणों की सीमित जाँच;
  • Work कार्य/रन/पूर्वावलोकन संख्या तथा Docker वॉल्यूम, Kubernetes PVC या हैश होस्ट पथ; वॉल्यूम में प्रबंधित लेबल और मालिक कार्य ID होना चाहिए;
  • पुराने मीडिया कार्य, स्थायी कार्य और प्रयास, ईवेंट स्ट्रीम और अंतिम वैश्विक कर्सर;
  • एन्क्रिप्टेड कार्य/ईवेंट सामग्री और अपारदर्शी संदर्भ की सीमित जाँच; और
  • स्पष्ट बाधाएँ, चेतावनियाँ और ऐप डेटा से बाहर की सामग्री।

रिपोर्ट कुंजी, JWT/सत्र गुप्त, प्रदाता क्रेडेंशियल, प्लगइन/उपयोगकर्ता सामग्री या वास्तविक होस्ट पथ नहीं देती। केवल गुप्त उपस्थिति और अपरिवर्तनीय कुंजी छाप आती है।

केवल-पठन माउंट जाँच के लिए वैध और चेतावनी है, बाधा नहीं। ऐप तैयार होने को लिखने योग्य भंडारण चाहिए; बैकअप स्नैपशॉट पर Libre WebUI न चलाएँ।

बाधाएँ

हर बाधा विफल पुनर्प्राप्ति जाँच है। अनुपस्थित/टूटा डेटाबेस, अधूरी शिमा, अनुपस्थित/विरोधी कुंजी, खराब या अप्रमाणित एन्क्रिप्टेड टेक्स्ट, सीमा पार, न पढ़ा फ़ोल्डर, लिंक/अनियमित SQLite, सक्रिय Work/मीडिया/स्थायी कार्य, अनुपस्थित या गलत लेबल कार्यक्षेत्र, ईवेंट सिर असंगति या क्रम अंतर, डेटा से बाहर प्लगइन या बाहरी कार्यक्षेत्र न जाँच सकने वाली नियंत्रण सतह सामान्य बाधाएँ हैं। काम रोकें और निर्भरता सुधारें; रिपोर्ट छिपाने के लिए न बदलें।

एन्क्रिप्टेड सामग्री कार्य/ईवेंट पहचान से प्रमाणित और सीमित मानक JSON के रूप में जाँची जाती है। अपारदर्शी संदर्भ केवल आकार/सिंटैक्स से जाँचे जाते हैं; लक्ष्य अस्तित्व सिद्ध करने वाला अधिकृत ब्लॉब भंडार नहीं है। रिपोर्ट referenceTargetsVerified false कर चेतावनी देती है, मान नहीं खोलती।

पुराने टेक्स्ट क्षेत्र अनिवार्य आवरण चिह्न से पुराने हैं; पुराने शिमा का वास्तविक सादा टेक्स्ट पढ़ा जाता है और प्रमाणित एन्क्रिप्टेड टेक्स्ट नहीं गिना जाता। मानक आवरण हमेशा जाँचे जाते हैं; आवरण-आकार IV/टैग वाला खराब तीन-भाग मान बंद विफल होता है। आवाज़ क्षेत्र स्पष्ट बाइनरी हैं और प्रोफ़ाइल, मालिक, क्षेत्र से प्रमाणित होने चाहिए। encryption.legacyCiphertext सादा टेक्स्ट खोले बिना संख्या देता है।

शिमा v4 का users.email_lookup हो तो हर गैर-null ईमेल प्रमाणित और डोमेन-विभाजित टोकन पुनर्गणित होता है। अनुपस्थित/गलत टोकन या null ईमेल का टोकन बाधा है। v4 से पहले डेटाबेस संगत हैं।

वर्तमान बैकअप सीमा

निजी परिनियोजन सहायक चलती ऐप रोककर अपरिवर्तनीय कंटेनर इमेज, वॉल्यूम और वातावरण से solo संग्रह बनाता है। मैनिफ़ेस्ट Ed25519 हस्ताक्षरित और पूर्ण सामग्री ऑपरेटर AES-256-GCM कुंजी से एन्क्रिप्टेड है। इसमें SQLite, स्थानीय ब्लॉब/वेक्टर, रनटाइम चयन और स्थिति खोलने वाली सुरक्षित कॉन्फ़िगरेशन है। प्रकाशन से पहले हस्ताक्षर, चेकसम और डिक्रिप्ट सामग्री जाँची जाती है। libre-webui-restore केवल नया Docker वॉल्यूम स्वीकार, कॉपी से पहले सूची जाँच और निजी फ़ाइलों में कॉन्फ़िगरेशन प्रकाशित करता है।

सुरक्षित कॉन्फ़िगरेशन PostgreSQL पूल व कनेक्शन/निष्क्रियता/स्टेटमेंट/माइग्रेशन लॉक समय-सीमा, Redis समय-सीमा, दोनों ब्लॉब कोटा, प्लेटफ़ॉर्म चयन, S3 उपसर्ग और संबोधन मोड रखती है। यह खुले मैनिफ़ेस्ट में नहीं, हस्ताक्षरित एन्क्रिप्टेड सामग्री में है और 0600 फ़ाइल बनती है।

Solo संग्रह Work Docker वॉल्यूम, Kubernetes PVC, होस्ट फ़ोल्डर, Ollama मॉडल या बाहरी प्रदाता स्थिति नहीं रखता। बहिष्करण दिखते रखें और Work अलग कॉपी करें। Team ऑफ़लाइन प्रवाह में PostgreSQL निर्यात, सटीक संस्करणित S3 वस्तु, PGVector सूची, कॉन्फ़िगरेशन और कुंजी को समान संग्रह में रखकर साफ़ PostgreSQL/S3 पर जाँचता है। Redis कैश, उपस्थिति, जागरण और लीज़ SQL से बनते हैं।

Team बैकअप सटीक PostgreSQL निर्यात के हर सीमित कार्य/ईवेंट को प्रमाणित करता है। सुरक्षित सूची कार्य, ईवेंट, स्ट्रीम, कर्सर, आवरण, संदर्भ और सादे टेक्स्ट की संख्या रखती है। हर स्ट्रीम में लगातार 1..last_sequence होना चाहिए और वैश्विक PostgreSQL कर्सर सबसे बड़े से पीछे नहीं। पुनर्प्राप्ति वही जाँच दोहराकर स्रोत से बराबरी माँगती है। अलग वैश्विक कर्सर अंतर लेन-देन रहित पहचान आवंटन के कारण मान्य हैं; स्ट्रीम क्रम लगातार है।

PLUGINS_DIR, DATA_DIR बाहर हो तो फ़ोल्डर सूचीबद्ध और वॉल्यूम संग्रह से बाहर होता है। परिभाषाएँ अलग बैकअप तक बाधा हैं। पुराने फ़ोल्डर भी ऐसे हैं। सांकेतिक लिंक, अनियमित या न पढ़े JSON हमेशा बाधा हैं।

स्थायी कार्य और क्रमबद्ध ईवेंट दोनों प्रोफ़ाइल में सक्रिय हैं। जाँच सक्रिय Work/कार्य पर रुकती, सामग्री और स्ट्रीम सिर जाँचती और मानक SQL बचाती है। Solo सीमित अंतर्निहित वर्कर, team बाहरी वर्कर चलाता है; Redis केवल जागरण/वितरण के लिए है।

उत्पादन में कुंजी और JWT गुप्त प्रबंधक में, संग्रह होस्ट से बाहर एन्क्रिप्टेड रखें; साफ़ वातावरण में पुनर्प्राप्ति जाँचें। सूची पूर्व-जाँच है, रखरखाव लॉक या हर बाहरी संसाधन की गारंटी नहीं।

हस्ताक्षरित और एन्क्रिप्टेड बैकअप कमांड

उदाहरण npm/Homebrew स्थापित libre-webui उपयोग करते हैं। न हो तो npx --yes libre-webui@latest। स्रोत से बैकएंड बनाकर libre-webui backup की जगह npm run recovery:backup --। उत्पादन इमेज /usr/local/bin/libre-webui देती है। Team को PostgreSQL 16 pg_dump और pg_restore चाहिए।

AES-256-GCM संग्रह कुंजी और Ed25519 जोड़ी निजी फ़ोल्डर में बनाएँ और निजी कुंजी होस्ट से बाहर रखें:

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

शांत solo के लिए संग्रह बनाएँ और जाँचें:

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

पहले पूर्व-जाँच, फिर केवल नए खाली लक्ष्य पर लागू करें:

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 के लिए सभी प्रतिकृति/वर्कर रोकें, स्रोत PostgreSQL/S3/keyring वातावरण रखकर संग्रह बनाएँ:

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

पुनर्प्राप्ति से पहले अलग खाली PostgreSQL और संस्करणित S3 चर लोड करें। पूर्व-जाँच हस्ताक्षर, संग्रह, सूची और खाली लक्ष्य बिना प्रकाशन जाँचती है। लागू करना शिमा, सटीक S3 और PGVector जाँचकर कॉन्फ़िगरेशन नए फ़ोल्डर में लिखता है:

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

स्रोत डेटाबेस, बकेट, मौजूदा डेटा फ़ोल्डर या भरी कॉन्फ़िगरेशन को लक्ष्य न बनाएँ। सार्वजनिक कुंजी क़ायदे के साथ रखें; संग्रह और सार्वजनिक कुंजी सामग्री नहीं खोलते।

Team रोलबैक अधूरा हो तो दोनों लक्ष्य गंदे मानें। PostgreSQL साफ़ करें, सटीक S3 उपसर्ग के सभी संस्करण और हटाने चिह्न मिटाएँ। restore-team-preflight फिर चलाएँ; साफ़ जाँच के बाद ही लागू करें।

निर्धारित सत्यापित पुनर्प्राप्ति अभ्यास

कभी पुनर्प्राप्त न किया बैकअप आशा है, पुनर्प्राप्ति नहीं। अभ्यास बिना अवरोध/ऑपरेटर पूरे प्रवाह को चलाता है:

  1. शांत डेटा स्नैपशॉट — SQLite ऑनलाइन बैकअप API, ब्लॉब/फ़ाइल भौतिक कॉपी। recovery-check नियम से सक्रिय कार्य की प्रतीक्षा।
  2. अस्थायी कुंजी से हस्ताक्षरित AES-256-GCM संग्रह और पूरी सूची।
  3. संग्रह जाँच, अलग लक्ष्य पर पुनर्प्राप्ति और फिर जाँच।
  4. अवधि को RTO, सफलता अंतर को RPO सीमा मानकर सब हटाता है। यह जाँच है, बैकअप नहीं।

RECOVERY_DRILL_INTERVAL_HOURS (जैसे 24) से समय चालू करें; साझा लीज़ दोहरा रन रोकती है। System पृष्ठ इतिहास और "Run drill now" को GET /api/recovery/drills, POST /api/recovery/drills/run से दिखाता है। स्वचालित विफलता व्यवस्थापकों और वेबहुक को एक बार बताती; मैन्युअल रन सीधे। RECOVERY_DRILL_HISTORY इतिहास सीमित करता है (डिफ़ॉल्ट 60)।

अभ्यास solo (SQLite) को कवर करता है। Team backup create-team रखता है; पुनर्प्राप्ति अभ्यास अभी ऑपरेटर कदम है।