콘텐츠로 이동

구성

이 페이지는 컨테이너의 환경 변수, 템플릿이 제공하는 마운트, SSH를 통한 VM 백업, 오프사이트 설정을 다룹니다. 백업 저장소 경로는 환경 변수가 아니라 앱 내부(설정, 백업 경로)에서 구성합니다.

환경 변수

변수 필수 설명
APP_KEY restic 저장소 비밀번호를 파생하는 데 사용되는 32바이트 16진수 비밀 값(64개의 16진수 문자). openssl rand -hex 32로 생성하세요. 안전하게 보관하세요: 잃어버리면 암호화된 백업을 복구할 수 없게 됩니다.
LIBVIRT_HOST VM용 VM 백업을 위해 SSH로 도달하는 Unraid 호스트(기본값 host.docker.internal; 템플릿이 LAN IP 자리 표시자를 미리 채웁니다). Unraid LAN IP를 사용하세요. 사용자 지정 br0.x 네트워크에서는 필수입니다.
LIBVIRT_SSH_PORT 아니요 VM 백업용 호스트 SSH 포트(기본값 22).
LIBVIRT_SSH_USER 아니요 VM 백업용 호스트의 SSH 사용자(기본값 root).
PORT 아니요 HTTP 포트(기본값 3000; HTTP_ONLY=true에서만 사용됨).
HTTPS_PORT 아니요 HTTPS 포트(기본값 3443; 템플릿이 1:1로 게시하므로 WebUI가 https://<ip>:3443에서 응답함).
HTTP_ONLY 아니요 자체 서명 HTTPS 리스너를 비활성화하고 일반 HTTP만 제공하려면 true로 설정(TLS 종료 리버스 프록시 뒤에서 사용).
HOST_SOURCE_ROOT 아니요 Host Data로 마운트되는 호스트 경로(기본값 /mnt). BombVault는 Docker가 보고하는 바인드 마운트 소스를 이 마운트 아래의 경로로 변환합니다. 다른 호스트 루트를 마운트한 경우에만 변경하세요.
BOMBVAULT_SELF_CONTAINER 아니요 BombVault 컨테이너 자체의 이름으로, 자기 자신을 절대 백업(따라서 중지)하지 않도록 합니다(기본값 BombVault; 브리지 네트워킹에서 호스트 이름으로 자동 감지).
BACKUP_MAX_HOURS 아니요 단일 백업 실행이 강제 취소되기 전에 도메인 잠금을 유지할 수 있는 최대 실제 경과 시간(멈춘 실행이 도메인을 영원히 차단하지 못하게 하는 보호 장치). 비어 있으면(기본값) 48을 사용합니다. 매우 크거나 느린 클라우드 백업에는 이를 높이세요(상한에서 취소된 실행은 context deadline exceeded로 실패함). 상한을 완전히 비활성화하려면 0으로 설정하세요.
TZ 아니요 스케줄러용 시간대(예: Europe/Berlin).

마운트

CA 템플릿에 표시된 대로 Docker 소켓, 플래시(/boot), Host Data 루트(/mnt)를 마운트하세요. 백업 소스대상은 모두 Host Data 아래에 있으며, rslave로 마운트되므로 컨테이너 시작 후에 마운트되는 원격 공유(예: /mnt/remotes 아래)가 재시작 없이 보이게 됩니다.

백업 저장소 경로는 기본적으로 /mnt/user/bombvault/{container,vms,flash,config,files}이며 첫 백업 시 생성됩니다. 설정, 백업 경로에서 언제든지 위치를 변경할 수 있습니다.

호스트 통합 확인

컨테이너가 시작된 후 웹 UI에서 /spike를 엽니다. 모든 마운트와 CLI(Docker 소켓, libvirt, restic, qemu-img, rclone)를 검사하고 누락된 부분을 보고합니다.

보안 모델

호스트에 대한 root에 준하는 제어 권한

Docker 소켓을 통해 BombVault는 컨테이너를 중지, 제거, 재생성할 수 있고 appdata를 읽고 쓸 수 있으며, VM 백업을 위해 SSH(qemu+ssh://, 기본 root)를 통해 호스트에 로그인하여 virsh를 실행합니다. 그 웹 UI에 접근할 수 있는 사람은 사실상 호스트에 대한 root 권한을 가진 것과 같습니다.

  • 선택적 비밀번호 보호(설정, 보안): 로그인을 요구하려면 비밀번호를 설정하고, 비활성화하려면 지우세요. 신뢰할 수 있는 LAN 사용을 위해 기본적으로 꺼져 있습니다. 세션은 서명되며(APP_KEY에서 파생된 HMAC) 비밀번호를 변경하면 무효화됩니다. 로그인은 속도 제한이 적용됩니다.
  • 게이트는 선택 사용이므로, 설정하지 않으면 전체 UI와 API(오프사이트 설정, 변조 테스트 경로, 복구 키트 포함)에 포트에 접근할 수 있는 누구나 도달할 수 있습니다. 오프사이트, 불변 백업 또는 암호화를 사용하게 되면 게이트를 활성화하세요.
  • BombVault는 신뢰할 수 있고 외부에 노출되지 않은 네트워크에서만 실행하세요. 원격 접근에는 인증과 TLS를 추가하는 리버스 프록시 뒤에 두세요. 응답에는 기본 보안 헤더(CSP, nosniff, X-Frame-Options, Referrer-Policy)가 포함됩니다.
  • HTTP_ONLY=true에서는 세션 쿠키가 Secure 플래그를 잃으므로(일반 HTTP에서 작동하려면 그래야 함), 기밀성이 중요하다면 TLS 종료 프록시 뒤에서만 비밀번호를 활성화하세요.
  • VM 백업 SSH 연결은 첫 접속 시 호스트 키를 신뢰하고(TOFU) 이후 이를 고정합니다. 컨테이너에서 호스트로의 경로가 신뢰할 수 없다면 호스트의 키를 대역 외로 확인하세요.
  • 암호화가 활성화되면(설정; 기본 켜짐) 백업은 restic에 의해 암호화되며, 키는 APP_KEY에서 파생됩니다.

SSH를 통한 VM 백업

BombVault는 어떤 libvirt 경로도 마운트하지 않고 KVM/libvirt VM을 백업합니다. SSH(qemu+ssh://)를 통해 호스트에서 virsh를 실행하므로 호스트 VM Manager에 절대 영향을 줄 수 없습니다.

빠른 설정:

  1. 설정, 시스템, SSH를 통한 VM 백업: 표시된 공개 키를 복사합니다.
  2. Unraid의 /root/.ssh/authorized_keys에 추가합니다(재부팅 후에도 유지되도록 플래시에도 저장됨).
  3. 연결 테스트를 클릭합니다.

템플릿은 컨테이너가 호스트에 도달할 수 있도록 --add-host=host.docker.internal:host-gateway를 추가합니다. 그 이름이 확인되지 않으면(예: 컨테이너가 사용자 지정 br0.x 네트워크에서 실행될 때) LIBVIRT_HOST를 Unraid LAN IP로 설정하세요. Unraid의 SSH 포트를 변경했다면 LIBVIRT_SSH_PORT를 일치하도록 설정하세요. 라이브 스냅샷은 추가로 VM에 qemu 게스트 에이전트가 있어야 하고 디스크가 /mnt/cache(/mnt/user가 아님)에 있어야 합니다.

전체 VM 설정 및 네트워킹 가이드

전체 단계별 가이드(SSH 활성화, 영구 키 승인, 사용자 지정 네트워크 및 VLAN 라우팅, VM별 방식과 호스트 측 문제 해결)는 GitHub의 docs/vm-backup-ssh-setup.md에 있습니다.

오프사이트 설정

설정, 오프사이트 탭에서 오프사이트 복제본을 구성하세요. 전체 워크플로(불변/append-only, 변조 테스트, DR 리허설)는 오프사이트 및 복구를 참고하세요. 요약하면:

  • 백엔드: SMB/CIFS와 NFS(공유를 마운트하고 백업 경로를 그곳으로 지정), rclone 없는 네이티브 restic 백엔드(s3:..., rest:http://host:8000/repo, b2:..., sftp:user@host:/repo), 또는 모든 rclone 원격(rclone:<remote>:<bucket>/path).
  • 클라우드 자격 증명은 설정, 오프사이트, 클라우드 자격 증명 아래에 암호화되어 저장됩니다.
  • SSH 대상은 상대편에 아무것도 설치할 필요가 없습니다. sftp:는 SSH 서버만 필요합니다. 설정, 시스템, SSH를 통한 VM 백업의 공개 키(/config/ssh/id_ed25519.pub에도 있음)를 대상 사용자의 ~/.ssh/authorized_keys에 추가하세요.
  • 오프사이트 복사: BombVault는 새 스냅샷을 restic copy로 최선 노력 방식으로 복제합니다. 로컬 저장소가 주 저장소로 유지됩니다. 각 도메인은 자체 오프사이트 일정을 가지며, 지금 복제 버튼도 있습니다.
  • 도메인별 여러 오프사이트 대상: 각 도메인은 여러 오프사이트 대상에 동시에 복제할 수 있습니다. 설정, 오프사이트에서 추가 대상을 더하세요. 각각 자체 저장소, S3 스토리지 클래스, append-only 플래그, 보존, 증가 예산을 가지며, 모두 그 도메인의 오프사이트 일정에 따라 복제됩니다. 기존의 단일 오프사이트 설정은 첫 번째 대상으로 이어집니다.
  • 소스별 보존: 로컬 정책은 설정, 경로 및 스토리지에, 오프사이트 정책은 설정, 오프사이트에 있습니다(오프사이트 스냅샷을 자동으로 정리하지 않으려면 모두 0으로 두세요).
  • 대역폭 제한: 설정, 오프사이트에서 restic 업로드/다운로드 속도를 제한하세요.
  • 콜드 및 아카이브 스토리지 클래스(S3): 네이티브 S3 오프사이트 저장소의 경우 복원 가능한 계층(Standard, Standard-IA, One Zone-IA, Intelligent-Tiering, Glacier Instant Retrieval)을 선택하세요. rclone 원격은 rclone 구성에서 클래스를 설정합니다.

이식 가능한 설정(내보내기 및 가져오기)

설정 페이지의 설정 내보내기 및 가져오기 카드는 전체 BombVault 구성(도메인 설정, 오프사이트 대상, 일정, 보존, 알림)을 다른 인스턴스에서 가져올 수 있는 이식 가능한 JSON 파일로 기록하므로, 새 장비로 옮기거나 설정을 복제할 때 모든 것을 손으로 다시 입력할 필요가 없습니다. 가져오기는 미리 보기를 표시하고 확인을 요청하며, 백업 데이터나 기록을 절대 건드리지 않습니다.

내보내기에 자격 증명이 포함될 수 있습니다

오프사이트 및 알림 자격 증명을 파일에 포함할지 선택할 수 있습니다. 자격 증명을 포함하면 내보내기가 복구 키트만큼 민감해지므로 안전한 곳에 보관하세요. 포함하지 않으면 파일에는 비밀이 아닌 설정만 담깁니다.