mirror of
https://github.com/MacRimi/ProxMenux.git
synced 2026-11-02 19:02:31 +00:00
docs: review OCI manager documentation in all seven translations
This commit is contained in:
@@ -1,11 +1,11 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "Datos, rutas y red | ProxMenux",
|
||||
"description": "Cómo conserva OCI manager Apps los datos de un contenedor OCI: discos del contenedor, directorios del host, montajes Rclone, direcciones y redes privadas."
|
||||
"description": "Cómo conserva OCI manager Apps los datos de un contenedor OCI: discos del contenedor, directorios del host, montajes con rclone, direcciones y redes privadas."
|
||||
},
|
||||
"header": {
|
||||
"title": "Datos, rutas y red",
|
||||
"description": "Qué vive en el rootfs, qué sobrevive a su sustitución, cómo se comparten datos entre contenedores y cómo obtiene cada contenedor su dirección.",
|
||||
"description": "Qué se guarda en el rootfs, qué sobrevive a su sustitución, cómo se comparten datos entre contenedores y cómo obtiene cada uno su dirección.",
|
||||
"section": "OCI manager Apps"
|
||||
},
|
||||
"sections": [
|
||||
@@ -14,8 +14,8 @@
|
||||
"blocks": [
|
||||
{
|
||||
"calloutInfo": {
|
||||
"title": "La persistencia se decide antes de que exista el LXC",
|
||||
"body": "Los volúmenes que publican la imagen y su archivo Compose se leen antes de crear el contenedor. Cada ruta que debe sobrevivir a una actualización se convierte en un punto de montaje independiente del rootfs, de modo que el rootfs solo contiene lo que pertenece a la imagen y puede sustituirse."
|
||||
"title": "La persistencia se decide antes de crear el LXC",
|
||||
"body": "Antes de crear el contenedor se leen los volúmenes declarados por la imagen y por su archivo Compose. Cada ruta que deba conservarse tras una actualización se convierte en un punto de montaje independiente del rootfs. Así, el rootfs solo contiene lo que pertenece a la imagen y puede sustituirse."
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -23,17 +23,35 @@
|
||||
{
|
||||
"id": "questions",
|
||||
"title": "Qué pregunta el instalador",
|
||||
"intro": "La plantilla aporta las rutas que necesita la aplicación. Cada una se sitúa en un disco del contenedor o en un directorio del host, y pueden añadirse más rutas antes del resumen.",
|
||||
"intro": "La plantilla proporciona las rutas que necesita la aplicación. Cada una se ubica en un disco del contenedor o en un directorio del host, y se pueden añadir más rutas antes del resumen.",
|
||||
"blocks": [
|
||||
{
|
||||
"steps": {
|
||||
"items": [
|
||||
{ "title": "Rutas requeridas", "body": "Se enumeran <code>/config</code>, <code>/data</code>, bibliotecas, descargas y cualquier volumen que declare la aplicación." },
|
||||
{ "title": "Ubicación", "body": "Cada ruta se sitúa en un disco del contenedor o en un directorio existente del host." },
|
||||
{ "title": "Almacenamiento y tamaño", "body": "Un disco del contenedor se crea en un almacenamiento de Proxmox VE con el tamaño indicado. La instalación por defecto usa <code>local-lvm</code>; la instalación avanzada pregunta el almacenamiento de cada ruta justo antes de su tamaño y propone el del rootfs. Aparece como <code>vm-VMID-disk-N</code> y se conecta como <code>mpN</code>." },
|
||||
{ "title": "Directorio del host", "body": "Un directorio del host se indica por su ruta. Si no existe, se crea con el propietario que mapea el contenedor." },
|
||||
{ "title": "Rutas adicionales", "body": "Antes de instalar pueden añadirse más pares de ruta del host o volumen y ruta del contenedor." },
|
||||
{ "title": "Resumen", "body": "La relación completa se muestra antes de crear el CT y se guarda en su contrato de instancia." }
|
||||
{
|
||||
"title": "Rutas necesarias",
|
||||
"body": "Se enumeran <code>/config</code>, <code>/data</code>, bibliotecas, descargas y todos los volúmenes declarados por la aplicación."
|
||||
},
|
||||
{
|
||||
"title": "Ubicación",
|
||||
"body": "Cada ruta se ubica en un disco del contenedor o en un directorio del host ya existente."
|
||||
},
|
||||
{
|
||||
"title": "Almacenamiento y tamaño",
|
||||
"body": "Se crea un disco del contenedor en un almacenamiento de Proxmox VE con el tamaño indicado. La instalación predeterminada usa <code>local-lvm</code>; la avanzada pregunta el almacenamiento de cada ruta justo antes de su tamaño y propone el del rootfs. El disco aparece como <code>vm-VMID-disk-N</code> y se conecta como <code>mpN</code>."
|
||||
},
|
||||
{
|
||||
"title": "Directorio del host",
|
||||
"body": "El directorio del host se indica mediante su ruta. Si no existe, se crea con el usuario al que se mapea el del contenedor como propietario."
|
||||
},
|
||||
{
|
||||
"title": "Rutas adicionales",
|
||||
"body": "Antes de instalar se pueden añadir más pares de ruta o volumen del host y ruta dentro del contenedor."
|
||||
},
|
||||
{
|
||||
"title": "Resumen",
|
||||
"body": "Antes de crear el CT se muestra la correspondencia completa de rutas y se guarda en el contrato de la instancia."
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -45,44 +63,85 @@
|
||||
"blocks": [
|
||||
{
|
||||
"table": {
|
||||
"headers": ["Propiedad", "Disco del contenedor", "Directorio del host"],
|
||||
"headers": [
|
||||
"Propiedad",
|
||||
"Disco del contenedor",
|
||||
"Directorio del host"
|
||||
],
|
||||
"rows": [
|
||||
["En la configuración", "<code>mpN: STORAGE:vm-VMID-disk-N,mp=/config,backup=1,size=16G</code>", "<code>mpN: /mnt/oci-shared/media,mp=/data/media</code>"],
|
||||
["Backup del contenedor (vzdump)", "Incluido, con <code>backup=1</code>", "No incluido"],
|
||||
["Tamaño", "Fijo; crece con un redimensionado del punto de montaje", "El espacio libre del sistema de archivos o dataset del host"],
|
||||
["Otros contenedores", "Solo lo monta su propio contenedor", "El mismo directorio puede montarse en varios contenedores"],
|
||||
["Snapshots y restauración", "Los gestiona Proxmox VE junto con el CT", "Se gestionan en el almacenamiento del host"],
|
||||
["Al eliminar la aplicación", "Se elimina con el contenedor", "Se conserva, con su contenido"],
|
||||
["Al mover el CT a otro nodo", "Se mueve con el CT", "La misma ruta debe existir en el otro nodo"]
|
||||
[
|
||||
"En la configuración",
|
||||
"<code>mpN: STORAGE:vm-VMID-disk-N,mp=/config,backup=1,size=16G</code>",
|
||||
"<code>mpN: /mnt/oci-shared/media,mp=/data/media</code>"
|
||||
],
|
||||
[
|
||||
"Copia del contenedor (vzdump)",
|
||||
"Incluido, con <code>backup=1</code>",
|
||||
"No incluido"
|
||||
],
|
||||
[
|
||||
"Tamaño",
|
||||
"Fijo; se amplía redimensionando el punto de montaje",
|
||||
"El espacio libre del sistema de archivos o dataset del host"
|
||||
],
|
||||
[
|
||||
"Otros contenedores",
|
||||
"Solo lo monta el contenedor al que pertenece",
|
||||
"El mismo directorio se puede montar en varios contenedores"
|
||||
],
|
||||
[
|
||||
"Snapshots y restauración",
|
||||
"Los gestiona Proxmox VE junto con el CT",
|
||||
"Se gestionan en el almacenamiento del host"
|
||||
],
|
||||
[
|
||||
"Al eliminar la aplicación",
|
||||
"Se elimina con el contenedor",
|
||||
"Se conserva con su contenido"
|
||||
],
|
||||
[
|
||||
"Al mover el CT a otro nodo",
|
||||
"Se mueve con el CT",
|
||||
"La misma ruta debe existir en el otro nodo"
|
||||
]
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"p": "El rootfs queda reservado para los binarios y el contenido de la imagen. Una actualización o una recreación lo sustituye sin tocar ninguno de los dos tipos de punto de montaje."
|
||||
"p": "El rootfs se reserva para los binarios y el contenido de la imagen. Una actualización o recreación lo sustituye sin tocar ninguno de los dos tipos de punto de montaje."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "example",
|
||||
"title": "Ejemplo: un contenedor con las dos ubicaciones",
|
||||
"title": "Ejemplo: un contenedor con ambas ubicaciones",
|
||||
"blocks": [
|
||||
{
|
||||
"code": {
|
||||
"title": "Jellyfin instalado como CT 151 en local-lvm (extracto)",
|
||||
"code": "rootfs: local-lvm:vm-151-disk-0,size=8G\n# Disco del contenedor, incluido en el backup del CT\nmp0: local-lvm:vm-151-disk-1,mp=/config,backup=1,size=16G\n\n# Directorio del host, fuera del backup del CT\nmp1: /mnt/oci-shared/media,mp=/data/media"
|
||||
"title": "Jellyfin instalado como CT 151 en local-lvm (fragmento)",
|
||||
"code": "rootfs: local-lvm:vm-151-disk-0,size=8G\n# Container disk, part of the CT backup\nmp0: local-lvm:vm-151-disk-1,mp=/config,backup=1,size=16G\n\n# Host directory, outside the CT backup\nmp1: /mnt/oci-shared/media,mp=/data/media"
|
||||
}
|
||||
},
|
||||
{
|
||||
"p": "Una actualización o una recreación sustituye solo el rootfs: <code>mp0</code> conserva usuarios, bibliotecas y ajustes, y <code>mp1</code> sigue mostrando los mismos archivos multimedia. Restaurar el backup del CT devuelve <code>/config</code>; el directorio multimedia se restaura, si hace falta, desde el backup del almacenamiento del host."
|
||||
"p": "Una actualización o recreación solo sustituye el rootfs: <code>mp0</code> conserva usuarios, bibliotecas y ajustes, y <code>mp1</code> sigue mostrando los mismos archivos multimedia. Al restaurar la copia del CT se recupera <code>/config</code>; si hace falta restaurar el directorio multimedia, se utiliza la copia de seguridad del almacenamiento del host."
|
||||
},
|
||||
{
|
||||
"flow": {
|
||||
"nodes": [
|
||||
{ "label": "Contrato", "detail": "/config" },
|
||||
{ "label": "Ubicación", "detail": "disco del contenedor\no directorio del host" },
|
||||
{ "label": "LXC", "detail": "siempre /config\npara la aplicación" }
|
||||
{
|
||||
"label": "Contrato",
|
||||
"detail": "/config"
|
||||
},
|
||||
{
|
||||
"label": "Ubicación",
|
||||
"detail": "Disco del contenedor\no directorio del host"
|
||||
},
|
||||
{
|
||||
"label": "LXC",
|
||||
"detail": "Siempre /config\npara la aplicación"
|
||||
}
|
||||
],
|
||||
"caption": "La aplicación ve la ruta que publica la imagen; solo cambia dónde se guarda."
|
||||
"caption": "La aplicación ve la ruta declarada por la imagen; solo cambia dónde se almacena."
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -94,33 +153,48 @@
|
||||
{
|
||||
"mermaid": {
|
||||
"chartCode": "flowchart TB\n H[\"{{host}}<br/>/mnt/oci-shared/media\"]\n H --> Q[\"qBittorrent<br/>/data\"]\n H --> J[\"Jellyfin<br/>/data\"]\n H --> R[\"Radarr / Sonarr<br/>/data\"]\n Q -. \"{{config}}\" .-> QV[(\"/config mpN\")]\n J -. \"{{config}}\" .-> JV[(\"/config mpN\")]\n R -. \"{{config}}\" .-> RV[(\"/config mpN\")]",
|
||||
"labels": { "host": "Directorio del host", "config": "configuración propia" }
|
||||
"labels": {
|
||||
"host": "Directorio del host",
|
||||
"config": "Configuración propia"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"p": "Cada contenedor guarda su configuración en su propio disco. La biblioteca o las descargas son un único directorio del host montado en la misma ruta interna de todos los contenedores, de modo que la ruta en la que escribe una aplicación es la misma en la que lee otra."
|
||||
"p": "Cada contenedor guarda su configuración en su propio disco. La biblioteca o las descargas se guardan en un único directorio del host, montado en la misma ruta interna en todos los contenedores. Así, una ruta en la que escribe una aplicación es la misma desde la que lee otra."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "rclone",
|
||||
"title": "Almacenamiento en la nube con la aplicación Rclone",
|
||||
"intro": "La aplicación Rclone del catálogo ofrece, además de su instalación, <strong>Activar un montaje en un contenedor Rclone OCI existente</strong>. Monta un remoto ya creado y autorizado en la interfaz web de Rclone y lo publica en el host, donde otros contenedores pueden usarlo como directorio del host.",
|
||||
"title": "Almacenamiento en la nube mediante la aplicación rclone",
|
||||
"intro": "Además de instalarla, la ficha de rclone en el catálogo permite <strong>Activar un montaje en un contenedor OCI de rclone existente</strong>. Se monta un remoto ya creado y autorizado en la interfaz web de rclone y se publica en el host. Otros contenedores pueden usarlo como un directorio del host.",
|
||||
"blocks": [
|
||||
{
|
||||
"steps": {
|
||||
"items": [
|
||||
{ "title": "Contenedor y remoto", "body": "El VMID del contenedor Rclone, el nombre exacto del remoto y, opcionalmente, una ruta dentro de él." },
|
||||
{ "title": "Nombre y caché", "body": "El nombre del montaje y el modo de caché VFS: <code>off</code>, <code>minimal</code>, <code>writes</code> o <code>full</code> (por defecto)." },
|
||||
{ "title": "Vistas publicadas", "body": "Una raíz común, <code>/mnt/oci-shared</code> por defecto, contiene una vista de lectura y escritura en <code>/mnt/oci-shared/remotes/NOMBRE</code> y una de solo lectura en <code>/mnt/oci-shared/remotes-ro/NOMBRE</code>." },
|
||||
{ "title": "Activación", "body": "Tras una confirmación, el CT se detiene, se configuran su orden de arranque y un hookscript de Proxmox VE, y se vuelve a iniciar. La operación espera hasta que las dos vistas están montadas en el host." }
|
||||
{
|
||||
"title": "Contenedor y remoto",
|
||||
"body": "El VMID del contenedor de rclone, el nombre exacto del remoto y, opcionalmente, una ruta dentro de él."
|
||||
},
|
||||
{
|
||||
"title": "Nombre del montaje y caché",
|
||||
"body": "El nombre del montaje y el modo de caché VFS: <code>off</code>, <code>minimal</code>, <code>writes</code> o <code>full</code> (predeterminado)."
|
||||
},
|
||||
{
|
||||
"title": "Vistas publicadas",
|
||||
"body": "Una raíz común, <code>/mnt/oci-shared</code> de forma predeterminada, contiene una vista de lectura y escritura en <code>/mnt/oci-shared/remotes/NAME</code> y otra de solo lectura en <code>/mnt/oci-shared/remotes-ro/NAME</code>."
|
||||
},
|
||||
{
|
||||
"title": "Activación",
|
||||
"body": "Tras confirmar, se detiene el CT, se configuran su comando de arranque y un hookscript de Proxmox VE y se vuelve a iniciar. La operación espera a que ambas vistas estén montadas en el host."
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"calloutInfo": {
|
||||
"title": "Si el montaje no llega a activarse",
|
||||
"body": "Se restaura la configuración anterior del contenedor y se vuelve a iniciar, de modo que una activación fallida deja Rclone como estaba."
|
||||
"title": "Si el montaje no se activa",
|
||||
"body": "Se restaura la configuración anterior del contenedor y se vuelve a iniciar. Así, si la activación falla, rclone queda como estaba."
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -128,41 +202,58 @@
|
||||
{
|
||||
"id": "network",
|
||||
"title": "Direcciones y redes",
|
||||
"intro": "Una aplicación simple necesita una dirección. Una aplicación multicontenedor necesita además una red estable entre sus miembros.",
|
||||
"intro": "Una aplicación de un solo contenedor necesita una dirección. Una aplicación con varios contenedores también necesita una red estable entre sus miembros.",
|
||||
"blocks": [
|
||||
{
|
||||
"cards": {
|
||||
"items": [
|
||||
{ "icon": "network", "title": "Aplicación simple", "body": "Se eligen el bridge y DHCP o una dirección CIDR fija. El LXC tiene una dirección propia y el resumen muestra las URL completas de los servicios." },
|
||||
{ "icon": "waypoints", "title": "Aplicación multicontenedor", "body": "Se busca una subred libre, se crea un bridge privado persistente y cada miembro (aplicación, base de datos, caché) recibe en él una dirección fija." }
|
||||
{
|
||||
"icon": "network",
|
||||
"title": "Aplicación de un contenedor",
|
||||
"body": "Se elige el puente de red y DHCP o una dirección fija en formato CIDR. El LXC tiene su propia dirección y el resumen muestra las URL completas de los servicios."
|
||||
},
|
||||
{
|
||||
"icon": "waypoints",
|
||||
"title": "Aplicación con varios contenedores",
|
||||
"body": "Se busca una subred libre, se crea un puente privado persistente y cada miembro —aplicación, base de datos y caché— recibe una dirección fija en él."
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"flow": {
|
||||
"nodes": [
|
||||
{ "label": "LAN", "detail": "dirección accesible\nsolo el servicio principal" },
|
||||
{ "label": "LXC principal", "detail": "web / API\nLAN + red privada" },
|
||||
{ "label": "Red privada", "detail": "PostgreSQL · Valkey · ML\ndirecciones fijas" }
|
||||
{
|
||||
"label": "LAN",
|
||||
"detail": "Dirección accesible\nsolo para el servicio principal"
|
||||
},
|
||||
{
|
||||
"label": "LXC principal",
|
||||
"detail": "Web / API\nLAN + red privada"
|
||||
},
|
||||
{
|
||||
"label": "Red privada",
|
||||
"detail": "PostgreSQL · Valkey · ML\ndirecciones fijas"
|
||||
}
|
||||
],
|
||||
"caption": "Las dependencias se comunican por la red privada y no tienen dirección en la LAN."
|
||||
"caption": "Las dependencias se comunican por la red privada y no tienen una dirección en la LAN."
|
||||
}
|
||||
},
|
||||
{
|
||||
"p": "El contrato de la pila guarda el bridge, la subred, las direcciones y las relaciones entre servicios. La actualización de la aplicación reutiliza la misma topología en todos sus miembros. ProxMenux Monitor abre el contenedor principal en su dirección de la LAN, no en la de la red privada."
|
||||
"p": "El contrato de la pila guarda el puente, la subred, las direcciones y las relaciones entre servicios. Al actualizar la aplicación se reutiliza la misma topología para todos sus miembros. ProxMenux Monitor abre el contenedor principal en su dirección de la LAN, no en la de la red privada."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "ownership",
|
||||
"title": "Propietarios",
|
||||
"title": "Propietarios de archivos y directorios",
|
||||
"blocks": [
|
||||
{
|
||||
"list": {
|
||||
"items": [
|
||||
"Los directorios nuevos se crean con el UID y el GID que mapea el LXC no privilegiado.",
|
||||
"Los directorios existentes no cambian de propietario de forma recursiva.",
|
||||
"Los sockets, los archivos del sistema y las rutas sensibles no se ofrecen como directorios del host genéricos."
|
||||
"Los directorios nuevos se crean con el UID y el GID a los que se mapea el LXC sin privilegios.",
|
||||
"No se cambia recursivamente el propietario de los directorios existentes.",
|
||||
"Los sockets, archivos del sistema y rutas sensibles no se ofrecen como directorios genéricos del host."
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -170,17 +261,41 @@
|
||||
},
|
||||
{
|
||||
"id": "backup",
|
||||
"title": "Qué contiene el backup de un contenedor",
|
||||
"title": "Qué contiene una copia del contenedor",
|
||||
"blocks": [
|
||||
{
|
||||
"table": {
|
||||
"headers": ["Elemento", "En el vzdump del CT", "Dónde se conserva"],
|
||||
"headers": [
|
||||
"Elemento",
|
||||
"En la copia vzdump del CT",
|
||||
"Dónde se conserva"
|
||||
],
|
||||
"rows": [
|
||||
["rootfs OCI", "Sí", "El backup del CT; también puede reconstruirse desde la imagen y el contrato"],
|
||||
["Disco del contenedor con <code>backup=1</code>", "Sí", "El backup del CT"],
|
||||
["Directorio del host", "No", "El backup del almacenamiento del host"],
|
||||
["Contrato de la instancia", "No", "<code>/usr/local/share/proxmenux/oci/instances/VMID/</code> en el host"],
|
||||
["Aplicación multicontenedor", "Cada miembro en su propio backup", "Los backups de cada miembro, más el contrato de la pila y su bridge en el host"]
|
||||
[
|
||||
"Rootfs OCI",
|
||||
"Sí",
|
||||
"En la copia del CT; también se puede reconstruir a partir de la imagen y el contrato"
|
||||
],
|
||||
[
|
||||
"Disco del contenedor con <code>backup=1</code>",
|
||||
"Sí",
|
||||
"La copia del CT"
|
||||
],
|
||||
[
|
||||
"Directorio del host",
|
||||
"No",
|
||||
"La copia de seguridad del almacenamiento del host"
|
||||
],
|
||||
[
|
||||
"Contrato de la instancia",
|
||||
"Sí, la copia que guarda el CT",
|
||||
"<code>/.proxmenux/oci-record.json</code> dentro del CT; las copias adicionales del host y del clúster se guardan por separado"
|
||||
],
|
||||
[
|
||||
"Aplicación con varios contenedores",
|
||||
"Cada miembro en su propia copia",
|
||||
"Las copias de todos los miembros, más el contrato de la pila y su puente de red en el host"
|
||||
]
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user