Chuyển tới nội dung chính

Sẵn sàng phục hồi

Libre WebUI cung cấp kiểm kê chỉ đọc làm cổng an toàn đầu tiên. Nó báo trạng thái và điều kiện chặn ảnh chụp; không khóa, sao chép, mã hóa, tải, xóa, sửa hay phục hồi dữ liệu.

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

Từ mã nguồn, chạy npm run build:backend rồi dùng npm run recovery:check -- thay libre-webui recovery-check. npx/Homebrew kiểm tra ~/.libre-webui; DATA_DIR ghi đè vị trí.

0 không có chặn, 1 có chặn, 2 lệnh lỗi. Dùng --data-dir PATH hoặc --database PATH. Khi dùng --database, tệp vẫn phải là tệp thường. Chế độ volume chỉ nhận DATA_DIR/data.sqlite. Thư mục cha cơ sở dữ liệu trở thành gốc khi không có --data-dir.

Runtime cũng kiểm tra plugin lịch sử trong pluginsPLUGINS_DIR. Định nghĩa ngoài volume chặn ảnh chụp; dùng --legacy-plugins-dir PATH cho vị trí bổ sung.

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

Nội dung kiểm tra

Phiên bản, SQLite/WAL/SHM, quick_check, khóa ngoại, lược đồ, thư mục, dấu vân tay khóa, .encryption_key, plugin, blob, media, giọng, vectơ, Work, volume/PVC, công việc, sự kiện, chặn và loại trừ.

Mọi blob, vectơ và phong bì mã hóa được xác thực trong giới hạn. Báo cáo không in khóa, JWT, thông tin xác thực, nội dung người dùng hay đường dẫn host.

Gắn chỉ đọc là cảnh báo, không phải chặn. Không chạy ứng dụng trên ảnh chụp chỉ đọc.

Chặn

Cơ sở dữ liệu hỏng, lược đồ thiếu, khóa xung đột, ciphertext hỏng, giới hạn vượt, thư mục không đọc, Work/công việc đang chạy, volume thiếu, thứ tự sự kiện hỏng, plugin ngoài, hoặc mặt phẳng điều khiển không xác minh được đều chặn. Không sửa báo cáo để che lỗi.

Payload được xác thực với danh tính và JSON chuẩn. Tham chiếu mờ chỉ kiểm tra cú pháp; referenceTargetsVerified là false.

Văn bản cũ không có dấu phong bì vẫn tương thích. Phong bì chuẩn phải xác thực. encryption.legacyCiphertext chỉ báo số lượng.

Nếu users.email_lookup v4 tồn tại, email và token phải khớp.

Ranh giới sao lưu

Trợ lý dừng ứng dụng và tạo kho solo từ image, volume, môi trường chính xác. Manifest ký Ed25519, payload mã hóa AES-256-GCM. libre-webui-restore chỉ nhận volume mới và xác minh trước khi sao chép.

Cấu hình bảo vệ gồm timeout PostgreSQL/Redis, quota blob, bộ chọn nền tảng, tiền tố/chế độ S3; được ghi với quyền 0600.

Kho solo không chứa volume Work, PVC, thư mục host, mô hình Ollama hay trạng thái nhà cung cấp. Team dùng PostgreSQL/S3/PGVector phối hợp.

Luồng sự kiện phải có 1..last_sequence; kursor toàn cục không được tụt. PLUGINS_DIR ngoài DATA_DIR phải sao lưu riêng.

Lệnh sao lưu

Dùng libre-webui, npx --yes libre-webui@latest hoặc thay libre-webui backup bằng npm run recovery:backup --. Image sản xuất có /usr/local/bin/libre-webui; team cần pg_dumppg_restore PostgreSQL 16.

install -d -m 0700 /absolute/private/libre-backup-keys
libre-webui backup keygen \
--directory /absolute/private/libre-backup-keys
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
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
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

Không phục hồi vào nguồn hoặc đích có dữ liệu. Nếu hoàn tác team không đầy đủ, làm sạch PostgreSQL và mọi phiên bản/đánh dấu xóa S3, rồi chạy lại restore-team-preflight.

Diễn tập phục hồi định kỳ

Diễn tập tạo ảnh chụp yên, kho tạm có chữ ký, phục hồi vào đích cô lập, đo RTO/RPO rồi xóa mọi thứ. Đây không phải bản sao lưu.

Bật bằng RECOVERY_DRILL_INTERVAL_HOURS, ví dụ 24. System dùng GET /api/recovery/drills, POST /api/recovery/drills/run, và RECOVERY_DRILL_HISTORY (mặc định 60).

Diễn tập áp dụng cho solo và tuân theo quy tắc recovery-check; team vẫn dùng backup create-team.