Joulenap/joulenap
GitHub: Joulenap/joulenap
Joulenap 是一个自托管的 Proxmox VE 备份调度器,通过 Wake-on-LAN 按需唤醒和关闭备份服务器,实现节能的自动化备份流程。
Stars: 18 | Forks: 0
你的 Proxmox 备份服务器在休眠。Joulenap 唤醒它,运行备份,然后再让它安然入睡。
Joulenap 是一个小型自托管的 **Web UI + 调度器**,可运行自动化的 Proxmox VE 备份,将其备份到**大部分时间都处于关机状态的 Proxmox Backup Server (PBS)**。在预定的时间,它会通过网络(Wake-on-LAN)唤醒 PBS,运行备份,应用保留和垃圾回收策略,将 PBS 重新关闭,并通知你——这样你就可以获得异地、去重的备份,而**无需让第二台机器 24/7 全天候运行**。 名字就说明了这一点:当你的备份服务器打个盹儿时,节省了一个 *joule*(焦耳)的能量。💤 ## 为什么需要 专用的 PBS 机器是将备份保留在独立硬件上的正确方法(3-2-1 规则),但如果让设备 24/7 全天候运行,仅仅为了每晚执行几分钟的任务,这会浪费电力。Proxmox 内置的计划备份假设目标始终可达,因此它们无法驱动“唤醒 → 备份 → 休眠”的循环。 Joulenap 用一个友好的 UI 填补了这一空白:选择时间,选择要备份的 guest,然后就无需操心了。
## 工作原理

所有设置都保存在 `config.yaml` 中(每个字段的具体说明、分组和注释请参见 [`config.example.yaml`](config.example.yaml))。通常你不需要手动修改它 — 容器会在首次运行时在挂载的 `data/` 目录中创建它,并由**设置向导**来填充内容。机密信息(API token、SSH 密钥、bot token)保留在该 `config.yaml` 中;仓库中的副本被 **git-ignored**(Git 忽略),因此永远不会被提交。
## 安全性
Joulenap 可以触发备份以及开启/关闭机器,因此应将其视为特权应用:
- 对 PVE 和 PBS 使用**受限的 API token**,而不是 root 密码 — 每个 token 所需的确切权限列在 [`docs/ARCHITECTURE.md`](docs/ARCHITECTURE.md#permissions-cheat-sheet) 中。
- 用于 PBS 的 SSH 密钥应是专用的,并且最好限制为仅能执行关机命令。
- **PBS API 已启用 TLS-pinning**:对 PBS 的调用会锁定到其证书指纹(在设置时捕获),因此如果证书被替换/中间人攻击 (MITM) 将被拒绝;合法续期的证书在你重新运行向导中的 PBS 检测后会被接受。
- **会验证 PBS SSH 主机密钥**:在设置期间确认一次并存储在 `data/known_hosts` 中;随后的关机/GC 连接都会根据此文件进行验证。详见 [`docs/CONFIG-WIZARD.md`](docs/CONFIG-WIZARD.md#security)。
- 将 UI 保留在你的局域网/VPN 中,并启用登录保护。不要将其暴露在互联网上。
- `config.yaml` 包含机密信息 — 请严格限制其文件权限,并将其排除在版本控制之外。
- **登录锁定**:在某个 IP 地址连续 5 次登录失败后,该 IP 将被锁定 5 分钟(防止在线暴力破解攻击)。
- **密码最低要求**:管理员密码必须至少为 8 个字符。
- **会话 cookie**(配置中的 `app.session`):当通过 HTTPS 或在 TLS 终结代理后提供服务时,请设置 `https_only: true`;`max_age_days` 控制会话生命周期(默认 14 天)。更改管理员密码会立即使所有现有会话失效。
- **首次运行设置**:请尽快完成初始账户设置 — 在创建账户之前,设置端点将保持开放状态(为安全起见,已进行速率限制)。
## 路线图
- [✅] v0.1:调度器 + WoL + vzdump + 保留策略 + 通知 + Web UI
- [✅] 每次备份后进行垃圾回收,以及计划内的 verify 任务
- [✅] 来自 PBS 的按 guest 划分的最新备份状态
- [ ] RTC 唤醒选项(BIOS 闹钟)作为 WoL 的替代方案
- [ ] 多个 PBS 目标 / 异地同步
## 许可证
基于 **GNU Affero General Public License v3.0** (AGPL-3.0) 获得许可。详见 [`LICENSE`](LICENSE)。
## 免责声明
Joulenap 是一个独立的开源项目,**与 Proxmox Server Solutions GmbH 没有关联、不受其赞助或认可**。“Proxmox” 是其各自所有者的商标;此处使用它仅用于描述兼容性。标签:Proxmox VE, TCP SYN 扫描, Wake-on-LAN, Web UI, 任务调度, 内存分配, 自动化备份, 自定义请求头, 节能, 请求拦截, 跨平台