ข้ามไปที่เนื้อหา

การกำหนดค่า

หน้านี้ครอบคลุมตัวแปรสภาพแวดล้อมของ container, การเมานต์ที่เทมเพลตจัดเตรียมให้, การสำรองข้อมูล VM ผ่าน SSH และการตั้งค่านอกสถานที่ พาธของรีพอสิทอรี การสำรองข้อมูลถูกกำหนดค่าภายในแอป (การตั้งค่า, ที่จัดเก็บ, พาธการสำรองข้อมูล) ไม่ใช่ผ่านตัวแปรสภาพแวดล้อม

ตัวแปรสภาพแวดล้อม

ตัวแปร จำเป็น คำอธิบาย
APP_KEY ใช่ ค่าลับ hex ขนาด 32 ไบต์ (64 อักขระ hex) ที่ใช้นำมาสร้างรหัสผ่านของรีพอสิทอรี restic สร้างด้วย openssl rand -hex 32 เก็บไว้ให้ปลอดภัย: การทำหายจะทำให้การสำรองข้อมูลที่เข้ารหัสไว้ไม่สามารถกู้คืนได้
LIBVIRT_HOST สำหรับ VMs และชุดข้อมูล ZFS โฮสต์ Unraid ที่เข้าถึงผ่าน SSH สำหรับการสำรองข้อมูล VM (ค่าเริ่มต้น host.docker.internal; เทมเพลตเติมค่าตัวยึด LAN-IP ไว้ล่วงหน้า) ใช้ LAN IP ของ Unraid ของคุณ จำเป็นบนเครือข่าย br0.x ที่กำหนดเอง ใช้กับการสำรองชุดข้อมูล ZFS ด้วย (ช่องในเทมเพลต Host SSH: Address) ค่าตัวอย่าง 192.168.x.x ถือว่ายังไม่ได้ตั้ง
LIBVIRT_SSH_PORT ไม่ พอร์ต SSH ของโฮสต์สำหรับการสำรองข้อมูล VM (ค่าเริ่มต้น 22) ช่องในเทมเพลต Host SSH: Port ใช้กับชุดข้อมูล ZFS ด้วย
LIBVIRT_SSH_USER ไม่ ผู้ใช้ SSH บนโฮสต์สำหรับการสำรองข้อมูล VM (ค่าเริ่มต้น root) ช่องในเทมเพลต Host SSH: User ใช้กับชุดข้อมูล ZFS ด้วย
LIBVIRT_URI ไม่ URI การเชื่อมต่อ libvirt แบบเต็ม ใช้ ตามตัวอักษร แทนการสร้างจากตัวแปร LIBVIRT_* ทั้งสามตัวข้างต้น (ซึ่งจะถูกละเว้นสำหรับสตริงการเชื่อมต่อในกรณีนี้) ค่าเริ่มต้นไม่ได้ตั้งไว้ จำเป็นบน TrueNAS Scale ซึ่ง libvirtd ของมันรับฟังอยู่บนซ็อกเก็ตที่ไม่ได้มาตรฐาน ซึ่งรูปแบบสตริงที่สร้างขึ้นไม่สามารถแสดงออกได้: qemu+ssh://<user>@<truenas-host>/system?socket=/run/truenas_libvirt/libvirt-sock ดูส่วน TrueNAS Scale ใน docs/vm-backup-ssh-setup.md ถ้าเป็น URI แบบ qemu+ssh:// ตัวแปร LIBVIRT_HOST, LIBVIRT_SSH_USER และ LIBVIRT_SSH_PORT ตัวใดที่ไม่ได้ตั้งจะเอาค่ามาจาก URI นี้ รวมถึงคำสั่ง SSH ของ BombVault เอง (การส่ง NVRAM และชุดข้อมูล ZFS)
PORT ไม่ พอร์ต HTTP (ค่าเริ่มต้น 3000; ใช้เฉพาะกับ HTTP_ONLY=true)
HTTPS_PORT ไม่ พอร์ต HTTPS (ค่าเริ่มต้น 3443; เทมเพลตเผยแพร่แบบ 1:1 ดังนั้น WebUI จึงตอบที่ https://<ip>:3443)
HTTP_ONLY ไม่ ตั้งค่า true เพื่อปิดตัวรับฟัง HTTPS แบบ self-signed และให้บริการ HTTP ธรรมดาเท่านั้น (สำหรับใช้หลัง reverse proxy ที่ terminate TLS)
BIND_HOST ไม่ ที่อยู่ที่ WebUI รับฟัง (ค่าเริ่มต้น 0.0.0.0 ทุกอินเทอร์เฟซ) ในคอนเทนเนอร์ให้เว้นว่างไว้ เพราะพอร์ตที่เผยแพร่ต้องใช้ทุกอินเทอร์เฟซ ส่วน 127.0.0.1 เหมาะกับการรันนอก Docker โดย healthcheck จะถามที่อยู่เดียวกัน
TRUSTED_PROXY ไม่ ที่อยู่หรือช่วง CIDR ของรีเวิร์สพร็อกซีที่อยู่หน้า BombVault คั่นด้วยจุลภาค (เช่น 192.168.20.11 หรือ 10.0.0.0/8) จะเชื่อส่วนหัว X-Forwarded-For เฉพาะจากจุดเหล่านี้เท่านั้น และตัวจำกัดการเข้าสู่ระบบจะนับความล้มเหลวแยกตามไคลเอนต์จริง แทนที่จะรวมทุกคนที่อยู่หลังพร็อกซีไว้ในถังเดียว หากไม่ตั้งค่า (ค่าเริ่มต้น) จะไม่เชื่อใคร เพราะส่วนหัวที่เชื่อโดยไม่มีเงื่อนไขจะทำให้ใครก็ตามเลือกถังของตัวเองได้
HOST_SOURCE_ROOT ไม่ พาธของโฮสต์ที่เมานต์เป็น Host Data (ค่าเริ่มต้น /mnt) BombVault แปลแหล่ง bind-mount ที่ Docker รายงานให้เป็นพาธภายใต้การเมานต์นี้ เปลี่ยนเฉพาะเมื่อคุณเมานต์รากโฮสต์อื่น
DATA_ROOT_SEGMENTS ไม่ ชื่อเซ็กเมนต์พาธที่คั่นด้วยจุลภาค ซึ่งระบุว่าแหล่ง bind-mount เป็นข้อมูลสำรอง (ค่าเริ่มต้น appdata ตรงกับข้อกำหนดของ Unraid ที่ /mnt/user/appdata/<container>) bind mount ของ container จะถูกเลือกอัตโนมัติสำหรับการสำรองข้อมูล เมื่อเซ็กเมนต์ใดก็ตามในรายการปรากฏเป็นเซ็กเมนต์พาธแบบเต็มในแหล่งที่มาบนโฮสต์ของมัน ตัวอย่างเช่น DATA_ROOT_SEGMENTS=appdata,config จะรวม bind แบบ .../config ไว้ด้วยเช่นกัน ดู การตรวจจับแหล่งข้อมูลสำรอง สำหรับวิธีอื่น ๆ ที่ทำงานอยู่ตลอดเวลาในการค้นหาโฟลเดอร์ข้อมูลของ container
PLATFORM ไม่ บังคับแพลตฟอร์มที่ BombVault ถือว่าตัวเองกำลังทำงานอยู่ แทนที่จะตรวจจับอัตโนมัติ: unraid, generic หรือ truenas (ค่าเริ่มต้นไม่ได้ตั้งไว้ โดยจะตรวจจับ Unraid อัตโนมัติด้วยการตรวจสอบหาตัวบ่งชี้ dockerMan ภายใต้จุดเมานต์แฟลช มิฉะนั้นจะใช้ generic; ค่าที่ไม่รู้จักก็ตกไปเป็น generic เช่นกัน และมีการบันทึกไว้) ตั้งค่านี้อย่างชัดเจนบนโฮสต์ Docker ทั่วไปหรือ TrueNAS Scale แทนที่จะพึ่งการตรวจสอบอัตโนมัติที่ใช้ได้เฉพาะ Unraid ไฟล์ compose ทั่วไปทำเช่นนี้อยู่แล้ว เปลี่ยนรูปแบบ appdata-fallback ค่าเริ่มต้นของปลายทางกู้คืนข้ามอินสแตนซ์ และว่าจะพยายามทำขั้นตอนการแจ้งเตือน/ปลั๊กอินคู่หูที่ใช้ได้เฉพาะ Unraid หรือไม่ (ดู internal/platform)
BOMBVAULT_SELF_CONTAINER ไม่ ชื่อของ container BombVault เอง เพื่อไม่ให้มันสำรองข้อมูล (และจึงหยุด) ตัวเอง
BACKUP_MAX_HOURS ไม่ จำนวนชั่วโมงตามนาฬิกาสูงสุดที่การรันสำรองข้อมูลเดียวอาจถือล็อกโดเมนของมันไว้ก่อนที่จะถูกบังคับยกเลิก (ตัวป้องกันเพื่อไม่ให้การรันที่ติดขัดบล็อกโดเมนได้ตลอดกาล) ค่าว่าง (ค่าเริ่มต้น) ใช้ 48 เพิ่มค่านี้สำหรับการสำรองข้อมูลบนคลาวด์ที่ใหญ่มากหรือช้ามาก (การรันที่ถูกยกเลิกที่ขีดจำกัดจะล้มเหลวด้วย context deadline exceeded) ตั้งค่า 0 เพื่อปิดขีดจำกัดทั้งหมด
BACKUP_STALL_HOURS ไม่ จำนวนชั่วโมงที่การสำรองข้อมูลอาจ ไม่มีความคืบหน้าเลย ก่อนที่จะถูกยกเลิก ค่าว่าง (ค่าเริ่มต้น) ใช้ 2 ตั้งค่า 0 เพื่อไม่ยกเลิกเมื่อหยุดนิ่งเลย นี่คือตัวป้องกันที่ละเอียดกว่าในสองตัว และมักเป็นตัวที่ทำงานก่อน: มันดูว่ายังมีอะไรเกิดขึ้นอยู่หรือไม่ แทนที่จะดูว่าการรันใช้เวลานานเท่าไร ดังนั้นการสำรองข้อมูลหลายเทราไบต์ที่ช้าแต่ปกติจะถูกปล่อยไว้ ขณะที่การสำรองที่ติดอยู่กับแชร์ที่ไม่ตอบสนองจะถูกหยุดภายในไม่กี่ชั่วโมงแทนที่จะเป็นหลายวัน จะมีคำเตือนถูกบันทึกหลังจากเงียบไป 30 นาที ก่อนที่จะมีการยกเลิกใด ๆ การสแกนนับเป็นความคืบหน้า: restic ไม่เขียนไบต์ใดเลยขณะไล่ดูทรีขนาดใหญ่ และช่วงนั้นถูกเฝ้าดูผ่านยอดรวมไฟล์และไบต์ของมันแทนที่จะดูจากไบต์ที่เขียน ตัวแปรทั้งสองเป็นอิสระต่อกัน และ BACKUP_MAX_HOURS ยังคงจำกัดช่วงหลังจากตัวการสำรองข้อมูลเอง (การเก็บรักษา, สถิติ, การคัดลอกนอกสถานที่) ซึ่งไม่มีตัวนับให้เฝ้าดู
DB_DUMP_MAX_HOURS ไม่ จำนวนชั่วโมงที่การดัมป์ฐานข้อมูลอัตโนมัติหนึ่งครั้งทำงานได้ก่อนจะถูกหยุด ค่าว่าง (ค่าเริ่มต้น) ใช้ 6 อนุญาตค่าตั้งแต่ 1 ถึง 48 และขีดจำกัดนี้จะถูกกดให้ต่ำกว่า BACKUP_MAX_HOURS หนึ่งชั่วโมง (หรือครึ่งหนึ่งของค่านั้นเมื่อต่ำกว่าสองชั่วโมง) เพื่อให้ดัมป์ที่ยาวถูกตัดด้วยขีดจำกัดของตัวเองและรายงานเช่นนั้น แทนที่จะลากการสำรองข้อมูลล้มไปด้วย ดัมป์ที่ไม่คืบหน้าจะถูกหยุดเร็วกว่านั้น คือหลังจาก BACKUP_STALL_HOURS ดัมป์ที่ถูกหยุดจะล้มเหลวเฉพาะตัวมันเอง ส่วนการสำรองข้อมูลของคอนเทนเนอร์ยังดำเนินต่อไป บน Unraid ให้เพิ่มตัวแปรนี้เข้าคอนเทนเนอร์ BombVault ด้วย Add another Path, Port, Variable
TZ ไม่ เขตเวลาสำหรับตัวจัดตารางเวลา (เช่น Europe/Berlin) หากไม่กำหนด กำหนดการทั้งหมดจะทำงานตามเวลา UTC: กำหนดการที่ตั้งไว้ 02:30 จะเริ่มเวลา 02:30 UTC ไม่ใช่ตามเวลาท้องถิ่น บน Unraid คุณไม่ต้องตั้งค่านี้เอง ระบบจะส่งเขตเวลาของตัวเองไปยังทุกคอนเทนเนอร์ บันทึกการบูตจะบอกว่าเลือกใช้เขตเวลาใด เขตเวลาที่มีเวลาออมแสงจะข้ามการทำงานหนึ่งครั้งในฤดูใบไม้ผลิ และทำงานหนึ่งรอบซ้ำสองครั้งในฤดูใบไม้ร่วง ส่วน UTC ไม่เกิดทั้งสองอย่าง แต่จะคลาดจากนาฬิกาของคุณหนึ่งชั่วโมงปีละสองครั้ง

การเมานต์

เมานต์ Docker socket, แฟลช (/boot) และราก Host Data (/mnt) ตามที่แสดงในเทมเพลต CA ทั้ง แหล่งที่มา และ ปลายทาง ของการสำรองข้อมูลอยู่ภายใต้ Host Data และมันถูกเมานต์แบบ slave ดังนั้นแชร์ระยะไกลที่เมานต์หลังจาก container เริ่มทำงาน (เช่น ภายใต้ /mnt/remotes) จะปรากฏให้เห็นโดยไม่ต้องรีสตาร์ท

การสำรองชุดข้อมูล ZFS ก็ต้องใช้โหมดนี้ เพราะโฮสต์จะเมานต์สแนปช็อตของชุดข้อมูลหลังจากคอนเทนเนอร์เริ่มทำงานแล้วเท่านั้น ดู ชุดข้อมูล ZFS

พาธของรีพอสิทอรีการสำรองข้อมูลตั้งค่าเริ่มต้นเป็น /mnt/user/bombvault/{container,vms,flash,config,files,zfs} สร้างขึ้นในการสำรองข้อมูลครั้งแรก เปลี่ยนตำแหน่งได้ทุกเมื่อใน การตั้งค่า, ที่จัดเก็บ, พาธการสำรองข้อมูล แต่ละช่องพาธยังมีสวิตช์ ในเครื่อง / ระยะไกล อยู่ในบรรทัดเดียวกัน: พาธสามารถเป็นรีโมต restic (s3:..., rest:..., sftp:..., rclone:...) แทนโฟลเดอร์ในเครื่อง ซึ่งจะสำรองข้อมูลตรงไปที่นั่นโดยไม่มีสำเนาในเครื่องแยกต่างหาก ดู ที่เก็บหลักระยะไกล

การตรวจสอบการผสานรวมโฮสต์

เปิด /spike ในเว็บ UI หลังจาก container เริ่มทำงาน มันจะตรวจสอบทุกการเมานต์และ CLI (Docker socket, libvirt, restic, qemu-img, rclone) และรายงานส่วนที่ขาดหายไป

การตรวจหาต้นทางของข้อมูลสำรอง

สำหรับแต่ละคอนเทนเนอร์ BombVault จะเลือกเองว่าจะสำรอง bind mount และ volume แบบมีชื่อใดบ้าง เส้นทางจะถูกเลือกทันทีที่เข้าเงื่อนไขข้อใดข้อหนึ่งต่อไปนี้ (คุณเขียนทับผลลัพธ์ได้เสมอเป็นรายคอนเทนเนอร์ที่ โฟลเดอร์ที่สำรองข้อมูล ของคอนเทนเนอร์นั้น)

  • ตรงกับส่วนของรากข้อมูล: ต้นทางฝั่งโฮสต์ของ bind มีส่วนใดส่วนหนึ่งใน DATA_ROOT_SEGMENTS เป็นองค์ประกอบเต็มของเส้นทาง (ค่าเริ่มต้นคือ appdata เท่านั้น)
  • volume แบบมีชื่อของ Docker จะถูกรวมไว้เสมอ เพราะไม่มีของเทียบเท่าแบบใช้แล้วทิ้ง จึงไม่มีอะไรให้กรองออก แต่เฉพาะเมื่อเส้นทางจัดเก็บจริงของ volume บนโฮสต์เข้าถึงได้ผ่านการเมานต์ Host Data เท่านั้น เหมือนกับเส้นทางโฮสต์อื่น ๆ ที่ BombVault สำรอง ไดรเวอร์ volume ท้องถิ่นเริ่มต้นจะวาง volume ไว้ใต้รากข้อมูลของ daemon เอง คือ /var/lib/docker/volumes/<ชื่อ>/_data หากไม่ได้ปรับเปลี่ยน (ตรวจด้วย docker info -f '{{.DockerRootDir}}') ตำแหน่งนั้นไม่ได้อยู่ในขอบเขตของการเมานต์ Host Data แบบแคบเพียงไดเรกทอรีเดียวที่ docker-compose.yml ทั่วไปใช้เป็นค่าเริ่มต้น volume ที่เข้าไม่ถึงจะถูกข้ามไปเงียบ ๆ ไม่ถือเป็นข้อผิดพลาด หากต้องการสำรอง volume แบบมีชื่อบนโฮสต์ทั่วไปจริง ๆ ให้ชี้ Host Data (และ HOST_SOURCE_ROOT) ไปยังไดเรกทอรีแม่ร่วมที่ครอบคลุมรากข้อมูลของ Docker ด้วย ดูข้อแลกเปลี่ยนได้ในคำอธิบาย Host Data ของไฟล์ compose (Unraid เลี่ยงเรื่องนี้ด้วยการเมานต์ /mnt ทั้งก้อน ซึ่งเป็นข้อตกลงระดับบนสุดของตัวเอง ด้วยเหตุผลเดียวกัน)
  • ไดเรกทอรีโปรเจกต์ของ Docker Compose: หากคอนเทนเนอร์มีป้ายมาตรฐาน com.docker.compose.project.working_dir (ซึ่ง docker compose up ใส่ให้อัตโนมัติ) ไดเรกทอรีนั้นจะถูกเพิ่มเข้ามาด้วย ไม่ว่าจะมี bind ใดตรงกับส่วนของรากข้อมูลหรือไม่ก็ตาม
  • การเขียนทับด้วยป้าย bombvault.data: ใส่ป้าย bombvault.data=true บนคอนเทนเนอร์เพื่อรวม bind mount ทั้งหมดของมัน สำหรับการจัดวางที่ข้อตกลงสองข้อข้างต้นจับไม่ได้ (เช่น bind /srv/plex/config เดี่ยว ๆ ที่ไม่มีโปรเจกต์ Compose) ค่าที่ไม่ว่างทุกค่าที่ไม่ใช่ false นับว่าจริง ส่วนการไม่มีป้ายหรือ bombvault.data=false ไม่เปลี่ยนแปลงอะไร
  • ป้าย bombvault.dbdump: ตั้ง bombvault.dbdump=false ที่คอนเทนเนอร์เพื่อปิดการดัมป์ฐานข้อมูลอัตโนมัติของมัน (0, no และ off ให้ผลเดียวกัน) หรือระบุเอนจิน (postgres, mysql, mariadb) เพื่อดัมป์คอนเทนเนอร์ที่ BombVault ไม่รู้จักด้วยตัวเอง ป้ายมีผลเหนือสวิตช์บนการ์ดของคอนเทนเนอร์ ซึ่งบน Unraid คือวิธีปกติ

โมเดลความปลอดภัย

การควบคุมโฮสต์เทียบเท่า root

ผ่าน Docker socket, BombVault สามารถหยุด, ลบ และสร้าง containers ใหม่ รวมถึงอ่าน/เขียน appdata ได้ และสำหรับการสำรองข้อมูล VM มันจะล็อกอินเข้าโฮสต์ผ่าน SSH (qemu+ssh://, root โดยค่าเริ่มต้น) เพื่อรัน virsh ใครก็ตามที่เข้าถึงเว็บ UI ของมันได้ ก็มีสิทธิ์เทียบเท่า root บนโฮสต์

  • การป้องกันด้วยรหัสผ่านแบบเลือกได้ (การตั้งค่า, ความปลอดภัย): ตั้งรหัสผ่านเพื่อบังคับให้เข้าสู่ระบบ ล้างค่าเพื่อปิด ปิดไว้เป็นค่าเริ่มต้นสำหรับการใช้งานในเครือข่ายที่เชื่อถือได้ รหัสผ่านถูกเก็บด้วย Argon2id บนค่าที่ปรุงด้วย APP_KEY ดังนั้น /config ที่ถูกคัดลอกไปจึงไร้ค่าหากไม่มีคีย์ และแม้มีคีย์ก็โจมตีได้ช้า รหัสผ่านใหม่ต้องมีอย่างน้อย 12 ตัวอักษร ส่วนรหัสผ่านเดิมที่สั้นกว่ายังใช้ได้จนกว่าจะเปลี่ยน เซสชันมีลายเซ็น (HMAC ที่ได้จาก APP_KEY) และการเปลี่ยนรหัสผ่านจะทำให้เซสชันหมดอายุ การเข้าสู่ระบบถูกจำกัดที่ห้าครั้งที่ผิดพลาดต่อนาทีต่อไคลเอนต์
  • การยืนยันตัวตนสองขั้นตอน (การตั้งค่า): รหัสตามเวลาจากแอปยืนยันตัวตนเพิ่มเติมจากรหัสผ่าน พร้อมรหัสกู้คืนแบบใช้ครั้งเดียวแปดรหัสที่มอบให้ครั้งเดียวเมื่อเปิดใช้งาน ความลับที่ใช้ร่วมกันถูกเก็บโดยเข้ารหัสด้วย APP_KEY และการปิดใช้งานต้องใช้รหัสปัจจุบัน
  • พาสคีย์ (WebAuthn) จะอยู่บนการ์ดของตัวเองเมื่อตั้งรหัสผ่านแล้ว ใช้ควบคู่กับรหัสผ่านและไม่เคยใช้แทนรหัสผ่าน ดังนั้นการลบพาสคีย์ทั้งหมดจึงไม่ทำให้ใครถูกล็อกออก พาสคีย์ต้องใช้ชื่อโดเมนจริงและใบรับรองที่เบราว์เซอร์เชื่อถือ ค่าเริ่มต้น https://<ip>:3443 คือสิ่งที่ WebAuthn ปฏิเสธพอดี การ์ดจึงบอกไว้ตรง ๆ แทนที่จะแสดงปุ่มที่กดแล้วล้มเหลว
  • การเปลี่ยนแปลงต้องเป็น JSON คำขอที่เปลี่ยนแปลงสิ่งใดต้องส่ง Content-Type: application/json และต้องไม่ถูกเบราว์เซอร์ทำเครื่องหมายว่าเป็นคำขอข้ามไซต์ ดังนั้นหน้าเว็บบนไซต์อื่นจึงสั่งให้เบราว์เซอร์ของคุณเปลี่ยนการตั้งค่าบนที่อยู่ใน LAN ไม่ได้ สคริปต์ที่ควบคุม API จะส่งส่วนหัวนี้มา คำขออื่นใดจะถูกปฏิเสธด้วย 415
  • เนื่องจากด่านนี้เป็นแบบเลือกเปิด เมื่อไม่ได้ตั้ง UI และ API ทั้งหมด (รวมถึงการตั้งค่านอกสถานที่, เส้นทางการทดสอบการแทรกแซง และชุดกู้คืน) จะเข้าถึงได้โดยใครก็ตามที่เข้าถึงพอร์ตได้ เปิดด่านนี้เมื่อมีการใช้นอกสถานที่, การสำรองข้อมูลแบบไม่เปลี่ยนแปลงได้ หรือการเข้ารหัส
  • รัน BombVault บนเครือข่ายที่เชื่อถือได้และไม่เปิดเผยต่อภายนอกเท่านั้น สำหรับการเข้าถึงจากระยะไกล ให้วางไว้หลัง reverse proxy ที่เพิ่มการยืนยันตัวตนและ TLS การตอบสนองมี security headers พื้นฐาน (CSP, nosniff, X-Frame-Options, Referrer-Policy)
  • หลังรีเวิร์สพร็อกซี ทุกคำขอจะพกที่อยู่ของพร็อกซีมา ดังนั้นหากไม่มี TRUSTED_PROXY ตัวจำกัดจะนับไคลเอนต์ทั้งหมดรวมกัน และความล้มเหลวของผู้โจมตีจะล็อกคุณออกไปด้วย ระบุพร็อกซีใน TRUSTED_PROXY เพื่อให้กลับมานับแยกตามไคลเอนต์
  • Reverse proxy ที่อยู่หน้า BombVault ต้องส่งต่อส่วนหัว Authorization หรือ X-API-Key ไปยัง /mcp และต้องไม่บัฟเฟอร์คำตอบ มิฉะนั้นผู้ช่วยจะเชื่อมต่อไม่ได้ ดู เซิร์ฟเวอร์ MCP
  • ปลายทาง MCP /mcp จะตอบ 404 จนกว่าจะมีคีย์หรือเปิดการเข้าสู่ระบบผ่าน OAuth และจะขอคีย์หรือโทเคนจากทุกไคลเอนต์แม้ปิดรหัสผ่านเข้าสู่ระบบไว้ ไม่มีที่อยู่ใดได้รับการยกเว้น แม้แต่ localhost ไม่มีเครื่องมือกู้คืนหรือลบ และการกู้คืนข้อมูลสำรองการกำหนดค่าจะเพิกถอนคีย์ทุกตัว ดู เซิร์ฟเวอร์ MCP
  • เมื่อใช้ HTTP_ONLY=true คุกกี้เซสชันจะสูญเสียแฟล็ก Secure (จำเป็นต้องเป็นเช่นนั้น เพื่อให้ทำงานผ่าน HTTP ธรรมดาได้) ดังนั้นจึงควรเปิดรหัสผ่านหลัง proxy ที่ terminate TLS เท่านั้นหากความลับสำคัญ
  • การเชื่อมต่อ SSH สำหรับการสำรองข้อมูล VM จะเชื่อถือ host key ในการเชื่อมต่อครั้งแรก (TOFU) และปักหมุดไว้หลังจากนั้น ตรวจสอบคีย์ของโฮสต์แบบ out-of-band หากเส้นทางจาก container ไปยังโฮสต์ของคุณไม่เชื่อถือได้
  • การสำรองข้อมูลถูกเข้ารหัสโดย restic เมื่อเปิดการเข้ารหัส (การตั้งค่า; เปิดโดยค่าเริ่มต้น) โดยคีย์ได้มาจาก APP_KEY

เซิร์ฟเวอร์ MCP

เซิร์ฟเวอร์ MCP ไม่ต้องใช้ตัวแปรสภาพแวดล้อมใด คุณเปิดใช้งานได้ด้วยการสร้างคีย์ที่ การตั้งค่า, การเชื่อมต่อ, เซิร์ฟเวอร์ MCP และเซิร์ฟเวอร์จะตอบที่ /mcp บนพอร์ตเดียวกับเว็บอินเทอร์เฟซ (เช่น https://192.168.1.10:3443/mcp) เมื่อไม่มีคีย์ที่ใช้งานอยู่ พาธนี้จะตอบ 404 ไคลเอนต์ ใบรับรอง และขีดจำกัดอธิบายไว้ที่ เซิร์ฟเวอร์ MCP

การสำรองข้อมูล VM ผ่าน SSH

BombVault สำรองข้อมูล KVM/libvirt VMs โดยไม่เมานต์พาธ libvirt ใดๆ มันรัน virsh บนโฮสต์ผ่าน SSH (qemu+ssh://) ดังนั้นจึงไม่มีทางกระทบ VM Manager ของโฮสต์คุณ

การเมานต์ซ็อกเก็ต libvirt ของโฮสต์เข้าไปในคอนเทนเนอร์นั้นเปราะบางบน Unraid: VM Manager เป็นเจ้าของพาธเหล่านั้น และการสลับ "Enable VMs" อาจทำให้ libvirt เริ่มทำงานไม่ได้ คีย์ SSH ให้สิทธิ์ root บนโฮสต์ ซึ่งเป็นระดับความเชื่อถือเดียวกับ Docker socket ที่ BombVault ใช้อยู่แล้ว

การตั้งค่าอย่างรวดเร็ว:

  1. การตั้งค่า, การเชื่อมต่อ, SSH ของโฮสต์: คัดลอกคีย์สาธารณะที่แสดง
  2. เพิ่มต่อท้ายลงใน /root/.ssh/authorized_keys ของ Unraid (คงอยู่ในแฟลชด้วย เพื่อให้อยู่รอดหลังรีบูต)
  3. คลิก ทดสอบการเชื่อมต่อ

เทมเพลตเพิ่ม --add-host=host.docker.internal:host-gateway เพื่อให้ container เข้าถึงโฮสต์ได้ ตั้ง LIBVIRT_HOST เป็น LAN IP ของ Unraid ของคุณหากชื่อนั้นไม่ resolve (เช่น เมื่อ container ทำงานบนเครือข่าย br0.x ที่กำหนดเอง) หากคุณเปลี่ยนพอร์ต SSH ของ Unraid ให้ตั้ง LIBVIRT_SSH_PORT ให้ตรง สแนปช็อตขณะทำงาน ต้องการ qemu guest agent ใน VM เพิ่มเติมและดิสก์อยู่บน /mnt/cache (ไม่ใช่ /mnt/user)

คู่มือการตั้งค่า VM และเครือข่ายฉบับเต็ม

คู่มือทีละขั้นตอนฉบับสมบูรณ์ (การเปิดใช้งาน SSH, การอนุญาตคีย์แบบคงอยู่, การกำหนดเส้นทางเครือข่ายที่กำหนดเองและ VLAN, วิธีการต่อ VM และการแก้ปัญหาฝั่งโฮสต์) อยู่ที่ docs/vm-backup-ssh-setup.md บน GitHub

การตั้งค่านอกสถานที่

ตั้งค่าสำเนานอกสถานที่บนหน้า การตั้งค่า, นอกสถานที่ ดู Off-site & recovery สำหรับกระบวนการเต็มรูปแบบ (ไม่เปลี่ยนแปลงได้/append-only, การทดสอบการแทรกแซง และการซ้อม DR) โดยสรุป:

  • แบ็กเอนด์: SMB/CIFS และ NFS (เมานต์แชร์แล้วชี้ พาธการสำรองข้อมูล ไปยังมัน), แบ็กเอนด์ restic ดั้งเดิมโดยไม่ใช้ rclone (s3:..., rest:http://host:8000/repo, sftp:user@host:/repo) หรือรีโมต rclone ใดก็ได้ (rclone:<remote>:<bucket>/path) Backblaze B2 ไม่มีแบ็กเอนด์ในตัวที่นี่ ให้เข้าถึงผ่านปลายทาง S3 ของมัน (s3:https://s3.<region>.backblazeb2.com/<bucket>/<path>) โดยใช้ ID คีย์และคีย์แอปพลิเคชันเป็นข้อมูลรับรอง S3
  • ข้อมูลรับรองคลาวด์ที่ใช้ร่วมกัน ถูกเก็บแบบเข้ารหัสภายใต้ การตั้งค่า, การเข้าถึงคลาวด์, ข้อมูลรับรองคลาวด์ที่ใช้ร่วมกัน
  • ปลายทาง SSH ไม่ต้องติดตั้งอะไรที่ฝั่งไกล sftp: ต้องการเพียงเซิร์ฟเวอร์ SSH เพิ่มคีย์สาธารณะจาก การตั้งค่า, การเชื่อมต่อ, SSH ของโฮสต์ (อยู่ที่ /config/ssh/id_ed25519.pub ด้วย) ลงใน ~/.ssh/authorized_keys ของผู้ใช้ปลายทาง
  • การคัดลอกนอกสถานที่: BombVault จำลองสแนปช็อตใหม่ด้วย restic copy แบบทำเท่าที่ทำได้ ต่อยอดจากรีพอสิทอรีหลัก (ซึ่งมักอยู่ในเครื่อง) แต่ละโดเมนมีตารางเวลานอกสถานที่ของตัวเอง พร้อมปุ่ม จำลองตอนนี้
  • หลายปลายทางนอกสถานที่ต่อโดเมน: แต่ละโดเมนสามารถจำลองไปยังหลายปลายทางนอกสถานที่พร้อมกันได้ เพิ่มปลายทางเสริมบน การตั้งค่า, นอกสถานที่ แต่ละปลายทางมีรีพอสิทอรี, คลาสพื้นที่จัดเก็บ S3, แฟล็ก append-only, การเก็บรักษา และงบประมาณการเติบโตของตัวเอง ทั้งหมดจำลองตามตารางเวลานอกสถานที่ของโดเมนนั้น การตั้งค่านอกสถานที่เดี่ยวที่มีอยู่จะถูกยกไปเป็นปลายทางแรก
  • ปลายทาง: ปลายทางนอกสถานที่ตั้งค่าครั้งเดียวที่ การตั้งค่า, นอกสถานที่, ปลายทาง ผ่านตัวช่วยที่แสดงรายการทุกบริการที่รองรับ ดู ปลายทาง
  • การจัดวางต่อรายการ: แต่ละ container, VM และชุดไฟล์ทำให้ ในเครื่อง และเป้าหมายที่รับการสำรองข้อมูลของมันสว่างขึ้น การตั้งค่า, ที่จัดเก็บ, ค่าเริ่มต้นของการจัดวาง กำหนดสิ่งนี้ต่อโดเมนสำหรับรายการที่ไม่มีตัวเลือกของตัวเอง ดู การจัดวางต่อรายการ
  • การเก็บรักษาต่อแหล่ง: นโยบายในเครื่องและนอกสถานที่ทั้งสองอยู่บน การตั้งค่า, การเก็บรักษา (ปล่อยนโยบายนอกสถานที่ให้เป็นศูนย์ทั้งหมดเพื่อไม่ตัดสแนปช็อตนอกสถานที่โดยอัตโนมัติ) การ์ด การเก็บรักษาในเครื่อง และ การเก็บรักษานอกสถานที่ ต่างมี กฎการเก็บรักษาแยกตามแหล่ง ที่ให้คอนเทนเนอร์ VM แฟลช โฟลเดอร์ ZFS หรือการสำรองตัวเองมีกฎการเก็บรักษาของตัวเอง ทั้งสำหรับข้อมูลสำรองในเครื่องและที่เก็บนอกสถานที่ของแหล่งนั้น แหล่งที่ไม่มีกฎของตัวเองจะใช้กฎร่วม และการเก็บรักษาหลังการสำรองแต่ละครั้ง การคัดลอกไปนอกสถานที่ การล้างด้วยตนเอง และการแสดงตัวอย่างการเก็บรักษาจะใช้กฎของแหล่งที่กำลังทำงานด้วย เป้าหมายนอกสถานที่เพิ่มเติมใช้กฎที่ตั้งไว้ให้ที่ การตั้งค่า, นอกสถานที่
  • ขีดจำกัดแบนด์วิดท์: จำกัดอัตราการอัปโหลด/ดาวน์โหลดของ restic ภายใต้ การตั้งค่า, นอกสถานที่
  • สตรีมมิงมาก่อน: ใน การตั้งค่า, นอกสถานที่ ให้เลือกเซิร์ฟเวอร์สื่อ (Plex, Jellyfin และ Emby ถูกเลือกไว้ล่วงหน้าตามชื่ออิมเมจ) อัตราการส่งที่นับว่ากำลังสตรีม ขีดจำกัดการอัปโหลดขณะสตรีม และระยะเวลาหลังสตรีมก่อนที่ขีดจำกัดปกติจะกลับมา
  • คลาสพื้นที่จัดเก็บแบบเย็นและแบบเก็บถาวร (S3): สำหรับรีพอสิทอรีนอกสถานที่ S3 ดั้งเดิม ให้เลือกระดับที่กู้คืนอ่านได้ (Standard, Standard-IA, One Zone-IA, Intelligent-Tiering, Glacier Instant Retrieval) รีโมต rclone จะตั้งคลาสในการตั้งค่า rclone
  • ที่เก็บหลักระยะไกลแทนในเครื่อง: พาธการสำรองข้อมูล ของโดเมนเองสามารถเป็นหนึ่งในแบ็กเอนด์ข้างต้นได้ โดยไม่มีสำเนาในเครื่องและไม่มีขั้นตอนการจำลอง ดู ที่เก็บหลักระยะไกล สำหรับสวิตช์ ในเครื่อง/ระยะไกล ในบรรทัดเดียวกันและการตั้งค่าความปลอดภัยด้านแบนด์วิดท์, append-only และงบประมาณการเติบโตของมัน

ความผิดปกติ

การตรวจจับความผิดปกติตั้งค่าในการ์ด ความผิดปกติ ที่ การตั้งค่า, ความสมบูรณ์ ตัวควบคุมแต่ละตัวบันทึกทันทีที่คุณเปลี่ยน และสามตัวใต้สวิตช์จะถูกซ่อนไว้ขณะที่การตรวจจับปิดอยู่

การตั้งค่า ค่าเริ่มต้น ทำอะไร
ตรวจจับความผิดปกติ เปิด เทียบการสำรองข้อมูลทุกครั้งกับประวัติของรายการนั้นเอง เมื่อปิด จะไม่มีการตรวจสิ่งใหม่ และรายการ ความผิดปกติ จะหายไปจากแถบด้านข้าง การ์ดยังคงลิงก์ไปยังสิ่งที่พบก่อนหน้า
ความไว สมดุล เข้มงวด รายงานการเปลี่ยนแปลงที่เล็กกว่าด้วย ผ่อนปรน รายงานเฉพาะที่ใหญ่
ส่งการแจ้งเตือนสำหรับ เฉพาะสิ่งที่พบระดับวิกฤต ระดับความรุนแรงต่ำสุดที่ส่งข้อความผ่านช่องทางที่ตั้งไว้ใน การแจ้งเตือน การสำรองข้อมูลและดัมพ์ที่ล้มเหลวซ้ำ และการตรวจการกู้คืนตามกำหนดการที่ล้มเหลว ส่งข้อความของตัวเองอยู่แล้วและจะไม่ส่งซ้ำ
เก็บข้อมูลสำรองเก่าไว้เมื่อต้นทางหดลงมากหรือถูกเขียนใหม่ เปิด ตราบใดที่รายการมีสิ่งที่พบที่เปิดอยู่เรื่องต้นทางที่เกือบว่าง การหดลงมาก หรือข้อมูลส่วนใหญ่ถูกบันทึกซ้ำใหม่ การเก็บรักษาและการล้างจะไม่แตะการสำรองข้อมูลเก่าของรายการนั้น รับทราบสิ่งที่พบหรือทำเครื่องหมายว่าคาดไว้แล้วเพื่อปล่อยมัน

แต่ละรายการมีความไวและระดับการแจ้งเตือนขั้นต่ำของตัวเองได้ ตั้งค่าได้ที่หน้า ความผิดปกติ รายการที่มีสิ่งที่พบเปิดอยู่จะมีการตั้งค่านี้ใต้ การเฝ้าติดตาม บนการ์ดของรายการ ส่วนรายการอื่นเปิดได้จากการ์ด ไม่มีรายการที่เปิดอยู่ หรือตั้งค่าในแผงของรายการนั้นเอง: ส่วนโฟลเดอร์ของคอนเทนเนอร์และการตั้งค่าของ VM (ทั้งสองอยู่ในโหมดขั้นสูง) ตัวแก้ไขโฟลเดอร์ของชุดโฟลเดอร์ และหน้า Flash กับ สำรองข้อมูลตัวเอง สำหรับรายการ ZFS จะอยู่ในตัวแก้ไขของรายการบนหน้า ZFS และใช้กับทุกชุดข้อมูลในทรีของรายการนั้น

การตั้งค่าแบบพกพา (ส่งออกและนำเข้า)

การ์ด ส่งออก / นำเข้าการตั้งค่า บนหน้า การตั้งค่า, ระบบ จะเขียนการตั้งค่า BombVault ทั้งหมดของคุณ (การตั้งค่าโดเมน, ปลายทางนอกสถานที่, ตารางเวลา, การเก็บรักษา, การแจ้งเตือน) ลงในไฟล์ JSON ที่พกพาได้ ซึ่งคุณสามารถนำเข้าบนอินสแตนซ์อื่นได้ ดังนั้นการย้ายไปยังเครื่องใหม่หรือการโคลนการตั้งค่าจึงไม่ได้หมายถึงการป้อนทุกอย่างใหม่ด้วยมือ การนำเข้าจะแสดงตัวอย่างและขอการยืนยัน และไม่เคยแตะต้องข้อมูลหรือประวัติการสำรองข้อมูลของคุณ

การส่งออกอาจมีข้อมูลรับรอง

คุณเลือกได้ว่าจะรวมข้อมูลรับรองนอกสถานที่ การแจ้งเตือน และโบรกเกอร์ MQTTในไฟล์หรือไม่ เมื่อรวมข้อมูลรับรองไว้ การส่งออกจะมีความอ่อนไหวเทียบเท่าชุดกู้คืนของคุณ ดังนั้นเก็บไว้ในที่ปลอดภัย หากไม่รวมไว้ ไฟล์จะมีเพียงการตั้งค่าที่ไม่เป็นความลับเท่านั้น