diff --git a/CHANGELOG.md b/CHANGELOG.md index d892ed7..87f0d62 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -165,3 +165,14 @@ +### 16. 部署 Vaultwarden 私人密码保险箱 (`https://vw.961504.xyz`) 与极空间每日自动备份 +- **操作时间**:2026-11-06 22:57 ~ 22:59 +- **目标设备**:Mac mini (`192.168.31.164`) & SG Azure (`104.43.105.243`) & 极空间 Z4 (`192.168.31.185`) +- **变更内容**: + 1. **Vaultwarden 容器**:编写 [`stacks/vaultwarden/docker-compose.yml`](file:///Users/ixvii0iv/homelab/stacks/vaultwarden/docker-compose.yml) 并在 Mac mini OrbStack 启动 `vaultwarden/server:latest`(监听 `8222` 端口,数据持久化于 `~/homelab/stacks/vaultwarden/data`)。 + 2. **双通道 HTTPS 反代与导航页卡片**: + - 免端口访问:`https://vw.961504.xyz`(走 Azure 443 反代至 `100.108.205.40:8222`) + - 家宽直连访问:`https://vw.home.961504.xyz:10443`(走家里 10443 反代至 `127.0.0.1:8222`) + - 已将 **「Vaultwarden 密码库」** 添加至 `https://nav.961504.xyz` 导航页。 + 3. **极空间 20TB 每日自动备份**:编写 [`scripts/backup-to-nas.sh`](file:///Users/ixvii0iv/homelab/scripts/backup-to-nas.sh) 并注册 `~/Library/LaunchAgents/com.homelab.nas-backup.plist`(每天凌晨 03:30 自动打包备份 Vaultwarden 数据、Sun-Panel 配置与 Homelab 脚本至 `/Users/ixvii0iv/nas/个人空间/MacMini_Backups/`,自动保留最近 30 份)。 +- **回滚方式**:`ssh mini "cd ~/homelab/stacks/vaultwarden && docker compose down && launchctl unload ~/Library/LaunchAgents/com.homelab.nas-backup.plist"` diff --git a/PLAN.md b/PLAN.md index 6d1f00a..37f9a44 100644 --- a/PLAN.md +++ b/PLAN.md @@ -60,4 +60,7 @@ - [x] **4.2 极空间 Z4 (`192.168.31.185`) 20TB 存储自动挂载与保活**: - 已编写 [`scripts/mount-zspace.sh`](file:///Users/ixvii0iv/homelab/scripts/mount-zspace.sh) 并在 Mac mini 注册 `com.homelab.mount-zspace.plist` 守护任务(每 2 分钟巡检断线自动重连)。 - 已成功将极空间 20TB 磁盘挂载至 Mac mini 的 `~/nas/共享文件` 与 `~/nas/个人空间`(可用空间 17TB)。 -- [ ] **4.3 智能家居中枢**:部署 **Home Assistant + Scrypted**(摄像头接入 Apple HomeKit 安全视频)。 +- [x] **4.3 部署 Vaultwarden 私人密码保险箱与极空间每日自动备份**: + - 已部署 **Vaultwarden** ([`stacks/vaultwarden/docker-compose.yml`](file:///Users/ixvii0iv/homelab/stacks/vaultwarden/docker-compose.yml)),提供免端口入口 **`https://vw.961504.xyz`** 与家宽直连入口 **`https://vw.home.961504.xyz:10443`**,并已添加至家庭导航页。 + - 已编写 [`scripts/backup-to-nas.sh`](file:///Users/ixvii0iv/homelab/scripts/backup-to-nas.sh) 并注册 `com.homelab.nas-backup.plist` 定时任务,每天凌晨 03:30 自动打包备份 Vaultwarden 密码库与配置至极空间 `~/nas/个人空间/MacMini_Backups/`(保留最近 30 份)。 +- [ ] **4.4 开启 Mac mini 全屋无线时间机器 (Time Machine) 备份中心**:将极空间挂载目录或 Mac mini 共享为 Apple Time Machine 服务器,让你的 MacBook Air 在家连 Wi-Fi 时自动无感备份。 diff --git a/scripts/backup-to-nas.sh b/scripts/backup-to-nas.sh new file mode 100755 index 0000000..702e9e2 --- /dev/null +++ b/scripts/backup-to-nas.sh @@ -0,0 +1,33 @@ +#!/usr/bin/env bash +# ============================================================================== +# Mac mini 核心数据自动备份至极空间 Z4 (20TB NAS) 脚本 +# 每天凌晨 03:30 自动打包备份 Vaultwarden 密码库、Sun-Panel 导航页及 Homelab 配置 +# ============================================================================== +set -euo pipefail + +NAS_BACKUP_DIR="/Users/ixvii0iv/nas/个人空间/MacMini_Backups" +TIMESTAMP=$(date '+%Y%m%d_%H%M%S') + +# 确保极空间已挂载 +/Users/ixvii0iv/homelab/scripts/mount-zspace.sh >/dev/null 2>&1 || true + +if [ ! -d "/Users/ixvii0iv/nas/个人空间" ]; then + echo "[$(date '+%Y-%m-%d %H:%M:%S')] [WARN] 极空间未挂载,跳过本次备份" + exit 0 +fi + +mkdir -p "$NAS_BACKUP_DIR" + +ARCHIVE="$NAS_BACKUP_DIR/homelab_backup_${TIMESTAMP}.tar.gz" +tar -czf "$ARCHIVE" \ + -C /Users/ixvii0iv/homelab \ + stacks/vaultwarden/data \ + stacks/sun-panel/conf \ + configs \ + scripts \ + README.md PLAN.md CHANGELOG.md 2>/dev/null || true + +# 保留最近 30 份备份 +ls -1t "$NAS_BACKUP_DIR"/homelab_backup_*.tar.gz 2>/dev/null | tail -n +31 | xargs rm -f 2>/dev/null || true + +echo "[$(date '+%Y-%m-%d %H:%M:%S')] [OK] 已备份至极空间: $ARCHIVE" diff --git a/stacks/azure-edge/Caddyfile b/stacks/azure-edge/Caddyfile index 127416b..85835e2 100644 --- a/stacks/azure-edge/Caddyfile +++ b/stacks/azure-edge/Caddyfile @@ -30,3 +30,11 @@ agy.961504.xyz:443 { } reverse_proxy 100.108.205.40:7681 } + +# 5. Vaultwarden 私人密码保险箱 (443 免端口访问) -> https://vw.961504.xyz +vw.961504.xyz:443 { + encode zstd gzip + reverse_proxy 100.108.205.40:8222 { + header_up X-Real-IP {remote_host} + } +} diff --git a/stacks/gateway/Caddyfile b/stacks/gateway/Caddyfile index 28af733..5c67bd2 100644 --- a/stacks/gateway/Caddyfile +++ b/stacks/gateway/Caddyfile @@ -58,3 +58,12 @@ agy.home.961504.xyz:10443 { } reverse_proxy 127.0.0.1:7681 } + +# 6. Vaultwarden 私人密码保险箱 (https://vw.home.961504.xyz:10443) +vw.home.961504.xyz:10443 { + tls /Users/ixvii0iv/homelab/stacks/gateway/certs/fullchain.pem /Users/ixvii0iv/homelab/stacks/gateway/certs/privkey.pem + encode zstd gzip + reverse_proxy 127.0.0.1:8222 { + header_up X-Real-IP {remote_host} + } +} diff --git a/stacks/vaultwarden/docker-compose.yml b/stacks/vaultwarden/docker-compose.yml new file mode 100644 index 0000000..ede7026 --- /dev/null +++ b/stacks/vaultwarden/docker-compose.yml @@ -0,0 +1,15 @@ +services: + vaultwarden: + image: vaultwarden/server:latest + container_name: vaultwarden + restart: unless-stopped + environment: + - DOMAIN=https://vw.961504.xyz + - SIGNUPS_ALLOWED=true + - WEBSOCKET_ENABLED=true + - ADMIN_TOKEN=k10y15ZXC. + - TZ=Asia/Shanghai + volumes: + - ./data:/data + ports: + - "8222:80"