mirror of
https://github.com/MacRimi/ProxMenux.git
synced 2026-08-01 05:16:19 +00:00
docs: promote /web from develop — v1.2.3 changelog + Backups video + install page refresh + PBS keyfile docs polish
Consolidates the /web changes that were made on develop for the v1.2.3 stable
release, so the release PR (develop → main) can focus on version.txt +
AppImage + shell scripts without web conflicts.
Contents:
- CHANGELOG.md + web/data/changelog/es.md — v1.2.3 stable entry prepended
(bullets + tables, not paragraphs) with the release header image.
- images/ProxMenux_backup.png — new v1.2.3 release header image.
- web/app/[locale]/docs/backup-restore/page.tsx +
web/messages/{en,es}/docs/backup-restore/index.json — new Video walkthrough
block for the YouTube demo of the Backups feature (videoId K7A1KtOe4IQ),
embedded high on the overview page via the shared YouTubeEmbed component.
- web/app/[locale]/docs/installation/page.tsx +
web/messages/{en,es}/docs/installation.json +
web/public/install/install.png — stale Translation-flavour and Python-from-
PyPI mentions removed from the install page; screenshot refreshed and moved
to local /install/install.png (was pointing at the legacy GitHub Pages URL).
- web/messages/es/docs/backup-restore/destinations/pbs.json — minor polish
aligned with PR #247 already on main.
- web/public/images/docs/backup-restore/pbs-paired-backup-groups.png — updated
screenshot to match the reworked PBS-paired-group naming shipped in the beta
cycle.
- images/logos_txt/jc_channel.txt — new asset for the contributors page.
This commit is contained in:
@@ -4,6 +4,7 @@ import { Link } from "@/i18n/navigation"
|
||||
import { DocHeader } from "@/components/ui/doc-header"
|
||||
import { Callout } from "@/components/ui/callout"
|
||||
import { DataFlowDiagram } from "@/components/ui/data-flow-diagram"
|
||||
import { YouTubeEmbed } from "@/components/ui/youtube-embed"
|
||||
|
||||
export async function generateMetadata({
|
||||
params,
|
||||
@@ -81,6 +82,19 @@ export default async function BackupRestoreOverviewPage({
|
||||
{t.rich("intro.body", { code, strong })}
|
||||
</Callout>
|
||||
|
||||
<h2 className="text-2xl font-semibold mt-10 mb-4 text-gray-900">
|
||||
{t("video.heading")}
|
||||
</h2>
|
||||
<p className="mb-4 text-gray-800 leading-relaxed">
|
||||
{t("video.intro")}
|
||||
</p>
|
||||
|
||||
<YouTubeEmbed
|
||||
videoId="K7A1KtOe4IQ"
|
||||
title={t("video.title")}
|
||||
caption={t("video.caption")}
|
||||
/>
|
||||
|
||||
<h2 className="text-2xl font-semibold mt-10 mb-4 text-gray-900">
|
||||
{t("whatItIsNot.heading")}
|
||||
</h2>
|
||||
|
||||
@@ -97,7 +97,7 @@ export default async function InstallationPage({ params }: { params: Promise<{ l
|
||||
<p className="mb-4 text-gray-800 leading-relaxed">{t.rich("during.outro", { code, strong })}</p>
|
||||
|
||||
<Image
|
||||
src="https://macrimi.github.io/ProxMenux/install/install.png"
|
||||
src="/install/install.png"
|
||||
alt={t("during.imageAlt")}
|
||||
width={900}
|
||||
height={500}
|
||||
|
||||
@@ -1,4 +1,107 @@
|
||||
|
||||
## 2026-07-14
|
||||
|
||||
### Nueva versión ProxMenux v1.2.3
|
||||
|
||||
|
||||

|
||||
|
||||
Consolidación estable del **ciclo beta v1.2.2.x** (v1.2.2.1 → v1.2.2.2 → v1.2.2.3). La novedad principal es una nueva sección **Backups** con un flujo para crear / programar / restaurar contra Local, PBS y Borg, una tarjeta de progreso en tiempo real de post-restore, un diálogo de cifrado PBS, y una restauración *direction-aware* que gestiona los saltos entre kernels. Alrededor de eso: una nueva vista de topología Network Flow, tarjetas rediseñadas en Overview / VM & LXC / Storage / Network, notificaciones con informcacion más ricas sin necesidad de IA, un panel Health Monitor Thresholds actualizado, y una re-verificación completa del catálogo de modelos IA en los cinco providers soportados.
|
||||
|
||||
---
|
||||
|
||||
## 🗄️ Backups integrados en el Monitor
|
||||
|
||||
- **Crear / programar / restaurar** copias del host contra destinos **Local**, **Proxmox Backup Server** y **Borg** desde el dashboard.
|
||||
- **Dos modos de programación**: timer systemd propio, o *attached* a un job vzdump PVE existente (recomendado) con retención heredada de la tarea de copia en cada ejecución.
|
||||
- **Cifrado PBS con blob de recuperación**: los backups cifrados almacenan una copia de la keyfile envuelta con passphrase como grupo `-keyrecovery` junto a cada backup, para que una instalación instalacion nueva de proxmox siempre pueda recuperar la clave con la passphrase del usuario.
|
||||
- **Restauración direction-aware**: reaplica ajustes IOMMU / VFIO / GRUB en saltos entre kernels, protege paquetes críticos del cascade-remove, re-mapea NICs automáticamente tras un cambio de placa base.
|
||||
- **Tarjeta de progreso post-restore en vivo**: tras el reboot, la pestaña Backups muestra una tarjeta en tiempo real con hitos paso a paso, estado por componente (NVIDIA, Intel GPU tools, Coral, AMD tools) y un log tail con filtro "Issues only". Las restauraciones pasadas quedan archivadas y navegables.
|
||||
- **Gestión de la keyfile PBS inline en el Monitor**: cada fila de destino PBS expone Descargar / Subir / Eliminar para la keyfile, más un toggle Sí/No + passphrase + botón Apply contextual para el escrow. Cuando la keyfile instalada no coincide con el manifest del backup, View contents / Download / Restore ahora muestran un panel ámbar estructurado con el fingerprint requerido, para saber qué keyfile importar.
|
||||
|
||||
---
|
||||
|
||||
## 🌐 Diagrama Network Flow
|
||||
|
||||
- Nueva vista de topología en vivo en la pestaña **Network**: NICs → host → bridges → LXCs / VMs.
|
||||
- Pulsos rx / tx animados en cada enlace interno — respuesta inmediata a *"¿qué guest está tirando o empujando ahora mismo?"* sin cruzar varios paneles.
|
||||
- Layout en árbol diseñado para leerse limpio en dispositivos móviles.
|
||||
|
||||
---
|
||||
|
||||
## 🎨 Tarjetas rediseñadas en Overview / VM & LXC / Storage / Network
|
||||
|
||||
- Layouts rediseñados para lectura más rápida y con información más densa y práctica.
|
||||
- Números clave a la vista de un vistazo, agrupados por relevancia.
|
||||
- Grid responsive que se comporta limpio desde móvil hasta ultrawide.
|
||||
- Las tarjetas de **Physical Disks** y **Physical Interfaces** en Storage y Network son el cambio visual más grande — presentación por-item más clara.
|
||||
|
||||
---
|
||||
|
||||
## 🔔 Notificaciones más ricas out of the box
|
||||
|
||||
Para quienes **no** usan un agente de enriquecimiento con IA, el cuerpo de las plantilas ahora añade contenido más útil:
|
||||
|
||||
- Los títulos nombran el objeto afectado (`Storage 'PBS' unavailable` en vez de `1 Proxmox storage(s) unavailable`, `Network connectivity lost — vmbr0`, `3 health checks degraded — Storage (myPBS), Network (vmbr0), CPU`).
|
||||
- Las listas largas muestran los top offenders con una coleta `…and N more` para no perder nada en silencio.
|
||||
- Las notificaciones de recovery preservan la misma identidad usada en la alerta.
|
||||
- Los usuarios con enrichment IA siguen recibiendo su reescritura personalizada encima de esta base mejorada.
|
||||
|
||||
---
|
||||
|
||||
## 🩺 Panel Health Monitor Thresholds rediseñado
|
||||
|
||||
- El panel **Settings → Health Monitor Thresholds** que controla los niveles Warning y Critical por categoría (CPU, memoria, temperatura, storage, disks, …) se ha rediseñado con agrupación visual más clara e hints inline.
|
||||
- Ajustar un threshold ahora es un par de clicks en vez de scrollear por un muro de números.
|
||||
|
||||
---
|
||||
|
||||
## 🛠 Fixes destacados
|
||||
|
||||
- **SMART en enclosures USB-NVMe / USB-SATA que reportan `removable=0`** — los enclosures que reportan `removable=0` (ASMedia, JMicron, Realtek, ASM105x) ahora hacen walk de sysfs para detectar attachment USB, así se prueba el pass-through `-d snt*` y aparecen el modelo real del drive, serial, temperatura, power-on hours y health. El sampler del histórico de temperatura hereda el mismo fix.
|
||||
- **Prompt de cifrado PBS reworked** a una única pregunta explícita *Encrypt this backup?* Sí/No — nada se sube a PBS a menos que la respuesta sea Sí. Solo cuando no hay keyfile instalada aparece un segundo diálogo que pregunta si generar una nueva o importar una existente. Cancelar nunca deja una keyfile fantasma detrás.
|
||||
- **Los backups attached programados ahora heredan retención en cada ejecución** — los jobs attached a un padre vzdump PVE releen la config `prune-backups` del padre en cada run y reescriben `KEEP_*` según corresponda. Antes quedaba congelado al valor del momento de creación del job.
|
||||
- **El installer ya no auto-relanza `menu` tras un update** — el `exec MENU_SCRIPT` al final del update path disparaba errores visibles *"line: syntax"* cuando bash intentaba leer el `/usr/local/bin/menu` recién reescrito por debajo. El flujo ahora sale limpio; el usuario teclea `menu` cuando esté listo. `change_release_channel` en Settings no se ve afectado.
|
||||
- **PBS restore listing roto en Proxmox 9 / jq 1.7** — `hb_pbs_list_snapshots` cambió de la forma prefix `and not (...)` (jq 1.7 la rechaza) a la postfix `and ((...) | not)` (ambos jq 1.6 y 1.7 la aceptan). También se quitó un `2>/dev/null` que enmascaraba el error de parseo.
|
||||
- **`run_scheduled_backup.sh` ya no crashea cuando `LANGUAGE` está unset** — las invocaciones cron / systemd ahora cargan el idioma + inicializan el cache de traducción antes de hacer source a las funciones que lo requieren.
|
||||
- **Los prompts de restore de archive local ya no se congelan en silencio** — `hb_prompt_restore_source_dir` y `hb_prompt_local_archive` usan el TTY handoff fd-9 ya aplicado en otros sitios.
|
||||
- **El modal de terminal auto-focusea xterm** para que `dialog --yesno` dentro de scripts CLI reciba las flechas en lugar del botón Close.
|
||||
- **NVIDIA VFIO passthrough escribe `vfio_passthrough` de vuelta en `components_status.json`** — `switch_gpu_mode.sh`, `switch_gpu_mode_direct.sh` y `add_gpu_vm.sh` actualizan el status del componente al cambiar el estado del driver. El auto-reinstall post-restore ya no pisa NVIDIA en hosts dejados intencionadamente en modo VFIO.
|
||||
- **Las notificaciones de update de Secure Gateway ya no arrastran un `— v` colgando** — cuando solo hay paquetes sidecar que actualizar (Tailscale mismo sin cambio), el título dice `secure-gateway update available — v<current> (packages only)` y el body muestra una única línea "Tailscale: v… (unchanged — only sidecar packages need updating)" en vez de la confusa flecha `v → v`.
|
||||
- **Auto-migración de modelos IA deprecados** — usuarios con `claude-3-5-haiku-latest`, `claude-3-5-sonnet-latest` o `claude-3-opus-latest` (todos 404 upstream ahora) se migran en silencio a la recomendación actual (`claude-haiku-4-5`, etc.) dentro de las 24 h del upgrade, con una notificación `ai_model_migrated` explicando qué pasó.
|
||||
- **NVIDIA installer ya no bloqueado a la branch recomendada** (#248) — `filter_option_c_branch` requería un match EXACTO de major branch contra la recomendada por kernel, así que los usuarios de kernel 7.0.14 solo veían drivers 580.x aunque builds concretos de 580.x fallaran al compilar contra el toolchain nuevo de PVE 9.1. El filtro ahora acepta branch ≥ recomendada, así que branches estables más nuevas (590 / 595 / 600) son seleccionables in-menu cuando compilan. `MIN_DRIVER_VERSION` sigue vigilando el suelo.
|
||||
- **Minor variado** — la URL del webhook PVE sigue el estado SSL activo; las disk observations se registran antes del gate SMART; la pantalla de Login ya no se traga un 401 para siempre tras un stale-token breve; los toggles visibles en tema claro.
|
||||
|
||||
---
|
||||
|
||||
## 🤖 Refresh de providers IA
|
||||
|
||||
`AppImage/config/verified_ai_models.json` refrescado con verificación funcional contra los cinco providers soportados (`_updated: 2026-07-14`):
|
||||
|
||||
| Provider | Eliminados (deprecados / 404) | Añadidos / mantenidos | Recomendado |
|
||||
|-------------|-----------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------|-----------------------------------|
|
||||
| groq | `llama-3.1-70b-versatile`, `llama3-70b/8b-8192`, `mixtral-8x7b`, `gemma2-9b-it` | `llama-3.3-70b-versatile`, `llama-3.1-8b-instant`, `llama-4-scout`, `openai/gpt-oss-20b`, `openai/gpt-oss-120b` | `llama-3.3-70b-versatile` |
|
||||
| gemini | `gemini-2.0-flash*`, `gemini-1.5-flash`, `gemini-1.0-pro` | `gemini-flash-lite-latest`, `gemini-2.5-flash-lite/flash`, `gemini-3-flash-preview`, `gemini-3.1/3.5-flash-lite/flash` | `gemini-2.5-flash-lite` |
|
||||
| openai | `gpt-5.4-nano`, `gpt-5.4-mini` (HTTP 400) | `gpt-4.1-nano/mini`, `gpt-4o-mini`, `gpt-4.1`, `gpt-4o`, `gpt-5-chat-latest`, `gpt-5-nano` | `gpt-4.1-nano` |
|
||||
| anthropic | `claude-3-5-haiku-latest`, `claude-3-5-sonnet-latest`, `claude-3-opus-latest` (404 upstream) | `claude-haiku-4-5`, `claude-sonnet-5`, `claude-opus-4-8`, `claude-sonnet-4-6`, `claude-opus-4-6`, `claude-fable-5` | `claude-haiku-4-5` |
|
||||
| openrouter | `claude-3.5-*`, `gemini-flash-1.5`, `mistral-7b`, `mixtral-8x7b` | `llama-4-scout`, `claude-haiku-4.5`, `claude-sonnet-4.6`, `gemini-2.5-flash/lite`, `mistral-small-3.2-24b` | `meta-llama/llama-3.3-70b-instruct` |
|
||||
|
||||
Auto-migración incluida: `PollingCollector._check_ai_model_availability()` se ejecuta cada 24 h y mueve a los usuarios cuyo modelo configurado haya sido retirado a la recomendación reemplazo, con una notificación `ai_model_migrated` explicando qué pasó.
|
||||
|
||||
---
|
||||
|
||||
## 🙏 Acknowledgments
|
||||
|
||||
Agradecimiento especial a los miembros de la comunidad que dieron forma a esta release con diseños concretos, reports de campo y pruebas:
|
||||
|
||||
- **[@JF_Car](https://github.com/JF_Car)** — propuso el layout en árbol del nuevo diagrama Network Flow para que se lea correctamente en dispositivos móviles.
|
||||
- **[@ghosthvj](https://github.com/ghosthvj)** — contribuyó el diseño de las nuevas tarjetas de **Physical Disks** y **Physical Interfaces**.
|
||||
- **[@riglesias](https://github.com/riglesias)**, **[@princo56](https://github.com/princo56)** y **[@jonatanc](https://github.com/jonatanc)** — probaron el ciclo beta end-to-end y aportaron las sugerencias que cerraron la mayoría de los gaps visibles para el usuario.
|
||||
|
||||
Y a cada usuario que abrió una issue, comentó en [GitHub Discussions](https://github.com/MacRimi/ProxMenux/discussions), reportó un bug por el canal comunitario, o simplemente pasó a decir qué funcionaba y qué no en su hardware — la mayor parte de los fixes internos de esta release empezaron como uno de esos reports. Que sigan viniendo.
|
||||
|
||||
---
|
||||
|
||||
## 2026-06-02
|
||||
|
||||
### Nueva versión ProxMenux v1.2.2 — *Consolidación estable del ciclo v1.2.1.x*
|
||||
|
||||
@@ -16,6 +16,12 @@
|
||||
"title": "What it is, in one paragraph",
|
||||
"body": "A ProxMenux backup captures the complete state of a Proxmox host: <strong>the filesystem</strong> (relevant directories under <code>/etc</code>, <code>/root</code>, <code>/var/lib/pve-cluster</code>, plus optional custom paths), <strong>a structured manifest</strong> (JSON with the detected hardware, kernel parameters, network layout, ZFS state, users and cron entries), and <strong>an application inventory</strong> (all packages marked as manually installed by APT, plus the list of components installed by ProxMenux with their exact versions). Any of the three supported destinations — local archive, Proxmox Backup Server (recommended) or Borg — receives the same self-contained payload, and any of them can hydrate the target host without depending on the source being reachable at restore time."
|
||||
},
|
||||
"video": {
|
||||
"heading": "Video walkthrough",
|
||||
"intro": "Prefer watching Backup & Restore in action before configuring it? This walkthrough covers a full end-to-end demo of the feature in ProxMenux.",
|
||||
"title": "ProxMenux — Backup & Restore walkthrough",
|
||||
"caption": "External video on YouTube. Plays in privacy-enhanced mode (no cookies until you press play)."
|
||||
},
|
||||
"whatItIsNot": {
|
||||
"heading": "What it is not",
|
||||
"intro": "The section covers <strong>host-level</strong> backup and restore: the Proxmox installation itself, not the workloads running on top of it.",
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "Installing ProxMenux | ProxMenux Documentation",
|
||||
"description": "One-line installer for ProxMenux on Proxmox VE 8+ hosts. Choose between the Translation flavour (multi-language) or Normal (lightweight English-only). Beta channel also available for early access to new features.",
|
||||
"description": "One-line installer for ProxMenux on Proxmox VE 8+ hosts. Ships pre-generated translation files for six languages (English, Spanish, French, German, Italian, Portuguese) — the language is picked once during installation. Beta channel also available for early access to new features.",
|
||||
"ogTitle": "Installing ProxMenux | ProxMenux Documentation",
|
||||
"ogDescription": "Install ProxMenux on Proxmox VE 8+ in one command. Stable and beta channels available."
|
||||
},
|
||||
@@ -85,7 +85,7 @@
|
||||
"requirements": {
|
||||
"heading": "Requirements & good practices",
|
||||
"reqTitle": "Requirements",
|
||||
"reqBody": "Proxmox VE <strong>8.x or later</strong>. PVE 7 and earlier are not supported. Internet access from the host (the installer downloads scripts, dependencies and — on the Translation install — Python packages from PyPI). Run as <strong>root</strong> on the Proxmox host.",
|
||||
"reqBody": "Proxmox VE <strong>8.x or later</strong>. PVE 7 and earlier are not supported. Internet access from the host (the installer downloads scripts, dependencies and the ProxMenux Monitor AppImage). Run as <strong>root</strong> on the Proxmox host.",
|
||||
"inspectTitle": "Always inspect scripts you run from the internet",
|
||||
"inspectReview": "<sourcelink>Review the installer source</sourcelink> before running.",
|
||||
"inspectCoc": "All executable links follow the <coclink>ProxMenux Code of Conduct</coclink>."
|
||||
|
||||
@@ -51,29 +51,29 @@
|
||||
"encryption": {
|
||||
"heading": "Cifrado del lado del cliente",
|
||||
"glossaryHint": "En esta sección aparecen los términos <em>clave</em>, <em>passphrase</em> y <em>sobre de recuperación</em>. El <glosarioLink>glosario</glosarioLink> resume las diferencias en una frase por término.",
|
||||
"intro": "PBS puede cifrar las copias con una clave que reside únicamente en el host de origen: los datos se cifran en el propio host antes de subirse, y en PBS solo se guardan cifrados. En ProxMenux el cifrado es opcional; al activarlo, subir también a PBS una copia de la clave envuelta con una passphrase (el sobre de recuperación) es una decisión sí/no explícita que toma el usuario durante la configuración inicial (y que puede revisar más tarde desde el Monitor). La clave siempre vive en una única ruta canónica del host — <code>/usr/local/share/proxmenux/pbs-key.conf</code> — y se reutiliza en silencio en todas las copias cifradas siguientes.",
|
||||
"intro": "PBS puede cifrar las copias con una clave que vive solo en el host. Los datos se cifran en el host antes de subirse; en PBS llegan ya cifrados. En ProxMenux este cifrado es opcional. Al activarlo, el usuario decide aparte, con una pregunta sí/no, si quiere subir a PBS también una copia de esa clave envuelta con una passphrase (el sobre de recuperación) como red de seguridad. La respuesta se puede cambiar después desde el Monitor. La clave siempre queda en una única ruta del host — <code>/usr/local/share/proxmenux/pbs-key.conf</code> — y se reutiliza sin volver a preguntar en las copias siguientes.",
|
||||
"keyfileTitle": "Configuración inicial de la clave",
|
||||
"keyfileBody": "El diálogo aparece en la primera copia cifrada del host. Primero pregunta si se quiere cifrar la copia: <em>No</em> continúa sin cifrado; <em>Sí</em> pasa al segundo paso. El segundo paso depende de si ya hay una clave instalada en <code>/usr/local/share/proxmenux/pbs-key.conf</code>. Si la hay, se reutiliza en silencio y la copia continúa — las copias posteriores no vuelven a preguntar. Si no la hay, aparece un menú con dos opciones. <em>Generar una clave nueva</em> ejecuta <code>proxmox-backup-client key create --kdf none</code>. <em>Usar una clave existente</em> autodetecta una clave gestionada por PVE: si el repositorio PBS seleccionado está registrado en Proxmox con encryption-key en <code>/etc/pve/priv/storage/<NAME>.enc</code>, ese fichero se copia a la ruta canónica de ProxMenux en silencio y el flujo continúa. Cuando ninguna clave PVE coincide con el repositorio, aparece un input pidiendo la ruta absoluta donde el usuario ha colocado la clave en este host. En cualquier caso, el fichero acaba en la ruta canónica con <code>chmod 600</code>.",
|
||||
"keyfileBody": "El diálogo aparece en la primera copia cifrada del host y hace dos preguntas. Primero, si se quiere cifrar la copia: <em>No</em> sigue sin cifrado; <em>Sí</em> pasa al segundo paso. Segundo, qué clave usar. Si ya hay una instalada en <code>/usr/local/share/proxmenux/pbs-key.conf</code>, se reutiliza sin preguntar más y las copias posteriores tampoco vuelven a preguntar. Si no la hay, aparecen dos opciones: <em>Generar una clave nueva</em> crea una con <code>proxmox-backup-client key create --kdf none</code>. <em>Usar una clave existente</em> busca primero una gestionada por PVE: si el repositorio PBS elegido tiene una en <code>/etc/pve/priv/storage/<NAME>.enc</code>, ese fichero se copia solo a la ruta canónica. Si no hay ninguna que coincida, el diálogo pide la ruta absoluta donde el usuario ha dejado la clave en este host. En cualquier caso, el fichero termina en la ruta canónica con <code>chmod 600</code>.",
|
||||
"modesTitle": "Clave por host o compartida",
|
||||
"modesIntro": "Ambos modelos operativos están soportados y ninguno se impone — la decisión pertenece al usuario según cómo esté organizada su flota.",
|
||||
"modesIntro": "Los dos modos están soportados y ninguno se impone — el usuario elige según cómo tenga organizados sus hosts.",
|
||||
"modesPerHostTitle": "Clave por host (por defecto)",
|
||||
"modesPerHostBody": "Cada host genera su propia clave la primera vez que se activa el cifrado. Es el modo con mayor aislamiento: si la clave de un host se ve comprometida, no afecta a las copias de ningún otro. Recomendado para entornos de producción y para escenarios donde cada host tiene su propio responsable o requisitos distintos.",
|
||||
"modesSharedTitle": "Clave compartida (importar la misma en cada host)",
|
||||
"modesSharedBody": "Se genera una única clave y se importa en todos los hosts mediante la opción <em>Usar una clave existente</em>. La gestión es más sencilla: hay un solo secreto que proteger, y cualquier host puede leer las copias de cualquier otro (útil para verificación centralizada, ejercicios de restauración cruzada o consolidación). A cambio, si la clave compartida se filtra queda expuesto todo el conjunto de hosts a la vez. Recomendado para laboratorios personales y entornos donde todos los hosts pertenecen al mismo responsable y comparten el mismo nivel de confianza.",
|
||||
"recoveryTitle": "¿Subir la clave a PBS? — el usuario decide",
|
||||
"recoveryBody": "Justo después de elegir la clave, ProxMenux hace una única pregunta explícita — <em>Upload key to PBS?</em> — con dos respuestas. <strong>No se sube nada a PBS hasta que el usuario responde Sí.</strong> La opción por defecto es <em>No, keep local only</em>: la clave se queda únicamente en la ruta canónica local, ProxMenux no toca PBS con ningún artefacto de recuperación, y el usuario gestiona su propia copia offsite (el botón <em>Download keyfile</em> en la fila de destino PBS del Monitor la genera bajo demanda). Al elegir <em>Yes, upload</em>, ProxMenux pide una passphrase de recuperación —dos veces, comprobando que coincidan— y envuelve la clave con esa passphrase usando AES-256-CBC y PBKDF2 (600 000 iteraciones, sal aleatoria) para producir <code>pbs-key.recovery.enc</code>. Todas las copias cifradas siguientes suben ese sobre a PBS como grupo emparejado. Ni la passphrase ni una copia en claro de la clave salen nunca del host. La elección se puede cambiar más adelante desde el Monitor en cualquier momento — el interruptor de escrow inline en la fila del destino PBS conmuta Sí/No y se aplica en el acto (Start uploading, Stop uploading o Update passphrase, según el estado actual).",
|
||||
"recoveryBody": "Justo después de elegir la clave, ProxMenux pregunta si se quiere subir una copia de esa clave a PBS como red de seguridad, con dos opciones. <strong>No</strong> (por defecto) mantiene la clave solo en el host; ProxMenux no toca PBS con nada relacionado con la recuperación y el usuario gestiona por su cuenta la copia externa (desde el Monitor, la acción <em>Descargar</em> en la fila del destino PBS la exporta en el acto). <strong>Sí</strong> pide una passphrase de recuperación —dos veces, para comprobar que coincidan—; con esa passphrase, la clave se envuelve localmente con AES-256-CBC y PBKDF2 (600 000 iteraciones, sal aleatoria) en un fichero <code>pbs-key.recovery.enc</code>. A partir de ese momento, cada copia cifrada sube también ese fichero envuelto a PBS. Ni la passphrase ni la clave en claro salen del host. La respuesta se puede cambiar después desde el Monitor en cualquier momento; el interruptor está inline en la fila del destino PBS y el botón que aparece se adapta al estado (empezar a subir, dejar de subir, o cambiar la passphrase).",
|
||||
"blobUploadTitle": "Grupo emparejado en PBS",
|
||||
"blobUploadBody1": "Cuando el modo elegido es <em>Yes, upload</em>, ProxMenux sube el sobre de recuperación a PBS después de cada copia cifrada como un segundo grupo emparejado, con el mismo nombre que el del host pero terminado en <code>-keyrecovery</code>. Los dos grupos aparecen juntos en el listado del datastore, uno con las copias del host y otro con los sobres. <strong>El sobre nunca sale del host en claro</strong>: el cifrado ocurre en el propio host con AES-256-CBC y PBKDF2 antes de que se envíe un solo byte (<code>openssl enc -aes-256-cbc -pbkdf2 -iter 600000 -salt</code>). PBS recibe únicamente el sobre ya cifrado.",
|
||||
"blobUploadBody1": "Cuando el usuario ha respondido Sí, ProxMenux sube el sobre de recuperación a PBS después de cada copia cifrada como un segundo grupo emparejado, con el mismo nombre que el del host pero terminado en <code>-keyrecovery</code>. Los dos grupos aparecen juntos en el listado del datastore: uno con las copias del host, otro con los sobres. <strong>El sobre nunca sale del host en claro</strong>: se cifra en el host con AES-256-CBC y PBKDF2 antes de enviar un solo byte (<code>openssl enc -aes-256-cbc -pbkdf2 -iter 600000 -salt</code>). PBS solo recibe el sobre ya cifrado.",
|
||||
"envelopeSecurityTitle": "¿No es un riesgo subir el archivo keyrecovery a PBS?",
|
||||
"envelopeSecurityBody": "El keyrecovery viaja y se almacena cifrado en todo momento. La passphrase de recuperación nunca abandona el host: el cifrado ocurre localmente antes de la subida y PBS solo recibe el resultado ya cifrado. Aunque un administrador de PBS —o cualquiera con acceso al datastore— descargue el keyrecovery, sin la passphrase de recuperación no puede leer la clave que contiene: son solo bytes cifrados. Para reconstruir la clave hacen falta las dos cosas al mismo tiempo, el keyrecovery y la passphrase, y solo el usuario dispone de ambas.",
|
||||
"envelopeSecurityBody": "El sobre viaja y se guarda cifrado en todo momento. La passphrase de recuperación no sale nunca del host: el cifrado ocurre en local antes de la subida y PBS solo recibe el resultado ya cifrado. Un administrador de PBS —o cualquiera con acceso al datastore— puede descargar el sobre, pero sin la passphrase no puede leer la clave que contiene: son solo bytes cifrados. Para reconstruir la clave hacen falta las dos cosas a la vez, el sobre y la passphrase, y solo el usuario tiene ambas.",
|
||||
"blobUploadConstraintTitle": "Por qué dos grupos y no uno solo cifrado",
|
||||
"blobUploadConstraintBody": "Una misma subida de <code>proxmox-backup-client backup</code> cifra todos sus archivos con la misma clave, o no cifra ninguno — no hay opción intermedia. La copia del host tiene que ir cifrada con la clave del host; el sobre de recuperación no puede ir en esa misma subida, porque quedaría cifrado con la clave que precisamente contiene: en un equipo recién reinstalado no habría manera de abrirlo (haría falta la clave para descifrar la clave). Por eso se hacen dos subidas independientes y aparecen como dos grupos separados: la copia del host va cifrada por PBS con la clave, y el sobre de recuperación va cifrado por ProxMenux con la passphrase antes de subirse. Son dos capas de cifrado distintas que protegen dos activos distintos.",
|
||||
"blobUploadConstraintBody": "Cada subida de <code>proxmox-backup-client backup</code> cifra todos sus archivos con la misma clave —o ninguno—. No hay opción intermedia. La copia del host tiene que ir cifrada con la clave. El sobre de recuperación no puede viajar en esa misma subida: quedaría cifrado con la clave que precisamente contiene, y en un equipo recién reinstalado no habría manera de abrirlo (haría falta la clave para descifrar la clave). Por eso salen dos subidas independientes y aparecen dos grupos separados: la copia del host la cifra PBS con la clave, y el sobre lo cifra ProxMenux con la passphrase antes de subirlo. Dos capas de cifrado distintas para dos cosas distintas.",
|
||||
"blobUploadImageAlt": "Interfaz de PBS mostrando los grupos hostcfg-HOSTNAME y hostcfg-HOSTNAME-keyrecovery adyacentes en el listado del datastore.",
|
||||
"blobUploadImageCaption": "Interfaz de PBS — los grupos de copia emparejados. El grupo principal contiene las copias del host; el grupo -keyrecovery contiene la clave envuelta con la passphrase.",
|
||||
"recoverTitle": "Recuperación en un equipo recién instalado",
|
||||
"recoverBody": "Cuando falta la clave en la ruta canónica —tras reinstalar el host desde cero o después de eliminarla explícitamente— el flujo de restauración prueba tres fuentes en orden y se queda con la primera que produce una clave usable. Primero, si el repositorio PBS seleccionado tiene una clave gestionada por PVE en <code>/etc/pve/priv/storage/<NAME>.enc</code>, ese fichero se copia a la ruta canónica en silencio. Segundo, si hay un grupo <code>-keyrecovery</code> disponible en PBS, se descarga el snapshot más reciente y se pide al usuario la passphrase de recuperación para descifrarlo. Tercero, si ninguna de las dos vías anteriores funciona o el usuario las declina, aparece un input pidiendo la ruta absoluta donde vive la clave en este host, y el fichero se copia a la ruta canónica. El Monitor expone el mismo flujo de importación de forma inline en el modal de detalle de la copia — aparece un panel ámbar en la parte superior cuando Restaurar, Descargar o Ver contenido necesitarían una clave que no está instalada. Cuando la clave sí está instalada pero no coincide con la que cifró la copia, PBS devuelve un error <code>wrong key — manifest's key XX does not match provided key YY</code>; las mismas tres acciones muestran un panel ámbar estructurado con el fingerprint del manifest destacado en primer plano, para que el usuario pueda identificar qué clave importar para abrir esa copia concreta.",
|
||||
"recoverBody": "Cuando la clave no está en su sitio —tras reinstalar el host desde cero o después de eliminarla a propósito— el flujo de restauración prueba tres fuentes en orden y se queda con la primera que produce una clave usable. Primero, si el repositorio PBS elegido tiene una clave gestionada por PVE en <code>/etc/pve/priv/storage/<NAME>.enc</code>, se copia sola a la ruta canónica. Segundo, si en PBS hay un grupo <code>-keyrecovery</code>, se descarga la copia más reciente y se pide la passphrase de recuperación para abrirla. Tercero, si ninguna de las dos anteriores funciona o el usuario las descarta, el diálogo pide la ruta absoluta donde ha dejado la clave en este host, y se copia a la ruta canónica. El Monitor expone el mismo flujo dentro del modal de la copia. Si al Restaurar, Descargar o Ver contenido falta la clave, aparece un panel ámbar arriba del modal con las mismas tres vías de importación. Si la clave está instalada pero no es la correcta para esa copia, PBS devuelve un error de tipo <code>wrong key — manifest's key XX does not match provided key YY</code> y el modal muestra un panel estructurado con el fingerprint que PBS espera (el que quedó grabado en el manifest de la copia), para que el usuario sepa qué clave concreta necesita importar.",
|
||||
"monitorManagementTitle": "Gestionar la clave desde el Monitor",
|
||||
"monitorManagementBody": "El Monitor expone los controles de la clave de forma inline en cada fila de destino PBS de la página de configuración de copias. La fila muestra tres acciones: <em>Descargar</em> exporta la clave actual al navegador del usuario, <em>Subir</em> reemplaza la clave instalada por una que aporta el usuario (el fichero anterior solo se sobrescribe cuando el nuevo llega correctamente a la ruta canónica), y <em>Eliminar</em> retira la clave del host. El interruptor del sobre de recuperación es un único control inline junto a esas acciones: un radio Sí/No para <em>Upload key to PBS?</em>, un campo de passphrase cuando se selecciona Sí, y un botón Apply contextual que dice <em>Start uploading</em>, <em>Stop uploading</em> o <em>Update passphrase</em> según el estado actual. Todas las acciones pasan por los mismos endpoints Flask que usa el TUI del shell, así que el efecto en disco y en PBS es idéntico independientemente de qué superficie elija el usuario."
|
||||
"monitorManagementBody": "En la página de configuración de copias, la fila de cada destino PBS incluye los controles de la clave. Tres acciones directas: <em>Descargar</em> exporta la clave actual al navegador. <em>Subir</em> reemplaza la clave instalada por otra que aporta el usuario (la anterior solo se sobrescribe cuando la nueva ha llegado correctamente a su sitio). <em>Eliminar</em> retira la clave del host. Justo al lado está el interruptor del sobre de recuperación: un Sí/No para subir o no la clave a PBS, un campo de passphrase que aparece al elegir Sí, y un botón que se adapta al estado actual (empezar a subir, dejar de subir, o cambiar la passphrase). Los controles del Monitor y el diálogo del shell hacen lo mismo por dentro, así que el resultado en disco y en PBS es idéntico se use la que se use."
|
||||
},
|
||||
"restoreAccess": {
|
||||
"heading": "Recuperación del lado de la restauración",
|
||||
|
||||
@@ -16,6 +16,12 @@
|
||||
"title": "Qué es, en un párrafo",
|
||||
"body": "Una copia de ProxMenux captura el estado completo de un host Proxmox: <strong>el sistema de ficheros</strong> (directorios relevantes bajo <code>/etc</code>, <code>/root</code>, <code>/var/lib/pve-cluster</code>, más rutas personalizadas opcionales), <strong>un manifiesto estructurado</strong> (JSON con el hardware detectado, los parámetros del kernel, la topología de red, el estado de ZFS, los usuarios y las entradas de cron) y <strong>un inventario de aplicaciones</strong> (todos los paquetes marcados como instalados manualmente por APT, más la lista de componentes instalados por ProxMenux con sus versiones exactas). Cualquiera de los tres destinos soportados — archivo local, Proxmox Backup Server (recomendado) o Borg — recibe el mismo contenido autocontenido, y cualquiera de ellos puede hidratar el host de destino sin depender de que el origen esté accesible en el momento de la restauración."
|
||||
},
|
||||
"video": {
|
||||
"heading": "Vídeo demostración",
|
||||
"intro": "¿Prefieres ver Backup & Restore en acción antes de configurarlo? Este vídeo cubre una demo end-to-end de la funcionalidad en ProxMenux.",
|
||||
"title": "ProxMenux — Demostración de Backup & Restore",
|
||||
"caption": "Vídeo externo en YouTube. Se reproduce en modo mejorado de privacidad (sin cookies hasta pulsar play)."
|
||||
},
|
||||
"whatItIsNot": {
|
||||
"heading": "Qué no es",
|
||||
"intro": "La sección cubre copia y restauración <strong>a nivel de host</strong>: la instalación de Proxmox en sí, no las cargas de trabajo que se ejecutan sobre ella.",
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "Instalar ProxMenux | ProxMenux Documentation",
|
||||
"description": "Instalador de una línea para ProxMenux en hosts Proxmox VE 8+. Elige entre el sabor con traducción (multi-idioma) o normal (ligero, solo inglés). Canal beta también disponible para acceso temprano a nuevas funciones.",
|
||||
"description": "Instalador de una línea para ProxMenux en hosts Proxmox VE 8+. Incluye ficheros de traducción pre-generados para seis idiomas (inglés, español, francés, alemán, italiano, portugués) — el idioma se elige una vez durante la instalación. Canal beta también disponible para acceso temprano a nuevas funciones.",
|
||||
"ogTitle": "Instalar ProxMenux | ProxMenux Documentation",
|
||||
"ogDescription": "Instala ProxMenux en Proxmox VE 8+ con un comando. Canales estable y beta disponibles."
|
||||
},
|
||||
@@ -85,7 +85,7 @@
|
||||
"requirements": {
|
||||
"heading": "Requisitos y buenas prácticas",
|
||||
"reqTitle": "Requisitos",
|
||||
"reqBody": "Proxmox VE <strong>8.x o posterior</strong>. PVE 7 y anteriores no están soportados. Acceso a internet desde el host (el instalador descarga scripts, dependencias y — en la instalación con traducción — paquetes de Python desde PyPI). Ejecuta como <strong>root</strong> en el host Proxmox.",
|
||||
"reqBody": "Proxmox VE <strong>8.x o posterior</strong>. PVE 7 y anteriores no están soportados. Acceso a internet desde el host (el instalador descarga scripts, dependencias y la AppImage de ProxMenux Monitor). Ejecuta como <strong>root</strong> en el host Proxmox.",
|
||||
"inspectTitle": "Revisa siempre los scripts que ejecutas desde internet",
|
||||
"inspectReview": "<sourcelink>Revisa la fuente del instalador</sourcelink> antes de ejecutarlo.",
|
||||
"inspectCoc": "Todos los enlaces ejecutables siguen el <coclink>código de conducta de ProxMenux</coclink>."
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 387 KiB After Width: | Height: | Size: 147 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 33 KiB After Width: | Height: | Size: 65 KiB |
Reference in New Issue
Block a user